Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 57 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Exit | 12076669 | 1733 days ago | IN | 0 ETH | 0.03353288 | ||||
| Exit | 12003569 | 1745 days ago | IN | 0 ETH | 0.02297074 | ||||
| Stake | 11996931 | 1746 days ago | IN | 0 ETH | 0.02012287 | ||||
| Exit | 11990877 | 1747 days ago | IN | 0 ETH | 0.0310997 | ||||
| Exit | 11985678 | 1747 days ago | IN | 0 ETH | 0.01513109 | ||||
| Exit | 11985615 | 1747 days ago | IN | 0 ETH | 0.02768894 | ||||
| Get Reward | 11984878 | 1748 days ago | IN | 0 ETH | 0.01174905 | ||||
| Withdraw | 11984182 | 1748 days ago | IN | 0 ETH | 0.00730432 | ||||
| Get Reward | 11984158 | 1748 days ago | IN | 0 ETH | 0.01329328 | ||||
| Withdraw | 11885494 | 1763 days ago | IN | 0 ETH | 0.02247002 | ||||
| Exit | 11841532 | 1770 days ago | IN | 0 ETH | 0.01973552 | ||||
| Exit | 11823345 | 1772 days ago | IN | 0 ETH | 0.06277532 | ||||
| Get Reward | 11822231 | 1773 days ago | IN | 0 ETH | 0.03690054 | ||||
| Withdraw | 11822102 | 1773 days ago | IN | 0 ETH | 0.02120033 | ||||
| Exit | 11821557 | 1773 days ago | IN | 0 ETH | 0.0434781 | ||||
| Get Reward | 11821263 | 1773 days ago | IN | 0 ETH | 0.0339417 | ||||
| Withdraw | 11821082 | 1773 days ago | IN | 0 ETH | 0.0147375 | ||||
| Withdraw | 11821062 | 1773 days ago | IN | 0 ETH | 0.01582604 | ||||
| Withdraw | 11820629 | 1773 days ago | IN | 0 ETH | 0.01683854 | ||||
| Get Reward | 11820610 | 1773 days ago | IN | 0 ETH | 0.02900521 | ||||
| Withdraw | 11807481 | 1775 days ago | IN | 0 ETH | 0.01149281 | ||||
| Get Reward | 11802837 | 1776 days ago | IN | 0 ETH | 0.02730143 | ||||
| Withdraw | 11801702 | 1776 days ago | IN | 0 ETH | 0.01761255 | ||||
| Stake | 11788242 | 1778 days ago | IN | 0 ETH | 0.0130204 | ||||
| Stake | 11787924 | 1778 days ago | IN | 0 ETH | 0.02356625 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 11696124 | 1792 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
UniswapReward
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-01-21
*/
// File: @openzeppelin/contracts/math/SafeMath.sol
pragma solidity ^0.5.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*
* _Available since v2.4.0._
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin/contracts/math/Math.sol
pragma solidity ^0.5.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a >= b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow, so we distribute
return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
}
}
// File: contracts/interface/IERC20.sol
pragma solidity ^0.5.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see {ERC20Detailed}.
*/
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);
function mint(address account, uint amount) external;
/**
* @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: contracts/interface/IPlayerBook.sol
pragma solidity ^0.5.0;
interface IPlayerBook {
function settleReward( address from,uint256 amount ) external returns (uint256);
function bindRefer( address from,string calldata affCode ) external returns (bool);
function hasRefer(address from) external returns(bool);
function addPool(address poolAddr, address rewardToken) external;
}
// File: contracts/interface/IPool.sol
pragma solidity ^0.5.0;
interface IPool {
function totalSupply( ) external view returns (uint256);
function balanceOf( address player ) external view returns (uint256);
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.5.5;
/**
* @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) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
/**
* @dev Converts an `address` into `address payable`. Note that this is
* simply a type cast: the actual underlying value is not changed.
*
* _Available since v2.4.0._
*/
function toPayable(address account) internal pure returns (address payable) {
return address(uint160(account));
}
/**
* @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].
*
* _Available since v2.4.0._
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-call-value
(bool success, ) = recipient.call.value(amount)("");
require(success, "Address: unable to send value, recipient may have reverted");
}
}
// File: contracts/library/SafeERC20.sol
pragma solidity ^0.5.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 ERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));
function safeTransfer(IERC20 token, address to, uint256 value) internal {
(bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SELECTOR, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'SafeERC20: TRANSFER_FAILED');
}
// 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));
}
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'
// solhint-disable-next-line max-line-length
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).add(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
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.
// A Solidity high level call has three parts:
// 1. The target address is checked to verify it contains contract code
// 2. The call itself is made, and success asserted
// 3. The return value is decoded, which in turn checks the size of the returned data.
// solhint-disable-next-line max-line-length
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: contracts/library/Governance.sol
pragma solidity ^0.5.0;
contract Governance {
address public _governance;
constructor() public {
_governance = tx.origin;
}
event GovernanceTransferred(address indexed previousOwner, address indexed newOwner);
modifier onlyGovernance {
require(msg.sender == _governance, "not governance");
_;
}
function setGovernance(address governance) public onlyGovernance
{
require(governance != address(0), "new governance the zero address");
emit GovernanceTransferred(_governance, governance);
_governance = governance;
}
}
// File: contracts/interface/IPowerStrategy.sol
pragma solidity ^0.5.0;
interface IPowerStrategy {
function lpIn(address sender, uint256 amount) external;
function lpOut(address sender, uint256 amount) external;
function getPower(address sender) view external returns (uint256);
}
// File: contracts/library/SegmentPowerStrategy.sol
pragma solidity ^0.5.0;
contract SegmentPowerStrategy is IPowerStrategy {
using SafeMath for uint256;
////
struct degoSegment {
uint256 min;
uint256 max;
}
struct countSegment {
uint32 length;
uint32 curCount;
}
struct playerInfo {
uint256 amount;
uint8 segIndex;
uint32 playerId;
uint32 offset;
}
mapping(address => uint32) public _addressXId;
mapping(uint8 => degoSegment) public _degoSegment;
mapping(uint8 => countSegment) public _countSegment;
mapping(uint8 => mapping(uint32 => uint32)) public _playerIds;
mapping(uint32 => playerInfo) public _playerMap;
uint8[3] public _ruler = [8, 1, 1];
uint8[3] public _factor = [3, 5, 1];
uint8 public _high = 3;
uint8 public _mid = 2;
uint8 public _low = 1;
uint32 public _playerId = 0;
uint32 public _base = 100;
uint32 public _anchor = _base;
uint32 public _grouthCondition = 100;
uint32 public _grouthStep = 10;
uint32 constant public _highMax = 50;
uint32 constant public _midMax = 50;
uint256 constant public _initMaxValue = 500 * (10**18); //500lp,10w usdt,100 eth
address public _contractCaller = address(0x0);
/**
* check pool
*/
modifier isNormalPool(){
require( msg.sender==_contractCaller,"invalid pool address!");
_;
}
constructor()
public
{
_contractCaller = msg.sender;
_playerId = 0;
initSegment();
updateRuler(_initMaxValue);
}
function lpIn(address sender, uint256 amount)
isNormalPool()
external {
uint32 playerId = _addressXId[sender];
if ( playerId > 0 ) {
_playerMap[playerId].amount = _playerMap[playerId].amount.add(amount);
} else {
//new addr
_playerId = _playerId+1;
_addressXId[sender] = _playerId;
playerId = _playerId;
_playerMap[playerId].playerId = playerId;
_playerMap[playerId].amount = amount;
_playerMap[playerId].segIndex = 0;
_playerMap[playerId].offset = 0;
//update segment
updateSegment();
}
settlePowerData(playerId);
}
function lpOut(address sender, uint256 amount)
isNormalPool()
external{
uint32 playerId = _addressXId[sender];
if ( playerId > 0 ) {
_playerMap[playerId].amount = _playerMap[playerId].amount.sub(amount);
} else {
return;
}
settlePowerData(playerId);
}
function getPower(address sender)
view external
returns (uint256) {
uint32 playerId = _addressXId[sender];
if ( playerId > 0 ) {
uint8 segment = _playerMap[playerId].segIndex;
if(segment>0){
return uint256(_factor[segment-1]).mul(_playerMap[playerId].amount);
}
}
return 0;
}
function updateRuler( uint256 maxCount ) internal{
uint256 lastBegin = 0;
uint256 lastEnd = 0;
uint256 splitPoint = 0;
for (uint8 i = 1; i <= _ruler.length; i++) {
splitPoint = maxCount * _ruler[i - 1]/10;
if (splitPoint <= 0) {
splitPoint = 1;
}
lastEnd = lastBegin + splitPoint;
if (i == _ruler.length) {
lastEnd = maxCount;
}
_degoSegment[i].min = lastBegin + 1;
_degoSegment[i].max = lastEnd;
lastBegin = lastEnd;
}
}
function initSegment() internal {
_countSegment[_low].length = 80;
_countSegment[_mid].length = 10;
_countSegment[_high].length = 10;
_countSegment[_low].curCount = 0;
_countSegment[_mid].curCount = 0;
_countSegment[_high].curCount = 0;
}
function updateSegment( ) internal {
if (_playerId >= _grouthCondition+_anchor ) {
if (_countSegment[_high].length + _grouthStep > _highMax) {
_countSegment[_high].length = _highMax;
} else {
_countSegment[_high].length = _countSegment[_high].length+_grouthStep;
}
if (_countSegment[_mid].length + _grouthStep > _midMax) {
_countSegment[_mid].length = _midMax;
} else {
_countSegment[_mid].length = _countSegment[_mid].length+_grouthStep;
}
_anchor = _playerId;
}
}
function hasCountSegmentSlot(uint8 segIndex) internal view returns (bool){
uint32 value = _countSegment[segIndex].length-_countSegment[segIndex].curCount;
if (value > 0) {
return true;
} else {
return false;
}
}
function findSegmentMinPlayer(uint8 segIndex) internal view returns (uint32,uint256){
uint256 firstMinAmount = _degoSegment[segIndex].max;
uint256 secondMinAmount = _degoSegment[segIndex].max;
uint32 minPlayerOffset = 0;
for (uint8 i = 0; i < _countSegment[segIndex].curCount; i++) {
uint32 playerId = _playerIds[segIndex][i];
if( playerId==0 ){
continue;
}
uint256 amount = _playerMap[playerId].amount;
//find min amount;
if ( amount < firstMinAmount) {
if (firstMinAmount < secondMinAmount) {
secondMinAmount = firstMinAmount;
}
firstMinAmount = amount;
minPlayerOffset = i;
}else{
//find second min amount
if(amount < secondMinAmount ){
secondMinAmount = amount;
}
}
}
return (minPlayerOffset,secondMinAmount);
}
//swap the player data from old segment to the new segment
function segmentSwap(uint32 playerId, uint8 segIndex) internal {
uint8 oldSegIndex = _playerMap[playerId].segIndex;
uint32 oldOffset = _playerMap[playerId].offset;
uint32 tail = _countSegment[segIndex].curCount;
_playerMap[playerId].segIndex = segIndex;
_playerMap[playerId].offset = tail;
_countSegment[segIndex].curCount = _countSegment[segIndex].curCount+1;
_playerIds[segIndex][tail] = playerId;
if (oldSegIndex>0 && segIndex != oldSegIndex && _playerIds[oldSegIndex][oldOffset] > 0) {
uint32 originTail = _countSegment[oldSegIndex].curCount-1;
uint32 originTailPlayer = _playerIds[oldSegIndex][originTail];
if(originTailPlayer != playerId){
_playerMap[originTailPlayer].segIndex = oldSegIndex;
_playerMap[originTailPlayer].offset = oldOffset;
_playerIds[oldSegIndex][oldOffset] = originTailPlayer;
}
_playerIds[oldSegIndex][originTail] = 0;
_countSegment[oldSegIndex].curCount = _countSegment[oldSegIndex].curCount-1;
}
}
//swap the player data with tail
function tailSwap( uint8 segIndex) internal returns (uint32){
uint32 minPlayerOffset;
uint256 secondMinAmount;
(minPlayerOffset,secondMinAmount) = findSegmentMinPlayer(segIndex);
_degoSegment[segIndex].min = secondMinAmount;
uint32 leftPlayerId = _playerIds[segIndex][minPlayerOffset];
//segmentSwap to reset
uint32 tail = _countSegment[segIndex].curCount - 1;
uint32 tailPlayerId = _playerIds[segIndex][tail];
_playerIds[segIndex][minPlayerOffset] = tailPlayerId;
_playerMap[tailPlayerId].offset = minPlayerOffset;
return leftPlayerId;
}
function joinHigh(uint32 playerId) internal {
uint8 segIndex = _high;
if (hasCountSegmentSlot(segIndex)) {
segmentSwap(playerId, segIndex);
} else {
uint32 leftPlayerId = tailSwap(segIndex);
joinMid(leftPlayerId);
segmentSwap(playerId, segIndex);
}
}
function joinMid(uint32 playerId) internal {
uint8 segIndex = _mid;
if (hasCountSegmentSlot(segIndex)) {
segmentSwap(playerId, segIndex);
} else {
uint32 leftPlayerId = tailSwap(segIndex);
joinLow(leftPlayerId);
segmentSwap(playerId, segIndex);
}
_degoSegment[segIndex].max = _degoSegment[segIndex + 1].min;
}
function joinLow(uint32 playerId) internal {
uint8 segIndex = _low;
segmentSwap(playerId, segIndex);
_degoSegment[segIndex].max = _degoSegment[segIndex + 1].min;
//_low segment length update
if( _countSegment[segIndex].curCount > _countSegment[segIndex].length){
_countSegment[segIndex].length = _countSegment[segIndex].curCount;
}
}
function settlePowerData(uint32 playerId) internal {
uint256 amount = _playerMap[playerId].amount;
uint8 segIndex = 0;
for (uint8 i = 1; i <= _high; i++) {
if (amount < _degoSegment[i].max) {
segIndex = i;
break;
}
}
if (segIndex == 0) {
_degoSegment[_high].max = amount;
segIndex = _high;
}
if (_playerMap[playerId].segIndex == segIndex) {
return;
}
if (segIndex == _high) {
joinHigh(playerId);
} else if (segIndex == _mid) {
joinMid(playerId);
} else {
joinLow(playerId);
}
}
////////////////////////////
}
// File: contracts/library/LPTokenWrapper.sol
pragma solidity ^0.5.0;
contract LPTokenWrapper is IPool,Governance {
using SafeMath for uint256;
using SafeERC20 for IERC20;
IERC20 public _lpToken;
address public _playerBook = address(0x178f005e3BB10604a47c4F8212C8959caC9c94aA);
uint256 private _totalSupply;
mapping(address => uint256) private _balances;
uint256 private _totalPower;
mapping(address => uint256) private _powerBalances;
address public _powerStrategy = address(0x0);
address public powerStrategy = address(0x0);
constructor(address lpToken_) public {
require(lpToken_ != address(0), 'LPTokenWrapper::constructor: lpToken_ is empty');
_lpToken = IERC20(lpToken_);
}
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
function enablePowerStragegy() public onlyGovernance{
if( powerStrategy == address(0x0)){
powerStrategy = address(new SegmentPowerStrategy());
}
_powerStrategy = powerStrategy;
}
function disablePowerStragegy() public onlyGovernance{
_powerStrategy = address(0x0);
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function balanceOfPower(address account) public view returns (uint256) {
return _powerBalances[account];
}
function totalPower() public view returns (uint256) {
return _totalPower;
}
function stake(uint256 amount, string memory affCode) public {
_totalSupply = _totalSupply.add(amount);
_balances[msg.sender] = _balances[msg.sender].add(amount);
if( _powerStrategy != address(0x0)){
_totalPower = _totalPower.sub(_powerBalances[msg.sender]);
IPowerStrategy(_powerStrategy).lpIn(msg.sender, amount);
_powerBalances[msg.sender] = IPowerStrategy(_powerStrategy).getPower(msg.sender);
_totalPower = _totalPower.add(_powerBalances[msg.sender]);
}else{
_totalPower = _totalSupply;
_powerBalances[msg.sender] = _balances[msg.sender];
}
_lpToken.safeTransferFrom(msg.sender, address(this), amount);
if (!IPlayerBook(_playerBook).hasRefer(msg.sender)) {
IPlayerBook(_playerBook).bindRefer(msg.sender, affCode);
}
}
function withdraw(uint256 amount) public {
require(amount > 0, "amount > 0");
_totalSupply = _totalSupply.sub(amount);
_balances[msg.sender] = _balances[msg.sender].sub(amount);
if( _powerStrategy != address(0x0)){
_totalPower = _totalPower.sub(_powerBalances[msg.sender]);
IPowerStrategy(_powerStrategy).lpOut(msg.sender, amount);
_powerBalances[msg.sender] = IPowerStrategy(_powerStrategy).getPower(msg.sender);
_totalPower = _totalPower.add(_powerBalances[msg.sender]);
}else{
_totalPower = _totalSupply;
_powerBalances[msg.sender] = _balances[msg.sender];
}
_lpToken.safeTransfer( msg.sender, amount);
}
function setPlayerBook(address playerbook) public onlyGovernance{
_playerBook = playerbook;
}
}
// File: contracts/reward/UniswapReward.sol
pragma solidity ^0.5.0;
contract RewardsDistributionRecipient {
address public rewardsDistribution;
modifier onlyRewardsDistribution() {
require(msg.sender == rewardsDistribution, "Caller is not RewardsDistribution contract");
_;
}
}
interface IUniswapV2ERC20 {
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}
contract UniswapReward is LPTokenWrapper,RewardsDistributionRecipient{
using SafeERC20 for IERC20;
IERC20 public _rewardsToken;
address public _teamWallet = 0x1F91db93e06ffeb06c942BB6A0b2756Ad6Aaa5FC;
address public _rewardPool = 0x25655b50d6f9Ff59cA145F3E6976E954bE17B177;
uint256 public constant DURATION = 7 days;
uint256 public _initReward;
uint256 public _periodFinish = 0;
uint256 public _rewardRate = 0;
uint256 public _lastUpdateTime;
uint256 public _rewardPerTokenStored;
uint256 public _teamRewardRate = 500;
uint256 public _poolRewardRate = 1000;
uint256 public _baseRate = 10000;
uint256 public _punishTime = 3 days;
mapping(address => uint256) public _userRewardPerTokenPaid;
mapping(address => uint256) public _rewards;
mapping(address => uint256) public _lastStakedTime;
event RewardAdded(uint256 reward);
event Staked(address indexed user, uint256 amount);
event Withdrawn(address indexed user, uint256 amount);
event RewardPaid(address indexed user, uint256 reward);
modifier updateReward(address account) {
_rewardPerTokenStored = rewardPerToken();
_lastUpdateTime = lastTimeRewardApplicable();
if (account != address(0)) {
_rewards[account] = earned(account);
_userRewardPerTokenPaid[account] = _rewardPerTokenStored;
}
_;
}
constructor(
address rewardsDistribution_,
address token_,
address lpToken_
) LPTokenWrapper(lpToken_) public {
require(token_ != address(0), 'UniswapReward::constructor: _token is empty');
_rewardsToken = IERC20(token_);
rewardsDistribution = rewardsDistribution_;
}
/* Fee collection for any other token */
function seize(IERC20 token, uint256 amount) external onlyGovernance{
require(token != _rewardsToken, "reward");
require(token != _lpToken, "stake");
token.safeTransfer(_governance, amount);
}
function setTeamRewardRate( uint256 teamRewardRate ) public onlyGovernance{
_teamRewardRate = teamRewardRate;
}
function setPoolRewardRate( uint256 poolRewardRate ) public onlyGovernance{
_poolRewardRate = poolRewardRate;
}
function setWithDrawPunishTime( uint256 punishTime ) public onlyGovernance{
_punishTime = punishTime;
}
function lastTimeRewardApplicable() public view returns (uint256) {
return Math.min(block.timestamp, _periodFinish);
}
function rewardPerToken() public view returns (uint256) {
if (totalPower() == 0) {
return _rewardPerTokenStored;
}
return
_rewardPerTokenStored.add(
lastTimeRewardApplicable()
.sub(_lastUpdateTime)
.mul(_rewardRate)
.mul(1e18)
.div(totalPower())
);
}
function earned(address account) public view returns (uint256) {
return
balanceOfPower(account)
.mul(rewardPerToken().sub(_userRewardPerTokenPaid[account]))
.div(1e18)
.add(_rewards[account]);
}
// stake visibility is public as overriding LPTokenWrapper's stake() function
function stake(uint256 amount, string memory affCode)
public
updateReward(msg.sender)
{
require(amount > 0, "Cannot stake 0");
super.stake(amount, affCode);
_lastStakedTime[msg.sender] = now;
emit Staked(msg.sender, amount);
}
// stake visibility is public as overriding LPTokenWrapper's stake() function
function stakeWithPermit(uint256 amount, string memory affCode, uint deadline, uint8 v, bytes32 r, bytes32 s)
public
updateReward(msg.sender)
{
require(amount > 0, "Cannot stake 0");
// permit
IUniswapV2ERC20(address(_lpToken)).permit(msg.sender, address(this), amount, deadline, v, r, s);
super.stake(amount, affCode);
_lastStakedTime[msg.sender] = now;
emit Staked(msg.sender, amount);
}
function withdraw(uint256 amount)
public
updateReward(msg.sender)
{
require(amount > 0, "Cannot withdraw 0");
super.withdraw(amount);
emit Withdrawn(msg.sender, amount);
}
function exit() external {
withdraw(balanceOf(msg.sender));
getReward();
}
function getReward() public updateReward(msg.sender) {
uint256 reward = earned(msg.sender);
if (reward > 0) {
_rewards[msg.sender] = 0;
uint256 fee = IPlayerBook(_playerBook).settleReward(msg.sender, reward);
if(fee > 0){
_rewardsToken.safeTransfer(_playerBook, fee);
}
uint256 teamReward = reward.mul(_teamRewardRate).div(_baseRate);
if(teamReward>0){
_rewardsToken.safeTransfer(_teamWallet, teamReward);
}
uint256 leftReward = reward.sub(fee).sub(teamReward);
uint256 poolReward = 0;
//withdraw time check
if(now < (_lastStakedTime[msg.sender] + _punishTime) ){
poolReward = leftReward.mul(_poolRewardRate).div(_baseRate);
}
if(poolReward>0){
_rewardsToken.safeTransfer(_rewardPool, poolReward);
leftReward = leftReward.sub(poolReward);
}
if(leftReward>0){
_rewardsToken.safeTransfer(msg.sender, leftReward );
}
emit RewardPaid(msg.sender, leftReward);
}
}
//for extra reward
function notifyRewardAmount(uint256 reward)
external
onlyRewardsDistribution
updateReward(address(0))
{
if (block.timestamp >= _periodFinish) {
_rewardRate = reward.div(DURATION);
} else {
uint256 remaining = _periodFinish.sub(block.timestamp);
uint256 leftover = remaining.mul(_rewardRate);
_rewardRate = reward.add(leftover).div(DURATION);
}
_lastUpdateTime = block.timestamp;
_periodFinish = block.timestamp.add(DURATION);
emit RewardAdded(reward);
}
}
// File: contracts/reward/StakingRewardsFactory.sol
/**
*Submitted for verification at Etherscan.io on 2020-09-16
*/
pragma solidity ^0.5.16;
interface IMinterV2ERC20 {
function mint(address dst, uint rawAmount) external;
}
contract StakingRewardsFactory is Governance {
using SafeMath for uint;
// immutables
address public rewardsToken;
address public govRewardAccount;
address public devRewardAccount;
uint public stakingRateGenesis=95400;
uint public stakingRateTotal=950000;//95%Percent * 10000
uint public stakingRewardsGenesis;
// the staking tokens for which the rewards contract has been deployed
address[] public stakingTokens;
uint public rewardRateTotal=0;
// info about rewards for a particular staking token
struct StakingRewardsInfo {
address stakingRewards;
uint rewardRate;
}
// rewards info by staking token
mapping(address => StakingRewardsInfo) public stakingRewardsInfoByStakingToken;
constructor(
address _rewardsToken,
address _govRewardAccount,
address _devRewardAccount,
uint _stakingRewardsGenesis
) Governance() public {
require(_stakingRewardsGenesis >= block.timestamp, 'StakingRewardsFactory::constructor: genesis too soon');
rewardsToken = _rewardsToken;
govRewardAccount = _govRewardAccount;
devRewardAccount = _devRewardAccount;
stakingRewardsGenesis = _stakingRewardsGenesis;
}
///// permissioned functions
// deploy a staking reward contract for the staking token, and store the reward amount
// the reward will be distributed to the staking reward contract no sooner than the genesis
function deploy(address[] memory _stakingTokens, uint[] memory _rewardRates) public onlyGovernance {
require(_stakingTokens.length == _rewardRates.length, "stakingTokens and rewardRates lengths mismatch");
for (uint i = 0; i < _rewardRates.length; i++) {
require(_stakingTokens[i] != address(0), "StakingRewardsFactory::deploy: stakingToken empty");
StakingRewardsInfo storage info = stakingRewardsInfoByStakingToken[_stakingTokens[i]];
rewardRateTotal = rewardRateTotal.sub(info.rewardRate).add(_rewardRates[i]);
info.rewardRate = _rewardRates[i];
if(info.stakingRewards == address(0)){
info.stakingRewards = address(new UniswapReward(
/*rewardsDistribution_=*/ address(this),
/*token_=*/ rewardsToken,
/*lpToken_=*/ _stakingTokens[i]
));
stakingTokens.push(_stakingTokens[i]);
}
}
}
function setStakingRate(address stakingToken,uint rewardRate) public onlyGovernance {
StakingRewardsInfo storage info = stakingRewardsInfoByStakingToken[stakingToken];
require(info.stakingRewards != address(0), 'StakingRewardsFactory::setStakingEnabled: not deployed');
rewardRateTotal = rewardRateTotal.sub(info.rewardRate).add(rewardRate);
info.rewardRate = rewardRate;
}
function rewardTotalToken() public view returns (uint256) {
if (stakingRateGenesis >= stakingRateTotal) {
return stakingRateTotal.mul(100).mul(1e18);
}
return stakingRateGenesis.mul(100).mul(1e18);
}
///// permissionless functions
// call notifyRewardAmount for all staking tokens.
function notifyRewardAmounts() public {
require(stakingTokens.length > 0, 'StakingRewardsFactory::notifyRewardAmounts: called before any deploys');
require(block.timestamp >= stakingRewardsGenesis, 'StakingRewardsFactory::notifyRewardAmounts: reward not start');
require(stakingRateTotal > 0, 'StakingRewardsFactory::notifyRewardAmounts: reward is over');
if(stakingRateGenesis >= stakingRateTotal){
stakingRateGenesis = stakingRateTotal;
}
uint _totalRewardAmount = rewardTotalToken();// equal 100_000_000 * 95400 / 10000 / 100
stakingRewardsGenesis = stakingRewardsGenesis + 7 days;
stakingRateTotal = stakingRateTotal.sub(stakingRateGenesis);
if(stakingRateGenesis > 57400){//next stop rate 5.7400%
stakingRateGenesis = stakingRateGenesis.mul(9300).div(10000);//next reward rate equal stakingRateGenesis * (1-7%)
}else if(stakingRateGenesis > 20023){
stakingRateGenesis = 20023;//next reward rate equal 2.0023%
}else{
stakingRateGenesis = stakingRateGenesis.mul(9487).div(10000);//next reward rate equal stakingRateGenesis * (1-5.13%)
}
_mint(_totalRewardAmount);
uint _govFundAmount = _totalRewardAmount.mul(5).div(100);// 5%
uint _devFundAmount = _totalRewardAmount.mul(15).div(100);// 15%
_reserveRewards(govRewardAccount,_govFundAmount);
_reserveRewards(devRewardAccount,_devFundAmount);
uint _poolRewardAmount = _totalRewardAmount.sub(_govFundAmount).sub(_devFundAmount); // 80%
_notifyPoolRewardAmounts(_poolRewardAmount);
}
function _notifyPoolRewardAmounts(uint _poolRewardAmount) private {
uint _surplusRewardAmount = _poolRewardAmount;
uint _rewardAmount = 0;
address farmAddr;
for (uint i = 0; i < stakingTokens.length; i++) {
StakingRewardsInfo memory info = stakingRewardsInfoByStakingToken[stakingTokens[i]];
if(info.rewardRate <= 0){
continue;
}
if(stakingTokens[i] == rewardsToken){
farmAddr = info.stakingRewards;
continue;
}
_rewardAmount = _poolRewardAmount.mul(info.rewardRate).div(rewardRateTotal);
if(_rewardAmount >= _surplusRewardAmount){
_rewardAmount = _surplusRewardAmount;
}
_surplusRewardAmount = _surplusRewardAmount.sub(_rewardAmount);
_notifyRewardAmount(info.stakingRewards,_rewardAmount);
}
_surplusRewardAmount = IERC20(rewardsToken).balanceOf(address(this));
if(_surplusRewardAmount > 0 && farmAddr != address(0)){
_notifyRewardAmount(farmAddr,_surplusRewardAmount);
}
}
// notify reward amount for an individual staking token.
// this is a fallback in case the notifyRewardAmounts costs too much gas to call for all contracts
function _notifyRewardAmount(address _stakingToken,uint _rewardAmount) private {
require(_stakingToken != address(0), 'StakingRewardsFactory::notifyRewardAmount: not deployed');
if (_rewardAmount > 0) {
require(
IERC20(rewardsToken).transfer(_stakingToken, _rewardAmount),
'StakingRewardsFactory::notifyRewardAmount: transfer failed'
);
UniswapReward(_stakingToken).notifyRewardAmount(_rewardAmount);
}
}
function _reserveRewards(address _account,uint _rawRewardsAmount) private {
require(_account != address(0), 'StakingRewardsFactory::_reserveRewards: not deployed');
require(
IERC20(rewardsToken).transfer(_account, _rawRewardsAmount),
'StakingRewardsFactory::_reserveRewards: transfer failed'
);
}
function _mint(uint _mintAmount) private {
require(_mintAmount > 0, 'StakingRewardsFactory::_mint: mintAmount is zero');
IMinterV2ERC20(rewardsToken).mint(address(this), _mintAmount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"rewardsDistribution_","type":"address"},{"internalType":"address","name":"token_","type":"address"},{"internalType":"address","name":"lpToken_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"GovernanceTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"constant":true,"inputs":[],"name":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_baseRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_governance","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_initReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastStakedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_lpToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_playerBook","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_poolRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_powerStrategy","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_punishTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_rewardPool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_teamRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOfPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disablePowerStragegy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enablePowerStragegy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"powerStrategy","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardsDistribution","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"seize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"governance","type":"address"}],"name":"setGovernance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"playerbook","type":"address"}],"name":"setPlayerBook","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"poolRewardRate","type":"uint256"}],"name":"setPoolRewardRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"teamRewardRate","type":"uint256"}],"name":"setTeamRewardRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"punishTime","type":"uint256"}],"name":"setWithDrawPunishTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"affCode","type":"string"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"affCode","type":"string"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"stakeWithPermit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600280546001600160a01b031990811673178f005e3bb10604a47c4f8212c8959cac9c94aa1790915560078054821690556008805482169055600b80548216731f91db93e06ffeb06c942bb6a0b2756ad6aaa5fc179055600c80549091167325655b50d6f9ff59ca145f3e6976e954be17b1771790556000600e819055600f556101f46012556103e86013556127106014556203f4806015553480156100a957600080fd5b50604051620039e3380380620039e3833981810160405260608110156100ce57600080fd5b5080516020820151604090920151600080546001600160a01b03191632179055909190806001600160a01b0381166101385760405162461bcd60e51b815260040180806020018281038252602e815260200180620039b5602e913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392831617905582166101925760405162461bcd60e51b815260040180806020018281038252602b8152602001806200398a602b913960400191505060405180910390fd5b50600a80546001600160a01b039283166001600160a01b031991821617909155600980549390921692169190911790556137b880620001d26000396000f3fe60806040523480156200001157600080fd5b5060043610620002a35760003560e01c80637d6dfb7e1162000171578063db3ad22c11620000d5578063ed6525c41162000093578063ed6525c4146200071c578063ee6318811462000726578063f2f404201462000730578063f796bfb91462000759578063f9cff3511462000763578063ffd832c1146200076d57620002a3565b8063db3ad22c146200061c578063dc7ced3d1462000626578063e7e4e1f71462000630578063e9fad8ee14620006e3578063eb9253c014620006ed57620002a3565b80639a6b25a3116200012f5780639a6b25a3146200058c5780639f3fbd2b14620005ac578063ab033ea914620005b6578063b122a62f14620005df578063bb1b426914620005e9578063cd3daf9d146200061257620002a3565b80637d6dfb7e146200053b57806380faa57d146200056457806383beae2e146200056e578063927b26b914620005785780639572c240146200058257620002a3565b806337e294d5116200021957806356728e9d11620001d757806356728e9d146200048c57806365d82b8a14620004b557806368fd25cd14620004de5780636adafab514620004e857806370a0823114620004f25780637b4d0812146200051b57620002a3565b806337e294d514620004445780633c6b16ab146200044e5780633d18b912146200046e5780633fc6df6e146200047857806353364da0146200048257620002a3565b806318160ddd116200026757806318160ddd14620003e05780631be0528914620003ea5780631c2f3e3d14620003f457806329d245aa146200041a5780632e1a7d4d146200042457620002a3565b80628cc26214620002a857806303b2b7f814620002e35780630ba86f0514620003ac578063121544b914620003cc5780631407c66414620003d6575b600080fd5b620002d160048036036020811015620002c057600080fd5b50356001600160a01b031662000777565b60408051918252519081900360200190f35b620003aa600480360360c0811015620002fb57600080fd5b813591908101906040810160208201356401000000008111156200031e57600080fd5b8201836020820111156200033157600080fd5b803590602001918460018302840111640100000000831117156200035457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505060ff60208301351691604081013591506060013562000809565b005b620003aa60048036036020811015620003c457600080fd5b50356200099f565b620002d1620009f5565b620002d1620009fb565b620002d162000a01565b620002d162000a08565b620003fe62000a0f565b604080516001600160a01b039092168252519081900360200190f35b620003fe62000a1e565b620003aa600480360360208110156200043c57600080fd5b503562000a2d565b620003fe62000b1e565b620003aa600480360360208110156200046657600080fd5b503562000b2d565b620003aa62000cad565b620003fe62000f37565b620002d162000f46565b620002d160048036036020811015620004a457600080fd5b50356001600160a01b031662000f4c565b620002d160048036036020811015620004cd57600080fd5b50356001600160a01b031662000f5e565b620002d162000f70565b620002d162000f76565b620002d1600480360360208110156200050a57600080fd5b50356001600160a01b031662000f7c565b620003aa600480360360208110156200053357600080fd5b503562000f97565b620002d1600480360360208110156200055357600080fd5b50356001600160a01b031662000fed565b620002d162000fff565b620003fe62001014565b620002d162001023565b620003fe62001029565b620003aa60048036036020811015620005a457600080fd5b503562001038565b620002d16200108e565b620003aa60048036036020811015620005ce57600080fd5b50356001600160a01b031662001094565b620003aa6200119c565b620002d1600480360360208110156200060157600080fd5b50356001600160a01b03166200126f565b620002d16200128a565b620002d1620012ec565b620003fe620012f2565b620003aa600480360360408110156200064857600080fd5b813591908101906040810160208201356401000000008111156200066b57600080fd5b8201836020820111156200067e57600080fd5b80359060200191846001830284011164010000000083111715620006a157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955062001301945050505050565b620003aa62001402565b620003aa600480360360408110156200070557600080fd5b506001600160a01b03813516906020013562001423565b620002d16200152f565b620003fe62001535565b620003aa600480360360208110156200074857600080fd5b50356001600160a01b031662001544565b620003aa620015b7565b620003fe6200161a565b620002d162001629565b6001600160a01b0381166000908152601760209081526040808320546016909252822054620008039190620007f690670de0b6b3a764000090620007e990620007d190620007c46200128a565b9063ffffffff6200162f16565b620007dc886200126f565b9063ffffffff6200167a16565b9063ffffffff620016d816565b9063ffffffff6200171c16565b92915050565b33620008146200128a565b6011556200082162000fff565b6010556001600160a01b038116156200086b576200083f8162000777565b6001600160a01b0382166000908152601760209081526040808320939093556011546016909152919020555b60008711620008b2576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b6001546040805163d505accf60e01b8152336004820152306024820152604481018a90526064810188905260ff8716608482015260a4810186905260c4810185905290516001600160a01b039092169163d505accf9160e48082019260009290919082900301818387803b1580156200092a57600080fd5b505af11580156200093f573d6000803e3d6000fd5b505050506200094f878762001777565b3360008181526018602090815260409182902042905581518a815291517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d9281900390910190a250505050505050565b6000546001600160a01b03163314620009f0576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b601255565b60115481565b600e5481565b6003545b90565b62093a8081565b6000546001600160a01b031681565b6001546001600160a01b031681565b3362000a386200128a565b60115562000a4562000fff565b6010556001600160a01b0381161562000a8f5762000a638162000777565b6001600160a01b0382166000908152601760209081526040808320939093556011546016909152919020555b6000821162000ad9576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b62000ae48262001ac0565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050565b600b546001600160a01b031681565b6009546001600160a01b0316331462000b785760405162461bcd60e51b815260040180806020018281038252602a81526020018062003730602a913960400191505060405180910390fd5b600062000b846200128a565b60115562000b9162000fff565b6010556001600160a01b0381161562000bdb5762000baf8162000777565b6001600160a01b0382166000908152601760209081526040808320939093556011546016909152919020555b600e54421062000c035762000bfa8262093a8063ffffffff620016d816565b600f5562000c58565b600e5460009062000c1b904263ffffffff6200162f16565b9050600062000c36600f54836200167a90919063ffffffff16565b905062000c5262093a80620007e9868463ffffffff6200171c16565b600f5550505b42601081905562000c739062093a8063ffffffff6200171c16565b600e556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b3362000cb86200128a565b60115562000cc562000fff565b6010556001600160a01b0381161562000d0f5762000ce38162000777565b6001600160a01b0382166000908152601760209081526040808320939093556011546016909152919020555b600062000d1c3362000777565b9050801562000f335733600081815260176020908152604080832083905560025481516335380a5560e01b8152600481019590955260248501869052905192936001600160a01b03909116926335380a559260448084019391929182900301818787803b15801562000d8d57600080fd5b505af115801562000da2573d6000803e3d6000fd5b505050506040513d602081101562000db957600080fd5b50519050801562000de957600254600a5462000de9916001600160a01b0391821691168363ffffffff62001ce116565b600062000e09601454620007e9601254866200167a90919063ffffffff16565b9050801562000e3757600b54600a5462000e37916001600160a01b0391821691168363ffffffff62001ce116565b600062000e5082620007c4868663ffffffff6200162f16565b60155433600090815260186020526040812054929350910142101562000e915762000e8e601454620007e9601354856200167a90919063ffffffff16565b90505b801562000ed257600c54600a5462000ebd916001600160a01b0391821691168363ffffffff62001ce116565b62000ecf828263ffffffff6200162f16565b91505b811562000ef857600a5462000ef8906001600160a01b0316338463ffffffff62001ce116565b60408051838152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a2505050505b5050565b6009546001600160a01b031681565b60135481565b60186020526000908152604090205481565b60166020526000908152604090205481565b600f5481565b60105481565b6001600160a01b031660009081526004602052604090205490565b6000546001600160a01b0316331462000fe8576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b601355565b60176020526000908152604090205481565b60006200100f42600e5462001e83565b905090565b600a546001600160a01b031681565b60145481565b6008546001600160a01b031681565b6000546001600160a01b0316331462001089576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b601555565b60155481565b6000546001600160a01b03163314620010e5576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b6001600160a01b03811662001141576040805162461bcd60e51b815260206004820152601f60248201527f6e657720676f7665726e616e636520746865207a65726f206164647265737300604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce8091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314620011ed576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b6008546001600160a01b03166200124b576040516200120c90620021f6565b604051809103906000f08015801562001229573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b03929092169190911790555b600854600780546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b031660009081526006602052604090205490565b600062001296620012ec565b620012a5575060115462000a05565b6200100f620012dc620012b7620012ec565b620007e9670de0b6b3a7640000620007dc600f54620007dc601054620007c462000fff565b6011549063ffffffff6200171c16565b60055490565b600c546001600160a01b031681565b336200130c6200128a565b6011556200131962000fff565b6010556001600160a01b038116156200136357620013378162000777565b6001600160a01b0382166000908152601760209081526040808320939093556011546016909152919020555b60008311620013aa576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b620013b6838362001777565b33600081815260186020908152604091829020429055815186815291517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d9281900390910190a2505050565b62001417620014113362000f7c565b62000a2d565b6200142162000cad565b565b6000546001600160a01b0316331462001474576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b600a546001600160a01b0383811691161415620014c1576040805162461bcd60e51b81526020600482015260066024820152651c995dd85c9960d21b604482015290519081900360640190fd5b6001546001600160a01b03838116911614156200150d576040805162461bcd60e51b81526020600482015260056024820152647374616b6560d81b604482015290519081900360640190fd5b60005462000f33906001600160a01b0384811691168363ffffffff62001ce116565b60125481565b6007546001600160a01b031681565b6000546001600160a01b0316331462001595576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462001608576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b600780546001600160a01b0319169055565b6002546001600160a01b031681565b600d5481565b60006200167383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062001e9b565b9392505050565b6000826200168b5750600062000803565b828202828482816200169957fe5b0414620016735760405162461bcd60e51b81526004018080602001828103825260218152602001806200370f6021913960400191505060405180910390fd5b60006200167383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062001f36565b60008282018381101562001673576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6003546200178c908363ffffffff6200171c16565b60035533600090815260046020526040902054620017b1908363ffffffff6200171c16565b336000908152600460205260409020556007546001600160a01b031615620019105733600090815260066020526040902054600554620017f79163ffffffff6200162f16565b60055560075460408051631b4ac55360e31b81523360048201526024810185905290516001600160a01b039092169163da562a989160448082019260009290919082900301818387803b1580156200184e57600080fd5b505af115801562001863573d6000803e3d6000fd5b505060075460408051631776451f60e21b815233600482015290516001600160a01b039092169350635dd9147c9250602480820192602092909190829003018186803b158015620018b357600080fd5b505afa158015620018c8573d6000803e3d6000fd5b505050506040513d6020811015620018df57600080fd5b5051336000908152600660205260409020819055600554620019079163ffffffff6200171c16565b60055562001933565b600354600555336000908152600460209081526040808320546006909252909120555b60015462001953906001600160a01b031633308563ffffffff62001f9f16565b6002546040805163a526a92b60e01b815233600482015290516001600160a01b039092169163a526a92b916024808201926020929091908290030181600087803b158015620019a157600080fd5b505af1158015620019b6573d6000803e3d6000fd5b505050506040513d6020811015620019cd57600080fd5b505162000f33576002546040805163d66d140760e01b81523360048201818152602483019384528551604484015285516001600160a01b039095169463d66d1407949293879391606490910190602085019080838360005b8381101562001a3f57818101518382015260200162001a25565b50505050905090810190601f16801562001a6d5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801562001a8e57600080fd5b505af115801562001aa3573d6000803e3d6000fd5b505050506040513d602081101562001aba57600080fd5b50505050565b6000811162001b03576040805162461bcd60e51b815260206004820152600a6024820152690616d6f756e74203e20360b41b604482015290519081900360640190fd5b60035462001b18908263ffffffff6200162f16565b6003553360009081526004602052604090205462001b3d908263ffffffff6200162f16565b336000908152600460205260409020556007546001600160a01b03161562001c9c573360009081526006602052604090205460055462001b839163ffffffff6200162f16565b6005556007546040805163d961455160e01b81523360048201526024810184905290516001600160a01b039092169163d96145519160448082019260009290919082900301818387803b15801562001bda57600080fd5b505af115801562001bef573d6000803e3d6000fd5b505060075460408051631776451f60e21b815233600482015290516001600160a01b039092169350635dd9147c9250602480820192602092909190829003018186803b15801562001c3f57600080fd5b505afa15801562001c54573d6000803e3d6000fd5b505050506040513d602081101562001c6b57600080fd5b505133600090815260066020526040902081905560055462001c939163ffffffff6200171c16565b60055562001cbf565b600354600555336000908152600460209081526040808320546006909252909120555b60015462001cde906001600160a01b0316338363ffffffff62001ce116565b50565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831062001d905780518252601f19909201916020918201910162001d6f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462001df4576040519150601f19603f3d011682016040523d82523d6000602084013e62001df9565b606091505b509150915081801562001e2a57508051158062001e2a575080806020019051602081101562001e2757600080fd5b50515b62001e7c576040805162461bcd60e51b815260206004820152601a60248201527f5361666545524332303a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b600081831062001e94578162001673565b5090919050565b6000818484111562001f2e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562001ef257818101518382015260200162001ed8565b50505050905090810190601f16801562001f205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818362001f885760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831562001ef257818101518382015260200162001ed8565b50600083858162001f9557fe5b0495945050505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905262001aba90859062002009826001600160a01b0316620021b9565b6200205b576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106200209b5780518252601f1990920191602091820191016200207a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114620020ff576040519150601f19603f3d011682016040523d82523d6000602084013e62002104565b606091505b5091509150816200215c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511562001aba578080602001905160208110156200217a57600080fd5b505162001aba5760405162461bcd60e51b815260040180806020018281038252602a8152602001806200375a602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590620021ee57508115155b949350505050565b61150a80620022058339019056fe60e060405260086080908152600160a081905260c05262000025906005906003620002a0565b5060408051606081018252600380825260056020830152600192820192909252620000549160069190620002a0565b506007805463ffffffff60581b1962010000600360ff199093169290921761ff0019166102001762ff00001916919091176301000000600160581b0319166764000000000000001790811663ffffffff670100000000000000909204919091166b010000000000000000000000021763ffffffff60781b19166019607a1b1763ffffffff60981b1916600560991b179055600880546001600160a01b03191690553480156200010257600080fd5b50600880546001600160a01b031916331790556007805466ffffffff00000019169055620001386001600160e01b036200015b16565b62000155681b1ae4d6e2ef5000006001600160e01b03620001fe16565b6200035e565b6007805460ff62010000918290048116600090815260026020526040808220805463ffffffff199081166050179091558554610100908190048516845282842080548316600a90811790915587548616855283852080549093161790915585549490940483168252808220805463ffffffff60201b1990811690915585549490940483168252808220805485169055935490911681529190912080549091169055565b6000808060015b60038160ff16116200029957600a60056001830360ff16600381106200022757fe5b602081049091015460ff601f9092166101000a9004168602816200024757fe5b049150600082116200025857600191505b818401925060038160ff1614156200026e578492505b60ff811660009081526001602081905260409091209481018555938401839055919283920162000205565b5050505050565b600183019183908215620003285791602002820160005b83821115620002f757835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302620002b7565b8015620003265782816101000a81549060ff0219169055600101602081600001049283019260010302620002f7565b505b50620003369291506200033a565b5090565b6200035b91905b808211156200033657805460ff1916815560010162000341565b90565b61119c806200036e6000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c806358d2d2fb116100b8578063a845d17c1161007c578063a845d17c14610345578063bd69ddcf1461034d578063c3067bb914610355578063d3bce2e214610372578063d96145511461037a578063da562a98146103a857610141565b806358d2d2fb146102305780635dd9147c146102b05780638260e9b8146102d65780638fddf46b146102de5780639abb285d1461032157610141565b8063338475411161010a5780633384754114610228578063380cee511461023057806339216f7b146102385780633ce68dd51461027157806355513e2314610279578063557614521461029657610141565b8062e3b39314610146578063032aefb91461016457806323060b15146101a357806330a499b0146101cf5780633313478014610220575b600080fd5b61014e6103d4565b6040805160ff9092168252519081900360200190f35b61018a6004803603602081101561017a57600080fd5b50356001600160a01b03166103e2565b6040805163ffffffff9092168252519081900360200190f35b61018a600480360360408110156101b957600080fd5b50803560ff16906020013563ffffffff166103fa565b6101f2600480360360208110156101e557600080fd5b503563ffffffff1661041d565b6040805194855260ff909316602085015263ffffffff91821684840152166060830152519081900360800190f35b61014e610450565b61014e610459565b61018a610468565b6102586004803603602081101561024e57600080fd5b503560ff1661046d565b6040805192835260208301919091528051918290030190f35b61018a610486565b61014e6004803603602081101561028f57600080fd5b503561049d565b61029e6104c4565b60408051918252519081900360200190f35b61029e600480360360208110156102c657600080fd5b50356001600160a01b03166104d1565b61018a61057e565b6102fe600480360360208110156102f457600080fd5b503560ff16610591565b6040805163ffffffff938416815291909216602082015281519081900390910190f35b6103296105b4565b604080516001600160a01b039092168252519081900360200190f35b61018a6105c3565b61018a6105d6565b61014e6004803603602081101561036b57600080fd5b50356105e9565b61018a6105f6565b6103a66004803603604081101561039057600080fd5b506001600160a01b038135169060200135610609565b005b6103a6600480360360408110156103be57600080fd5b506001600160a01b0381351690602001356106d8565b600754610100900460ff1681565b60006020819052908152604090205463ffffffff1681565b600360209081526000928352604080842090915290825290205463ffffffff1681565b6004602052600090815260409020805460019091015460ff81169063ffffffff6101008204811691600160281b90041684565b60075460ff1681565b60075462010000900460ff1681565b603281565b6001602081905260009182526040909120805491015482565b600754670100000000000000900463ffffffff1681565b600581600381106104aa57fe5b60209182820401919006915054906101000a900460ff1681565b681b1ae4d6e2ef50000081565b6001600160a01b03811660009081526020819052604081205463ffffffff1680156105735763ffffffff811660009081526004602052604090206001015460ff1680156105715763ffffffff821660009081526004602052604090205461056890600660ff6000198501166003811061054657fe5b602081049091015460ff601f9092166101000a9004169063ffffffff61081c16565b92505050610579565b505b60009150505b919050565b6007546301000000900463ffffffff1681565b60026020526000908152604090205463ffffffff80821691600160201b90041682565b6008546001600160a01b031681565b600754600160981b900463ffffffff1681565b600754600160581b900463ffffffff1681565b600681600381106104aa57fe5b600754600160781b900463ffffffff1681565b6008546001600160a01b03163314610660576040805162461bcd60e51b8152602060048201526015602482015274696e76616c696420706f6f6c20616464726573732160581b604482015290519081900360640190fd5b6001600160a01b03821660009081526020819052604090205463ffffffff1680156106c35763ffffffff8082166000908152600460205260409020546106a891849061087e16565b63ffffffff82166000908152600460205260409020556106c9565b506106d4565b6106d2816108c0565b505b5050565b6008546001600160a01b0316331461072f576040805162461bcd60e51b8152602060048201526015602482015274696e76616c696420706f6f6c20616464726573732160581b604482015290519081900360640190fd5b6001600160a01b03821660009081526020819052604090205463ffffffff1680156107775763ffffffff8082166000908152600460205260409020546106a89184906109b916565b506007805466ffffffff00000019811663010000009182900463ffffffff908116600190810182168402929092178085556001600160a01b038716600090815260208181526040808320805494889004861663ffffffff1990951694909417909355955494909404909116808452600490945290912090810180549184905564ffffffff001990911661010083021768ffffffff00000000ff191690556106c9610a13565b60008261082b57506000610878565b8282028284828161083857fe5b04146108755760405162461bcd60e51b81526004018080602001828103825260218152602001806111476021913960400191505060405180910390fd5b90505b92915050565b600061087583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610baa565b63ffffffff81166000908152600460205260408120549060015b60075460ff908116908216116109185760ff81166000908152600160208190526040909120015483101561091057809150610918565b6001016108da565b5060ff811661094457506007805460ff9081166000908152600160208190526040909120018390559054165b63ffffffff831660009081526004602052604090206001015460ff828116911614156109715750506109b6565b60075460ff8281169116141561098f5761098a83610c41565b6106d2565b60075460ff8281166101009092041614156109ad5761098a83610c84565b6106d283610cf4565b50565b600082820183811015610875576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600754600160781b810463ffffffff908116600160581b8304821601811663010000009092041610610ba85760075460ff8116600090815260026020526040902054603263ffffffff918216600160981b909304821692909201161115610a9b5760075460ff166000908152600260205260409020805463ffffffff19166032179055610ad9565b60075460ff81166000908152600260205260409020805463ffffffff198116600160981b90930463ffffffff90811691811691909101169190911790555b60075460ff610100820416600090815260026020526040902054603263ffffffff918216600160981b909304821692909201161115610b3f5760075460ff610100909104166000908152600260205260409020805463ffffffff19166032179055610b81565b600754610100810460ff166000908152600260205260409020805463ffffffff198116600160981b90930463ffffffff90811691811691909101169190911790555b60078054600160581b63ffffffff63010000008304160263ffffffff60581b199091161790555b565b60008184841115610c395760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610bfe578181015183820152602001610be6565b50505050905090810190601f168015610c2b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60075460ff16610c5081610d80565b15610c6457610c5f8282610dc4565b6106d4565b6000610c6f82610fcb565b9050610c7a81610c84565b6106d28383610dc4565b600754610100900460ff16610c9881610d80565b15610cac57610ca78282610dc4565b610cce565b6000610cb782610fcb565b9050610cc281610cf4565b610ccc8383610dc4565b505b600181810160ff9081166000908152602083905260408082205494909216815220015550565b60075462010000900460ff16610d0a8282610dc4565b60ff6001828101821660009081526020828152604080832054948616835280832090930193909355600290925290205463ffffffff808216600160201b9092041611156106d45760ff1660009081526002602052604090208054600160201b810463ffffffff1663ffffffff1990911617905550565b60ff811660009081526002602052604081205463ffffffff600160201b820481169181169190910390811615610dba576001915050610579565b6000915050610579565b63ffffffff80831660008181526004602090815260408083206001908101805460ff898116808852600287528588208054600160201b908190048c16600160281b81810268ffffffff00000000001960ff19891687171617909755928a5281548181048d169097018c160267ffffffff0000000019909616959095179094556003865284872084885290955292909420805463ffffffff19169095179094559081169391900416908215801590610e8157508260ff168460ff1614155b8015610eb1575060ff8316600090815260036020908152604080832063ffffffff80871685529252909120541615155b15610fc45760ff83166000908152600260209081526040808320546003835281842060001963ffffffff600160201b9093048316018083168652935292205490919081169087168114610f645763ffffffff8181166000818152600460209081526040808320600101805460ff191660ff8c1690811768ffffffff00000000001916600160281b978c169788021790915583526003825280832094835293905291909120805463ffffffff191690911790555b5060ff8416600081815260036020908152604080832063ffffffff95861684528252808320805463ffffffff191690559282526002905220805467ffffffff00000000198116600160201b91829004841660001901909316029190911790555b5050505050565b6000806000610fd984611075565b60ff959095166000818152600160208181526040808420999099556003815288832063ffffffff9586168085528183528a85208054968652600284528b862054600160201b9004881660001901881686529183528a852054871663ffffffff198716811790925590845260049091529790912001805468ffffffff00000000001916600160281b90970296909617909555939093169392505050565b60ff811660009081526001602081905260408220015481908082805b60ff878116600090815260026020526040902054600160201b900463ffffffff16908216101561113b5760ff80881660009081526003602090815260408083209385168352929052205463ffffffff16806110ec5750611133565b63ffffffff8116600090815260046020526040902054858110156111245784861015611116578594505b8095508260ff169350611130565b84811015611130578094505b50505b600101611091565b50935091505091509156fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72315820bd89de071754c236cb7d3ded555332ab520e87ba4caec9677d781759d792f4e264736f6c63430005100032536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616c6c6572206973206e6f742052657761726473446973747269627574696f6e20636f6e74726163745361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a7231582053c8e9c6fc37e567280b796e58b9cd7e9d3b3c36152693cf1f1dfe9726570b7464736f6c63430005100032556e69737761705265776172643a3a636f6e7374727563746f723a205f746f6b656e20697320656d7074794c50546f6b656e577261707065723a3a636f6e7374727563746f723a206c70546f6b656e5f20697320656d707479000000000000000000000000f5ce85036bb724762f9abd18b4a5d98e0080316400000000000000000000000034d3d2b46881588387dbe17e3b478dcb8b1a245000000000000000000000000084f00d034c6fa116c4b487087d8f05bc1babd406
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620002a35760003560e01c80637d6dfb7e1162000171578063db3ad22c11620000d5578063ed6525c41162000093578063ed6525c4146200071c578063ee6318811462000726578063f2f404201462000730578063f796bfb91462000759578063f9cff3511462000763578063ffd832c1146200076d57620002a3565b8063db3ad22c146200061c578063dc7ced3d1462000626578063e7e4e1f71462000630578063e9fad8ee14620006e3578063eb9253c014620006ed57620002a3565b80639a6b25a3116200012f5780639a6b25a3146200058c5780639f3fbd2b14620005ac578063ab033ea914620005b6578063b122a62f14620005df578063bb1b426914620005e9578063cd3daf9d146200061257620002a3565b80637d6dfb7e146200053b57806380faa57d146200056457806383beae2e146200056e578063927b26b914620005785780639572c240146200058257620002a3565b806337e294d5116200021957806356728e9d11620001d757806356728e9d146200048c57806365d82b8a14620004b557806368fd25cd14620004de5780636adafab514620004e857806370a0823114620004f25780637b4d0812146200051b57620002a3565b806337e294d514620004445780633c6b16ab146200044e5780633d18b912146200046e5780633fc6df6e146200047857806353364da0146200048257620002a3565b806318160ddd116200026757806318160ddd14620003e05780631be0528914620003ea5780631c2f3e3d14620003f457806329d245aa146200041a5780632e1a7d4d146200042457620002a3565b80628cc26214620002a857806303b2b7f814620002e35780630ba86f0514620003ac578063121544b914620003cc5780631407c66414620003d6575b600080fd5b620002d160048036036020811015620002c057600080fd5b50356001600160a01b031662000777565b60408051918252519081900360200190f35b620003aa600480360360c0811015620002fb57600080fd5b813591908101906040810160208201356401000000008111156200031e57600080fd5b8201836020820111156200033157600080fd5b803590602001918460018302840111640100000000831117156200035457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505060ff60208301351691604081013591506060013562000809565b005b620003aa60048036036020811015620003c457600080fd5b50356200099f565b620002d1620009f5565b620002d1620009fb565b620002d162000a01565b620002d162000a08565b620003fe62000a0f565b604080516001600160a01b039092168252519081900360200190f35b620003fe62000a1e565b620003aa600480360360208110156200043c57600080fd5b503562000a2d565b620003fe62000b1e565b620003aa600480360360208110156200046657600080fd5b503562000b2d565b620003aa62000cad565b620003fe62000f37565b620002d162000f46565b620002d160048036036020811015620004a457600080fd5b50356001600160a01b031662000f4c565b620002d160048036036020811015620004cd57600080fd5b50356001600160a01b031662000f5e565b620002d162000f70565b620002d162000f76565b620002d1600480360360208110156200050a57600080fd5b50356001600160a01b031662000f7c565b620003aa600480360360208110156200053357600080fd5b503562000f97565b620002d1600480360360208110156200055357600080fd5b50356001600160a01b031662000fed565b620002d162000fff565b620003fe62001014565b620002d162001023565b620003fe62001029565b620003aa60048036036020811015620005a457600080fd5b503562001038565b620002d16200108e565b620003aa60048036036020811015620005ce57600080fd5b50356001600160a01b031662001094565b620003aa6200119c565b620002d1600480360360208110156200060157600080fd5b50356001600160a01b03166200126f565b620002d16200128a565b620002d1620012ec565b620003fe620012f2565b620003aa600480360360408110156200064857600080fd5b813591908101906040810160208201356401000000008111156200066b57600080fd5b8201836020820111156200067e57600080fd5b80359060200191846001830284011164010000000083111715620006a157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955062001301945050505050565b620003aa62001402565b620003aa600480360360408110156200070557600080fd5b506001600160a01b03813516906020013562001423565b620002d16200152f565b620003fe62001535565b620003aa600480360360208110156200074857600080fd5b50356001600160a01b031662001544565b620003aa620015b7565b620003fe6200161a565b620002d162001629565b6001600160a01b0381166000908152601760209081526040808320546016909252822054620008039190620007f690670de0b6b3a764000090620007e990620007d190620007c46200128a565b9063ffffffff6200162f16565b620007dc886200126f565b9063ffffffff6200167a16565b9063ffffffff620016d816565b9063ffffffff6200171c16565b92915050565b33620008146200128a565b6011556200082162000fff565b6010556001600160a01b038116156200086b576200083f8162000777565b6001600160a01b0382166000908152601760209081526040808320939093556011546016909152919020555b60008711620008b2576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b6001546040805163d505accf60e01b8152336004820152306024820152604481018a90526064810188905260ff8716608482015260a4810186905260c4810185905290516001600160a01b039092169163d505accf9160e48082019260009290919082900301818387803b1580156200092a57600080fd5b505af11580156200093f573d6000803e3d6000fd5b505050506200094f878762001777565b3360008181526018602090815260409182902042905581518a815291517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d9281900390910190a250505050505050565b6000546001600160a01b03163314620009f0576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b601255565b60115481565b600e5481565b6003545b90565b62093a8081565b6000546001600160a01b031681565b6001546001600160a01b031681565b3362000a386200128a565b60115562000a4562000fff565b6010556001600160a01b0381161562000a8f5762000a638162000777565b6001600160a01b0382166000908152601760209081526040808320939093556011546016909152919020555b6000821162000ad9576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b62000ae48262001ac0565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050565b600b546001600160a01b031681565b6009546001600160a01b0316331462000b785760405162461bcd60e51b815260040180806020018281038252602a81526020018062003730602a913960400191505060405180910390fd5b600062000b846200128a565b60115562000b9162000fff565b6010556001600160a01b0381161562000bdb5762000baf8162000777565b6001600160a01b0382166000908152601760209081526040808320939093556011546016909152919020555b600e54421062000c035762000bfa8262093a8063ffffffff620016d816565b600f5562000c58565b600e5460009062000c1b904263ffffffff6200162f16565b9050600062000c36600f54836200167a90919063ffffffff16565b905062000c5262093a80620007e9868463ffffffff6200171c16565b600f5550505b42601081905562000c739062093a8063ffffffff6200171c16565b600e556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b3362000cb86200128a565b60115562000cc562000fff565b6010556001600160a01b0381161562000d0f5762000ce38162000777565b6001600160a01b0382166000908152601760209081526040808320939093556011546016909152919020555b600062000d1c3362000777565b9050801562000f335733600081815260176020908152604080832083905560025481516335380a5560e01b8152600481019590955260248501869052905192936001600160a01b03909116926335380a559260448084019391929182900301818787803b15801562000d8d57600080fd5b505af115801562000da2573d6000803e3d6000fd5b505050506040513d602081101562000db957600080fd5b50519050801562000de957600254600a5462000de9916001600160a01b0391821691168363ffffffff62001ce116565b600062000e09601454620007e9601254866200167a90919063ffffffff16565b9050801562000e3757600b54600a5462000e37916001600160a01b0391821691168363ffffffff62001ce116565b600062000e5082620007c4868663ffffffff6200162f16565b60155433600090815260186020526040812054929350910142101562000e915762000e8e601454620007e9601354856200167a90919063ffffffff16565b90505b801562000ed257600c54600a5462000ebd916001600160a01b0391821691168363ffffffff62001ce116565b62000ecf828263ffffffff6200162f16565b91505b811562000ef857600a5462000ef8906001600160a01b0316338463ffffffff62001ce116565b60408051838152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a2505050505b5050565b6009546001600160a01b031681565b60135481565b60186020526000908152604090205481565b60166020526000908152604090205481565b600f5481565b60105481565b6001600160a01b031660009081526004602052604090205490565b6000546001600160a01b0316331462000fe8576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b601355565b60176020526000908152604090205481565b60006200100f42600e5462001e83565b905090565b600a546001600160a01b031681565b60145481565b6008546001600160a01b031681565b6000546001600160a01b0316331462001089576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b601555565b60155481565b6000546001600160a01b03163314620010e5576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b6001600160a01b03811662001141576040805162461bcd60e51b815260206004820152601f60248201527f6e657720676f7665726e616e636520746865207a65726f206164647265737300604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce8091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314620011ed576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b6008546001600160a01b03166200124b576040516200120c90620021f6565b604051809103906000f08015801562001229573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b03929092169190911790555b600854600780546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b031660009081526006602052604090205490565b600062001296620012ec565b620012a5575060115462000a05565b6200100f620012dc620012b7620012ec565b620007e9670de0b6b3a7640000620007dc600f54620007dc601054620007c462000fff565b6011549063ffffffff6200171c16565b60055490565b600c546001600160a01b031681565b336200130c6200128a565b6011556200131962000fff565b6010556001600160a01b038116156200136357620013378162000777565b6001600160a01b0382166000908152601760209081526040808320939093556011546016909152919020555b60008311620013aa576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b620013b6838362001777565b33600081815260186020908152604091829020429055815186815291517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d9281900390910190a2505050565b62001417620014113362000f7c565b62000a2d565b6200142162000cad565b565b6000546001600160a01b0316331462001474576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b600a546001600160a01b0383811691161415620014c1576040805162461bcd60e51b81526020600482015260066024820152651c995dd85c9960d21b604482015290519081900360640190fd5b6001546001600160a01b03838116911614156200150d576040805162461bcd60e51b81526020600482015260056024820152647374616b6560d81b604482015290519081900360640190fd5b60005462000f33906001600160a01b0384811691168363ffffffff62001ce116565b60125481565b6007546001600160a01b031681565b6000546001600160a01b0316331462001595576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462001608576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b600780546001600160a01b0319169055565b6002546001600160a01b031681565b600d5481565b60006200167383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062001e9b565b9392505050565b6000826200168b5750600062000803565b828202828482816200169957fe5b0414620016735760405162461bcd60e51b81526004018080602001828103825260218152602001806200370f6021913960400191505060405180910390fd5b60006200167383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062001f36565b60008282018381101562001673576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6003546200178c908363ffffffff6200171c16565b60035533600090815260046020526040902054620017b1908363ffffffff6200171c16565b336000908152600460205260409020556007546001600160a01b031615620019105733600090815260066020526040902054600554620017f79163ffffffff6200162f16565b60055560075460408051631b4ac55360e31b81523360048201526024810185905290516001600160a01b039092169163da562a989160448082019260009290919082900301818387803b1580156200184e57600080fd5b505af115801562001863573d6000803e3d6000fd5b505060075460408051631776451f60e21b815233600482015290516001600160a01b039092169350635dd9147c9250602480820192602092909190829003018186803b158015620018b357600080fd5b505afa158015620018c8573d6000803e3d6000fd5b505050506040513d6020811015620018df57600080fd5b5051336000908152600660205260409020819055600554620019079163ffffffff6200171c16565b60055562001933565b600354600555336000908152600460209081526040808320546006909252909120555b60015462001953906001600160a01b031633308563ffffffff62001f9f16565b6002546040805163a526a92b60e01b815233600482015290516001600160a01b039092169163a526a92b916024808201926020929091908290030181600087803b158015620019a157600080fd5b505af1158015620019b6573d6000803e3d6000fd5b505050506040513d6020811015620019cd57600080fd5b505162000f33576002546040805163d66d140760e01b81523360048201818152602483019384528551604484015285516001600160a01b039095169463d66d1407949293879391606490910190602085019080838360005b8381101562001a3f57818101518382015260200162001a25565b50505050905090810190601f16801562001a6d5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801562001a8e57600080fd5b505af115801562001aa3573d6000803e3d6000fd5b505050506040513d602081101562001aba57600080fd5b50505050565b6000811162001b03576040805162461bcd60e51b815260206004820152600a6024820152690616d6f756e74203e20360b41b604482015290519081900360640190fd5b60035462001b18908263ffffffff6200162f16565b6003553360009081526004602052604090205462001b3d908263ffffffff6200162f16565b336000908152600460205260409020556007546001600160a01b03161562001c9c573360009081526006602052604090205460055462001b839163ffffffff6200162f16565b6005556007546040805163d961455160e01b81523360048201526024810184905290516001600160a01b039092169163d96145519160448082019260009290919082900301818387803b15801562001bda57600080fd5b505af115801562001bef573d6000803e3d6000fd5b505060075460408051631776451f60e21b815233600482015290516001600160a01b039092169350635dd9147c9250602480820192602092909190829003018186803b15801562001c3f57600080fd5b505afa15801562001c54573d6000803e3d6000fd5b505050506040513d602081101562001c6b57600080fd5b505133600090815260066020526040902081905560055462001c939163ffffffff6200171c16565b60055562001cbf565b600354600555336000908152600460209081526040808320546006909252909120555b60015462001cde906001600160a01b0316338363ffffffff62001ce116565b50565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831062001d905780518252601f19909201916020918201910162001d6f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462001df4576040519150601f19603f3d011682016040523d82523d6000602084013e62001df9565b606091505b509150915081801562001e2a57508051158062001e2a575080806020019051602081101562001e2757600080fd5b50515b62001e7c576040805162461bcd60e51b815260206004820152601a60248201527f5361666545524332303a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b600081831062001e94578162001673565b5090919050565b6000818484111562001f2e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562001ef257818101518382015260200162001ed8565b50505050905090810190601f16801562001f205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818362001f885760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831562001ef257818101518382015260200162001ed8565b50600083858162001f9557fe5b0495945050505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905262001aba90859062002009826001600160a01b0316620021b9565b6200205b576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106200209b5780518252601f1990920191602091820191016200207a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114620020ff576040519150601f19603f3d011682016040523d82523d6000602084013e62002104565b606091505b5091509150816200215c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511562001aba578080602001905160208110156200217a57600080fd5b505162001aba5760405162461bcd60e51b815260040180806020018281038252602a8152602001806200375a602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590620021ee57508115155b949350505050565b61150a80620022058339019056fe60e060405260086080908152600160a081905260c05262000025906005906003620002a0565b5060408051606081018252600380825260056020830152600192820192909252620000549160069190620002a0565b506007805463ffffffff60581b1962010000600360ff199093169290921761ff0019166102001762ff00001916919091176301000000600160581b0319166764000000000000001790811663ffffffff670100000000000000909204919091166b010000000000000000000000021763ffffffff60781b19166019607a1b1763ffffffff60981b1916600560991b179055600880546001600160a01b03191690553480156200010257600080fd5b50600880546001600160a01b031916331790556007805466ffffffff00000019169055620001386001600160e01b036200015b16565b62000155681b1ae4d6e2ef5000006001600160e01b03620001fe16565b6200035e565b6007805460ff62010000918290048116600090815260026020526040808220805463ffffffff199081166050179091558554610100908190048516845282842080548316600a90811790915587548616855283852080549093161790915585549490940483168252808220805463ffffffff60201b1990811690915585549490940483168252808220805485169055935490911681529190912080549091169055565b6000808060015b60038160ff16116200029957600a60056001830360ff16600381106200022757fe5b602081049091015460ff601f9092166101000a9004168602816200024757fe5b049150600082116200025857600191505b818401925060038160ff1614156200026e578492505b60ff811660009081526001602081905260409091209481018555938401839055919283920162000205565b5050505050565b600183019183908215620003285791602002820160005b83821115620002f757835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302620002b7565b8015620003265782816101000a81549060ff0219169055600101602081600001049283019260010302620002f7565b505b50620003369291506200033a565b5090565b6200035b91905b808211156200033657805460ff1916815560010162000341565b90565b61119c806200036e6000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c806358d2d2fb116100b8578063a845d17c1161007c578063a845d17c14610345578063bd69ddcf1461034d578063c3067bb914610355578063d3bce2e214610372578063d96145511461037a578063da562a98146103a857610141565b806358d2d2fb146102305780635dd9147c146102b05780638260e9b8146102d65780638fddf46b146102de5780639abb285d1461032157610141565b8063338475411161010a5780633384754114610228578063380cee511461023057806339216f7b146102385780633ce68dd51461027157806355513e2314610279578063557614521461029657610141565b8062e3b39314610146578063032aefb91461016457806323060b15146101a357806330a499b0146101cf5780633313478014610220575b600080fd5b61014e6103d4565b6040805160ff9092168252519081900360200190f35b61018a6004803603602081101561017a57600080fd5b50356001600160a01b03166103e2565b6040805163ffffffff9092168252519081900360200190f35b61018a600480360360408110156101b957600080fd5b50803560ff16906020013563ffffffff166103fa565b6101f2600480360360208110156101e557600080fd5b503563ffffffff1661041d565b6040805194855260ff909316602085015263ffffffff91821684840152166060830152519081900360800190f35b61014e610450565b61014e610459565b61018a610468565b6102586004803603602081101561024e57600080fd5b503560ff1661046d565b6040805192835260208301919091528051918290030190f35b61018a610486565b61014e6004803603602081101561028f57600080fd5b503561049d565b61029e6104c4565b60408051918252519081900360200190f35b61029e600480360360208110156102c657600080fd5b50356001600160a01b03166104d1565b61018a61057e565b6102fe600480360360208110156102f457600080fd5b503560ff16610591565b6040805163ffffffff938416815291909216602082015281519081900390910190f35b6103296105b4565b604080516001600160a01b039092168252519081900360200190f35b61018a6105c3565b61018a6105d6565b61014e6004803603602081101561036b57600080fd5b50356105e9565b61018a6105f6565b6103a66004803603604081101561039057600080fd5b506001600160a01b038135169060200135610609565b005b6103a6600480360360408110156103be57600080fd5b506001600160a01b0381351690602001356106d8565b600754610100900460ff1681565b60006020819052908152604090205463ffffffff1681565b600360209081526000928352604080842090915290825290205463ffffffff1681565b6004602052600090815260409020805460019091015460ff81169063ffffffff6101008204811691600160281b90041684565b60075460ff1681565b60075462010000900460ff1681565b603281565b6001602081905260009182526040909120805491015482565b600754670100000000000000900463ffffffff1681565b600581600381106104aa57fe5b60209182820401919006915054906101000a900460ff1681565b681b1ae4d6e2ef50000081565b6001600160a01b03811660009081526020819052604081205463ffffffff1680156105735763ffffffff811660009081526004602052604090206001015460ff1680156105715763ffffffff821660009081526004602052604090205461056890600660ff6000198501166003811061054657fe5b602081049091015460ff601f9092166101000a9004169063ffffffff61081c16565b92505050610579565b505b60009150505b919050565b6007546301000000900463ffffffff1681565b60026020526000908152604090205463ffffffff80821691600160201b90041682565b6008546001600160a01b031681565b600754600160981b900463ffffffff1681565b600754600160581b900463ffffffff1681565b600681600381106104aa57fe5b600754600160781b900463ffffffff1681565b6008546001600160a01b03163314610660576040805162461bcd60e51b8152602060048201526015602482015274696e76616c696420706f6f6c20616464726573732160581b604482015290519081900360640190fd5b6001600160a01b03821660009081526020819052604090205463ffffffff1680156106c35763ffffffff8082166000908152600460205260409020546106a891849061087e16565b63ffffffff82166000908152600460205260409020556106c9565b506106d4565b6106d2816108c0565b505b5050565b6008546001600160a01b0316331461072f576040805162461bcd60e51b8152602060048201526015602482015274696e76616c696420706f6f6c20616464726573732160581b604482015290519081900360640190fd5b6001600160a01b03821660009081526020819052604090205463ffffffff1680156107775763ffffffff8082166000908152600460205260409020546106a89184906109b916565b506007805466ffffffff00000019811663010000009182900463ffffffff908116600190810182168402929092178085556001600160a01b038716600090815260208181526040808320805494889004861663ffffffff1990951694909417909355955494909404909116808452600490945290912090810180549184905564ffffffff001990911661010083021768ffffffff00000000ff191690556106c9610a13565b60008261082b57506000610878565b8282028284828161083857fe5b04146108755760405162461bcd60e51b81526004018080602001828103825260218152602001806111476021913960400191505060405180910390fd5b90505b92915050565b600061087583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610baa565b63ffffffff81166000908152600460205260408120549060015b60075460ff908116908216116109185760ff81166000908152600160208190526040909120015483101561091057809150610918565b6001016108da565b5060ff811661094457506007805460ff9081166000908152600160208190526040909120018390559054165b63ffffffff831660009081526004602052604090206001015460ff828116911614156109715750506109b6565b60075460ff8281169116141561098f5761098a83610c41565b6106d2565b60075460ff8281166101009092041614156109ad5761098a83610c84565b6106d283610cf4565b50565b600082820183811015610875576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600754600160781b810463ffffffff908116600160581b8304821601811663010000009092041610610ba85760075460ff8116600090815260026020526040902054603263ffffffff918216600160981b909304821692909201161115610a9b5760075460ff166000908152600260205260409020805463ffffffff19166032179055610ad9565b60075460ff81166000908152600260205260409020805463ffffffff198116600160981b90930463ffffffff90811691811691909101169190911790555b60075460ff610100820416600090815260026020526040902054603263ffffffff918216600160981b909304821692909201161115610b3f5760075460ff610100909104166000908152600260205260409020805463ffffffff19166032179055610b81565b600754610100810460ff166000908152600260205260409020805463ffffffff198116600160981b90930463ffffffff90811691811691909101169190911790555b60078054600160581b63ffffffff63010000008304160263ffffffff60581b199091161790555b565b60008184841115610c395760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610bfe578181015183820152602001610be6565b50505050905090810190601f168015610c2b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60075460ff16610c5081610d80565b15610c6457610c5f8282610dc4565b6106d4565b6000610c6f82610fcb565b9050610c7a81610c84565b6106d28383610dc4565b600754610100900460ff16610c9881610d80565b15610cac57610ca78282610dc4565b610cce565b6000610cb782610fcb565b9050610cc281610cf4565b610ccc8383610dc4565b505b600181810160ff9081166000908152602083905260408082205494909216815220015550565b60075462010000900460ff16610d0a8282610dc4565b60ff6001828101821660009081526020828152604080832054948616835280832090930193909355600290925290205463ffffffff808216600160201b9092041611156106d45760ff1660009081526002602052604090208054600160201b810463ffffffff1663ffffffff1990911617905550565b60ff811660009081526002602052604081205463ffffffff600160201b820481169181169190910390811615610dba576001915050610579565b6000915050610579565b63ffffffff80831660008181526004602090815260408083206001908101805460ff898116808852600287528588208054600160201b908190048c16600160281b81810268ffffffff00000000001960ff19891687171617909755928a5281548181048d169097018c160267ffffffff0000000019909616959095179094556003865284872084885290955292909420805463ffffffff19169095179094559081169391900416908215801590610e8157508260ff168460ff1614155b8015610eb1575060ff8316600090815260036020908152604080832063ffffffff80871685529252909120541615155b15610fc45760ff83166000908152600260209081526040808320546003835281842060001963ffffffff600160201b9093048316018083168652935292205490919081169087168114610f645763ffffffff8181166000818152600460209081526040808320600101805460ff191660ff8c1690811768ffffffff00000000001916600160281b978c169788021790915583526003825280832094835293905291909120805463ffffffff191690911790555b5060ff8416600081815260036020908152604080832063ffffffff95861684528252808320805463ffffffff191690559282526002905220805467ffffffff00000000198116600160201b91829004841660001901909316029190911790555b5050505050565b6000806000610fd984611075565b60ff959095166000818152600160208181526040808420999099556003815288832063ffffffff9586168085528183528a85208054968652600284528b862054600160201b9004881660001901881686529183528a852054871663ffffffff198716811790925590845260049091529790912001805468ffffffff00000000001916600160281b90970296909617909555939093169392505050565b60ff811660009081526001602081905260408220015481908082805b60ff878116600090815260026020526040902054600160201b900463ffffffff16908216101561113b5760ff80881660009081526003602090815260408083209385168352929052205463ffffffff16806110ec5750611133565b63ffffffff8116600090815260046020526040902054858110156111245784861015611116578594505b8095508260ff169350611130565b84811015611130578094505b50505b600101611091565b50935091505091509156fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72315820bd89de071754c236cb7d3ded555332ab520e87ba4caec9677d781759d792f4e264736f6c63430005100032536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616c6c6572206973206e6f742052657761726473446973747269627574696f6e20636f6e74726163745361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a7231582053c8e9c6fc37e567280b796e58b9cd7e9d3b3c36152693cf1f1dfe9726570b7464736f6c63430005100032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f5ce85036bb724762f9abd18b4a5d98e0080316400000000000000000000000034d3d2b46881588387dbe17e3b478dcb8b1a245000000000000000000000000084f00d034c6fa116c4b487087d8f05bc1babd406
-----Decoded View---------------
Arg [0] : rewardsDistribution_ (address): 0xF5ce85036Bb724762F9ABD18b4a5d98E00803164
Arg [1] : token_ (address): 0x34D3d2b46881588387Dbe17e3B478DcB8b1A2450
Arg [2] : lpToken_ (address): 0x84F00D034c6Fa116C4B487087d8F05Bc1BabD406
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000f5ce85036bb724762f9abd18b4a5d98e00803164
Arg [1] : 00000000000000000000000034d3d2b46881588387dbe17e3b478dcb8b1a2450
Arg [2] : 00000000000000000000000084f00d034c6fa116c4b487087d8f05bc1babd406
Deployed Bytecode Sourcemap
32148:6478:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32148:6478:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35183:272;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35183:272:0;-1:-1:-1;;;;;35183:272:0;;:::i;:::-;;;;;;;;;;;;;;;;35931:479;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;35931:479:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;35931:479:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;35931:479:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;35931:479:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35931:479:0;;-1:-1:-1;;35931:479:0;;;-1:-1:-1;;35931:479:0;;;;;;;;;;;;-1:-1:-1;35931:479:0;;;;:::i;:::-;;34220:125;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34220:125:0;;:::i;32647:36::-;;;:::i;32534:32::-;;;:::i;29049:91::-;;;:::i;32451:41::-;;;:::i;17321:26::-;;;:::i;:::-;;;;-1:-1:-1;;;;;17321:26:0;;;;;;;;;;;;;;28457:22;;;:::i;36422:218::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36422:218:0;;:::i;32293:71::-;;;:::i;38027:596::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38027:596:0;;:::i;36753:1242::-;;;:::i;31785:34::-;;;:::i;32735:37::-;;;:::i;32977:50::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32977:50:0;-1:-1:-1;;;;;32977:50:0;;:::i;32862:58::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32862:58:0;-1:-1:-1;;;;;32862:58:0;;:::i;32573:30::-;;;:::i;32610:::-;;;:::i;29492:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29492:110:0;-1:-1:-1;;;;;29492:110:0;;:::i;34353:126::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34353:126:0;;:::i;32927:43::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32927:43:0;-1:-1:-1;;;;;32927:43:0;;:::i;34613:132::-;;;:::i;32259:27::-;;;:::i;32779:32::-;;;:::i;28814:43::-;;;:::i;34487:118::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34487:118:0;;:::i;32818:35::-;;;:::i;17635:256::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17635:256:0;-1:-1:-1;;;;;17635:256:0;;:::i;29148:225::-;;;:::i;29610:120::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29610:120:0;-1:-1:-1;;;;;29610:120:0;;:::i;34753:422::-;;;:::i;29738:89::-;;;:::i;32371:71::-;;;:::i;35546:294::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35546:294:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;35546:294:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;35546:294:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;35546:294:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35546:294:0;;-1:-1:-1;35546:294:0;;-1:-1:-1;;;;;35546:294:0:i;36648:97::-;;;:::i;33988:224::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33988:224:0;;-1:-1:-1;;;;;33988:224:0;;;;;;:::i;32692:36::-;;;:::i;28763:44::-;;;:::i;31536:107::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31536:107:0;-1:-1:-1;;;;;31536:107:0;;:::i;29381:103::-;;;:::i;28488:80::-;;;:::i;32501:26::-;;;:::i;35183:272::-;-1:-1:-1;;;;;35429:17:0;;35237:7;35429:17;;;:8;:17;;;;;;;;;35344:23;:32;;;;;;35277:170;;35429:17;35277:129;;35401:4;;35277:101;;35323:54;;:16;:14;:16::i;:::-;:20;:54;:20;:54;:::i;:::-;35277:23;35292:7;35277:14;:23::i;:::-;:45;:101;:45;:101;:::i;:::-;:123;:129;:123;:129;:::i;:::-;:151;:170;:151;:170;:::i;:::-;35257:190;35183:272;-1:-1:-1;;35183:272:0:o;35931:479::-;36079:10;33332:16;:14;:16::i;:::-;33308:21;:40;33377:26;:24;:26::i;:::-;33359:15;:44;-1:-1:-1;;;;;33418:21:0;;;33414:160;;33476:15;33483:7;33476:6;:15::i;:::-;-1:-1:-1;;;;;33456:17:0;;;;;;:8;:17;;;;;;;;:35;;;;33541:21;;33506:23;:32;;;;;;:56;33414:160;36124:1;36115:6;:10;36107:37;;;;;-1:-1:-1;;;36107:37:0;;;;;;;;;;;;-1:-1:-1;;;36107:37:0;;;;;;;;;;;;;;;36200:8;;36176:95;;;-1:-1:-1;;;36176:95:0;;36218:10;36176:95;;;;36238:4;36176:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36200:8:0;;;;-1:-1:-1;;36176:95:0;;;;;-1:-1:-1;;36176:95:0;;;;;;;;-1:-1:-1;36200:8:0;36176:95;;;5:2:-1;;;;30:1;27;20:12;5:2;36176:95:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36176:95:0;;;;36284:28;36296:6;36304:7;36284:11;:28::i;:::-;36341:10;36325:27;;;;:15;:27;;;;;;;;;36355:3;36325:33;;36376:26;;;;;;;;;;;;;;;;;35931:479;;;;;;;:::o;34220:125::-;17577:11;;-1:-1:-1;;;;;17577:11:0;17563:10;:25;17555:52;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;;;;34305:15;:32;34220:125::o;32647:36::-;;;;:::o;32534:32::-;;;;:::o;29049:91::-;29120:12;;29049:91;;:::o;32451:41::-;32486:6;32451:41;:::o;17321:26::-;;;-1:-1:-1;;;;;17321:26:0;;:::o;28457:22::-;;;-1:-1:-1;;;;;28457:22:0;;:::o;36422:218::-;36486:10;33332:16;:14;:16::i;:::-;33308:21;:40;33377:26;:24;:26::i;:::-;33359:15;:44;-1:-1:-1;;;;;33418:21:0;;;33414:160;;33476:15;33483:7;33476:6;:15::i;:::-;-1:-1:-1;;;;;33456:17:0;;;;;;:8;:17;;;;;;;;:35;;;;33541:21;;33506:23;:32;;;;;;:56;33414:160;36531:1;36522:6;:10;36514:40;;;;;-1:-1:-1;;;36514:40:0;;;;;;;;;;;;-1:-1:-1;;;36514:40:0;;;;;;;;;;;;;;;36565:22;36580:6;36565:14;:22::i;:::-;36603:29;;;;;;;;36613:10;;36603:29;;;;;;;;;;36422:218;;:::o;32293:71::-;;;-1:-1:-1;;;;;32293:71:0;;:::o;38027:596::-;31896:19;;-1:-1:-1;;;;;31896:19:0;31882:10;:33;31874:88;;;;-1:-1:-1;;;31874:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38152:1;33332:16;:14;:16::i;:::-;33308:21;:40;33377:26;:24;:26::i;:::-;33359:15;:44;-1:-1:-1;;;;;33418:21:0;;;33414:160;;33476:15;33483:7;33476:6;:15::i;:::-;-1:-1:-1;;;;;33456:17:0;;;;;;:8;:17;;;;;;;;:35;;;;33541:21;;33506:23;:32;;;;;;:56;33414:160;38195:13;;38176:15;:32;38172:309;;38239:20;:6;32486;38239:20;:10;:20;:::i;:::-;38225:11;:34;38172:309;;;38312:13;;38292:17;;38312:34;;38330:15;38312:34;:17;:34;:::i;:::-;38292:54;;38361:16;38380:26;38394:11;;38380:9;:13;;:26;;;;:::i;:::-;38361:45;-1:-1:-1;38435:34:0;32486:6;38435:20;:6;38361:45;38435:20;:10;:20;:::i;:34::-;38421:11;:48;-1:-1:-1;;38172:309:0;38509:15;38491;:33;;;38551:29;;32486:6;38551:29;:19;:29;:::i;:::-;38535:13;:45;38596:19;;;;;;;;;;;;;;;;;31973:1;38027:596;:::o;36753:1242::-;36794:10;33332:16;:14;:16::i;:::-;33308:21;:40;33377:26;:24;:26::i;:::-;33359:15;:44;-1:-1:-1;;;;;33418:21:0;;;33414:160;;33476:15;33483:7;33476:6;:15::i;:::-;-1:-1:-1;;;;;33456:17:0;;;;;;:8;:17;;;;;;;;:35;;;;33541:21;;33506:23;:32;;;;;;:56;33414:160;36817:14;36834:18;36841:10;36834:6;:18::i;:::-;36817:35;-1:-1:-1;36867:10:0;;36863:1125;;36903:10;36917:1;36894:20;;;:8;:20;;;;;;;;:24;;;36959:11;;36947:57;;-1:-1:-1;;;36947:57:0;;;;;;;;;;;;;;;;;36917:1;;-1:-1:-1;;;;;36959:11:0;;;;-1:-1:-1;;36947:57:0;;;;;36894:20;;36947:57;;;;;;36917:1;36959:11;36947:57;;;5:2:-1;;;;30:1;27;20:12;5:2;36947:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36947:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36947:57:0;;-1:-1:-1;37022:7:0;;37019:90;;37076:11;;37049:13;;:44;;-1:-1:-1;;;;;37049:13:0;;;;37076:11;37089:3;37049:26;:44::i;:::-;37137:18;37158:42;37190:9;;37158:27;37169:15;;37158:6;:10;;:27;;;;:::i;:42::-;37137:63;-1:-1:-1;37218:12:0;;37215:102;;37277:11;;37250:13;;:51;;-1:-1:-1;;;;;37250:13:0;;;;37277:11;37290:10;37250:26;:51::i;:::-;37331:18;37352:31;37372:10;37352:15;:6;37363:3;37352:15;:10;:15;:::i;:31::-;37515:11;;37501:10;37398:18;37485:27;;;:15;:27;;;;;;37331:52;;-1:-1:-1;37398:18:0;37485:41;37477:3;:50;37474:149;;;37561:46;37597:9;;37561:31;37576:15;;37561:10;:14;;:31;;;;:::i;:46::-;37548:59;;37474:149;37640:12;;37637:160;;37699:11;;37672:13;;:51;;-1:-1:-1;;;;;37672:13:0;;;;37699:11;37712:10;37672:26;:51::i;:::-;37755:26;:10;37770;37755:26;:14;:26;:::i;:::-;37742:39;;37637:160;37816:12;;37813:102;;37848:13;;:51;;-1:-1:-1;;;;;37848:13:0;37875:10;37887;37848:26;:51::i;:::-;37942:34;;;;;;;;37953:10;;37942:34;;;;;;;;;;36863:1125;;;;;33584:1;36753:1242;:::o;31785:34::-;;;-1:-1:-1;;;;;31785:34:0;;:::o;32735:37::-;;;;:::o;32977:50::-;;;;;;;;;;;;;:::o;32862:58::-;;;;;;;;;;;;;:::o;32573:30::-;;;;:::o;32610:::-;;;;:::o;29492:110::-;-1:-1:-1;;;;;29576:18:0;29549:7;29576:18;;;:9;:18;;;;;;;29492:110::o;34353:126::-;17577:11;;-1:-1:-1;;;;;17577:11:0;17563:10;:25;17555:52;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;;;;34439:15;:32;34353:126::o;32927:43::-;;;;;;;;;;;;;:::o;34613:132::-;34670:7;34697:40;34706:15;34723:13;;34697:8;:40::i;:::-;34690:47;;34613:132;:::o;32259:27::-;;;-1:-1:-1;;;;;32259:27:0;;:::o;32779:32::-;;;;:::o;28814:43::-;;;-1:-1:-1;;;;;28814:43:0;;:::o;34487:118::-;17577:11;;-1:-1:-1;;;;;17577:11:0;17563:10;:25;17555:52;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;;;;34573:11;:24;34487:118::o;32818:35::-;;;;:::o;17635:256::-;17577:11;;-1:-1:-1;;;;;17577:11:0;17563:10;:25;17555:52;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17726:24:0;;17718:68;;;;;-1:-1:-1;;;17718:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17824:11;;;17802:46;;-1:-1:-1;;;;;17802:46:0;;;;17824:11;;;17802:46;;;17859:11;:24;;-1:-1:-1;;;;;;17859:24:0;-1:-1:-1;;;;;17859:24:0;;;;;;;;;;17635:256::o;29148:225::-;17577:11;;-1:-1:-1;;;;;17577:11:0;17563:10;:25;17555:52;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;;;;29217:13;;-1:-1:-1;;;;;29217:13:0;29213:112;;29286:26;;;;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;29262:13:0;:51;;-1:-1:-1;;;;;;29262:51:0;-1:-1:-1;;;;;29262:51:0;;;;;;;;;;29213:112;29352:13;;29335:14;:30;;-1:-1:-1;;;;;;29335:30:0;-1:-1:-1;;;;;29352:13:0;;;29335:30;;;;;;29148:225::o;29610:120::-;-1:-1:-1;;;;;29699:23:0;29672:7;29699:23;;;:14;:23;;;;;;;29610:120::o;34753:422::-;34800:7;34824:12;:10;:12::i;:::-;34820:78;;-1:-1:-1;34865:21:0;;34858:28;;34820:78;34928:239;34972:180;35139:12;:10;:12::i;:::-;34972:140;35107:4;34972:108;35068:11;;34972:69;35025:15;;34972:26;:24;:26::i;:180::-;34928:21;;;:239;:25;:239;:::i;29738:89::-;29808:11;;29738:89;:::o;32371:71::-;;;-1:-1:-1;;;;;32371:71:0;;:::o;35546:294::-;35638:10;33332:16;:14;:16::i;:::-;33308:21;:40;33377:26;:24;:26::i;:::-;33359:15;:44;-1:-1:-1;;;;;33418:21:0;;;33414:160;;33476:15;33483:7;33476:6;:15::i;:::-;-1:-1:-1;;;;;33456:17:0;;;;;;:8;:17;;;;;;;;:35;;;;33541:21;;33506:23;:32;;;;;;:56;33414:160;35683:1;35674:6;:10;35666:37;;;;;-1:-1:-1;;;35666:37:0;;;;;;;;;;;;-1:-1:-1;;;35666:37:0;;;;;;;;;;;;;;;35714:28;35726:6;35734:7;35714:11;:28::i;:::-;35771:10;35755:27;;;;:15;:27;;;;;;;;;35785:3;35755:33;;35806:26;;;;;;;;;;;;;;;;;35546:294;;;:::o;36648:97::-;36684:31;36693:21;36703:10;36693:9;:21::i;:::-;36684:8;:31::i;:::-;36726:11;:9;:11::i;:::-;36648:97::o;33988:224::-;17577:11;;-1:-1:-1;;;;;17577:11:0;17563:10;:25;17555:52;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;;;;34084:13;;-1:-1:-1;;;;;34075:22:0;;;34084:13;;34075:22;;34067:41;;;;;-1:-1:-1;;;34067:41:0;;;;;;;;;;;;-1:-1:-1;;;34067:41:0;;;;;;;;;;;;;;;34136:8;;-1:-1:-1;;;;;34127:17:0;;;34136:8;;34127:17;;34119:35;;;;;-1:-1:-1;;;34119:35:0;;;;;;;;;;;;-1:-1:-1;;;34119:35:0;;;;;;;;;;;;;;;34184:11;;34165:39;;-1:-1:-1;;;;;34165:18:0;;;;34184:11;34197:6;34165:18;:39::i;32692:36::-;;;;:::o;28763:44::-;;;-1:-1:-1;;;;;28763:44:0;;:::o;31536:107::-;17577:11;;-1:-1:-1;;;;;17577:11:0;17563:10;:25;17555:52;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;;;;31611:11;:24;;-1:-1:-1;;;;;;31611:24:0;-1:-1:-1;;;;;31611:24:0;;;;;;;;;;31536:107::o;29381:103::-;17577:11;;-1:-1:-1;;;;;17577:11:0;17563:10;:25;17555:52;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;-1:-1:-1;;;17555:52:0;;;;;;;;;;;;;;;29447:14;:29;;-1:-1:-1;;;;;;29447:29:0;;;29381:103::o;28488:80::-;;;-1:-1:-1;;;;;28488:80:0;;:::o;32501:26::-;;;;:::o;1371:136::-;1429:7;1456:43;1460:1;1463;1456:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1449:50;1371:136;-1:-1:-1;;;1371:136:0:o;2287:471::-;2345:7;2590:6;2586:47;;-1:-1:-1;2620:1:0;2613:8;;2586:47;2657:5;;;2661:1;2657;:5;:1;2681:5;;;;;:10;2673:56;;;;-1:-1:-1;;;2673:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3226:132;3284:7;3311:39;3315:1;3318;3311:39;;;;;;;;;;;;;;;;;:3;:39::i;915:181::-;973:7;1005:5;;;1029:6;;;;1021:46;;;;;-1:-1:-1;;;1021:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;29837:913;29924:12;;:24;;29941:6;29924:24;:16;:24;:::i;:::-;29909:12;:39;29993:10;29983:21;;;;:9;:21;;;;;;:33;;30009:6;29983:33;:25;:33;:::i;:::-;29969:10;29959:21;;;;:9;:21;;;;;:57;30033:14;;-1:-1:-1;;;;;30033:14:0;:30;30029:481;;30125:10;30110:26;;;;:14;:26;;;;;;30094:11;;:43;;;:15;:43;:::i;:::-;30080:11;:57;30167:14;;30152:55;;;-1:-1:-1;;;30152:55:0;;30188:10;30152:55;;;;;;;;;;;;-1:-1:-1;;;;;30167:14:0;;;;30152:35;;:55;;;;;-1:-1:-1;;30152:55:0;;;;;;;;-1:-1:-1;30167:14:0;30152:55;;;5:2:-1;;;;30:1;27;20:12;5:2;30152:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30268:14:0;;30253:51;;;-1:-1:-1;;;30253:51:0;;30293:10;30253:51;;;;;;-1:-1:-1;;;;;30268:14:0;;;;-1:-1:-1;30253:39:0;;-1:-1:-1;30253:51:0;;;;;;;;;;;;;;;30268:14;30253:51;;;5:2:-1;;;;30:1;27;20:12;5:2;30253:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30253:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30253:51:0;30239:10;30224:26;;;;:14;30253:51;30224:26;;;;:80;;;30333:11;;:43;;;:15;:43;:::i;:::-;30319:11;:57;30029:481;;;30421:12;;30407:11;:26;30487:10;-1:-1:-1;30477:21:0;;;:9;:21;;;;;;;;;30448:14;:26;;;;;;:50;30029:481;30522:8;;:60;;-1:-1:-1;;;;;30522:8:0;30548:10;30568:4;30575:6;30522:25;:60::i;:::-;30614:11;;30602:45;;;-1:-1:-1;;;30602:45:0;;30636:10;30602:45;;;;;;-1:-1:-1;;;;;30614:11:0;;;;-1:-1:-1;;30602:45:0;;;;;;;;;;;;;;;-1:-1:-1;30614:11:0;30602:45;;;5:2:-1;;;;30:1;27;20:12;5:2;30602:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30602:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30602:45:0;30597:134;;30676:11;;30664:55;;;-1:-1:-1;;;30664:55:0;;30699:10;30664:55;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30676:11:0;;;;-1:-1:-1;;30699:10:0;;30664:55;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30664:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30664:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30664:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;29837:913:0;;:::o;30758:768::-;30827:1;30818:6;:10;30810:33;;;;;-1:-1:-1;;;30810:33:0;;;;;;;;;;;;-1:-1:-1;;;30810:33:0;;;;;;;;;;;;;;;30871:12;;:24;;30888:6;30871:24;:16;:24;:::i;:::-;30856:12;:39;30940:10;30930:21;;;;:9;:21;;;;;;:33;;30956:6;30930:33;:25;:33;:::i;:::-;30916:10;30906:21;;;;:9;:21;;;;;:57;30988:14;;-1:-1:-1;;;;;30988:14:0;:30;30984:482;;31080:10;31065:26;;;;:14;:26;;;;;;31049:11;;:43;;;:15;:43;:::i;:::-;31035:11;:57;31122:14;;31107:56;;;-1:-1:-1;;;31107:56:0;;31144:10;31107:56;;;;;;;;;;;;-1:-1:-1;;;;;31122:14:0;;;;-1:-1:-1;;31107:56:0;;;;;-1:-1:-1;;31107:56:0;;;;;;;;-1:-1:-1;31122:14:0;31107:56;;;5:2:-1;;;;30:1;27;20:12;5:2;31107:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31222:14:0;;31207:51;;;-1:-1:-1;;;31207:51:0;;31247:10;31207:51;;;;;;-1:-1:-1;;;;;31222:14:0;;;;-1:-1:-1;31207:39:0;;-1:-1:-1;31207:51:0;;;;;;;;;;;;;;;31222:14;31207:51;;;5:2:-1;;;;30:1;27;20:12;5:2;31207:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31207:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31207:51:0;31193:10;31178:26;;;;:14;31207:51;31178:26;;;;:80;;;31287:11;;:43;;;:15;:43;:::i;:::-;31273:11;:57;30984:482;;;31377:12;;31363:11;:26;31443:10;-1:-1:-1;31433:21:0;;;:9;:21;;;;;;;;;31404:14;:26;;;;;;:50;30984:482;31476:8;;:42;;-1:-1:-1;;;;;31476:8:0;31499:10;31511:6;31476:21;:42::i;:::-;30758:768;:::o;13747:298::-;13702:34;;;;;;;;;;;;;;;;;13886:43;;-1:-1:-1;;;;;13886:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;13886:43:0;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;13866:64:0;;;;-1:-1:-1;;13845:17:0;;13866:19;;;13886:43;13866:64;;;25:18:-1;13866:64:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13866:64:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;13830:100:0;;;;13949:7;:57;;;;-1:-1:-1;13961:11:0;;:16;;:44;;;13992:4;13981:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13981:24:0;13961:44;13941:96;;;;;-1:-1:-1;;;13941:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13747:298;;;;;:::o;5936:106::-;5994:7;6025:1;6021;:5;:13;;6033:1;6021:13;;;-1:-1:-1;6029:1:0;;5936:106;-1:-1:-1;5936:106:0:o;1844:192::-;1930:7;1966:12;1958:6;;;;1950:29;;;;-1:-1:-1;;;1950:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1950:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2002:5:0;;;1844:192::o;3888:345::-;3974:7;4076:12;4069:5;4061:28;;;;-1:-1:-1;;;4061:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27:10;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4061:28:0;;4100:9;4116:1;4112;:5;;;;;;;3888:345;-1:-1:-1;;;;;3888:345:0:o;14244:204::-;14371:68;;;-1:-1:-1;;;;;14371:68:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14371:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;14345:95:0;;14364:5;;14371:68;16703:27;;:25;;;:27::i;:::-;16695:71;;;;;-1:-1:-1;;;16695:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16840:12;16854:23;16889:5;-1:-1:-1;;;;;16881:19:0;16901:4;16881:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16881:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;16839:67:0;;;;16925:7;16917:52;;;;;-1:-1:-1;;;16917:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16986:17;;:21;16982:224;;17128:10;17117:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17117:30:0;17109:85;;;;-1:-1:-1;;;17109:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10695:619;10755:4;11223:20;;11066:66;11263:23;;;;;;:42;;-1:-1:-1;11290:15:0;;;11263:42;11255:51;10695:619;-1:-1:-1;;;;10695:619:0:o;32148:6478::-;;;;;;;;:::o
Swarm Source
bzzr://53c8e9c6fc37e567280b796e58b9cd7e9d3b3c36152693cf1f1dfe9726570b74
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.