Source Code
Latest 25 from a total of 41 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Stake | 18401610 | 891 days ago | IN | 0 ETH | 0.00187707 | ||||
| Claim Rewards | 18355590 | 898 days ago | IN | 0 ETH | 0.00056752 | ||||
| Withdraw | 18339042 | 900 days ago | IN | 0 ETH | 0.00084005 | ||||
| Stake | 18334477 | 901 days ago | IN | 0 ETH | 0.00246488 | ||||
| Withdraw | 18333971 | 901 days ago | IN | 0 ETH | 0.00114434 | ||||
| Withdraw | 18333870 | 901 days ago | IN | 0 ETH | 0.00094285 | ||||
| Stake | 18333733 | 901 days ago | IN | 0 ETH | 0.00113264 | ||||
| Claim Rewards | 18333666 | 901 days ago | IN | 0 ETH | 0.000677 | ||||
| Stake | 18333530 | 901 days ago | IN | 0 ETH | 0.00169716 | ||||
| Withdraw | 18333462 | 901 days ago | IN | 0 ETH | 0.00154234 | ||||
| Stake | 18333350 | 901 days ago | IN | 0 ETH | 0.00151531 | ||||
| Withdraw | 18333345 | 901 days ago | IN | 0 ETH | 0.00095927 | ||||
| Withdraw | 18333087 | 901 days ago | IN | 0 ETH | 0.00127951 | ||||
| Stake | 18333042 | 901 days ago | IN | 0 ETH | 0.00126598 | ||||
| Stake | 18332963 | 901 days ago | IN | 0 ETH | 0.00141736 | ||||
| Stake | 18332943 | 901 days ago | IN | 0 ETH | 0.00127126 | ||||
| Stake | 18332942 | 901 days ago | IN | 0 ETH | 0.00131095 | ||||
| Withdraw | 18332927 | 901 days ago | IN | 0 ETH | 0.00122826 | ||||
| Stake | 18332894 | 901 days ago | IN | 0 ETH | 0.0016878 | ||||
| Stake | 18332890 | 901 days ago | IN | 0 ETH | 0.00225532 | ||||
| Stake | 18332321 | 901 days ago | IN | 0 ETH | 0.00144485 | ||||
| Stake | 18332268 | 901 days ago | IN | 0 ETH | 0.00148596 | ||||
| Stake | 18330206 | 901 days ago | IN | 0 ETH | 0.0012337 | ||||
| Claim Rewards | 18329931 | 901 days ago | IN | 0 ETH | 0.00088669 | ||||
| Stake | 18329854 | 901 days ago | IN | 0 ETH | 0.00169438 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SMD_v5
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 20000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.9;
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see `ERC20Detailed`.
*/
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount)
external
returns (bool);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
// File: openzeppelin-solidity/contracts/math/SafeMath.sol
pragma solidity 0.8.9;
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, "SafeMath: division by zero");
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0, "SafeMath: modulo by zero");
return a % b;
}
}
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
pragma solidity 0.8.9;
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor() {
_transferOwnership(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
library SafeERC20 {
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
require(token.transfer(to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
require(token.transferFrom(from, to, value));
}
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
require(token.approve(spender, value));
}
}
pragma solidity 0.8.9;
contract SMD_v5 is Ownable {
using SafeMath for uint256;
using SafeERC20 for IERC20;
uint256 public constant SECONDS_PER_HOUR = 3600; // 60 * 60
/// @notice LP token address to deposit to earn rewards.
address public tokenAddress;
/// @notice token address to in which rewards will be paid in.
address public rewardTokenAddress;
uint256 public stakedTotal;
uint256 public stakedBalance;
uint256 public rewardBalance;
uint256 public totalReward;
/// @dev expressed in UNIX timestamp. Will be compareed to block.timestamp.
uint256 public startingDate;
/// @dev expressed in UNIX timestamp. Will be compareed to block.timestamp.
uint256 public endingDate;
/**
* @notice periodCounter is used to keep track of the farming periods, which allow participants to
* earn a certain amount of rewards by staking their LP for a certain period of time. Then,
* a new period can be opened with a different or equal amount to earn.
* @dev counts the amount of farming periods.
*/
uint256 public periodCounter;
/// @notice should be the last amount of rewards per wei of deposited LP token {tokenAddress}.
uint256 public accShare;
/// @notice timestamp of the last period start date, expressed in UNIX timestamp.
uint256 public lastPeriodStartedAt;
/**
* @notice amount of participant in current period.
* @dev {resetAndsetStartEndBlock} will reset this value to 0.
*/
uint256 public totalParticipants;
/// @dev expressed in hours, e.g. 7 days = 24 * 7 = 168.
uint256 public lockDuration;
bool public isPaused;
IERC20 public ERC20Interface;
struct Deposits {
uint256 amount;
uint256 initialStake;
uint256 latestClaim;
uint256 userAccShare;
uint256 currentPeriod;
}
struct PeriodDetails {
uint256 periodCounter;
uint256 accShare;
uint256 rewPerSecond;
uint256 startingDate;
uint256 endingDate;
uint256 rewards;
}
mapping(address => Deposits) private deposits;
mapping(address => bool) public isPaid;
mapping(address => bool) public hasStaked;
mapping(uint256 => PeriodDetails) public endAccShare;
event NewPeriodSet(
uint256 periodCounter,
uint256 startDate,
uint256 endDate,
uint256 lockDuration,
uint256 rewardAmount
);
event PeriodExtended(uint256 periodCounter, uint256 endDate, uint256 rewards);
event Staked(
address indexed token,
address indexed staker_,
uint256 stakedAmount_
);
event PaidOut(
address indexed token,
address indexed rewardToken,
address indexed staker_,
uint256 amount_,
uint256 reward_
);
constructor(address _tokenAddress, address _rewardTokenAddress) Ownable() {
require(_tokenAddress != address(0), "Zero token address");
tokenAddress = _tokenAddress;
require(_rewardTokenAddress != address(0), "Zero reward token address");
rewardTokenAddress = _rewardTokenAddress;
isPaused = true;
}
/*
- To set the start and end blocks for each periodCounter
*/
function setStartEnd(uint256 _start, uint256 _end) private {
require(totalReward > 0, "Add rewards for this periodCounter");
startingDate = _start;
endingDate = _end;
periodCounter++;
isPaused = false;
lastPeriodStartedAt = _start;
}
/**
* @notice Add rewards to the contract, without transfering them to the contract. They stay in
* `msg.sender` wallet, so be sure `msg.sender` has approved the this contract to transfer
* the `_rewardAmount` of `rewardTokenAddress`.
*/
function addReward(uint256 _rewardAmount)
private
_hasAllowance(msg.sender, _rewardAmount, rewardTokenAddress)
returns (bool)
{
totalReward = totalReward.add(_rewardAmount);
rewardBalance = rewardBalance.add(_rewardAmount);
if (!_payMe(msg.sender, _rewardAmount, rewardTokenAddress)) {
return false;
}
return true;
}
/*
- To reset the contract at the end of each periodCounter.
*/
function reset() private {
require(block.timestamp > endingDate, "Wait till end of this period");
updateShare();
endAccShare[periodCounter] = PeriodDetails(
periodCounter,
accShare,
rewPerSecond(),
startingDate,
endingDate,
rewardBalance
);
totalReward = 0;
stakedBalance = 0;
isPaused = true;
}
/**
* @notice Function to set the start and end blocks for each new period and add rewards to be
* earned within this period. Previous period must have ended, otherwise use
* {extendCurrentPeriod} to update current period.
* @dev Easier to pass seconds to wait until start and end of period, instead of passing the start and
* end timestamp.
*
* @param _rewardAmount Amount of rewards to be earned within this period.
* @param _start Seconds at which the period starts - in UNIX timestamp.
* @param _end Seconds at which the period ends - in UNIX timestamp.
* @param _lockDuration Duration in hours to wait before being able to withdraw.
*/
function resetAndsetStartEndBlock(
uint256 _rewardAmount,
uint256 _start,
uint256 _end,
uint256 _lockDuration
) external onlyOwner returns (bool) {
require(
_start > block.timestamp,
"Start should be more than block.timestamp"
);
require(_end > _start, "End block should be greater than start");
require(_rewardAmount > 0, "Reward must be positive");
reset();
bool rewardAdded = addReward(_rewardAmount);
require(rewardAdded, "Rewards error");
setStartEnd(_start, _end);
lockDuration = _lockDuration;
totalParticipants = 0;
emit NewPeriodSet(periodCounter, _start, _end, _lockDuration, _rewardAmount);
return true;
}
/*
- Function to update rewards and state parameters
*/
function updateShare() private {
if (block.timestamp <= lastPeriodStartedAt) {
return;
}
if (stakedBalance == 0) {
lastPeriodStartedAt = block.timestamp;
return;
}
uint256 secSinceLastPeriod;
if (block.timestamp >= endingDate) {
secSinceLastPeriod = endingDate.sub(lastPeriodStartedAt);
} else {
secSinceLastPeriod = block.timestamp.sub(lastPeriodStartedAt);
}
uint256 rewards = secSinceLastPeriod.mul(rewPerSecond());
accShare = accShare.add((rewards.mul(1e6).div(stakedBalance)));
if (block.timestamp >= endingDate) {
lastPeriodStartedAt = endingDate;
} else {
lastPeriodStartedAt = block.timestamp;
}
}
function rewPerSecond() public view returns (uint256) {
if (totalReward == 0 || rewardBalance == 0) return 0;
uint256 rewardPerSecond = totalReward.div(
(endingDate.sub(startingDate))
);
return (rewardPerSecond);
}
function stake(uint256 amount)
external
_hasAllowance(msg.sender, amount, tokenAddress)
returns (bool)
{
require(!isPaused, "Contract is paused");
require(
block.timestamp >= startingDate && block.timestamp < endingDate,
"No active pool (time)"
);
require(amount > 0, "Can't stake 0 amount");
return (_stake(msg.sender, amount));
}
function _stake(address from, uint256 amount) private returns (bool) {
updateShare();
if (!hasStaked[from]) {
deposits[from] = Deposits(
amount,
block.timestamp,
block.timestamp,
accShare,
periodCounter
);
totalParticipants = totalParticipants.add(1);
hasStaked[from] = true;
} else {
if (deposits[from].currentPeriod != periodCounter) {
bool renew_ = _renew(from);
require(renew_, "Error renewing");
} else {
bool claim = _claimRewards(from);
require(claim, "Error paying rewards");
}
uint256 userAmount = deposits[from].amount;
deposits[from] = Deposits(
userAmount.add(amount),
block.timestamp,
block.timestamp,
accShare,
periodCounter
);
}
stakedBalance = stakedBalance.add(amount);
stakedTotal = stakedTotal.add(amount);
if (!_payMe(from, amount, tokenAddress)) {
return false;
}
emit Staked(tokenAddress, from, amount);
return true;
}
function userDeposits(address from)
external
view
returns (
uint256,
uint256,
uint256,
uint256
)
{
if (hasStaked[from]) {
return (
deposits[from].amount,
deposits[from].initialStake,
deposits[from].latestClaim,
deposits[from].currentPeriod
);
} else {
return (0, 0, 0, 0);
}
}
function fetchUserShare(address from) public view returns (uint256) {
require(hasStaked[from], "No stakes found for user");
if (stakedBalance == 0) {
return 0;
}
require(
deposits[from].currentPeriod == periodCounter,
"Please renew in the active valid periodCounter"
);
uint256 userAmount = deposits[from].amount;
require(userAmount > 0, "No stakes available for user"); //extra check
return 1;
}
function claimRewards() public returns (bool) {
require(fetchUserShare(msg.sender) > 0, "No stakes found for user");
return (_claimRewards(msg.sender));
}
function _claimRewards(address from) private returns (bool) {
uint256 userAccShare = deposits[from].userAccShare;
updateShare();
uint256 amount = deposits[from].amount;
uint256 rewDebt = amount.mul(userAccShare).div(1e6);
uint256 rew = (amount.mul(accShare).div(1e6)).sub(rewDebt);
require(rew > 0, "No rewards generated");
require(rew <= rewardBalance, "Not enough rewards in the contract");
deposits[from].userAccShare = accShare;
deposits[from].latestClaim = block.timestamp;
rewardBalance = rewardBalance.sub(rew);
bool payRewards = _payDirect(from, rew, rewardTokenAddress);
require(payRewards, "Rewards transfer failed");
emit PaidOut(tokenAddress, rewardTokenAddress, from, amount, rew);
return true;
}
/// @notice Should take into account staking rewards from previous periods into the current new period.
function renew() public returns (bool) {
require(!isPaused, "Contract paused");
require(hasStaked[msg.sender], "No stakings found, please stake");
require(
deposits[msg.sender].currentPeriod != periodCounter,
"Already renewed"
);
require(
block.timestamp > startingDate && block.timestamp < endingDate,
"Wrong time"
);
return (_renew(msg.sender));
}
function _renew(address from) private returns (bool) {
updateShare();
if (viewOldRewards(from) > 0) {
bool claimed = claimOldRewards();
require(claimed, "Error paying old rewards");
}
deposits[from].currentPeriod = periodCounter;
deposits[from].initialStake = block.timestamp;
deposits[from].latestClaim = block.timestamp;
deposits[from].userAccShare = accShare;
stakedBalance = stakedBalance.add(deposits[from].amount);
totalParticipants = totalParticipants.add(1);
return true;
}
function viewOldRewards(address from) public view returns (uint256) {
require(!isPaused, "Contract paused");
require(hasStaked[from], "No stakings found, please stake");
if (deposits[from].currentPeriod == periodCounter) {
return 0;
}
uint256 userPeriod = deposits[from].currentPeriod;
uint256 accShare1 = endAccShare[userPeriod].accShare;
uint256 userAccShare = deposits[from].userAccShare;
if (deposits[from].latestClaim >= endAccShare[userPeriod].endingDate)
return 0;
uint256 amount = deposits[from].amount;
uint256 rewDebt = amount.mul(userAccShare).div(1e6);
uint256 rew = (amount.mul(accShare1).div(1e6)).sub(rewDebt);
require(rew <= rewardBalance, "Not enough rewards");
return (rew);
}
/// @notice Should claim rewards from previous periods.
function claimOldRewards() public returns (bool) {
require(!isPaused, "Contract paused");
require(hasStaked[msg.sender], "No stakings found, please stake");
require(
deposits[msg.sender].currentPeriod != periodCounter,
"Already renewed"
);
uint256 userPeriod = deposits[msg.sender].currentPeriod;
uint256 accShare1 = endAccShare[userPeriod].accShare;
uint256 userAccShare = deposits[msg.sender].userAccShare;
require(
deposits[msg.sender].latestClaim <
endAccShare[userPeriod].endingDate,
"Already claimed old rewards"
);
uint256 amount = deposits[msg.sender].amount;
uint256 rewDebt = amount.mul(userAccShare).div(1e6);
uint256 rew = (amount.mul(accShare1).div(1e6)).sub(rewDebt);
require(rew <= rewardBalance, "Not enough rewards");
deposits[msg.sender].latestClaim = endAccShare[userPeriod].endingDate;
rewardBalance = rewardBalance.sub(rew);
bool paidOldRewards = _payDirect(msg.sender, rew, rewardTokenAddress);
require(paidOldRewards, "Error paying");
emit PaidOut(tokenAddress, rewardTokenAddress, msg.sender, amount, rew);
return true;
}
function calculate(address from) public view returns (uint256) {
if (fetchUserShare(from) == 0) return 0;
return (_calculate(from));
}
function _calculate(address from) private view returns (uint256) {
uint256 userAccShare = deposits[from].userAccShare;
uint256 currentAccShare = accShare;
//Simulating updateShare() to calculate rewards
if (block.timestamp <= lastPeriodStartedAt) {
return 0;
}
if (stakedBalance == 0) {
return 0;
}
uint256 secSinceLastPeriod;
if (block.timestamp >= endingDate) {
secSinceLastPeriod = endingDate.sub(lastPeriodStartedAt);
} else {
secSinceLastPeriod = block.timestamp.sub(lastPeriodStartedAt);
}
uint256 rewards = secSinceLastPeriod.mul(rewPerSecond());
uint256 newAccShare = currentAccShare.add(
(rewards.mul(1e6).div(stakedBalance))
);
uint256 amount = deposits[from].amount;
uint256 rewDebt = amount.mul(userAccShare).div(1e6);
uint256 rew = (amount.mul(newAccShare).div(1e6)).sub(rewDebt);
return (rew);
}
function emergencyWithdraw() external returns (bool) {
require(
block.timestamp >
deposits[msg.sender].initialStake.add(
lockDuration.mul(SECONDS_PER_HOUR)
),
"Can't withdraw before lock duration"
);
require(hasStaked[msg.sender], "No stakes available for user");
require(!isPaid[msg.sender], "Already Paid");
return (_withdraw(msg.sender, deposits[msg.sender].amount));
}
function _withdraw(address from, uint256 amount) private returns (bool) {
updateShare();
deposits[from].amount = deposits[from].amount.sub(amount);
if (!isPaused && deposits[from].currentPeriod == periodCounter) {
stakedBalance = stakedBalance.sub(amount);
}
bool paid = _payDirect(from, amount, tokenAddress);
require(paid, "Error during withdraw");
if (deposits[from].amount == 0) {
isPaid[from] = true;
hasStaked[from] = false;
if (deposits[from].currentPeriod == periodCounter) {
totalParticipants = totalParticipants.sub(1);
}
delete deposits[from];
}
return true;
}
function withdraw(uint256 amount) external returns (bool) {
require(
block.timestamp >
deposits[msg.sender].initialStake.add(
lockDuration.mul(SECONDS_PER_HOUR)
),
"Can't withdraw before lock duration"
);
require(amount <= deposits[msg.sender].amount, "Wrong value");
if (deposits[msg.sender].currentPeriod == periodCounter) {
if (calculate(msg.sender) > 0) {
bool rewardsPaid = claimRewards();
require(rewardsPaid, "Error paying rewards");
}
}
if (viewOldRewards(msg.sender) > 0) {
bool oldRewardsPaid = claimOldRewards();
require(oldRewardsPaid, "Error paying old rewards");
}
return (_withdraw(msg.sender, amount));
}
function extendCurrentPeriod(uint256 rewardsToBeAdded)
external
onlyOwner
returns (bool)
{
require(
block.timestamp > startingDate && block.timestamp < endingDate,
"No active pool (time)"
);
require(rewardsToBeAdded > 0, "Zero rewards");
bool addedRewards = _payMe(
msg.sender,
rewardsToBeAdded,
rewardTokenAddress
);
require(addedRewards, "Error adding rewards");
endingDate = endingDate.add(rewardsToBeAdded.div(rewPerSecond()));
totalReward = totalReward.add(rewardsToBeAdded);
rewardBalance = rewardBalance.add(rewardsToBeAdded);
emit PeriodExtended(periodCounter, endingDate, rewardsToBeAdded);
return true;
}
function _payMe(
address payer,
uint256 amount,
address token
) private returns (bool) {
return _payTo(payer, address(this), amount, token);
}
function _payTo(
address allower,
address receiver,
uint256 amount,
address token
) private returns (bool) {
// Request to transfer amount from the contract to receiver.
// contract does not own the funds, so the allower must have added allowance to the contract
// Allower is the original owner.
ERC20Interface = IERC20(token);
ERC20Interface.safeTransferFrom(allower, receiver, amount);
return true;
}
function _payDirect(
address to,
uint256 amount,
address token
) private returns (bool) {
require(
token == tokenAddress || token == rewardTokenAddress,
"Invalid token address"
);
ERC20Interface = IERC20(token);
ERC20Interface.safeTransfer(to, amount);
return true;
}
modifier _hasAllowance(
address allower,
uint256 amount,
address token
) {
// Make sure the allower has provided the right allowance.
require(
token == tokenAddress || token == rewardTokenAddress,
"Invalid token address"
);
ERC20Interface = IERC20(token);
uint256 ourAllowance = ERC20Interface.allowance(allower, address(this));
require(amount <= ourAllowance, "Make sure to add enough allowance");
_;
}
}{
"optimizer": {
"enabled": true,
"runs": 20000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_rewardTokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"periodCounter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"NewPeriodSet","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":"token","type":"address"},{"indexed":true,"internalType":"address","name":"rewardToken","type":"address"},{"indexed":true,"internalType":"address","name":"staker_","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount_","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward_","type":"uint256"}],"name":"PaidOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"periodCounter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewards","type":"uint256"}],"name":"PeriodExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"staker_","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakedAmount_","type":"uint256"}],"name":"Staked","type":"event"},{"inputs":[],"name":"ERC20Interface","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_PER_HOUR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"calculate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOldRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"endAccShare","outputs":[{"internalType":"uint256","name":"periodCounter","type":"uint256"},{"internalType":"uint256","name":"accShare","type":"uint256"},{"internalType":"uint256","name":"rewPerSecond","type":"uint256"},{"internalType":"uint256","name":"startingDate","type":"uint256"},{"internalType":"uint256","name":"endingDate","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endingDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardsToBeAdded","type":"uint256"}],"name":"extendCurrentPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"fetchUserShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasStaked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPaid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPeriodStartedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renew","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardAmount","type":"uint256"},{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"},{"internalType":"uint256","name":"_lockDuration","type":"uint256"}],"name":"resetAndsetStartEndBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakedTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalParticipants","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReward","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":"address","name":"from","type":"address"}],"name":"userDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"viewOldRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162003318380380620033188339810160408190526200003491620001a1565b6200003f3362000134565b6001600160a01b038216620000905760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b60448201526064015b60405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116620001005760405162461bcd60e51b815260206004820152601960248201527f5a65726f2072657761726420746f6b656e206164647265737300000000000000604482015260640162000087565b600280546001600160a01b0319166001600160a01b039290921691909117905550600e805460ff19166001179055620001d9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200019c57600080fd5b919050565b60008060408385031215620001b557600080fd5b620001c08362000184565b9150620001d06020840162000184565b90509250929050565b61312f80620001e96000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80636ded82f811610145578063a694fc3a116100bd578063d66692a71161008c578063e6787b1b11610071578063e6787b1b14610519578063f2fde38b14610521578063fe1684771461053457600080fd5b8063d66692a714610508578063db2e21bc1461051157600080fd5b8063a694fc3a146104bc578063aa5c3ab4146104cf578063b187bd26146104d8578063c93c8f34146104e557600080fd5b80638da5cb5b116101145780639d76ea58116100f95780639d76ea581461048b578063a181a0ee146104ab578063a26dbf26146104b357600080fd5b80638da5cb5b146103fd5780639b3a258f1461041b57600080fd5b80636ded82f8146103b4578063715018a6146103d757806374a4f7d1146103e1578063750142e6146103f457600080fd5b80631cb95511116101d85780634206951e116101a75780634df861261161018c5780634df861261461038f57806350003ca6146103985780635b9f0016146103ab57600080fd5b80634206951e146103695780634373efa41461037c57600080fd5b80631cb955111461033c5780632e1a7d4d14610345578063372500ab146103585780633e3ff7b61461036057600080fd5b80630d932e70116102145780630d932e70146102a7578063125f9e33146102bf5780631a6f11c0146103045780631bbc4b831461031757600080fd5b80630214d56a146102465780630455444314610262578063096cf03f1461026b5780630ba36dcd14610274575b600080fd5b61024f600b5481565b6040519081526020015b60405180910390f35b61024f600d5481565b61024f600a5481565b610287610282366004612f2e565b61053d565b604080519485526020850193909352918301526060820152608001610259565b6102af6105c9565b6040519015158152602001610259565b6002546102df9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610259565b6102af610312366004612f64565b610753565b600e546102df90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61024f60085481565b6102af610353366004612f64565b610972565b6102af610b7e565b61024f60075481565b6102af610377366004612f7d565b610be0565b61024f61038a366004612f2e565b610e55565b61024f610e1081565b61024f6103a6366004612f2e565b611080565b61024f60045481565b6102af6103c2366004612f2e565b60106020526000908152604090205460ff1681565b6103df6110a0565b005b61024f6103ef366004612f2e565b611113565b61024f60065481565b60005473ffffffffffffffffffffffffffffffffffffffff166102df565b61045e610429366004612f64565b601260205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610259565b6001546102df9073ffffffffffffffffffffffffffffffffffffffff1681565b61024f6112b2565b61024f600c5481565b6102af6104ca366004612f64565b6112f5565b61024f60055481565b600e546102af9060ff1681565b6102af6104f3366004612f2e565b60116020526000908152604090205460ff1681565b61024f60035481565b6102af611588565b6102af6116f1565b6103df61052f366004612f2e565b611a40565b61024f60095481565b73ffffffffffffffffffffffffffffffffffffffff811660009081526011602052604081205481908190819060ff16156105b55750505073ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020526040902080546001820154600283015460049093015491935091906105c2565b5060009250829150819050805b9193509193565b600e5460009060ff16156106245760405162461bcd60e51b815260206004820152600f60248201527f436f6e747261637420706175736564000000000000000000000000000000000060448201526064015b60405180910390fd5b3360009081526011602052604090205460ff166106835760405162461bcd60e51b815260206004820152601f60248201527f4e6f207374616b696e677320666f756e642c20706c65617365207374616b6500604482015260640161061b565b600954336000908152600f602052604090206004015414156106e75760405162461bcd60e51b815260206004820152600f60248201527f416c72656164792072656e657765640000000000000000000000000000000000604482015260640161061b565b600754421180156106f9575060085442105b6107455760405162461bcd60e51b815260206004820152600a60248201527f57726f6e672074696d6500000000000000000000000000000000000000000000604482015260640161061b565b61074e33611b3c565b905090565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146107bb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b600754421180156107cd575060085442105b6108195760405162461bcd60e51b815260206004820152601560248201527f4e6f2061637469766520706f6f6c202874696d65290000000000000000000000604482015260640161061b565b600082116108695760405162461bcd60e51b815260206004820152600c60248201527f5a65726f20726577617264730000000000000000000000000000000000000000604482015260640161061b565b600254600090610892903390859073ffffffffffffffffffffffffffffffffffffffff16611c20565b9050806108e15760405162461bcd60e51b815260206004820152601460248201527f4572726f7220616464696e672072657761726473000000000000000000000000604482015260640161061b565b6108ff6108f66108ef6112b2565b8590611c36565b60085490611c93565b60085560065461090f9084611c93565b60065560055461091f9084611c93565b60055560095460085460408051928352602083019190915281018490527fe8be1615e377de21e764a1a5ee455b65842c637268d3db944aeb380fbf7c9dd99060600160405180910390a150600192915050565b60006109a761098e610e10600d54611cf990919063ffffffff16565b336000908152600f602052604090206001015490611c93565b4211610a1b5760405162461bcd60e51b815260206004820152602360248201527f43616e2774207769746864726177206265666f7265206c6f636b20647572617460448201527f696f6e0000000000000000000000000000000000000000000000000000000000606482015260840161061b565b336000908152600f6020526040902054821115610a7a5760405162461bcd60e51b815260206004820152600b60248201527f57726f6e672076616c7565000000000000000000000000000000000000000000604482015260640161061b565b600954336000908152600f60205260409020600401541415610b02576000610aa133611080565b1115610b02576000610ab1610b7e565b905080610b005760405162461bcd60e51b815260206004820152601460248201527f4572726f7220706179696e672072657761726473000000000000000000000000604482015260640161061b565b505b6000610b0d33610e55565b1115610b6e576000610b1d6116f1565b905080610b6c5760405162461bcd60e51b815260206004820152601860248201527f4572726f7220706179696e67206f6c6420726577617264730000000000000000604482015260640161061b565b505b610b783383611d94565b92915050565b600080610b8a33611113565b11610bd75760405162461bcd60e51b815260206004820152601860248201527f4e6f207374616b657320666f756e6420666f7220757365720000000000000000604482015260640161061b565b61074e33611fbd565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610c485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b428411610cbd5760405162461bcd60e51b815260206004820152602960248201527f53746172742073686f756c64206265206d6f7265207468616e20626c6f636b2e60448201527f74696d657374616d700000000000000000000000000000000000000000000000606482015260840161061b565b838311610d325760405162461bcd60e51b815260206004820152602660248201527f456e6420626c6f636b2073686f756c642062652067726561746572207468616e60448201527f2073746172740000000000000000000000000000000000000000000000000000606482015260840161061b565b60008511610d825760405162461bcd60e51b815260206004820152601760248201527f526577617264206d75737420626520706f736974697665000000000000000000604482015260640161061b565b610d8a61223d565b6000610d958661235d565b905080610de45760405162461bcd60e51b815260206004820152600d60248201527f52657761726473206572726f7200000000000000000000000000000000000000604482015260640161061b565b610dee85856125b1565b600d8390556000600c556009546040805191825260208201879052810185905260608101849052608081018790527fc337ef8990512c5ba83d668712c84345b9b984e6eed2378c19bcf7b61f02073f9060a00160405180910390a150600195945050505050565b600e5460009060ff1615610eab5760405162461bcd60e51b815260206004820152600f60248201527f436f6e7472616374207061757365640000000000000000000000000000000000604482015260640161061b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526011602052604090205460ff16610f205760405162461bcd60e51b815260206004820152601f60248201527f4e6f207374616b696e677320666f756e642c20706c65617365207374616b6500604482015260640161061b565b60095473ffffffffffffffffffffffffffffffffffffffff83166000908152600f60205260409020600401541415610f5a57506000919050565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600f60208181526040808420600480820154808752601285529286206001810154600384015491909201549790965293909252600290910154909391929111610fc457506000949350505050565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600f602052604081205490611002620f4240610ffc8486611cf9565b90611c36565b905060006110218261101b620f4240610ffc878a611cf9565b90612676565b90506005548111156110755760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820726577617264730000000000000000000000000000604482015260640161061b565b979650505050505050565b600061108b82611113565b61109757506000919050565b610b78826126d4565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b61111160006127f5565b565b73ffffffffffffffffffffffffffffffffffffffff811660009081526011602052604081205460ff166111885760405162461bcd60e51b815260206004820152601860248201527f4e6f207374616b657320666f756e6420666f7220757365720000000000000000604482015260640161061b565b60045461119757506000919050565b60095473ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040902060040154146112365760405162461bcd60e51b815260206004820152602e60248201527f506c656173652072656e657720696e20746865206163746976652076616c696460448201527f20706572696f64436f756e746572000000000000000000000000000000000000606482015260840161061b565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020526040902054806112a95760405162461bcd60e51b815260206004820152601c60248201527f4e6f207374616b657320617661696c61626c6520666f72207573657200000000604482015260640161061b565b50600192915050565b6000600654600014806112c55750600554155b156112d05750600090565b6000610b786112ec60075460085461267690919063ffffffff16565b60065490611c36565b6001546000903390839073ffffffffffffffffffffffffffffffffffffffff16600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff848116820292909217928390556040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081528683166004820152306024820152600093919091049091169063dd62ed3e9060440160206040518083038186803b1580156113c057600080fd5b505afa1580156113d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f89190612faf565b9050808311156114705760405162461bcd60e51b815260206004820152602160248201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e6360448201527f6500000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b600e5460ff16156114c35760405162461bcd60e51b815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015260640161061b565b60075442101580156114d6575060085442105b6115225760405162461bcd60e51b815260206004820152601560248201527f4e6f2061637469766520706f6f6c202874696d65290000000000000000000000604482015260640161061b565b600086116115725760405162461bcd60e51b815260206004820152601460248201527f43616e2774207374616b65203020616d6f756e74000000000000000000000000604482015260640161061b565b61157c338761286a565b94505b50505050919050565b60006115a461098e610e10600d54611cf990919063ffffffff16565b42116116185760405162461bcd60e51b815260206004820152602360248201527f43616e2774207769746864726177206265666f7265206c6f636b20647572617460448201527f696f6e0000000000000000000000000000000000000000000000000000000000606482015260840161061b565b3360009081526011602052604090205460ff166116775760405162461bcd60e51b815260206004820152601c60248201527f4e6f207374616b657320617661696c61626c6520666f72207573657200000000604482015260640161061b565b3360009081526010602052604090205460ff16156116d75760405162461bcd60e51b815260206004820152600c60248201527f416c726561647920506169640000000000000000000000000000000000000000604482015260640161061b565b336000818152600f602052604090205461074e9190611d94565b600e5460009060ff16156117475760405162461bcd60e51b815260206004820152600f60248201527f436f6e7472616374207061757365640000000000000000000000000000000000604482015260640161061b565b3360009081526011602052604090205460ff166117a65760405162461bcd60e51b815260206004820152601f60248201527f4e6f207374616b696e677320666f756e642c20706c65617365207374616b6500604482015260640161061b565b600954336000908152600f6020526040902060040154141561180a5760405162461bcd60e51b815260206004820152600f60248201527f416c72656164792072656e657765640000000000000000000000000000000000604482015260640161061b565b336000818152600f6020818152604080842060048082015480875260128552928620600181015460038401549190920154979096529390925260029091015490939192911161189b5760405162461bcd60e51b815260206004820152601b60248201527f416c726561647920636c61696d6564206f6c6420726577617264730000000000604482015260640161061b565b336000908152600f6020526040812054906118bd620f4240610ffc8486611cf9565b905060006118d68261101b620f4240610ffc878a611cf9565b905060055481111561192a5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820726577617264730000000000000000000000000000604482015260640161061b565b600086815260126020908152604080832060040154338452600f9092529091206002015560055461195b9082612676565b600555600254600090611987903390849073ffffffffffffffffffffffffffffffffffffffff16612bc7565b9050806119d65760405162461bcd60e51b815260206004820152600c60248201527f4572726f7220706179696e670000000000000000000000000000000000000000604482015260640161061b565b6002546001546040805187815260208101869052339373ffffffffffffffffffffffffffffffffffffffff9081169316917f0fd12da3890315fa38b862dc2fff7f24c95981f6508cc2be090640de791b671e910160405180910390a4600197505050505050505090565b60005473ffffffffffffffffffffffffffffffffffffffff163314611aa75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b73ffffffffffffffffffffffffffffffffffffffff8116611b305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161061b565b611b39816127f5565b50565b6000611b46612cb1565b6000611b5183610e55565b1115611bb2576000611b616116f1565b905080611bb05760405162461bcd60e51b815260206004820152601860248201527f4572726f7220706179696e67206f6c6420726577617264730000000000000000604482015260640161061b565b505b60095473ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040902060048082019290925542600182018190556002820155600a546003820155549054611c0491611c93565b600455600c54611c15906001611c93565b600c55506001919050565b6000611c2e84308585612d50565b949350505050565b6000808211611c875760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161061b565b6000611c2e8385612ff7565b600080611ca08385613032565b905083811015611cf25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161061b565b9392505050565b600082611d0857506000610b78565b6000611d14838561304a565b905082611d218583612ff7565b14611cf25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b6000611d9e612cb1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040902054611dce9083612676565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f6020526040902055600e5460ff16158015611e30575060095473ffffffffffffffffffffffffffffffffffffffff84166000908152600f6020526040902060040154145b15611e4657600454611e429083612676565b6004555b600154600090611e6f908590859073ffffffffffffffffffffffffffffffffffffffff16612bc7565b905080611ebe5760405162461bcd60e51b815260206004820152601560248201527f4572726f7220647572696e672077697468647261770000000000000000000000604482015260640161061b565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f6020526040902054611fb35773ffffffffffffffffffffffffffffffffffffffff8416600090815260106020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009081166001179091556011835281842080549091169055600954600f909252909120600401541415611f7157600c54611f6d906001612676565b600c555b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f60205260408120818155600181018290556002810182905560038101829055600401555b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020526040812060030154611fee612cb1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604081205490612026620f4240610ffc8486611cf9565b9050600061204a8261101b620f4240610ffc600a5488611cf990919063ffffffff16565b90506000811161209c5760405162461bcd60e51b815260206004820152601460248201527f4e6f20726577617264732067656e657261746564000000000000000000000000604482015260640161061b565b6005548111156121145760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f756768207265776172647320696e2074686520636f6e74726160448201527f6374000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b600a5473ffffffffffffffffffffffffffffffffffffffff87166000908152600f602052604090206003810191909155426002909101556005546121589082612676565b600555600254600090612184908890849073ffffffffffffffffffffffffffffffffffffffff16612bc7565b9050806121d35760405162461bcd60e51b815260206004820152601760248201527f52657761726473207472616e73666572206661696c6564000000000000000000604482015260640161061b565b600254600154604080518781526020810186905273ffffffffffffffffffffffffffffffffffffffff8b81169481169316917f0fd12da3890315fa38b862dc2fff7f24c95981f6508cc2be090640de791b671e910160405180910390a45060019695505050505050565b600854421161228e5760405162461bcd60e51b815260206004820152601c60248201527f576169742074696c6c20656e64206f66207468697320706572696f6400000000604482015260640161061b565b612296612cb1565b6040518060c001604052806009548152602001600a5481526020016122b96112b2565b8152600754602080830191909152600854604080840191909152600580546060948501526009546000908152601284528281208651815593860151600180860191909155928601516002850155938501516003840155608085015160048085019190915560a09095015192019190915560068290559155600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b6002546001546000913391849173ffffffffffffffffffffffffffffffffffffffff90811691168114806123ab575060025473ffffffffffffffffffffffffffffffffffffffff8281169116145b6123f75760405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e20616464726573730000000000000000000000604482015260640161061b565b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff848116820292909217928390556040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081528683166004820152306024820152600093919091049091169063dd62ed3e9060440160206040518083038186803b1580156124a257600080fd5b505afa1580156124b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124da9190612faf565b9050808311156125525760405162461bcd60e51b815260206004820152602160248201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e6360448201527f6500000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b60065461255f9087611c93565b60065560055461256f9087611c93565b600555600254612598903390889073ffffffffffffffffffffffffffffffffffffffff16611c20565b6125a5576000945061157f565b50600195945050505050565b6000600654116126295760405162461bcd60e51b815260206004820152602260248201527f416464207265776172647320666f72207468697320706572696f64436f756e7460448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b600782905560088190556009805490600061264383613087565b9091555050600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550600b55565b6000828211156126c85760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015260640161061b565b6000611c2e83856130c0565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020526040812060030154600a54600b544211612713575060009392505050565b600454612724575060009392505050565b6000600854421061274557600b5460085461273e91612676565b9050612756565b600b54612753904290612676565b90505b600061276a6127636112b2565b8390611cf9565b9050600061279461278d600454610ffc620f424086611cf990919063ffffffff16565b8590611c93565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600f60205260408120549192506127ce620f4240610ffc848a611cf9565b905060006127e78261101b620f4240610ffc8789611cf9565b9a9950505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000612874612cb1565b73ffffffffffffffffffffffffffffffffffffffff831660009081526011602052604090205460ff1661297b576040805160a081018252838152426020808301828152838501928352600a54606085019081526009546080860190815273ffffffffffffffffffffffffffffffffffffffff8a166000908152600f909452959092209351845551600180850191909155915160028401555160038301559151600490910155600c5461292591611c93565b600c5573ffffffffffffffffffffffffffffffffffffffff8316600090815260116020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055612b1b565b60095473ffffffffffffffffffffffffffffffffffffffff84166000908152600f602052604090206004015414612a0c5760006129b784611b3c565b905080612a065760405162461bcd60e51b815260206004820152600e60248201527f4572726f722072656e6577696e67000000000000000000000000000000000000604482015260640161061b565b50612a68565b6000612a1784611fbd565b905080612a665760405162461bcd60e51b815260206004820152601460248201527f4572726f7220706179696e672072657761726473000000000000000000000000604482015260640161061b565b505b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f60205260409081902054815160a081019092529080612aa58386611c93565b8152426020808301829052604080840192909252600a5460608085019190915260095460809485015273ffffffffffffffffffffffffffffffffffffffff89166000908152600f835283902085518155918501516001830155918401516002820155908301516003820155910151600490910155505b600454612b289083611c93565b600455600354612b389083611c93565b600355600154612b61908490849073ffffffffffffffffffffffffffffffffffffffff16611c20565b612b6d57506000610b78565b60015460405183815273ffffffffffffffffffffffffffffffffffffffff8581169216907f5dac0c1b1112564a045ba943c9d50270893e8e826c49be8e7073adc713ab7bd79060200160405180910390a350600192915050565b60015460009073ffffffffffffffffffffffffffffffffffffffff83811691161480612c0d575060025473ffffffffffffffffffffffffffffffffffffffff8381169116145b612c595760405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e20616464726573730000000000000000000000604482015260640161061b565b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff85811682029290921792839055611fb39204168585612db9565b600b544211612cbc57565b600454612cc95742600b55565b60006008544210612cea57600b54600854612ce391612676565b9050612cfb565b600b54612cf8904290612676565b90505b6000612d086127636112b2565b9050612d32612d29600454610ffc620f424085611cf990919063ffffffff16565b600a5490611c93565b600a556008544210612d4857600854600b555050565b42600b555050565b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff84811682029290921792839055600092612dae9291900416868686612e6f565b506001949350505050565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015612e2957600080fd5b505af1158015612e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6191906130d7565b612e6a57600080fd5b505050565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390528516906323b872dd90606401602060405180830381600087803b158015612ee757600080fd5b505af1158015612efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1f91906130d7565b612f2857600080fd5b50505050565b600060208284031215612f4057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114611cf257600080fd5b600060208284031215612f7657600080fd5b5035919050565b60008060008060808587031215612f9357600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612fc157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008261302d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000821982111561304557613045612fc8565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561308257613082612fc8565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130b9576130b9612fc8565b5060010190565b6000828210156130d2576130d2612fc8565b500390565b6000602082840312156130e957600080fd5b81518015158114611cf257600080fdfea2646970667358221220b387a5e97b894af99c9d48fa4bc3be27f0a7ebcd7934b674397e3101873b0f7064736f6c63430008090033000000000000000000000000619391ba76b316fc56bc50388b90d9c8f24fcfe7000000000000000000000000126e4dcd47c00054f367345202de31db570fe2a7
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102415760003560e01c80636ded82f811610145578063a694fc3a116100bd578063d66692a71161008c578063e6787b1b11610071578063e6787b1b14610519578063f2fde38b14610521578063fe1684771461053457600080fd5b8063d66692a714610508578063db2e21bc1461051157600080fd5b8063a694fc3a146104bc578063aa5c3ab4146104cf578063b187bd26146104d8578063c93c8f34146104e557600080fd5b80638da5cb5b116101145780639d76ea58116100f95780639d76ea581461048b578063a181a0ee146104ab578063a26dbf26146104b357600080fd5b80638da5cb5b146103fd5780639b3a258f1461041b57600080fd5b80636ded82f8146103b4578063715018a6146103d757806374a4f7d1146103e1578063750142e6146103f457600080fd5b80631cb95511116101d85780634206951e116101a75780634df861261161018c5780634df861261461038f57806350003ca6146103985780635b9f0016146103ab57600080fd5b80634206951e146103695780634373efa41461037c57600080fd5b80631cb955111461033c5780632e1a7d4d14610345578063372500ab146103585780633e3ff7b61461036057600080fd5b80630d932e70116102145780630d932e70146102a7578063125f9e33146102bf5780631a6f11c0146103045780631bbc4b831461031757600080fd5b80630214d56a146102465780630455444314610262578063096cf03f1461026b5780630ba36dcd14610274575b600080fd5b61024f600b5481565b6040519081526020015b60405180910390f35b61024f600d5481565b61024f600a5481565b610287610282366004612f2e565b61053d565b604080519485526020850193909352918301526060820152608001610259565b6102af6105c9565b6040519015158152602001610259565b6002546102df9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610259565b6102af610312366004612f64565b610753565b600e546102df90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61024f60085481565b6102af610353366004612f64565b610972565b6102af610b7e565b61024f60075481565b6102af610377366004612f7d565b610be0565b61024f61038a366004612f2e565b610e55565b61024f610e1081565b61024f6103a6366004612f2e565b611080565b61024f60045481565b6102af6103c2366004612f2e565b60106020526000908152604090205460ff1681565b6103df6110a0565b005b61024f6103ef366004612f2e565b611113565b61024f60065481565b60005473ffffffffffffffffffffffffffffffffffffffff166102df565b61045e610429366004612f64565b601260205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610259565b6001546102df9073ffffffffffffffffffffffffffffffffffffffff1681565b61024f6112b2565b61024f600c5481565b6102af6104ca366004612f64565b6112f5565b61024f60055481565b600e546102af9060ff1681565b6102af6104f3366004612f2e565b60116020526000908152604090205460ff1681565b61024f60035481565b6102af611588565b6102af6116f1565b6103df61052f366004612f2e565b611a40565b61024f60095481565b73ffffffffffffffffffffffffffffffffffffffff811660009081526011602052604081205481908190819060ff16156105b55750505073ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020526040902080546001820154600283015460049093015491935091906105c2565b5060009250829150819050805b9193509193565b600e5460009060ff16156106245760405162461bcd60e51b815260206004820152600f60248201527f436f6e747261637420706175736564000000000000000000000000000000000060448201526064015b60405180910390fd5b3360009081526011602052604090205460ff166106835760405162461bcd60e51b815260206004820152601f60248201527f4e6f207374616b696e677320666f756e642c20706c65617365207374616b6500604482015260640161061b565b600954336000908152600f602052604090206004015414156106e75760405162461bcd60e51b815260206004820152600f60248201527f416c72656164792072656e657765640000000000000000000000000000000000604482015260640161061b565b600754421180156106f9575060085442105b6107455760405162461bcd60e51b815260206004820152600a60248201527f57726f6e672074696d6500000000000000000000000000000000000000000000604482015260640161061b565b61074e33611b3c565b905090565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146107bb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b600754421180156107cd575060085442105b6108195760405162461bcd60e51b815260206004820152601560248201527f4e6f2061637469766520706f6f6c202874696d65290000000000000000000000604482015260640161061b565b600082116108695760405162461bcd60e51b815260206004820152600c60248201527f5a65726f20726577617264730000000000000000000000000000000000000000604482015260640161061b565b600254600090610892903390859073ffffffffffffffffffffffffffffffffffffffff16611c20565b9050806108e15760405162461bcd60e51b815260206004820152601460248201527f4572726f7220616464696e672072657761726473000000000000000000000000604482015260640161061b565b6108ff6108f66108ef6112b2565b8590611c36565b60085490611c93565b60085560065461090f9084611c93565b60065560055461091f9084611c93565b60055560095460085460408051928352602083019190915281018490527fe8be1615e377de21e764a1a5ee455b65842c637268d3db944aeb380fbf7c9dd99060600160405180910390a150600192915050565b60006109a761098e610e10600d54611cf990919063ffffffff16565b336000908152600f602052604090206001015490611c93565b4211610a1b5760405162461bcd60e51b815260206004820152602360248201527f43616e2774207769746864726177206265666f7265206c6f636b20647572617460448201527f696f6e0000000000000000000000000000000000000000000000000000000000606482015260840161061b565b336000908152600f6020526040902054821115610a7a5760405162461bcd60e51b815260206004820152600b60248201527f57726f6e672076616c7565000000000000000000000000000000000000000000604482015260640161061b565b600954336000908152600f60205260409020600401541415610b02576000610aa133611080565b1115610b02576000610ab1610b7e565b905080610b005760405162461bcd60e51b815260206004820152601460248201527f4572726f7220706179696e672072657761726473000000000000000000000000604482015260640161061b565b505b6000610b0d33610e55565b1115610b6e576000610b1d6116f1565b905080610b6c5760405162461bcd60e51b815260206004820152601860248201527f4572726f7220706179696e67206f6c6420726577617264730000000000000000604482015260640161061b565b505b610b783383611d94565b92915050565b600080610b8a33611113565b11610bd75760405162461bcd60e51b815260206004820152601860248201527f4e6f207374616b657320666f756e6420666f7220757365720000000000000000604482015260640161061b565b61074e33611fbd565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610c485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b428411610cbd5760405162461bcd60e51b815260206004820152602960248201527f53746172742073686f756c64206265206d6f7265207468616e20626c6f636b2e60448201527f74696d657374616d700000000000000000000000000000000000000000000000606482015260840161061b565b838311610d325760405162461bcd60e51b815260206004820152602660248201527f456e6420626c6f636b2073686f756c642062652067726561746572207468616e60448201527f2073746172740000000000000000000000000000000000000000000000000000606482015260840161061b565b60008511610d825760405162461bcd60e51b815260206004820152601760248201527f526577617264206d75737420626520706f736974697665000000000000000000604482015260640161061b565b610d8a61223d565b6000610d958661235d565b905080610de45760405162461bcd60e51b815260206004820152600d60248201527f52657761726473206572726f7200000000000000000000000000000000000000604482015260640161061b565b610dee85856125b1565b600d8390556000600c556009546040805191825260208201879052810185905260608101849052608081018790527fc337ef8990512c5ba83d668712c84345b9b984e6eed2378c19bcf7b61f02073f9060a00160405180910390a150600195945050505050565b600e5460009060ff1615610eab5760405162461bcd60e51b815260206004820152600f60248201527f436f6e7472616374207061757365640000000000000000000000000000000000604482015260640161061b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526011602052604090205460ff16610f205760405162461bcd60e51b815260206004820152601f60248201527f4e6f207374616b696e677320666f756e642c20706c65617365207374616b6500604482015260640161061b565b60095473ffffffffffffffffffffffffffffffffffffffff83166000908152600f60205260409020600401541415610f5a57506000919050565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600f60208181526040808420600480820154808752601285529286206001810154600384015491909201549790965293909252600290910154909391929111610fc457506000949350505050565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600f602052604081205490611002620f4240610ffc8486611cf9565b90611c36565b905060006110218261101b620f4240610ffc878a611cf9565b90612676565b90506005548111156110755760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820726577617264730000000000000000000000000000604482015260640161061b565b979650505050505050565b600061108b82611113565b61109757506000919050565b610b78826126d4565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b61111160006127f5565b565b73ffffffffffffffffffffffffffffffffffffffff811660009081526011602052604081205460ff166111885760405162461bcd60e51b815260206004820152601860248201527f4e6f207374616b657320666f756e6420666f7220757365720000000000000000604482015260640161061b565b60045461119757506000919050565b60095473ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040902060040154146112365760405162461bcd60e51b815260206004820152602e60248201527f506c656173652072656e657720696e20746865206163746976652076616c696460448201527f20706572696f64436f756e746572000000000000000000000000000000000000606482015260840161061b565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020526040902054806112a95760405162461bcd60e51b815260206004820152601c60248201527f4e6f207374616b657320617661696c61626c6520666f72207573657200000000604482015260640161061b565b50600192915050565b6000600654600014806112c55750600554155b156112d05750600090565b6000610b786112ec60075460085461267690919063ffffffff16565b60065490611c36565b6001546000903390839073ffffffffffffffffffffffffffffffffffffffff16600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff848116820292909217928390556040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081528683166004820152306024820152600093919091049091169063dd62ed3e9060440160206040518083038186803b1580156113c057600080fd5b505afa1580156113d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f89190612faf565b9050808311156114705760405162461bcd60e51b815260206004820152602160248201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e6360448201527f6500000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b600e5460ff16156114c35760405162461bcd60e51b815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015260640161061b565b60075442101580156114d6575060085442105b6115225760405162461bcd60e51b815260206004820152601560248201527f4e6f2061637469766520706f6f6c202874696d65290000000000000000000000604482015260640161061b565b600086116115725760405162461bcd60e51b815260206004820152601460248201527f43616e2774207374616b65203020616d6f756e74000000000000000000000000604482015260640161061b565b61157c338761286a565b94505b50505050919050565b60006115a461098e610e10600d54611cf990919063ffffffff16565b42116116185760405162461bcd60e51b815260206004820152602360248201527f43616e2774207769746864726177206265666f7265206c6f636b20647572617460448201527f696f6e0000000000000000000000000000000000000000000000000000000000606482015260840161061b565b3360009081526011602052604090205460ff166116775760405162461bcd60e51b815260206004820152601c60248201527f4e6f207374616b657320617661696c61626c6520666f72207573657200000000604482015260640161061b565b3360009081526010602052604090205460ff16156116d75760405162461bcd60e51b815260206004820152600c60248201527f416c726561647920506169640000000000000000000000000000000000000000604482015260640161061b565b336000818152600f602052604090205461074e9190611d94565b600e5460009060ff16156117475760405162461bcd60e51b815260206004820152600f60248201527f436f6e7472616374207061757365640000000000000000000000000000000000604482015260640161061b565b3360009081526011602052604090205460ff166117a65760405162461bcd60e51b815260206004820152601f60248201527f4e6f207374616b696e677320666f756e642c20706c65617365207374616b6500604482015260640161061b565b600954336000908152600f6020526040902060040154141561180a5760405162461bcd60e51b815260206004820152600f60248201527f416c72656164792072656e657765640000000000000000000000000000000000604482015260640161061b565b336000818152600f6020818152604080842060048082015480875260128552928620600181015460038401549190920154979096529390925260029091015490939192911161189b5760405162461bcd60e51b815260206004820152601b60248201527f416c726561647920636c61696d6564206f6c6420726577617264730000000000604482015260640161061b565b336000908152600f6020526040812054906118bd620f4240610ffc8486611cf9565b905060006118d68261101b620f4240610ffc878a611cf9565b905060055481111561192a5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820726577617264730000000000000000000000000000604482015260640161061b565b600086815260126020908152604080832060040154338452600f9092529091206002015560055461195b9082612676565b600555600254600090611987903390849073ffffffffffffffffffffffffffffffffffffffff16612bc7565b9050806119d65760405162461bcd60e51b815260206004820152600c60248201527f4572726f7220706179696e670000000000000000000000000000000000000000604482015260640161061b565b6002546001546040805187815260208101869052339373ffffffffffffffffffffffffffffffffffffffff9081169316917f0fd12da3890315fa38b862dc2fff7f24c95981f6508cc2be090640de791b671e910160405180910390a4600197505050505050505090565b60005473ffffffffffffffffffffffffffffffffffffffff163314611aa75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b73ffffffffffffffffffffffffffffffffffffffff8116611b305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161061b565b611b39816127f5565b50565b6000611b46612cb1565b6000611b5183610e55565b1115611bb2576000611b616116f1565b905080611bb05760405162461bcd60e51b815260206004820152601860248201527f4572726f7220706179696e67206f6c6420726577617264730000000000000000604482015260640161061b565b505b60095473ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040902060048082019290925542600182018190556002820155600a546003820155549054611c0491611c93565b600455600c54611c15906001611c93565b600c55506001919050565b6000611c2e84308585612d50565b949350505050565b6000808211611c875760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161061b565b6000611c2e8385612ff7565b600080611ca08385613032565b905083811015611cf25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161061b565b9392505050565b600082611d0857506000610b78565b6000611d14838561304a565b905082611d218583612ff7565b14611cf25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b6000611d9e612cb1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040902054611dce9083612676565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f6020526040902055600e5460ff16158015611e30575060095473ffffffffffffffffffffffffffffffffffffffff84166000908152600f6020526040902060040154145b15611e4657600454611e429083612676565b6004555b600154600090611e6f908590859073ffffffffffffffffffffffffffffffffffffffff16612bc7565b905080611ebe5760405162461bcd60e51b815260206004820152601560248201527f4572726f7220647572696e672077697468647261770000000000000000000000604482015260640161061b565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f6020526040902054611fb35773ffffffffffffffffffffffffffffffffffffffff8416600090815260106020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009081166001179091556011835281842080549091169055600954600f909252909120600401541415611f7157600c54611f6d906001612676565b600c555b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f60205260408120818155600181018290556002810182905560038101829055600401555b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020526040812060030154611fee612cb1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604081205490612026620f4240610ffc8486611cf9565b9050600061204a8261101b620f4240610ffc600a5488611cf990919063ffffffff16565b90506000811161209c5760405162461bcd60e51b815260206004820152601460248201527f4e6f20726577617264732067656e657261746564000000000000000000000000604482015260640161061b565b6005548111156121145760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f756768207265776172647320696e2074686520636f6e74726160448201527f6374000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b600a5473ffffffffffffffffffffffffffffffffffffffff87166000908152600f602052604090206003810191909155426002909101556005546121589082612676565b600555600254600090612184908890849073ffffffffffffffffffffffffffffffffffffffff16612bc7565b9050806121d35760405162461bcd60e51b815260206004820152601760248201527f52657761726473207472616e73666572206661696c6564000000000000000000604482015260640161061b565b600254600154604080518781526020810186905273ffffffffffffffffffffffffffffffffffffffff8b81169481169316917f0fd12da3890315fa38b862dc2fff7f24c95981f6508cc2be090640de791b671e910160405180910390a45060019695505050505050565b600854421161228e5760405162461bcd60e51b815260206004820152601c60248201527f576169742074696c6c20656e64206f66207468697320706572696f6400000000604482015260640161061b565b612296612cb1565b6040518060c001604052806009548152602001600a5481526020016122b96112b2565b8152600754602080830191909152600854604080840191909152600580546060948501526009546000908152601284528281208651815593860151600180860191909155928601516002850155938501516003840155608085015160048085019190915560a09095015192019190915560068290559155600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b6002546001546000913391849173ffffffffffffffffffffffffffffffffffffffff90811691168114806123ab575060025473ffffffffffffffffffffffffffffffffffffffff8281169116145b6123f75760405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e20616464726573730000000000000000000000604482015260640161061b565b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff848116820292909217928390556040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081528683166004820152306024820152600093919091049091169063dd62ed3e9060440160206040518083038186803b1580156124a257600080fd5b505afa1580156124b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124da9190612faf565b9050808311156125525760405162461bcd60e51b815260206004820152602160248201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e6360448201527f6500000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b60065461255f9087611c93565b60065560055461256f9087611c93565b600555600254612598903390889073ffffffffffffffffffffffffffffffffffffffff16611c20565b6125a5576000945061157f565b50600195945050505050565b6000600654116126295760405162461bcd60e51b815260206004820152602260248201527f416464207265776172647320666f72207468697320706572696f64436f756e7460448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b600782905560088190556009805490600061264383613087565b9091555050600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550600b55565b6000828211156126c85760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015260640161061b565b6000611c2e83856130c0565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020526040812060030154600a54600b544211612713575060009392505050565b600454612724575060009392505050565b6000600854421061274557600b5460085461273e91612676565b9050612756565b600b54612753904290612676565b90505b600061276a6127636112b2565b8390611cf9565b9050600061279461278d600454610ffc620f424086611cf990919063ffffffff16565b8590611c93565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600f60205260408120549192506127ce620f4240610ffc848a611cf9565b905060006127e78261101b620f4240610ffc8789611cf9565b9a9950505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000612874612cb1565b73ffffffffffffffffffffffffffffffffffffffff831660009081526011602052604090205460ff1661297b576040805160a081018252838152426020808301828152838501928352600a54606085019081526009546080860190815273ffffffffffffffffffffffffffffffffffffffff8a166000908152600f909452959092209351845551600180850191909155915160028401555160038301559151600490910155600c5461292591611c93565b600c5573ffffffffffffffffffffffffffffffffffffffff8316600090815260116020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055612b1b565b60095473ffffffffffffffffffffffffffffffffffffffff84166000908152600f602052604090206004015414612a0c5760006129b784611b3c565b905080612a065760405162461bcd60e51b815260206004820152600e60248201527f4572726f722072656e6577696e67000000000000000000000000000000000000604482015260640161061b565b50612a68565b6000612a1784611fbd565b905080612a665760405162461bcd60e51b815260206004820152601460248201527f4572726f7220706179696e672072657761726473000000000000000000000000604482015260640161061b565b505b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f60205260409081902054815160a081019092529080612aa58386611c93565b8152426020808301829052604080840192909252600a5460608085019190915260095460809485015273ffffffffffffffffffffffffffffffffffffffff89166000908152600f835283902085518155918501516001830155918401516002820155908301516003820155910151600490910155505b600454612b289083611c93565b600455600354612b389083611c93565b600355600154612b61908490849073ffffffffffffffffffffffffffffffffffffffff16611c20565b612b6d57506000610b78565b60015460405183815273ffffffffffffffffffffffffffffffffffffffff8581169216907f5dac0c1b1112564a045ba943c9d50270893e8e826c49be8e7073adc713ab7bd79060200160405180910390a350600192915050565b60015460009073ffffffffffffffffffffffffffffffffffffffff83811691161480612c0d575060025473ffffffffffffffffffffffffffffffffffffffff8381169116145b612c595760405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e20616464726573730000000000000000000000604482015260640161061b565b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff85811682029290921792839055611fb39204168585612db9565b600b544211612cbc57565b600454612cc95742600b55565b60006008544210612cea57600b54600854612ce391612676565b9050612cfb565b600b54612cf8904290612676565b90505b6000612d086127636112b2565b9050612d32612d29600454610ffc620f424085611cf990919063ffffffff16565b600a5490611c93565b600a556008544210612d4857600854600b555050565b42600b555050565b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff84811682029290921792839055600092612dae9291900416868686612e6f565b506001949350505050565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015612e2957600080fd5b505af1158015612e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6191906130d7565b612e6a57600080fd5b505050565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390528516906323b872dd90606401602060405180830381600087803b158015612ee757600080fd5b505af1158015612efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1f91906130d7565b612f2857600080fd5b50505050565b600060208284031215612f4057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114611cf257600080fd5b600060208284031215612f7657600080fd5b5035919050565b60008060008060808587031215612f9357600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612fc157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008261302d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000821982111561304557613045612fc8565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561308257613082612fc8565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130b9576130b9612fc8565b5060010190565b6000828210156130d2576130d2612fc8565b500390565b6000602082840312156130e957600080fd5b81518015158114611cf257600080fdfea2646970667358221220b387a5e97b894af99c9d48fa4bc3be27f0a7ebcd7934b674397e3101873b0f7064736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000619391ba76b316fc56bc50388b90d9c8f24fcfe7000000000000000000000000126e4dcd47c00054f367345202de31db570fe2a7
-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x619391bA76B316Fc56BC50388b90d9c8f24fcFe7
Arg [1] : _rewardTokenAddress (address): 0x126E4dcd47c00054f367345202de31dB570Fe2a7
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000619391ba76b316fc56bc50388b90d9c8f24fcfe7
Arg [1] : 000000000000000000000000126e4dcd47c00054f367345202de31db570fe2a7
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.