Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 33 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 14403760 | 1456 days ago | IN | 0 ETH | 0.00718805 | ||||
| Deposit | 14403736 | 1456 days ago | IN | 0 ETH | 0.00243871 | ||||
| Deposit | 14402919 | 1456 days ago | IN | 0 ETH | 0.00189896 | ||||
| Deposit | 14398330 | 1457 days ago | IN | 0 ETH | 0.0126684 | ||||
| Deposit | 14396905 | 1457 days ago | IN | 0 ETH | 0.00698601 | ||||
| Withdraw | 14396887 | 1457 days ago | IN | 0 ETH | 0.00509583 | ||||
| Withdraw | 14396747 | 1457 days ago | IN | 0 ETH | 0.00548735 | ||||
| Deposit | 14395860 | 1457 days ago | IN | 0 ETH | 0.00827894 | ||||
| Deposit | 14395334 | 1457 days ago | IN | 0 ETH | 0.0136024 | ||||
| Deposit | 14395330 | 1457 days ago | IN | 0 ETH | 0.01750314 | ||||
| Deposit | 14395061 | 1457 days ago | IN | 0 ETH | 0.01106463 | ||||
| Deposit | 14394703 | 1457 days ago | IN | 0 ETH | 0.00449466 | ||||
| Deposit | 14394483 | 1457 days ago | IN | 0 ETH | 0.01456748 | ||||
| Deposit | 14393976 | 1458 days ago | IN | 0 ETH | 0.00283471 | ||||
| Deposit | 14392542 | 1458 days ago | IN | 0 ETH | 0.01457969 | ||||
| Deposit | 14392320 | 1458 days ago | IN | 0 ETH | 0.01192435 | ||||
| Deposit | 14392183 | 1458 days ago | IN | 0 ETH | 0.01463261 | ||||
| Deposit | 14391928 | 1458 days ago | IN | 0 ETH | 0.01660468 | ||||
| Deposit | 14391389 | 1458 days ago | IN | 0 ETH | 0.01446373 | ||||
| Deposit | 14391350 | 1458 days ago | IN | 0 ETH | 0.00745866 | ||||
| Deposit | 14391342 | 1458 days ago | IN | 0 ETH | 0.00686534 | ||||
| Deposit | 14389897 | 1458 days ago | IN | 0 ETH | 0.00569166 | ||||
| Withdraw | 14387814 | 1459 days ago | IN | 0 ETH | 0.00665693 | ||||
| Deposit | 14387396 | 1459 days ago | IN | 0 ETH | 0.01245012 | ||||
| Deposit | 14387370 | 1459 days ago | IN | 0 ETH | 0.01433437 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BetDaoStaking
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-03-14
*/
// Sources flattened with hardhat v2.8.3 https://hardhat.org
// File @openzeppelin/contracts/utils/math/SafeMath.sol@v4.4.2
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// 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 (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @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) {
return a + b;
}
/**
* @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 a - b;
}
/**
* @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) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting 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 a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting 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) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* 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) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// File @openzeppelin/contracts/token/ERC20/IERC20.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)
pragma solidity ^0.8.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/Address.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @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 on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
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");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File @openzeppelin/contracts/utils/Context.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File @openzeppelin/contracts/access/Ownable.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File @openzeppelin/contracts/security/ReentrancyGuard.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File contracts/main/BetDaoStaking.sol
pragma solidity ^0.8.0;
// MasterChef is the master of Panther. He can make Panther and he is a fair guy.
//
// Note that it's ownable and the owner wields tremendous power. The ownership
// will be transferred to a governance smart contract once BCHIEF is sufficiently
// distributed and the community can show to govern itself.
//
// Have fun reading it. Hopefully it's bug-free. God bless.
contract BetDaoStaking is Ownable, ReentrancyGuard {
using SafeMath for uint256;
using SafeERC20 for IERC20;
// Info of each user.
struct UserInfo {
uint256 amount; // How many LP tokens the user has provided.
uint256 rewardDebt; // Reward debt. See explanation below.
uint256 rewardLockedUp; // Reward locked up.
uint256 nextHarvestUntil; // When can the user harvest again.
//
// We do some fancy math here. Basically, any point in time, the amount of BCHIEFs
// entitled to a user but is pending to be distributed is:
//
// pending reward = (user.amount * pool.accBChiefPerShare) - user.rewardDebt
//
// Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens:
// 1. The pool's `accBChiefPerShare` (and `lastRewardTimestamp`) gets updated.
// 2. User receives the pending reward sent to his/her address.
// 3. User's `amount` gets updated.
// 4. User's `rewardDebt` gets updated.
}
// Info of each pool.
struct PoolInfo {
IERC20 token; // Address of token contract.
uint256 allocPoint; // How many allocation points assigned to this pool. BCHIEFs to distribute per block.
uint256 lastRewardTimestamp; // Last block number that BCHIEFs distribution occurs.
uint256 accBChiefPerShare; // Accumulated BCHIEFs per share, times 1e12. See below.
uint256 harvestInterval; // Harvest interval in seconds
uint256 tvl;
uint16 depositFeeBP;
}
// The BCHIEF TOKEN!
IERC20 public bChief;
// BCHIEF tokens created per block.
uint256 public bChiefPerSec;
// Bonus muliplier for early bChief makers.
uint256 public constant BONUS_MULTIPLIER = 1;
// Max harvest interval: 14 days.
uint256 public constant MAXIMUM_HARVEST_INTERVAL = 14 days;
// Info of each pool.
PoolInfo[] public poolInfo;
// Info of each user that stakes LP tokens.
mapping(uint256 => mapping(address => UserInfo)) public userInfo;
// Total allocation points. Must be the sum of all allocation points in all pools.
uint256 public totalAllocPoint = 0;
// The block number when BCHIEF mining starts.
uint256 public startTimestamp;
// Total locked up rewards
uint256 public totalLockedUpRewards;
bool public shouldUpdatePoolsByUser;
address public feeRecipient;
event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);
event EmissionRateUpdated(address indexed caller, uint256 previousAmount, uint256 newAmount);
event ReferralCommissionPaid(address indexed user, address indexed referrer, uint256 commissionAmount);
event RewardLockedUp(address indexed user, uint256 indexed pid, uint256 amountLockedUp);
constructor(
IERC20 _bChief,
uint256 _startTimestamp,
uint256 _bChiefPerSec
) public {
bChief = _bChief;
startTimestamp = _startTimestamp;
bChiefPerSec = _bChiefPerSec;
feeRecipient = msg.sender;
}
function poolLength() external view returns (uint256) {
return poolInfo.length;
}
// Add a new lp to the pool. Can only be called by the owner.
// XXX DO NOT add the same LP token more than once. Rewards will be messed up if you do.
function add(uint256 _allocPoint, IERC20 _token, uint256 _harvestInterval, uint16 _depositFeeBP, bool _withUpdate) public onlyOwner {
require(_harvestInterval <= MAXIMUM_HARVEST_INTERVAL, "add: invalid harvest interval");
require(_depositFeeBP < 10000, 'invalid deposit fee');
if (_withUpdate) {
massUpdatePools();
}
uint256 lastRewardTimestamp = block.timestamp > startTimestamp ? block.timestamp : startTimestamp;
totalAllocPoint = totalAllocPoint.add(_allocPoint);
poolInfo.push(PoolInfo({
token: _token,
allocPoint: _allocPoint,
lastRewardTimestamp: lastRewardTimestamp,
accBChiefPerShare: 0,
harvestInterval: _harvestInterval,
tvl: 0,
depositFeeBP: _depositFeeBP
}));
}
// Update the given pool's BCHIEF allocation point and deposit fee. Can only be called by the owner.
function set(uint256 _pid, uint256 _allocPoint, uint256 _harvestInterval, uint16 _depositFeeBP, bool _withUpdate) public onlyOwner {
require(_harvestInterval <= MAXIMUM_HARVEST_INTERVAL, "set: invalid harvest interval");
require(_depositFeeBP < 10000, 'invalid deposit fee');
if (_withUpdate) {
massUpdatePools();
}
totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
poolInfo[_pid].allocPoint = _allocPoint;
poolInfo[_pid].harvestInterval = _harvestInterval;
poolInfo[_pid].depositFeeBP = _depositFeeBP;
}
// Return reward multiplier over the given _from to _to block.
function getMultiplier(uint256 _from, uint256 _to) public pure returns (uint256) {
return _to.sub(_from).mul(BONUS_MULTIPLIER);
}
// View function to see pending BCHIEFs on frontend.
function pendingBChief(uint256 _pid, address _user) external view returns (uint256) {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_user];
uint256 accBChiefPerShare = pool.accBChiefPerShare;
uint256 tokenSupply = pool.token.balanceOf(address(this));
if (block.timestamp > pool.lastRewardTimestamp && tokenSupply != 0) {
uint256 multiplier = getMultiplier(pool.lastRewardTimestamp, block.timestamp);
uint256 bChiefReward = multiplier.mul(bChiefPerSec).mul(pool.allocPoint).div(totalAllocPoint);
accBChiefPerShare = accBChiefPerShare.add(bChiefReward.mul(1e12).div(tokenSupply));
}
uint256 pending = user.amount.mul(accBChiefPerShare).div(1e12).sub(user.rewardDebt);
return pending.add(user.rewardLockedUp);
}
// View function to see if user can harvest BCHIEFs.
function canHarvest(uint256 _pid, address _user) public view returns (bool) {
UserInfo storage user = userInfo[_pid][_user];
return block.timestamp >= user.nextHarvestUntil;
}
function tvl(uint256 _pid) public view returns (uint256) {
PoolInfo storage pool = poolInfo[_pid];
return pool.tvl;
}
function apr(uint256 _pid) external view returns (uint256) {
PoolInfo storage pool = poolInfo[_pid];
uint256 reward = uint256(86400).mul(365).mul(bChiefPerSec).mul(pool.allocPoint).div(totalAllocPoint);
if (reward > 0) {
return tvl(_pid) > 0 ? reward.mul(1e12).div(tvl(_pid)) : 0;
}
return 0;
}
// Update reward variables for all pools. Be careful of gas spending!
function massUpdatePools() public {
uint256 length = poolInfo.length;
for (uint256 pid = 0; pid < length; ++pid) {
updatePool(pid);
}
}
// Update reward variables of the given pool to be up-to-date.
function updatePool(uint256 _pid) public {
PoolInfo storage pool = poolInfo[_pid];
if (block.timestamp <= pool.lastRewardTimestamp) {
return;
}
uint256 tokenSupply = pool.token.balanceOf(address(this));
if (tokenSupply == 0 || pool.allocPoint == 0) {
pool.lastRewardTimestamp = block.timestamp;
return;
}
uint256 multiplier = getMultiplier(pool.lastRewardTimestamp, block.timestamp);
uint256 bChiefReward = multiplier.mul(bChiefPerSec).mul(pool.allocPoint).div(totalAllocPoint);
// bChief.mint(address(this), bChiefReward);
pool.accBChiefPerShare = pool.accBChiefPerShare.add(bChiefReward.mul(1e12).div(tokenSupply));
pool.lastRewardTimestamp = block.timestamp;
}
// Deposit tokens for BCHIEF allocation.
function deposit(uint256 _pid, uint256 _amount) public nonReentrant {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
if (shouldUpdatePoolsByUser) {
updatePool(_pid);
}
payOrLockupPendingBChief(_pid);
if (_amount > 0) {
uint transferredAmount = deflationaryTokenTransfer(IERC20(pool.token), address(msg.sender), address(this), _amount);
if (pool.depositFeeBP > 0) {
uint256 feeAmount = transferredAmount.mul(pool.depositFeeBP).div(10000);
pool.token.safeTransfer(feeRecipient, feeAmount);
transferredAmount = transferredAmount.sub(feeAmount);
}
user.amount = user.amount.add(transferredAmount);
pool.tvl = pool.tvl.add(transferredAmount);
}
user.rewardDebt = user.amount.mul(pool.accBChiefPerShare).div(1e12);
emit Deposit(msg.sender, _pid, _amount);
}
// Withdraw tokens.
function withdraw(uint256 _pid, uint256 _amount) public nonReentrant {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
require(user.amount >= _amount, "withdraw: not good");
updatePool(_pid);
payOrLockupPendingBChief(_pid);
if (_amount > 0) {
user.amount = user.amount.sub(_amount);
pool.token.safeTransfer(address(msg.sender), _amount);
pool.tvl = pool.tvl.sub(_amount);
}
user.rewardDebt = user.amount.mul(pool.accBChiefPerShare).div(1e12);
emit Withdraw(msg.sender, _pid, _amount);
}
// Withdraw without caring about rewards. EMERGENCY ONLY.
function emergencyWithdraw(uint256 _pid) public nonReentrant {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
uint256 amount = user.amount;
user.amount = 0;
user.rewardDebt = 0;
user.rewardLockedUp = 0;
user.nextHarvestUntil = 0;
pool.token.safeTransfer(address(msg.sender), amount);
pool.tvl = pool.tvl.sub(amount);
emit EmergencyWithdraw(msg.sender, _pid, amount);
}
// Pay or lockup pending BCHIEFs.
function payOrLockupPendingBChief(uint256 _pid) internal {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
if (user.nextHarvestUntil == 0) {
user.nextHarvestUntil = block.timestamp.add(pool.harvestInterval);
}
uint256 pending = user.amount.mul(pool.accBChiefPerShare).div(1e12).sub(user.rewardDebt);
if (canHarvest(_pid, msg.sender)) {
if (pending > 0 || user.rewardLockedUp > 0) {
uint256 totalRewards = pending.add(user.rewardLockedUp);
// reset lockup
totalLockedUpRewards = totalLockedUpRewards.sub(user.rewardLockedUp);
user.rewardLockedUp = 0;
user.nextHarvestUntil = block.timestamp.add(pool.harvestInterval);
// send rewards
safeBChiefTransfer(msg.sender, totalRewards);
}
} else if (pending > 0) {
user.rewardLockedUp = user.rewardLockedUp.add(pending);
totalLockedUpRewards = totalLockedUpRewards.add(pending);
emit RewardLockedUp(msg.sender, _pid, pending);
}
}
// Safe bChief transfer function, just in case if rounding error causes pool to not have enough BCHIEFs.
function safeBChiefTransfer(address _to, uint256 _amount) internal {
uint256 bChiefBal = bChief.balanceOf(address(this));
if (_amount > bChiefBal) {
bChief.transfer(_to, bChiefBal);
} else {
bChief.transfer(_to, _amount);
}
}
// Safe bChief transfer function, just in case if rounding error causes pool to not have enough BCHIEFs.
function deflationaryTokenTransfer(IERC20 _token, address _from, address _to, uint256 _amount) internal returns (uint256) {
uint256 beforeBal = _token.balanceOf(_to);
_token.safeTransferFrom(_from, _to, _amount);
uint256 afterBal = _token.balanceOf(_to);
if (afterBal > beforeBal) {
return afterBal.sub(beforeBal);
}
return 0;
}
// Pancake has to add hidden dummy pools in order to alter the emission, here we make it simple and transparent to all.
function updateEmissionRate(uint256 _bChiefPerSec) public onlyOwner {
massUpdatePools();
emit EmissionRateUpdated(msg.sender, bChiefPerSec, _bChiefPerSec);
bChiefPerSec = _bChiefPerSec;
}
function setShouldUpdatePoolsByUser(bool _yesOrNo) external onlyOwner {
shouldUpdatePoolsByUser = _yesOrNo;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_bChief","type":"address"},{"internalType":"uint256","name":"_startTimestamp","type":"uint256"},{"internalType":"uint256","name":"_bChiefPerSec","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"EmissionRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"commissionAmount","type":"uint256"}],"name":"ReferralCommissionPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountLockedUp","type":"uint256"}],"name":"RewardLockedUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BONUS_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_HARVEST_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_harvestInterval","type":"uint256"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"apr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bChief","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bChiefPerSec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"canHarvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingBChief","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"internalType":"uint256","name":"accBChiefPerShare","type":"uint256"},{"internalType":"uint256","name":"harvestInterval","type":"uint256"},{"internalType":"uint256","name":"tvl","type":"uint256"},{"internalType":"uint16","name":"depositFeeBP","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint256","name":"_harvestInterval","type":"uint256"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_yesOrNo","type":"bool"}],"name":"setShouldUpdatePoolsByUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldUpdatePoolsByUser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLockedUpRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"tvl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bChiefPerSec","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"rewardLockedUp","type":"uint256"},{"internalType":"uint256","name":"nextHarvestUntil","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405260006006553480156200001657600080fd5b5060405162001e2838038062001e288339810160408190526200003991620000dc565b62000044336200008c565b60018055600280546001600160a01b0319166001600160a01b03949094169390931790925560075560035560098054610100600160a81b031916610100330217905562000121565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080600060608486031215620000f257600080fd5b83516001600160a01b03811681146200010a57600080fd5b602085015160409095015190969495509392505050565b611cf780620001316000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063630b5ba11161010457806393f1a40b116100a2578063e2bbb15811610071578063e2bbb1581461044b578063e6fd48bc1461045e578063f2d03be114610467578063f2fde38b1461047a57600080fd5b806393f1a40b146103bb578063dafc13151461041b578063db307ed51461042e578063de73149d1461044157600080fd5b80638315fade116100de5780638315fade146103865780638aa285501461038f5780638da5cb5b146103975780638dbb1e3a146103a857600080fd5b8063630b5ba1146103635780636b602c131461036b578063715018a61461037e57600080fd5b80632ef35a9e11610171578063469048401161014b578063469048401461031c578063474fa6301461033457806351eb05a61461033d5780635312ea8e1461035057600080fd5b80632ef35a9e146102e35780633b2a0db5146102f6578063441a3e701461030957600080fd5b80631526fe27116101ad5780631526fe271461021d57806317caf6f1146102735780631c89d9711461027c5780632e6c998d146102a757600080fd5b8063081e3eda146101d457806308835bd0146101eb5780630ba84cd214610208575b600080fd5b6004545b6040519081526020015b60405180910390f35b6009546101f89060ff1681565b60405190151581526020016101e2565b61021b6102163660046119e9565b61048d565b005b61023061022b3660046119e9565b61050b565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015261ffff1660c082015260e0016101e2565b6101d860065481565b60025461028f906001600160a01b031681565b6040516001600160a01b0390911681526020016101e2565b6101f86102b5366004611a1b565b60009182526005602090815260408084206001600160a01b0393909316845291905290206003015442101590565b61021b6102f13660046119af565b610568565b6101d8610304366004611a1b565b6105a5565b61021b610317366004611aa8565b61073e565b60095461028f9061010090046001600160a01b031681565b6101d860085481565b61021b61034b3660046119e9565b61089f565b61021b61035e3660046119e9565b6109de565b61021b610ac4565b61021b610379366004611a4b565b610aef565b61021b610d78565b6101d860035481565b6101d8600181565b6000546001600160a01b031661028f565b6101d86103b6366004611aa8565b610dae565b6103fb6103c9366004611a1b565b600560209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016101e2565b6101d86104293660046119e9565b610dc6565b61021b61043c366004611aca565b610df7565b6101d86212750081565b61021b610459366004611aa8565b610fae565b6101d860075481565b6101d86104753660046119e9565b61112d565b61021b610488366004611992565b6111cd565b6000546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611b4f565b60405180910390fd5b6104c8610ac4565b600354604080519182526020820183905233917feedc6338c9c1ad8f3cd6c90dd09dbe98dbd57e610d3e59a17996d07acb0d9511910160405180910390a2600355565b6004818154811061051b57600080fd5b600091825260209091206007909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039095169650929491939092919061ffff1687565b6000546001600160a01b031633146105925760405162461bcd60e51b81526004016104b790611b4f565b6009805460ff1916911515919091179055565b600080600484815481106105bb576105bb611c88565b600091825260208083208784526005825260408085206001600160a01b03898116875293528085206007949094029091016003810154815492516370a0823160e01b815230600482015291965093949291909116906370a082319060240160206040518083038186803b15801561063157600080fd5b505afa158015610645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106699190611a02565b905083600201544211801561067d57508015155b156106e9576000610692856002015442610dae565b905060006106c56006546106bf88600101546106b96003548761126890919063ffffffff16565b90611268565b90611274565b90506106e46106dd846106bf8464e8d4a51000611268565b8590611280565b935050505b6000610719846001015461071364e8d4a510006106bf87896000015461126890919063ffffffff16565b9061128c565b905061073284600201548261128090919063ffffffff16565b98975050505050505050565b600260015414156107615760405162461bcd60e51b81526004016104b790611b84565b600260018190555060006004838154811061077e5761077e611c88565b6000918252602080832086845260058252604080852033865290925292208054600790920290920192508311156107ec5760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b60448201526064016104b7565b6107f58461089f565b6107fe84611298565b821561083d578054610810908461128c565b81558154610828906001600160a01b0316338561142c565b6005820154610837908461128c565b60058301555b600382015481546108589164e8d4a51000916106bf91611268565b6001820155604051838152849033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568906020015b60405180910390a35050600180555050565b6000600482815481106108b4576108b4611c88565b90600052602060002090600702019050806002015442116108d3575050565b80546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561091657600080fd5b505afa15801561092a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094e9190611a02565b905080158061095f57506001820154155b1561096f57504260029091015550565b600061097f836002015442610dae565b905060006109a66006546106bf86600101546106b96003548761126890919063ffffffff16565b90506109c96109be846106bf8464e8d4a51000611268565b600386015490611280565b60038501555050426002909201919091555050565b60026001541415610a015760405162461bcd60e51b81526004016104b790611b84565b6002600181905550600060048281548110610a1e57610a1e611c88565b6000918252602080832085845260058252604080852033808752935284208054858255600182018690556002820186905560038201959095556007909302018054909450919291610a7c916001600160a01b0391909116908361142c565b6005830154610a8b908261128c565b6005840155604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200161088d565b60045460005b81811015610aeb57610adb8161089f565b610ae481611c57565b9050610aca565b5050565b6000546001600160a01b03163314610b195760405162461bcd60e51b81526004016104b790611b4f565b62127500831115610b6c5760405162461bcd60e51b815260206004820152601d60248201527f6164643a20696e76616c6964206861727665737420696e74657276616c00000060448201526064016104b7565b6127108261ffff1610610bb75760405162461bcd60e51b8152602060048201526013602482015272696e76616c6964206465706f7369742066656560681b60448201526064016104b7565b8015610bc557610bc5610ac4565b60006007544211610bd857600754610bda565b425b600654909150610bea9087611280565b6006556040805160e0810182526001600160a01b039687168152602081019788529081019182526000606082018181526080830196875260a0830182815261ffff96871660c0850190815260048054600181018255945293517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b600790940293840180546001600160a01b03191691909a161790985597517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c82015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d83015595517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e82015592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19f8401555091517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1a082015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1a1909201805461ffff191692909116919091179055565b6000546001600160a01b03163314610da25760405162461bcd60e51b81526004016104b790611b4f565b610dac6000611494565b565b6000610dbf60016106b9848661128c565b9392505050565b60008060048381548110610ddc57610ddc611c88565b60009182526020909120600560079092020101549392505050565b6000546001600160a01b03163314610e215760405162461bcd60e51b81526004016104b790611b4f565b62127500831115610e745760405162461bcd60e51b815260206004820152601d60248201527f7365743a20696e76616c6964206861727665737420696e74657276616c00000060448201526064016104b7565b6127108261ffff1610610ebf5760405162461bcd60e51b8152602060048201526013602482015272696e76616c6964206465706f7369742066656560681b60448201526064016104b7565b8015610ecd57610ecd610ac4565b610f1084610f0a60048881548110610ee757610ee7611c88565b90600052602060002090600702016001015460065461128c90919063ffffffff16565b90611280565b6006819055508360048681548110610f2a57610f2a611c88565b9060005260206000209060070201600101819055508260048681548110610f5357610f53611c88565b9060005260206000209060070201600401819055508160048681548110610f7c57610f7c611c88565b906000526020600020906007020160060160006101000a81548161ffff021916908361ffff1602179055505050505050565b60026001541415610fd15760405162461bcd60e51b81526004016104b790611b84565b6002600181905550600060048381548110610fee57610fee611c88565b6000918252602080832086845260058252604080852033865290925292206009546007909202909201925060ff161561102a5761102a8461089f565b61103384611298565b82156110d9578154600090611053906001600160a01b03163330876114e4565b600684015490915061ffff16156110b557600683015460009061108390612710906106bf90859061ffff16611268565b60095485549192506110a7916001600160a01b03908116916101009004168361142c565b6110b1828261128c565b9150505b81546110c19082611280565b825560058301546110d29082611280565b6005840155505b600382015481546110f49164e8d4a51000916106bf91611268565b6001820155604051838152849033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200161088d565b6000806004838154811061114357611143611c88565b9060005260206000209060070201905060006111816006546106bf84600101546106b96003546106b961016d6201518061126890919063ffffffff16565b905080156111c357600061119485610dc6565b116111a05760006111bb565b6111bb6111ac85610dc6565b6106bf8364e8d4a51000611268565b949350505050565b5060009392505050565b6000546001600160a01b031633146111f75760405162461bcd60e51b81526004016104b790611b4f565b6001600160a01b03811661125c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b7565b61126581611494565b50565b6000610dbf8284611bf5565b6000610dbf8284611bd3565b6000610dbf8284611bbb565b6000610dbf8284611c14565b6000600482815481106112ad576112ad611c88565b6000918252602080832085845260058252604080852033865290925292206003810154600790920290920192506112f45760048201546112ee904290611280565b60038201555b6000611322826001015461071364e8d4a510006106bf8760030154876000015461126890919063ffffffff16565b600085815260056020908152604080832033845290915290206003015490915042106113c457600081118061135b575060008260020154115b156113bf57600061137983600201548361128090919063ffffffff16565b9050611394836002015460085461128c90919063ffffffff16565b6008556000600284015560048401546113ae904290611280565b60038401556113bd3382611620565b505b611426565b80156114265760028201546113d99082611280565b60028301556008546113eb9082611280565b600855604051818152849033907fee470483107f579a55c754fa00613c45a9a3b617a418b39cb0be97e5381ba7c19060200160405180910390a35b50505050565b6040516001600160a01b03831660248201526044810182905261148f90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611766565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a082319060240160206040518083038186803b15801561152a57600080fd5b505afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190611a02565b90506115796001600160a01b038716868686611838565b6040516370a0823160e01b81526001600160a01b038581166004830152600091908816906370a082319060240160206040518083038186803b1580156115be57600080fd5b505afa1580156115d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f69190611a02565b9050818111156116135761160a818361128c565b925050506111bb565b5060009695505050505050565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561166457600080fd5b505afa158015611678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169c9190611a02565b90508082111561172d5760025460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044015b602060405180830381600087803b1580156116f557600080fd5b505af1158015611709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142691906119cc565b60025460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb906044016116db565b60006117bb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118709092919063ffffffff16565b80519091501561148f57808060200190518101906117d991906119cc565b61148f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104b7565b6040516001600160a01b03808516602483015283166044820152606481018290526114269085906323b872dd60e01b90608401611458565b60606111bb848460008585843b6118c95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104b7565b600080866001600160a01b031685876040516118e59190611b00565b60006040518083038185875af1925050503d8060008114611922576040519150601f19603f3d011682016040523d82523d6000602084013e611927565b606091505b5091509150611937828286611942565b979650505050505050565b60608315611951575081610dbf565b8251156119615782518084602001fd5b8160405162461bcd60e51b81526004016104b79190611b1c565b803561ffff8116811461198d57600080fd5b919050565b6000602082840312156119a457600080fd5b8135610dbf81611c9e565b6000602082840312156119c157600080fd5b8135610dbf81611cb3565b6000602082840312156119de57600080fd5b8151610dbf81611cb3565b6000602082840312156119fb57600080fd5b5035919050565b600060208284031215611a1457600080fd5b5051919050565b60008060408385031215611a2e57600080fd5b823591506020830135611a4081611c9e565b809150509250929050565b600080600080600060a08688031215611a6357600080fd5b853594506020860135611a7581611c9e565b935060408601359250611a8a6060870161197b565b91506080860135611a9a81611cb3565b809150509295509295909350565b60008060408385031215611abb57600080fd5b50508035926020909101359150565b600080600080600060a08688031215611ae257600080fd5b853594506020860135935060408601359250611a8a6060870161197b565b60008251611b12818460208701611c2b565b9190910192915050565b6020815260008251806020840152611b3b816040850160208701611c2b565b601f01601f19169190910160400192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115611bce57611bce611c72565b500190565b600082611bf057634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611c0f57611c0f611c72565b500290565b600082821015611c2657611c26611c72565b500390565b60005b83811015611c46578181015183820152602001611c2e565b838111156114265750506000910152565b6000600019821415611c6b57611c6b611c72565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461126557600080fd5b801515811461126557600080fdfea2646970667358221220bd92a8219cd39a0ab835683670556ee99b6db27843a66d56484220f10c9b61f564736f6c634300080700330000000000000000000000002ce60975421d6701dda959813b8e09f6743ab3b10000000000000000000000000000000000000000000000000000000000db854e00000000000000000000000000000000000000000000000002c68af0bb140000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063630b5ba11161010457806393f1a40b116100a2578063e2bbb15811610071578063e2bbb1581461044b578063e6fd48bc1461045e578063f2d03be114610467578063f2fde38b1461047a57600080fd5b806393f1a40b146103bb578063dafc13151461041b578063db307ed51461042e578063de73149d1461044157600080fd5b80638315fade116100de5780638315fade146103865780638aa285501461038f5780638da5cb5b146103975780638dbb1e3a146103a857600080fd5b8063630b5ba1146103635780636b602c131461036b578063715018a61461037e57600080fd5b80632ef35a9e11610171578063469048401161014b578063469048401461031c578063474fa6301461033457806351eb05a61461033d5780635312ea8e1461035057600080fd5b80632ef35a9e146102e35780633b2a0db5146102f6578063441a3e701461030957600080fd5b80631526fe27116101ad5780631526fe271461021d57806317caf6f1146102735780631c89d9711461027c5780632e6c998d146102a757600080fd5b8063081e3eda146101d457806308835bd0146101eb5780630ba84cd214610208575b600080fd5b6004545b6040519081526020015b60405180910390f35b6009546101f89060ff1681565b60405190151581526020016101e2565b61021b6102163660046119e9565b61048d565b005b61023061022b3660046119e9565b61050b565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015261ffff1660c082015260e0016101e2565b6101d860065481565b60025461028f906001600160a01b031681565b6040516001600160a01b0390911681526020016101e2565b6101f86102b5366004611a1b565b60009182526005602090815260408084206001600160a01b0393909316845291905290206003015442101590565b61021b6102f13660046119af565b610568565b6101d8610304366004611a1b565b6105a5565b61021b610317366004611aa8565b61073e565b60095461028f9061010090046001600160a01b031681565b6101d860085481565b61021b61034b3660046119e9565b61089f565b61021b61035e3660046119e9565b6109de565b61021b610ac4565b61021b610379366004611a4b565b610aef565b61021b610d78565b6101d860035481565b6101d8600181565b6000546001600160a01b031661028f565b6101d86103b6366004611aa8565b610dae565b6103fb6103c9366004611a1b565b600560209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016101e2565b6101d86104293660046119e9565b610dc6565b61021b61043c366004611aca565b610df7565b6101d86212750081565b61021b610459366004611aa8565b610fae565b6101d860075481565b6101d86104753660046119e9565b61112d565b61021b610488366004611992565b6111cd565b6000546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611b4f565b60405180910390fd5b6104c8610ac4565b600354604080519182526020820183905233917feedc6338c9c1ad8f3cd6c90dd09dbe98dbd57e610d3e59a17996d07acb0d9511910160405180910390a2600355565b6004818154811061051b57600080fd5b600091825260209091206007909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039095169650929491939092919061ffff1687565b6000546001600160a01b031633146105925760405162461bcd60e51b81526004016104b790611b4f565b6009805460ff1916911515919091179055565b600080600484815481106105bb576105bb611c88565b600091825260208083208784526005825260408085206001600160a01b03898116875293528085206007949094029091016003810154815492516370a0823160e01b815230600482015291965093949291909116906370a082319060240160206040518083038186803b15801561063157600080fd5b505afa158015610645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106699190611a02565b905083600201544211801561067d57508015155b156106e9576000610692856002015442610dae565b905060006106c56006546106bf88600101546106b96003548761126890919063ffffffff16565b90611268565b90611274565b90506106e46106dd846106bf8464e8d4a51000611268565b8590611280565b935050505b6000610719846001015461071364e8d4a510006106bf87896000015461126890919063ffffffff16565b9061128c565b905061073284600201548261128090919063ffffffff16565b98975050505050505050565b600260015414156107615760405162461bcd60e51b81526004016104b790611b84565b600260018190555060006004838154811061077e5761077e611c88565b6000918252602080832086845260058252604080852033865290925292208054600790920290920192508311156107ec5760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b60448201526064016104b7565b6107f58461089f565b6107fe84611298565b821561083d578054610810908461128c565b81558154610828906001600160a01b0316338561142c565b6005820154610837908461128c565b60058301555b600382015481546108589164e8d4a51000916106bf91611268565b6001820155604051838152849033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568906020015b60405180910390a35050600180555050565b6000600482815481106108b4576108b4611c88565b90600052602060002090600702019050806002015442116108d3575050565b80546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561091657600080fd5b505afa15801561092a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094e9190611a02565b905080158061095f57506001820154155b1561096f57504260029091015550565b600061097f836002015442610dae565b905060006109a66006546106bf86600101546106b96003548761126890919063ffffffff16565b90506109c96109be846106bf8464e8d4a51000611268565b600386015490611280565b60038501555050426002909201919091555050565b60026001541415610a015760405162461bcd60e51b81526004016104b790611b84565b6002600181905550600060048281548110610a1e57610a1e611c88565b6000918252602080832085845260058252604080852033808752935284208054858255600182018690556002820186905560038201959095556007909302018054909450919291610a7c916001600160a01b0391909116908361142c565b6005830154610a8b908261128c565b6005840155604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200161088d565b60045460005b81811015610aeb57610adb8161089f565b610ae481611c57565b9050610aca565b5050565b6000546001600160a01b03163314610b195760405162461bcd60e51b81526004016104b790611b4f565b62127500831115610b6c5760405162461bcd60e51b815260206004820152601d60248201527f6164643a20696e76616c6964206861727665737420696e74657276616c00000060448201526064016104b7565b6127108261ffff1610610bb75760405162461bcd60e51b8152602060048201526013602482015272696e76616c6964206465706f7369742066656560681b60448201526064016104b7565b8015610bc557610bc5610ac4565b60006007544211610bd857600754610bda565b425b600654909150610bea9087611280565b6006556040805160e0810182526001600160a01b039687168152602081019788529081019182526000606082018181526080830196875260a0830182815261ffff96871660c0850190815260048054600181018255945293517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b600790940293840180546001600160a01b03191691909a161790985597517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c82015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d83015595517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e82015592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19f8401555091517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1a082015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1a1909201805461ffff191692909116919091179055565b6000546001600160a01b03163314610da25760405162461bcd60e51b81526004016104b790611b4f565b610dac6000611494565b565b6000610dbf60016106b9848661128c565b9392505050565b60008060048381548110610ddc57610ddc611c88565b60009182526020909120600560079092020101549392505050565b6000546001600160a01b03163314610e215760405162461bcd60e51b81526004016104b790611b4f565b62127500831115610e745760405162461bcd60e51b815260206004820152601d60248201527f7365743a20696e76616c6964206861727665737420696e74657276616c00000060448201526064016104b7565b6127108261ffff1610610ebf5760405162461bcd60e51b8152602060048201526013602482015272696e76616c6964206465706f7369742066656560681b60448201526064016104b7565b8015610ecd57610ecd610ac4565b610f1084610f0a60048881548110610ee757610ee7611c88565b90600052602060002090600702016001015460065461128c90919063ffffffff16565b90611280565b6006819055508360048681548110610f2a57610f2a611c88565b9060005260206000209060070201600101819055508260048681548110610f5357610f53611c88565b9060005260206000209060070201600401819055508160048681548110610f7c57610f7c611c88565b906000526020600020906007020160060160006101000a81548161ffff021916908361ffff1602179055505050505050565b60026001541415610fd15760405162461bcd60e51b81526004016104b790611b84565b6002600181905550600060048381548110610fee57610fee611c88565b6000918252602080832086845260058252604080852033865290925292206009546007909202909201925060ff161561102a5761102a8461089f565b61103384611298565b82156110d9578154600090611053906001600160a01b03163330876114e4565b600684015490915061ffff16156110b557600683015460009061108390612710906106bf90859061ffff16611268565b60095485549192506110a7916001600160a01b03908116916101009004168361142c565b6110b1828261128c565b9150505b81546110c19082611280565b825560058301546110d29082611280565b6005840155505b600382015481546110f49164e8d4a51000916106bf91611268565b6001820155604051838152849033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200161088d565b6000806004838154811061114357611143611c88565b9060005260206000209060070201905060006111816006546106bf84600101546106b96003546106b961016d6201518061126890919063ffffffff16565b905080156111c357600061119485610dc6565b116111a05760006111bb565b6111bb6111ac85610dc6565b6106bf8364e8d4a51000611268565b949350505050565b5060009392505050565b6000546001600160a01b031633146111f75760405162461bcd60e51b81526004016104b790611b4f565b6001600160a01b03811661125c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b7565b61126581611494565b50565b6000610dbf8284611bf5565b6000610dbf8284611bd3565b6000610dbf8284611bbb565b6000610dbf8284611c14565b6000600482815481106112ad576112ad611c88565b6000918252602080832085845260058252604080852033865290925292206003810154600790920290920192506112f45760048201546112ee904290611280565b60038201555b6000611322826001015461071364e8d4a510006106bf8760030154876000015461126890919063ffffffff16565b600085815260056020908152604080832033845290915290206003015490915042106113c457600081118061135b575060008260020154115b156113bf57600061137983600201548361128090919063ffffffff16565b9050611394836002015460085461128c90919063ffffffff16565b6008556000600284015560048401546113ae904290611280565b60038401556113bd3382611620565b505b611426565b80156114265760028201546113d99082611280565b60028301556008546113eb9082611280565b600855604051818152849033907fee470483107f579a55c754fa00613c45a9a3b617a418b39cb0be97e5381ba7c19060200160405180910390a35b50505050565b6040516001600160a01b03831660248201526044810182905261148f90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611766565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a082319060240160206040518083038186803b15801561152a57600080fd5b505afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190611a02565b90506115796001600160a01b038716868686611838565b6040516370a0823160e01b81526001600160a01b038581166004830152600091908816906370a082319060240160206040518083038186803b1580156115be57600080fd5b505afa1580156115d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f69190611a02565b9050818111156116135761160a818361128c565b925050506111bb565b5060009695505050505050565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561166457600080fd5b505afa158015611678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169c9190611a02565b90508082111561172d5760025460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044015b602060405180830381600087803b1580156116f557600080fd5b505af1158015611709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142691906119cc565b60025460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb906044016116db565b60006117bb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118709092919063ffffffff16565b80519091501561148f57808060200190518101906117d991906119cc565b61148f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104b7565b6040516001600160a01b03808516602483015283166044820152606481018290526114269085906323b872dd60e01b90608401611458565b60606111bb848460008585843b6118c95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104b7565b600080866001600160a01b031685876040516118e59190611b00565b60006040518083038185875af1925050503d8060008114611922576040519150601f19603f3d011682016040523d82523d6000602084013e611927565b606091505b5091509150611937828286611942565b979650505050505050565b60608315611951575081610dbf565b8251156119615782518084602001fd5b8160405162461bcd60e51b81526004016104b79190611b1c565b803561ffff8116811461198d57600080fd5b919050565b6000602082840312156119a457600080fd5b8135610dbf81611c9e565b6000602082840312156119c157600080fd5b8135610dbf81611cb3565b6000602082840312156119de57600080fd5b8151610dbf81611cb3565b6000602082840312156119fb57600080fd5b5035919050565b600060208284031215611a1457600080fd5b5051919050565b60008060408385031215611a2e57600080fd5b823591506020830135611a4081611c9e565b809150509250929050565b600080600080600060a08688031215611a6357600080fd5b853594506020860135611a7581611c9e565b935060408601359250611a8a6060870161197b565b91506080860135611a9a81611cb3565b809150509295509295909350565b60008060408385031215611abb57600080fd5b50508035926020909101359150565b600080600080600060a08688031215611ae257600080fd5b853594506020860135935060408601359250611a8a6060870161197b565b60008251611b12818460208701611c2b565b9190910192915050565b6020815260008251806020840152611b3b816040850160208701611c2b565b601f01601f19169190910160400192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115611bce57611bce611c72565b500190565b600082611bf057634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611c0f57611c0f611c72565b500290565b600082821015611c2657611c26611c72565b500390565b60005b83811015611c46578181015183820152602001611c2e565b838111156114265750506000910152565b6000600019821415611c6b57611c6b611c72565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461126557600080fd5b801515811461126557600080fdfea2646970667358221220bd92a8219cd39a0ab835683670556ee99b6db27843a66d56484220f10c9b61f564736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002ce60975421d6701dda959813b8e09f6743ab3b10000000000000000000000000000000000000000000000000000000000db854e00000000000000000000000000000000000000000000000002c68af0bb140000
-----Decoded View---------------
Arg [0] : _bChief (address): 0x2CE60975421d6701Dda959813B8e09F6743Ab3B1
Arg [1] : _startTimestamp (uint256): 14386510
Arg [2] : _bChiefPerSec (uint256): 200000000000000000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000002ce60975421d6701dda959813b8e09f6743ab3b1
Arg [1] : 0000000000000000000000000000000000000000000000000000000000db854e
Arg [2] : 00000000000000000000000000000000000000000000000002c68af0bb140000
Deployed Bytecode Sourcemap
28845:13190:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32212:95;32284:8;:15;32212:95;;;9480:25:1;;;9468:2;9453:18;32212:95:0;;;;;;;;31302:35;;;;;;;;;;;;4319:14:1;;4312:22;4294:41;;4282:2;4267:18;31302:35:0;4154:187:1;41690:213:0;;;;;;:::i;:::-;;:::i;:::-;;30856:26;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;4913:32:1;;;4895:51;;4977:2;4962:18;;4955:34;;;;5005:18;;;4998:34;;;;5063:2;5048:18;;5041:34;;;;5106:3;5091:19;;5084:35;4933:3;5135:19;;5128:35;5212:6;5200:19;5194:3;5179:19;;5172:48;4882:3;4867:19;30856:26:0;4568:658:1;31097:34:0;;;;;;30521:20;;;;;-1:-1:-1;;;;;30521:20:0;;;;;;-1:-1:-1;;;;;3451:32:1;;;3433:51;;3421:2;3406:18;30521:20:0;3287:203:1;35280:198:0;;;;;;:::i;:::-;35350:4;35391:14;;;:8;:14;;;;;;;;-1:-1:-1;;;;;35391:21:0;;;;;;;;;;;35449;;;35430:15;:40;;;35280:198;41911:121;;;;;;:::i;:::-;;:::i;34357:857::-;;;;;;:::i;:::-;;:::i;38234:655::-;;;;;;:::i;:::-;;:::i;31346:27::-;;;;;;;;-1:-1:-1;;;;;31346:27:0;;;31258:35;;;;;;36332:806;;;;;;:::i;:::-;;:::i;38960:508::-;;;;;;:::i;:::-;;:::i;36076:180::-;;;:::i;32476:855::-;;;;;;:::i;:::-;;:::i;24810:103::-;;;:::i;30589:27::-;;;;;;30672:44;;30715:1;30672:44;;24159:87;24205:7;24232:6;-1:-1:-1;;;;;24232:6:0;24159:87;;34148:143;;;;;;:::i;:::-;;:::i;30938:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10000:25:1;;;10056:2;10041:18;;10034:34;;;;10084:18;;;10077:34;10142:2;10127:18;;10120:34;9987:3;9972:19;30938:64:0;9769:391:1;35486:140:0;;;;;;:::i;:::-;;:::i;33445:627::-;;;;;;:::i;:::-;;:::i;30762:58::-;;30813:7;30762:58;;37192:1009;;;;;;:::i;:::-;;:::i;31190:29::-;;;;;;35634:359;;;;;;:::i;:::-;;:::i;25068:201::-;;;;;;:::i;:::-;;:::i;41690:213::-;24205:7;24232:6;-1:-1:-1;;;;;24232:6:0;22957:10;24379:23;24371:68;;;;-1:-1:-1;;;24371:68:0;;;;;;;:::i;:::-;;;;;;;;;41767:17:::1;:15;:17::i;:::-;41830:12;::::0;41798:60:::1;::::0;;9690:25:1;;;9746:2;9731:18;;9724:34;;;41818:10:0::1;::::0;41798:60:::1;::::0;9663:18:1;41798:60:0::1;;;;;;;41867:12;:28:::0;41690:213::o;30856:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30856:26:0;;;;-1:-1:-1;30856:26:0;;;;;;;;;;;:::o;41911:121::-;24205:7;24232:6;-1:-1:-1;;;;;24232:6:0;22957:10;24379:23;24371:68;;;;-1:-1:-1;;;24371:68:0;;;;;;;:::i;:::-;41990:23:::1;:34:::0;;-1:-1:-1;;41990:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41911:121::o;34357:857::-;34432:7;34452:21;34476:8;34485:4;34476:14;;;;;;;;:::i;:::-;;;;;;;;;34525;;;:8;:14;;;;;;-1:-1:-1;;;;;34525:21:0;;;;;;;;;;34476:14;;;;;;;;34585:22;;;;34640:10;;:35;;-1:-1:-1;;;34640:35:0;;34669:4;34640:35;;;3433:51:1;34476:14:0;;-1:-1:-1;34525:21:0;;34476:14;34640:10;;;;;:20;;3406:18:1;;34640:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34618:57;;34708:4;:24;;;34690:15;:42;:62;;;;-1:-1:-1;34736:16:0;;;34690:62;34686:377;;;34769:18;34790:56;34804:4;:24;;;34830:15;34790:13;:56::i;:::-;34769:77;;34861:20;34884:70;34938:15;;34884:49;34917:4;:15;;;34884:28;34899:12;;34884:10;:14;;:28;;;;:::i;:::-;:32;;:49::i;:::-;:53;;:70::i;:::-;34861:93;-1:-1:-1;34989:62:0;35011:39;35038:11;35011:22;34861:93;35028:4;35011:16;:22::i;:39::-;34989:17;;:21;:62::i;:::-;34969:82;;34754:309;;34686:377;35073:15;35091:65;35140:4;:15;;;35091:44;35130:4;35091:34;35107:17;35091:4;:11;;;:15;;:34;;;;:::i;:44::-;:48;;:65::i;:::-;35073:83;;35174:32;35186:4;:19;;;35174:7;:11;;:32;;;;:::i;:::-;35167:39;34357:857;-1:-1:-1;;;;;;;;34357:857:0:o;38234:655::-;27447:1;28045:7;;:19;;28037:63;;;;-1:-1:-1;;;28037:63:0;;;;;;;:::i;:::-;27447:1;28178:7;:18;;;;38314:21:::1;38338:8;38347:4;38338:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;38387;;;:8:::1;:14:::0;;;;;;38402:10:::1;38387:26:::0;;;;;;;38432:11;;38338:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;38432:22:0;-1:-1:-1;38432:22:0::1;38424:53;;;::::0;-1:-1:-1;;;38424:53:0;;8418:2:1;38424:53:0::1;::::0;::::1;8400:21:1::0;8457:2;8437:18;;;8430:30;-1:-1:-1;;;8476:18:1;;;8469:48;8534:18;;38424:53:0::1;8216:342:1::0;38424:53:0::1;38488:16;38499:4;38488:10;:16::i;:::-;38515:30;38540:4;38515:24;:30::i;:::-;38560:11:::0;;38556:197:::1;;38602:11:::0;;:24:::1;::::0;38618:7;38602:15:::1;:24::i;:::-;38588:38:::0;;38641:10;;:53:::1;::::0;-1:-1:-1;;;;;38641:10:0::1;38673;38686:7:::0;38641:23:::1;:53::i;:::-;38720:8;::::0;::::1;::::0;:21:::1;::::0;38733:7;38720:12:::1;:21::i;:::-;38709:8;::::0;::::1;:32:::0;38556:197:::1;38797:22;::::0;::::1;::::0;38781:11;;:49:::1;::::0;38825:4:::1;::::0;38781:39:::1;::::0;:15:::1;:39::i;:49::-;38763:15;::::0;::::1;:67:::0;38846:35:::1;::::0;9480:25:1;;;38867:4:0;;38855:10:::1;::::0;38846:35:::1;::::0;9468:2:1;9453:18;38846:35:0::1;;;;;;;;-1:-1:-1::0;;27403:1:0;28357:22;;-1:-1:-1;;38234:655:0:o;36332:806::-;36384:21;36408:8;36417:4;36408:14;;;;;;;;:::i;:::-;;;;;;;;;;;36384:38;;36456:4;:24;;;36437:15;:43;36433:82;;36497:7;36332:806;:::o;36433:82::-;36547:10;;:35;;-1:-1:-1;;;36547:35:0;;36576:4;36547:35;;;3433:51:1;36525:19:0;;-1:-1:-1;;;;;36547:10:0;;:20;;3406:18:1;;36547:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36525:57;-1:-1:-1;36597:16:0;;;:40;;-1:-1:-1;36617:15:0;;;;:20;36597:40;36593:136;;;-1:-1:-1;36681:15:0;36654:24;;;;:42;-1:-1:-1;36332:806:0:o;36593:136::-;36739:18;36760:56;36774:4;:24;;;36800:15;36760:13;:56::i;:::-;36739:77;;36827:20;36850:70;36904:15;;36850:49;36883:4;:15;;;36850:28;36865:12;;36850:10;:14;;:28;;;;:::i;:70::-;36827:93;-1:-1:-1;37010:67:0;37037:39;37064:11;37037:22;36827:93;37054:4;37037:16;:22::i;:39::-;37010:22;;;;;:26;:67::i;:::-;36985:22;;;:92;-1:-1:-1;;37115:15:0;37088:24;;;;:42;;;;-1:-1:-1;;36332:806:0:o;38960:508::-;27447:1;28045:7;;:19;;28037:63;;;;-1:-1:-1;;;28037:63:0;;;;;;;:::i;:::-;27447:1;28178:7;:18;;;;39032:21:::1;39056:8;39065:4;39056:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;39105;;;:8:::1;:14:::0;;;;;;39120:10:::1;39105:26:::0;;;;;;;39159:11;;39181:15;;;-1:-1:-1;39207:15:0;::::1;:19:::0;;;39237::::1;::::0;::::1;:23:::0;;;39271:21:::1;::::0;::::1;:25:::0;;;;39056:14:::1;::::0;;::::1;;39307:10:::0;;39056:14;;-1:-1:-1;39105:26:0;;39159:11;39307:52:::1;::::0;-1:-1:-1;;;;;39307:10:0;;;::::1;::::0;39159:11;39307:23:::1;:52::i;:::-;39381:8;::::0;::::1;::::0;:20:::1;::::0;39394:6;39381:12:::1;:20::i;:::-;39370:8;::::0;::::1;:31:::0;39417:43:::1;::::0;9480:25:1;;;39447:4:0;;39435:10:::1;::::0;39417:43:::1;::::0;9468:2:1;9453:18;39417:43:0::1;9334:177:1::0;36076:180:0;36138:8;:15;36121:14;36164:85;36192:6;36186:3;:12;36164:85;;;36222:15;36233:3;36222:10;:15::i;:::-;36200:5;;;:::i;:::-;;;36164:85;;;;36110:146;36076:180::o;32476:855::-;24205:7;24232:6;-1:-1:-1;;;;;24232:6:0;22957:10;24379:23;24371:68;;;;-1:-1:-1;;;24371:68:0;;;;;;;:::i;:::-;30813:7:::1;32627:16;:44;;32619:86;;;::::0;-1:-1:-1;;;32619:86:0;;6576:2:1;32619:86:0::1;::::0;::::1;6558:21:1::0;6615:2;6595:18;;;6588:30;6654:31;6634:18;;;6627:59;6703:18;;32619:86:0::1;6374:353:1::0;32619:86:0::1;32740:5;32724:13;:21;;;32716:53;;;::::0;-1:-1:-1;;;32716:53:0;;5821:2:1;32716:53:0::1;::::0;::::1;5803:21:1::0;5860:2;5840:18;;;5833:30;-1:-1:-1;;;5879:18:1;;;5872:49;5938:18;;32716:53:0::1;5619:343:1::0;32716:53:0::1;32784:11;32780:61;;;32812:17;:15;:17::i;:::-;32851:27;32899:14;;32881:15;:32;:67;;32934:14;;32881:67;;;32916:15;32881:67;32977:15;::::0;32851:97;;-1:-1:-1;32977:32:0::1;::::0;32997:11;32977:19:::1;:32::i;:::-;32959:15;:50:::0;33034:288:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;33034:288:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;33034:288:0;;;;;;;;;;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;33020:8:::1;:303:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;33020:303:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33020:303:0;;;;;;;;;;;;;;-1:-1:-1;;33020:303:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;32476:855::o;24810:103::-;24205:7;24232:6;-1:-1:-1;;;;;24232:6:0;22957:10;24379:23;24371:68;;;;-1:-1:-1;;;24371:68:0;;;;;;;:::i;:::-;24875:30:::1;24902:1;24875:18;:30::i;:::-;24810:103::o:0;34148:143::-;34220:7;34247:36;30715:1;34247:14;:3;34255:5;34247:7;:14::i;:36::-;34240:43;34148:143;-1:-1:-1;;;34148:143:0:o;35486:140::-;35534:7;35554:21;35578:8;35587:4;35578:14;;;;;;;;:::i;:::-;;;;;;;;;35610:8;35578:14;;;;;35610:8;;;35486:140;-1:-1:-1;;;35486:140:0:o;33445:627::-;24205:7;24232:6;-1:-1:-1;;;;;24232:6:0;22957:10;24379:23;24371:68;;;;-1:-1:-1;;;24371:68:0;;;;;;;:::i;:::-;30813:7:::1;33595:16;:44;;33587:86;;;::::0;-1:-1:-1;;;33587:86:0;;7702:2:1;33587:86:0::1;::::0;::::1;7684:21:1::0;7741:2;7721:18;;;7714:30;7780:31;7760:18;;;7753:59;7829:18;;33587:86:0::1;7500:353:1::0;33587:86:0::1;33708:5;33692:13;:21;;;33684:53;;;::::0;-1:-1:-1;;;33684:53:0;;5821:2:1;33684:53:0::1;::::0;::::1;5803:21:1::0;5860:2;5840:18;;;5833:30;-1:-1:-1;;;5879:18:1;;;5872:49;5938:18;;33684:53:0::1;5619:343:1::0;33684:53:0::1;33752:11;33748:61;;;33780:17;:15;:17::i;:::-;33837:63;33888:11;33837:46;33857:8;33866:4;33857:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;33837:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;33819:15;:81;;;;33939:11;33911:8;33920:4;33911:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;:39;;;;33994:16;33961:8;33970:4;33961:14;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;:49;;;;34051:13;34021:8;34030:4;34021:14;;;;;;;;:::i;:::-;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;33445:627:::0;;;;;:::o;37192:1009::-;27447:1;28045:7;;:19;;28037:63;;;;-1:-1:-1;;;28037:63:0;;;;;;;:::i;:::-;27447:1;28178:7;:18;;;;37271:21:::1;37295:8;37304:4;37295:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;37344;;;:8:::1;:14:::0;;;;;;37359:10:::1;37344:26:::0;;;;;;;37385:23:::1;::::0;37295:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;37385:23:0::1;;37381:70;;;37423:16;37434:4;37423:10;:16::i;:::-;37461:30;37486:4;37461:24;:30::i;:::-;37506:11:::0;;37502:564:::1;;37592:10:::0;;37534:22:::1;::::0;37559:90:::1;::::0;-1:-1:-1;;;;;37592:10:0::1;37613;37634:4;37641:7:::0;37559:25:::1;:90::i;:::-;37668:17;::::0;::::1;::::0;37534:115;;-1:-1:-1;37668:17:0::1;;:21:::0;37664:271:::1;;37752:17;::::0;::::1;::::0;37710::::1;::::0;37730:51:::1;::::0;37775:5:::1;::::0;37730:40:::1;::::0;:17;;37752::::1;;37730:21;:40::i;:51::-;37824:12;::::0;37800:10;;37710:71;;-1:-1:-1;37800:48:0::1;::::0;-1:-1:-1;;;;;37800:10:0;;::::1;::::0;37824:12:::1;::::0;::::1;;37710:71:::0;37800:23:::1;:48::i;:::-;37887:32;:17:::0;37909:9;37887:21:::1;:32::i;:::-;37867:52;;37691:244;37664:271;37963:11:::0;;:34:::1;::::0;37979:17;37963:15:::1;:34::i;:::-;37949:48:::0;;38023:8:::1;::::0;::::1;::::0;:31:::1;::::0;38036:17;38023:12:::1;:31::i;:::-;38012:8;::::0;::::1;:42:::0;-1:-1:-1;37502:564:0::1;38110:22;::::0;::::1;::::0;38094:11;;:49:::1;::::0;38138:4:::1;::::0;38094:39:::1;::::0;:15:::1;:39::i;:49::-;38076:15;::::0;::::1;:67:::0;38159:34:::1;::::0;9480:25:1;;;38179:4:0;;38167:10:::1;::::0;38159:34:::1;::::0;9468:2:1;9453:18;38159:34:0::1;9334:177:1::0;35634:359:0;35684:7;35704:21;35728:8;35737:4;35728:14;;;;;;;;:::i;:::-;;;;;;;;;;;35704:38;;35755:14;35772:83;35839:15;;35772:62;35818:4;:15;;;35772:41;35800:12;;35772:23;35791:3;35780:5;35772:18;;:23;;;;:::i;:83::-;35755:100;-1:-1:-1;35870:10:0;;35866:101;;35916:1;35904:9;35908:4;35904:3;:9::i;:::-;:13;:51;;35954:1;35904:51;;;35920:31;35941:9;35945:4;35941:3;:9::i;:::-;35920:16;:6;35931:4;35920:10;:16::i;:31::-;35897:58;35634:359;-1:-1:-1;;;;35634:359:0:o;35866:101::-;-1:-1:-1;35984:1:0;;35634:359;-1:-1:-1;;;35634:359:0:o;25068:201::-;24205:7;24232:6;-1:-1:-1;;;;;24232:6:0;22957:10;24379:23;24371:68;;;;-1:-1:-1;;;24371:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25157:22:0;::::1;25149:73;;;::::0;-1:-1:-1;;;25149:73:0;;6169:2:1;25149:73:0::1;::::0;::::1;6151:21:1::0;6208:2;6188:18;;;6181:30;6247:34;6227:18;;;6220:62;-1:-1:-1;;;6298:18:1;;;6291:36;6344:19;;25149:73:0::1;5967:402:1::0;25149:73:0::1;25233:28;25252:8;25233:18;:28::i;:::-;25068:201:::0;:::o;3701:98::-;3759:7;3786:5;3790:1;3786;:5;:::i;4100:98::-;4158:7;4185:5;4189:1;4185;:5;:::i;2963:98::-;3021:7;3048:5;3052:1;3048;:5;:::i;3344:98::-;3402:7;3429:5;3433:1;3429;:5;:::i;39515:1116::-;39581:21;39605:8;39614:4;39605:14;;;;;;;;:::i;:::-;;;;;;;;;39652;;;:8;:14;;;;;;39667:10;39652:26;;;;;;;39693:21;;;;39605:14;;;;;;;;-1:-1:-1;39689:118:0;;39776:20;;;;39756:41;;:15;;:19;:41::i;:::-;39732:21;;;:65;39689:118;39817:15;39835:70;39889:4;:15;;;39835:49;39879:4;39835:39;39851:4;:22;;;39835:4;:11;;;:15;;:39;;;;:::i;:70::-;35350:4;35391:14;;;:8;:14;;;;;;;;39935:10;35391:21;;;;;;;35449;;;39817:88;;-1:-1:-1;35430:15:0;:40;39914:710;;39973:1;39963:7;:11;:38;;;;40000:1;39978:4;:19;;;:23;39963:38;39959:434;;;40016:20;40039:32;40051:4;:19;;;40039:7;:11;;:32;;;;:::i;:::-;40016:55;;40136:45;40161:4;:19;;;40136:20;;:24;;:45;;;;:::i;:::-;40113:20;:68;40216:1;40194:19;;;:23;40274:20;;;;40254:41;;:15;;:19;:41::i;:::-;40230:21;;;:65;40337:44;40356:10;40368:12;40337:18;:44::i;:::-;40003:390;39959:434;39914:710;;;40412:11;;40408:216;;40458:19;;;;:32;;40482:7;40458:23;:32::i;:::-;40436:19;;;:54;40524:20;;:33;;40549:7;40524:24;:33::i;:::-;40501:20;:56;40573:41;;9480:25:1;;;40600:4:0;;40588:10;;40573:41;;9468:2:1;9453:18;40573:41:0;;;;;;;40408:216;39572:1059;;;39515:1116;:::o;18894:211::-;19038:58;;-1:-1:-1;;;;;4067:32:1;;19038:58:0;;;4049:51:1;4116:18;;;4109:34;;;19011:86:0;;19031:5;;-1:-1:-1;;;19061:23:0;4022:18:1;;19038:58:0;;;;-1:-1:-1;;19038:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;19038:58:0;-1:-1:-1;;;;;;19038:58:0;;;;;;;;;;19011:19;:86::i;:::-;18894:211;;;:::o;25429:191::-;25503:16;25522:6;;-1:-1:-1;;;;;25539:17:0;;;-1:-1:-1;;;;;;25539:17:0;;;;;;25572:40;;25522:6;;;;;;;25572:40;;25503:16;25572:40;25492:128;25429:191;:::o;41159:398::-;41312:21;;-1:-1:-1;;;41312:21:0;;-1:-1:-1;;;;;3451:32:1;;;41312:21:0;;;3433:51:1;41272:7:0;;;;41312:16;;;;;3406:18:1;;41312:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41292:41;-1:-1:-1;41344:44:0;-1:-1:-1;;;;;41344:23:0;;41368:5;41375:3;41380:7;41344:23;:44::i;:::-;41418:21;;-1:-1:-1;;;41418:21:0;;-1:-1:-1;;;;;3451:32:1;;;41418:21:0;;;3433:51:1;41399:16:0;;41418;;;;;;3406:18:1;;41418:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41399:40;;41465:9;41454:8;:20;41450:81;;;41496:23;:8;41509:9;41496:12;:23::i;:::-;41489:30;;;;;;41450:81;-1:-1:-1;41548:1:0;;41159:398;-1:-1:-1;;;;;;41159:398:0:o;40749:292::-;40847:6;;:31;;-1:-1:-1;;;40847:31:0;;40872:4;40847:31;;;3433:51:1;40827:17:0;;-1:-1:-1;;;;;40847:6:0;;:16;;3406:18:1;;40847:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40827:51;;40903:9;40893:7;:19;40889:145;;;40929:6;;:31;;-1:-1:-1;;;40929:31:0;;-1:-1:-1;;;;;4067:32:1;;;40929:31:0;;;4049:51:1;4116:18;;;4109:34;;;40929:6:0;;;;:15;;4022:18:1;;40929:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40889:145::-;40993:6;;:29;;-1:-1:-1;;;40993:29:0;;-1:-1:-1;;;;;4067:32:1;;;40993:29:0;;;4049:51:1;4116:18;;;4109:34;;;40993:6:0;;;;:15;;4022:18:1;;40993:29:0;3875:274:1;21467:716:0;21891:23;21917:69;21945:4;21917:69;;;;;;;;;;;;;;;;;21925:5;-1:-1:-1;;;;;21917:27:0;;;:69;;;;;:::i;:::-;22001:17;;21891:95;;-1:-1:-1;22001:21:0;21997:179;;22098:10;22087:30;;;;;;;;;;;;:::i;:::-;22079:85;;;;-1:-1:-1;;;22079:85:0;;8765:2:1;22079:85:0;;;8747:21:1;8804:2;8784:18;;;8777:30;8843:34;8823:18;;;8816:62;-1:-1:-1;;;8894:18:1;;;8887:40;8944:19;;22079:85:0;8563:406:1;19113:248:0;19284:68;;-1:-1:-1;;;;;3753:15:1;;;19284:68:0;;;3735:34:1;3805:15;;3785:18;;;3778:43;3837:18;;;3830:34;;;19257:96:0;;19277:5;;-1:-1:-1;;;19307:27:0;3670:18:1;;19284:68:0;3495:375:1;13666:229:0;13803:12;13835:52;13857:6;13865:4;13871:1;13874:12;13803;11183:20;;15073:60;;;;-1:-1:-1;;;15073:60:0;;8060:2:1;15073:60:0;;;8042:21:1;8099:2;8079:18;;;8072:30;8138:31;8118:18;;;8111:59;8187:18;;15073:60:0;7858:353:1;15073:60:0;15147:12;15161:23;15188:6;-1:-1:-1;;;;;15188:11:0;15207:5;15214:4;15188:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15146:73;;;;15237:51;15254:7;15263:10;15275:12;15237:16;:51::i;:::-;15230:58;14786:510;-1:-1:-1;;;;;;;14786:510:0:o;17472:712::-;17622:12;17651:7;17647:530;;;-1:-1:-1;17682:10:0;17675:17;;17647:530;17796:17;;:21;17792:374;;17994:10;17988:17;18055:15;18042:10;18038:2;18034:19;18027:44;17792:374;18137:12;18130:20;;-1:-1:-1;;;18130:20:0;;;;;;;;:::i;14:159:1:-;81:20;;141:6;130:18;;120:29;;110:57;;163:1;160;153:12;110:57;14:159;;;:::o;178:247::-;237:6;290:2;278:9;269:7;265:23;261:32;258:52;;;306:1;303;296:12;258:52;345:9;332:23;364:31;389:5;364:31;:::i;430:241::-;486:6;539:2;527:9;518:7;514:23;510:32;507:52;;;555:1;552;545:12;507:52;594:9;581:23;613:28;635:5;613:28;:::i;676:245::-;743:6;796:2;784:9;775:7;771:23;767:32;764:52;;;812:1;809;802:12;764:52;844:9;838:16;863:28;885:5;863:28;:::i;926:180::-;985:6;1038:2;1026:9;1017:7;1013:23;1009:32;1006:52;;;1054:1;1051;1044:12;1006:52;-1:-1:-1;1077:23:1;;926:180;-1:-1:-1;926:180:1:o;1111:184::-;1181:6;1234:2;1222:9;1213:7;1209:23;1205:32;1202:52;;;1250:1;1247;1240:12;1202:52;-1:-1:-1;1273:16:1;;1111:184;-1:-1:-1;1111:184:1:o;1300:315::-;1368:6;1376;1429:2;1417:9;1408:7;1404:23;1400:32;1397:52;;;1445:1;1442;1435:12;1397:52;1481:9;1468:23;1458:33;;1541:2;1530:9;1526:18;1513:32;1554:31;1579:5;1554:31;:::i;:::-;1604:5;1594:15;;;1300:315;;;;;:::o;1620:606::-;1725:6;1733;1741;1749;1757;1810:3;1798:9;1789:7;1785:23;1781:33;1778:53;;;1827:1;1824;1817:12;1778:53;1863:9;1850:23;1840:33;;1923:2;1912:9;1908:18;1895:32;1936:31;1961:5;1936:31;:::i;:::-;1986:5;-1:-1:-1;2038:2:1;2023:18;;2010:32;;-1:-1:-1;2061:37:1;2094:2;2079:18;;2061:37;:::i;:::-;2051:47;;2150:3;2139:9;2135:19;2122:33;2164:30;2186:7;2164:30;:::i;:::-;2213:7;2203:17;;;1620:606;;;;;;;;:::o;2231:248::-;2299:6;2307;2360:2;2348:9;2339:7;2335:23;2331:32;2328:52;;;2376:1;2373;2366:12;2328:52;-1:-1:-1;;2399:23:1;;;2469:2;2454:18;;;2441:32;;-1:-1:-1;2231:248:1:o;2484:519::-;2575:6;2583;2591;2599;2607;2660:3;2648:9;2639:7;2635:23;2631:33;2628:53;;;2677:1;2674;2667:12;2628:53;2713:9;2700:23;2690:33;;2770:2;2759:9;2755:18;2742:32;2732:42;;2821:2;2810:9;2806:18;2793:32;2783:42;;2844:37;2877:2;2866:9;2862:18;2844:37;:::i;3008:274::-;3137:3;3175:6;3169:13;3191:53;3237:6;3232:3;3225:4;3217:6;3213:17;3191:53;:::i;:::-;3260:16;;;;;3008:274;-1:-1:-1;;3008:274:1:o;5231:383::-;5380:2;5369:9;5362:21;5343:4;5412:6;5406:13;5455:6;5450:2;5439:9;5435:18;5428:34;5471:66;5530:6;5525:2;5514:9;5510:18;5505:2;5497:6;5493:15;5471:66;:::i;:::-;5598:2;5577:15;-1:-1:-1;;5573:29:1;5558:45;;;;5605:2;5554:54;;5231:383;-1:-1:-1;;5231:383:1:o;7139:356::-;7341:2;7323:21;;;7360:18;;;7353:30;7419:34;7414:2;7399:18;;7392:62;7486:2;7471:18;;7139:356::o;8974:355::-;9176:2;9158:21;;;9215:2;9195:18;;;9188:30;9254:33;9249:2;9234:18;;9227:61;9320:2;9305:18;;8974:355::o;10165:128::-;10205:3;10236:1;10232:6;10229:1;10226:13;10223:39;;;10242:18;;:::i;:::-;-1:-1:-1;10278:9:1;;10165:128::o;10298:217::-;10338:1;10364;10354:132;;10408:10;10403:3;10399:20;10396:1;10389:31;10443:4;10440:1;10433:15;10471:4;10468:1;10461:15;10354:132;-1:-1:-1;10500:9:1;;10298:217::o;10520:168::-;10560:7;10626:1;10622;10618:6;10614:14;10611:1;10608:21;10603:1;10596:9;10589:17;10585:45;10582:71;;;10633:18;;:::i;:::-;-1:-1:-1;10673:9:1;;10520:168::o;10693:125::-;10733:4;10761:1;10758;10755:8;10752:34;;;10766:18;;:::i;:::-;-1:-1:-1;10803:9:1;;10693:125::o;10823:258::-;10895:1;10905:113;10919:6;10916:1;10913:13;10905:113;;;10995:11;;;10989:18;10976:11;;;10969:39;10941:2;10934:10;10905:113;;;11036:6;11033:1;11030:13;11027:48;;;-1:-1:-1;;11071:1:1;11053:16;;11046:27;10823:258::o;11086:135::-;11125:3;-1:-1:-1;;11146:17:1;;11143:43;;;11166:18;;:::i;:::-;-1:-1:-1;11213:1:1;11202:13;;11086:135::o;11226:127::-;11287:10;11282:3;11278:20;11275:1;11268:31;11318:4;11315:1;11308:15;11342:4;11339:1;11332:15;11358:127;11419:10;11414:3;11410:20;11407:1;11400:31;11450:4;11447:1;11440:15;11474:4;11471:1;11464:15;11490:131;-1:-1:-1;;;;;11565:31:1;;11555:42;;11545:70;;11611:1;11608;11601:12;11626:118;11712:5;11705:13;11698:21;11691:5;11688:32;11678:60;;11734:1;11731;11724:12
Swarm Source
ipfs://bd92a8219cd39a0ab835683670556ee99b6db27843a66d56484220f10c9b61f5
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.