Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,438 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 12059179 | 1805 days ago | IN | 0 ETH | 0 | ||||
| Transfer | 12059167 | 1805 days ago | IN | 0 ETH | 0 | ||||
| Transfer | 6833784 | 2638 days ago | IN | 0 ETH | 0.0004507 | ||||
| Transfer | 6833783 | 2638 days ago | IN | 0 ETH | 0.0016782 | ||||
| Transfer | 6810839 | 2641 days ago | IN | 0 ETH | 0.00214241 | ||||
| Transfer | 6810789 | 2641 days ago | IN | 0 ETH | 0.00434368 | ||||
| Transfer | 6799784 | 2643 days ago | IN | 0 ETH | 0.00868353 | ||||
| Transfer | 6543752 | 2685 days ago | IN | 0 ETH | 0.00350362 | ||||
| Transfer | 6543732 | 2685 days ago | IN | 0 ETH | 0.0037372 | ||||
| Transfer | 6531257 | 2687 days ago | IN | 0 ETH | 0.00159884 | ||||
| Transfer | 6512465 | 2690 days ago | IN | 0 ETH | 0.00057915 | ||||
| Transfer | 6512396 | 2690 days ago | IN | 0 ETH | 0.00057903 | ||||
| Transfer | 6451548 | 2700 days ago | IN | 0 ETH | 0.00140145 | ||||
| Transfer | 6451537 | 2700 days ago | IN | 0 ETH | 0.00107599 | ||||
| Transfer | 6442570 | 2702 days ago | IN | 0 ETH | 0.00144757 | ||||
| Transfer | 6388496 | 2711 days ago | IN | 0 ETH | 0.00210246 | ||||
| Transfer | 6371093 | 2713 days ago | IN | 0 ETH | 0.00178141 | ||||
| Transfer | 6316415 | 2722 days ago | IN | 0 ETH | 0.0057903 | ||||
| Transfer | 6309301 | 2724 days ago | IN | 0 ETH | 0.00097581 | ||||
| Transfer | 6309280 | 2724 days ago | IN | 0 ETH | 0.00146197 | ||||
| Transfer | 6285931 | 2728 days ago | IN | 0 ETH | 0.00123962 | ||||
| Transfer | 6285101 | 2728 days ago | IN | 0 ETH | 0.00144757 | ||||
| Transfer | 6276030 | 2729 days ago | IN | 0 ETH | 0.00107144 | ||||
| Transfer | 6273981 | 2730 days ago | IN | 0 ETH | 0.00017841 | ||||
| Transfer | 6273702 | 2730 days ago | IN | 0 ETH | 0.00063693 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BwinToken
Compiler Version
v0.4.21+commit.dfe3193c
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2018-04-03
*/
pragma solidity ^0.4.13;
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract ContractReceiver {
struct TKN {
address sender;
uint value;
bytes data;
bytes4 sig;
}
function tokenFallback(address _from, uint _value, bytes _data) public pure {
TKN memory tkn;
tkn.sender = _from;
tkn.value = _value;
tkn.data = _data;
uint32 u = uint32(_data[3]) + (uint32(_data[2]) << 8) + (uint32(_data[1]) << 16) + (uint32(_data[0]) << 24);
tkn.sig = bytes4(u);
/* tkn variable is analogue of msg variable of Ether transaction
* tkn.sender is person who initiated this token transaction (analogue of msg.sender)
* tkn.value the number of tokens that were sent (analogue of msg.value)
* tkn.data is data of token transaction (analogue of msg.data)
* tkn.sig is 4 bytes signature of function
* if data of token transaction is a function execution
*/
}
}
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
* account.
*/
function Ownable() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
*/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
contract CrowdsaleFront is Ownable{
//Crowdsale public provider;
using SafeMath for uint256;
mapping (address => uint256) internal userAmounts;
mapping (address => uint256) internal rewardPayed;
BwinCommons internal commons;
function setCommons(address _addr) public onlyOwner {
commons = BwinCommons(_addr);
}
// fallback function can be used to buy tokens
function () public payable {
buyTokens(msg.sender, 0, 999);
}
// low level token purchase function
function buyTokens(address beneficiary, address _parent, uint256 _top) public payable returns(bool){
bool ret;
uint256 tokens;
(ret, tokens) = Crowdsale(commons.get("Crowdsale")).buyTokens.value(msg.value)(beneficiary, beneficiary, _parent, _top);
userAmounts[beneficiary] = userAmounts[beneficiary].add(tokens);
require(ret);
}
function getTokensFromBuy(address _addr) public view returns (uint256){
return userAmounts[_addr];
}
function rewardPayedOf(address _user) public view returns (uint256) {
return rewardPayed[_user];
}
function rewardPay(address _user, uint256 amount) public {
require(msg.sender == commons.get("Crowdsale"));
rewardPayed[_user] = rewardPayed[_user].add(amount);
}
// @return true if crowdsale event has ended
function hasEnded() public view returns (bool){
return Crowdsale(commons.get("Crowdsale")).hasEnded();
}
}
contract InterestHolder is Ownable{
using SafeMath for uint256;
BwinCommons internal commons;
function setCommons(address _addr) public onlyOwner {
commons = BwinCommons(_addr);
}
bool public locked = true;
event ReceiveBalanceUpdate(address _addr,address _user);
event ReceiveBalanceUpdateUserType(address _addr,address _user,uint256 _type);
function receiveBalanceUpdate(address _user) external returns (bool) {
emit ReceiveBalanceUpdate(msg.sender, _user);
Token token = Token(commons.get("Token"));
User user = User(commons.get("User"));
if (msg.sender == address(token)){
uint256 _type;
(,,_type) = user.getUserInfo(_user);
emit ReceiveBalanceUpdateUserType(msg.sender, _user, _type);
if (_type == 0){
return true;
}
process(_user,_type);
return true;
}
return false;
}
event ProcessLx(address _addr,address _user, uint256 _type,uint256 lastBalance, uint256 iAmount, uint256 lastTime);
function process(address _user, uint256 _type) internal{
Token token = Token(commons.get("Token"));
User user = User(commons.get("User"));
uint256 _value = compute(_user, _type);
uint256 balance = token.balanceOf(_user);
user.setInterestor(_user,balance.add(_value),now);
if(_value > 0){
token.mintForWorker(_user,_value);
emit ProcessLx(msg.sender, _user, _type, balance, _value, now);
}
}
event GetLx(address _addr,address _user,uint256 _type);
function compute(address _user, uint256 _type) internal view returns (uint256) {
User user = User(commons.get("User"));
uint256 lastBalance = 0;
uint256 lastTime = 0;
bool exist;
(lastBalance,lastTime,exist) = user.getInterestor(_user);
uint256 _value = 0;
if (exist && lastTime > 0){
uint256 times = now.sub(lastTime);
if (_type == 1){
_value = lastBalance.div(10000).mul(5).div(86400).mul(times);
}else if(_type == 2){
_value = lastBalance.div(10000).mul(8).div(86400).mul(times);
}
}
return _value;
}
function getLx() external returns (uint256) {
User user = User(commons.get("User"));
uint256 _type;
(,,_type) = user.getUserInfo(msg.sender);
emit GetLx(msg.sender, msg.sender, _type);
if (_type == 0){
return 0;
}
return compute(msg.sender, _type);
}
}
contract TokenHolder is Ownable{
using SafeMath for uint256;
BwinCommons internal commons;
function setCommons(address _addr) public onlyOwner {
commons = BwinCommons(_addr);
}
bool locked = true;
mapping (address => uint256) lockedAmount;
event ReceiveLockedAmount(address _addr, address _user, uint256 _amount);
function receiveLockedAmount(address _user, uint256 _amount) external returns (bool) {
address cds = commons.get("Crowdsale");
if (msg.sender == address(cds)){
lockedAmount[_user] = lockedAmount[_user].add(_amount);
emit ReceiveLockedAmount(msg.sender, _user, _amount);
return true;
}
return false;
}
function balanceOf(address _user) public view returns (uint256) {
return lockedAmount[_user];
}
function balance() public view returns (uint256) {
return lockedAmount[msg.sender];
}
function setLock(bool _locked) public onlyOwner{
locked = _locked;
}
function withDrawlocked() public view returns (bool) {
return locked;
}
function withDrawable() public view returns (bool) {
User user = User(commons.get("User"));
uint256 _type;
(,,_type) = user.getUserInfo(msg.sender);
return !locked && (_type > 0) && lockedAmount[msg.sender] > 0;
}
function withDraw() external {
assert(!locked);//用户必须是种子钱包
BwinToken token = BwinToken(commons.get("BwinToken"));
User user = User(commons.get("User"));
uint256 _type;
(,,_type) = user.getUserInfo(msg.sender);
assert(_type > 0);
uint _value = lockedAmount[msg.sender];
lockedAmount[msg.sender] = 0;
token.transfer(msg.sender,_value);
}
}
contract Destructible is Ownable {
function Destructible() public payable { }
/**
* @dev Transfers the current balance to the owner and terminates the contract.
*/
function destroy() onlyOwner public {
selfdestruct(owner);
}
function destroyAndSend(address _recipient) onlyOwner public {
selfdestruct(_recipient);
}
}
contract EtherHolder is Destructible{
using SafeMath for uint256;
bool locked = false;
BwinCommons internal commons;
function setCommons(address _addr) public onlyOwner {
commons = BwinCommons(_addr);
}
struct Account {
address wallet;
address parent;
uint256 radio;
bool exist;
}
mapping (address => uint256) private userAmounts;
uint256 internal _balance;
event ProcessFunds(address _topWallet, uint256 _value ,bool isContract);
event ReceiveFunds(address _addr, address _user, uint256 _value, uint256 _amount);
function receiveFunds(address _user, uint256 _amount) external payable returns (bool) {
emit ReceiveFunds(msg.sender, _user, msg.value, _amount);
Crowdsale cds = Crowdsale(commons.get("Crowdsale"));
User user = User(commons.get("User"));
assert(msg.value == _amount);
if (msg.sender == address(cds)){
address _topWallet;
uint _percent=0;
bool _contract;
uint256 _topValue = 0;
bool _topOk;
uint256 _totalShares = 0;
uint256 _totalSharePercent = 0;
bool _shareRet;
if(user.hasUser(_user)){
(_topWallet,_percent,_contract) = user.getTopInfoDetail(_user);
assert(_percent <= 1000);
(_topValue,_topOk) = processFunds(_topWallet,_amount,_percent,_contract);
}else{
_topOk = true;
}
(_totalShares,_totalSharePercent,_shareRet) = processShares(_amount.sub(_topValue));
assert(_topOk && _shareRet);
assert(_topValue.add(_totalShares) <= _amount);
assert(_totalSharePercent <= 1000);
_balance = _balance.add(_amount);
return true;
}
return false;
}
event ProcessShares(uint256 _amount, uint i, uint256 _percent, bool _contract,address _wallet);
function processShares(uint256 _amount) internal returns(uint256,uint256,bool){
uint256 _sended = 0;
uint256 _sharePercent = 0;
User user = User(commons.get("User"));
for(uint i=0;i<user.getShareHolderCount();i++){
address _wallet;
uint256 _percent;
bool _contract;
emit ProcessShares(_amount, i, _percent, _contract,_wallet);
assert(_percent <= 1000);
(_wallet,_percent,_contract) = user.getShareHolder(i);
uint256 _value;
bool _valueOk;
(_value,_valueOk) = processFunds(_wallet,_amount,_percent,_contract);
_sharePercent = _sharePercent.add(_percent);
_sended = _sended.add(_value);
}
return (_sended,_sharePercent,true);
}
function getAmount(uint256 _amount, uint256 _percent) internal pure returns(uint256){
uint256 _value = _amount.div(1000).mul(_percent);
return _value;
}
function processFunds(address _topWallet, uint256 _amount ,uint256 _percent, bool isContract) internal returns(uint,bool) {
uint256 _value = getAmount(_amount, _percent);
userAmounts[_topWallet] = userAmounts[_topWallet].add(_value);
emit ProcessFunds(_topWallet,_value,isContract);
return (_value,true);
}
function balanceOf(address _user) public view returns (uint256) {
return userAmounts[_user];
}
function balanceOfme() public view returns (uint256) {
return userAmounts[msg.sender];
}
function withDrawlocked() public view returns (bool) {
return locked;
}
function getBalance() public view returns (uint256, uint256) {
return (address(this).balance,_balance);
}
function lock(bool _locked) public onlyOwner{
locked = _locked;
}
event WithDraw(address caller, uint256 _amount);
function withDraw(uint256 _amount) external {
assert(!locked);
assert(userAmounts[msg.sender] >= _amount);
userAmounts[msg.sender] = userAmounts[msg.sender].sub(_amount);
_balance = _balance.sub(_amount);
msg.sender.transfer(_amount);
emit WithDraw(msg.sender, _amount);
}
function destroy() onlyOwner public {
selfdestruct(owner);
}
}
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}
contract RBAC {
using Roles for Roles.Role;
mapping (string => Roles.Role) private roles;
event RoleAdded(address addr, string roleName);
event RoleRemoved(address addr, string roleName);
/**
* A constant role name for indicating admins.
*/
string public constant ROLE_ADMIN = "admin";
/**
* @dev constructor. Sets msg.sender as admin by default
*/
function RBAC()
public
{
addRole(msg.sender, ROLE_ADMIN);
}
/**
* @dev reverts if addr does not have role
* @param addr address
* @param roleName the name of the role
* // reverts
*/
function checkRole(address addr, string roleName)
view
public
{
roles[roleName].check(addr);
}
/**
* @dev determine if addr has role
* @param addr address
* @param roleName the name of the role
* @return bool
*/
function hasRole(address addr, string roleName)
view
public
returns (bool)
{
return roles[roleName].has(addr);
}
/**
* @dev add a role to an address
* @param addr address
* @param roleName the name of the role
*/
function adminAddRole(address addr, string roleName)
onlyAdmin
public
{
addRole(addr, roleName);
}
/**
* @dev remove a role from an address
* @param addr address
* @param roleName the name of the role
*/
function adminRemoveRole(address addr, string roleName)
onlyAdmin
public
{
removeRole(addr, roleName);
}
/**
* @dev add a role to an address
* @param addr address
* @param roleName the name of the role
*/
function addRole(address addr, string roleName)
internal
{
roles[roleName].add(addr);
emit RoleAdded(addr, roleName);
}
/**
* @dev remove a role from an address
* @param addr address
* @param roleName the name of the role
*/
function removeRole(address addr, string roleName)
internal
{
roles[roleName].remove(addr);
emit RoleRemoved(addr, roleName);
}
/**
* @dev modifier to scope access to a single role (uses msg.sender as addr)
* @param roleName the name of the role
* // reverts
*/
modifier onlyRole(string roleName)
{
checkRole(msg.sender, roleName);
_;
}
/**
* @dev modifier to scope access to admins
* // reverts
*/
modifier onlyAdmin()
{
checkRole(msg.sender, ROLE_ADMIN);
_;
}
/**
* @dev modifier to scope access to a set of roles (uses msg.sender as addr)
* @param roleNames the names of the roles to scope access to
* // reverts
*
* @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this
* see: https://github.com/ethereum/solidity/issues/2467
*/
// modifier onlyRoles(string[] roleNames) {
// bool hasAnyRole = false;
// for (uint8 i = 0; i < roleNames.length; i++) {
// if (hasRole(msg.sender, roleNames[i])) {
// hasAnyRole = true;
// break;
// }
// }
// require(hasAnyRole);
// _;
// }
}
contract BwinCommons is RBAC, Destructible {
mapping (string => address) internal addresses;
mapping (address => string) internal names;
event UpdateRegistration(string key, address old, address n);
function register(string key, address ad) public onlyAdmin {
emit UpdateRegistration(key, addresses[key], ad);
addresses[key] = ad;
names[ad] = key;
}
function get(string key) public view returns(address) {
return addresses[key];
}
function remove() public {
string memory key = names[msg.sender];
delete addresses[key];
delete names[msg.sender];
}
}
contract User is RBAC ,Destructible{
struct UserInfo {
//推荐人
address parent;
uint256 top;
bool exist;
uint256 userType;
}
struct Partner {
address addr;
uint256 percent;
bool exist;
bool iscontract;
}
struct UserBalance{
address user;
uint256 balance;
uint256 lastTime;
bool exist;
}
mapping (address => UserBalance) internal balanceForInterests;
uint256[] internal tops;
mapping (uint256 => Partner) internal topDefine;
uint256[] internal shareHolders;
mapping (uint256 => Partner) internal shareHolderInfos;
mapping (address => UserInfo) internal tree;
BwinCommons internal commons;
function setCommons(address _addr) public onlyAdmin {
commons = BwinCommons(_addr);
}
address[] internal users;
event SetInterestor(address caller, address _user, uint256 _balance, uint256 _lastTime);
event SetShareHolders(address caller, uint256 topId, address _topAddr, uint256 _percent, bool iscontract);
event SetTop(address caller, uint256 topId, address _topAddr, uint256 _percent, bool iscontract);
event AddUser(address caller, address _parent, uint256 _top);
event SetUser(address caller, address _user, address _parent, uint256 _top, uint256 _type);
event SetUserType(address caller, address _user, uint _type);
event RemoveUser(address caller, uint _index);
function setInterestor(address _user, uint256 _balance, uint256 _lastTime) public onlyRole("INTEREST_HOLDER"){
balanceForInterests[_user] = UserBalance(_user,_balance,_lastTime,true);
emit SetInterestor(msg.sender,_user,_balance,_lastTime);
}
function getInterestor(address _user) public view returns(uint256,uint256,bool){
return (balanceForInterests[_user].balance,balanceForInterests[_user].lastTime,balanceForInterests[_user].exist);
}
function setShareHolders(uint256 topId, address _topAddr, uint256 _percent, bool iscontract) public onlyAdmin {
if (!shareHolderInfos[topId].exist){
shareHolders.push(topId);
}
shareHolderInfos[topId] = Partner(_topAddr, _percent, true, iscontract);
emit SetShareHolders(msg.sender,topId,_topAddr,_percent,iscontract);
}
function getShareHolder(uint256 _index) public view returns(address, uint256, bool){
uint256 shareHolderId = shareHolders[_index];
return getShareHoldersInfo(shareHolderId);
}
function getShareHolderCount() public view returns(uint256){
return shareHolders.length;
}
function getShareHoldersInfo(uint256 shareHolderId) public view returns(address, uint256, bool){
return (shareHolderInfos[shareHolderId].addr, shareHolderInfos[shareHolderId].percent, shareHolderInfos[shareHolderId].iscontract);
}
function setTop(uint256 topId, address _topAddr, uint256 _percent, bool iscontract) public onlyAdmin {
if (!topDefine[topId].exist){
tops.push(topId);
}
topDefine[topId] = Partner(_topAddr, _percent, true, iscontract);
emit SetTop(msg.sender, topId, _topAddr, _percent, iscontract);
}
function getTopInfoDetail(address _user) public view returns(address, uint256, bool){
uint256 _topId;
address _wallet;
uint256 _percent;
bool _contract;
(,_topId,) = getUserInfo(_user);
(_wallet,_percent,_contract) = getTopInfo(_topId);
return (_wallet,_percent,_contract);
}
function getTopInfo(uint256 topId) public view returns(address, uint256, bool){
return (topDefine[topId].addr, topDefine[topId].percent, topDefine[topId].iscontract);
}
function addUser(address _parent, uint256 _top) public {
require(msg.sender != _parent);
if (_parent != address(0)) {
require(tree[_parent].exist);
}
require(!hasUser(msg.sender));
tree[msg.sender] = UserInfo(_parent, _top, true, 0);
users.push(msg.sender);
emit AddUser(msg.sender, _parent, _top);
}
function getUsersCount() public view returns(uint) {
return users.length;
}
function getUserInfo(address _user) public view returns(address, uint256, uint256) {
return (tree[_user].parent, tree[_user].top, tree[_user].userType);
}
function hasUser(address _user) public view returns(bool) {
return tree[_user].exist;
}
function setUser(address _user, address _parent, uint256 _top, uint256 _type) public onlyAdmin {
if(!tree[_user].exist){
users.push(_user);
}
tree[_user] = UserInfo(_parent, _top, true, _type);
emit SetUser(msg.sender, _user, _parent, _top, _type);
}
function setUserType(address _user, uint _type) public onlyAdmin {
require(hasUser(_user));
tree[_user].userType = _type;
emit SetUserType(msg.sender, _user, _type);
}
function indexOfUserInfo(uint _index) public view returns (address) {
return users[_index];
}
function removeUser(uint _index) public onlyAdmin {
address _user = indexOfUserInfo(_index);
delete users[_index];
delete tree[_user];
emit RemoveUser(msg.sender, _index);
}
}
contract Pausable is RBAC {
event Pause();
event Unpause();
bool public paused = false;
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*/
modifier whenNotPaused() {
require(!paused);
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*/
modifier whenPaused() {
require(paused);
_;
}
/**
* @dev called by the owner to pause, triggers stopped state
*/
function pause() onlyAdmin whenNotPaused public {
paused = true;
emit Pause();
}
/**
* @dev called by the owner to unpause, returns to normal state
*/
function unpause() onlyAdmin whenPaused public {
paused = false;
emit Unpause();
}
}
contract BwinToken is ERC20, Pausable, Destructible{
//Token t;
BwinCommons internal commons;
function setCommons(address _addr) public onlyOwner {
commons = BwinCommons(_addr);
}
string public constant name = "FFgame Coin";
string public constant symbol = "FFC";
uint8 public constant decimals = 18;
event Transfer(address indexed from, address indexed to, uint256 value);
function BwinToken() public {
addRole(msg.sender, ROLE_ADMIN);
}
function totalSupply() public view returns (uint256){
Token t = Token(commons.get("Token"));
return t.totalSupply();
}
function balanceOf(address who) public view returns (uint256){
Token t = Token(commons.get("Token"));
return t.balanceOf(who);
}
function transfer(address to, uint256 value) public returns (bool){
bytes memory empty;
Token t = Token(commons.get("Token"));
if(t.transfer(msg.sender, to, value,empty)){
emit Transfer(msg.sender, to, value);
return true;
}
return false;
}
function allowance(address owner, address spender) public view returns (uint256){
Token t = Token(commons.get("Token"));
return t.allowance(owner, spender);
}
function transferFrom(address from, address to, uint256 value) public returns (bool){
Token t = Token(commons.get("Token"));
if(t._transferFrom(msg.sender, from, to, value)){
emit Transfer(from, to, value);
return true;
}
return false;
}
function approve(address spender, uint256 value) public returns (bool){
Token t = Token(commons.get("Token"));
if (t._approve(msg.sender, spender, value)){
emit Approval(msg.sender, spender, value);
return true;
}
return false;
}
function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) {
Token t = Token(commons.get("Token"));
if(t._increaseApproval(msg.sender, _spender, _addedValue)){
emit Approval(msg.sender, _spender, _addedValue);
return true;
}
return false;
}
function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) {
Token t = Token(commons.get("Token"));
if (t._decreaseApproval(msg.sender,_spender, _subtractedValue)){
emit Approval(msg.sender, _spender, _subtractedValue);
return true;
}
return false;
}
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract Token is RBAC, Pausable{
using SafeMath for uint256;
BwinCommons internal commons;
function setCommons(address _addr) public onlyAdmin {
commons = BwinCommons(_addr);
}
event TokenApproval(address indexed owner, address indexed spender, uint256 value);
event TokenTransfer(address indexed from, address indexed to, uint256 value);
event MintForSale(address indexed to, uint256 amount);
event MintForWorker(address indexed to, uint256 amount);
event MintForUnlock(address indexed to, uint256 amount);
function Token() public {
addRole(msg.sender, ROLE_ADMIN);
}
function totalSupply() public view returns (uint256) {
TokenData td = TokenData(commons.get("TokenData"));
return td.totalSupply();
}
function balanceOf(address _owner) public view returns (uint256) {
TokenData td = TokenData(commons.get("TokenData"));
return td.balanceOf(_owner);
}
function _transferFrom(address _sender, address _from, address _to, uint256 _value) external whenNotPaused onlyRole("FRONT_TOKEN_USER") returns (bool) {
InterestHolder ih = InterestHolder(commons.get("InterestHolder"));
TokenData td = TokenData(commons.get("TokenData"));
uint256 _balanceFrom = balanceOf(_from);
uint256 _balanceTo = balanceOf(_to);
uint256 _allow = allowance(_from, _sender);
require(_from != address(0));
require(_sender != address(0));
require(_to != address(0));
require(_value <= _balanceFrom);
require(_value <= _allow);
td.setBalance(_from,_balanceFrom.sub(_value));
td.setBalance(_to,_balanceTo.add(_value));
td.setAllowance(_from, _sender, _allow.sub(_value));
if(ih != address(0)){
ih.receiveBalanceUpdate(_from);
ih.receiveBalanceUpdate(_to);
}
emit TokenTransfer(_from, _to, _value);
return true;
}
function allowance(address _owner, address _spender) public view returns (uint256) {
TokenData td = TokenData(commons.get("TokenData"));
return td.allowance(_owner,_spender);
}
function _approve(address _sender, address _spender, uint256 _value) public onlyRole("FRONT_TOKEN_USER") whenNotPaused returns (bool) {
TokenData td = TokenData(commons.get("TokenData"));
return td.setAllowance(_sender, _spender, _value);
}
function _increaseApproval(address _sender, address _spender, uint _addedValue) public onlyRole("FRONT_TOKEN_USER") whenNotPaused returns (bool) {
TokenData td = TokenData(commons.get("TokenData"));
td.setAllowance(_sender, _spender, allowance(_sender, _spender).add(_addedValue));
emit TokenApproval(_sender, _spender, allowance(_sender, _spender));
return true;
}
function _decreaseApproval(address _sender, address _spender, uint _subtractedValue) public onlyRole("FRONT_TOKEN_USER") whenNotPaused returns (bool) {
TokenData td = TokenData(commons.get("TokenData"));
uint oldValue = allowance(_sender, _spender);
if (_subtractedValue > oldValue) {
td.setAllowance(_sender, _spender, 0);
//allowed[msg.sender][_spender] = 0;
} else {
td.setAllowance(_sender, _spender, oldValue.sub(_subtractedValue));
//allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit TokenApproval(_sender, _spender, allowance(_sender, _spender));
return true;
}
function unlockAmount(address _to, uint256 _amount) external onlyAdmin returns (bool){
TokenData td = TokenData(commons.get("TokenData"));
require(td.totalSupply().add(_amount) <= td.TotalCapacity());
uint256 unlockedAmount = td.valueOf("unlockedAmount");
if(_mint(_to, _amount)){
td.setValue("unlockedAmount",unlockedAmount.add(_amount));
emit MintForUnlock(_to, _amount);
return true;
}
return false;
}
function _mint(address _to, uint256 _amount) internal returns (bool) {
TokenData td = TokenData(commons.get("TokenData"));
InterestHolder ih = InterestHolder(commons.get("InterestHolder"));
require(_to != address(0));
require(_amount > 0);
uint256 totalMinted = td.valueOf("totalMinted");
td.setTotal(td.totalSupply().add(_amount));
td.setBalance(_to,balanceOf(_to).add(_amount));
td.setValue("totalMinted",totalMinted.add(_amount));
if(address(ih) != address(0)){
ih.receiveBalanceUpdate(_to);
}
return true;
}
function mintForSale(address _to, uint256 _amount) external onlyRole("TOKEN_SALE") whenNotPaused returns (bool) {
TokenData td = TokenData(commons.get("TokenData"));
require(td.totalSupply().add(_amount) <= td.TotalCapacity());
uint256 saledAmount = td.valueOf("saledAmount");
if(_mint(_to, _amount)){
td.setValue("saledAmount",saledAmount.add(_amount));
emit MintForSale(_to, _amount);
return true;
}
return false;
}
function mintForWorker(address _to, uint256 _amount) external onlyRole("TOKEN_WORKER") whenNotPaused returns (bool) {
TokenData td = TokenData(commons.get("TokenData"));
require(td.totalSupply().add(_amount) <= td.TotalCapacity());
uint256 minedAmount = td.valueOf("minedAmount");
if(_mint(_to, _amount)){
td.setValue("minedAmount",minedAmount.add(_amount));
emit MintForWorker(_to, _amount);
return true;
}
return false;
}
function transfer(address _from, address _to, uint _value, bytes _data) external whenNotPaused onlyRole("FRONT_TOKEN_USER") returns (bool success) {
if (isContract(_to)) {
return transferToContract(_from, _to, _value, _data);
}else {
return transferToAddress(_from, _to, _value);
}
}
//assemble the given address bytecode. If bytecode exists then the _addr is a contract.
function isContract(address _addr) internal view returns (bool) {
uint length;
assembly {
//retrieve the size of the code on target address, this needs assembly
length := extcodesize(_addr)
}
return (length > 0);
}
function _transfer(address _from, address _to, uint256 _value) internal returns (bool) {
TokenData td = TokenData(commons.get("TokenData"));
InterestHolder ih = InterestHolder(commons.get("InterestHolder"));
require(_to != address(0));
require(_value <= balanceOf(_from));
td.setBalance(_from,balanceOf(_from).sub(_value));
td.setBalance(_to,balanceOf(_to).add(_value));
if(ih != address(0)){
ih.receiveBalanceUpdate(_from);
ih.receiveBalanceUpdate(_to);
}
emit TokenTransfer(_from, _to, _value);
return true;
}
//function that is called when transaction target is an address
function transferToAddress(address _from, address _to, uint _value) internal returns (bool success) {
require(balanceOf(_from) >= _value);
require(_transfer(_from, _to, _value));
emit TokenTransfer(_from, _to, _value);
return true;
}
//function that is called when transaction target is a contract
function transferToContract(address _from, address _to, uint _value, bytes _data) internal returns (bool success) {
require(balanceOf(_from) >= _value);
require(_transfer(_from, _to, _value));
ContractReceiver receiver = ContractReceiver(_to);
receiver.tokenFallback(msg.sender, _value, _data);
emit TokenTransfer(msg.sender, _to, _value);
return true;
}
}
contract TokenData is RBAC, Pausable{
//using SafeMath for uint256;
event TokenDataBalance(address sender, address indexed addr, uint256 value);
event TokenDataAllowance(address sender, address indexed from, address indexed to, uint256 value);
event SetTotalSupply(address _addr, uint256 _total);
mapping(address => uint256) internal balances;
mapping(string => uint256) internal values;
mapping (address => mapping (address => uint256)) internal allowed;
address[] internal users;
uint256 internal totalSupply_;
uint256 internal totalCapacity_;
string internal name_;
string internal symbol_;
uint8 internal decimals_;
function TokenData(uint256 _totalSupply, uint256 _totalCapacity) public {
addRole(msg.sender, ROLE_ADMIN);
totalSupply_ = _totalSupply;
totalCapacity_ = _totalCapacity;
}
BwinCommons internal commons;
function setCommons(address _addr) public onlyAdmin {
commons = BwinCommons(_addr);
}
function setTotal(uint256 _total) public onlyRole("TOKEN_DATA_USER") {
totalSupply_ = _total;
emit SetTotalSupply(msg.sender, _total);
}
event SetValue(address _addr, string name, uint256 _value);
function setValue(string name, uint256 _value) external onlyRole("TOKEN_DATA_USER") {
values[name] = _value;
emit SetValue(msg.sender, name, _value);
}
event SetTotalCapacity(address _addr, uint256 _total);
function setTotalCapacity(uint256 _total) external onlyRole("TOKEN_DATA_USER") {
totalCapacity_ = _total;
emit SetTotalCapacity(msg.sender, _total);
}
function valueOf(string _name) public view returns(uint256){
return values[_name];
}
function TotalCapacity() public view returns (uint256) {
return totalCapacity_;
}
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
function setBalance(address _addr, uint256 _value) external whenNotPaused onlyRole("TOKEN_DATA_USER") returns (bool) {
return _setBalance(_addr, _value);
}
function setAllowance(address _from, address _to, uint256 _value) external whenNotPaused onlyRole("TOKEN_DATA_USER") returns (bool) {
return _setAllowance(_from, _to, _value);
}
function setBalanceAdmin(address _addr, uint256 _value) external onlyAdmin returns (bool) {
return _setBalance(_addr, _value);
}
function setAllowanceAdmin(address _from, address _to, uint256 _value) external onlyAdmin returns (bool) {
return _setAllowance(_from, _to, _value);
}
function _setBalance(address _addr, uint256 _value) internal returns (bool) {
require(_addr != address(0));
require(_value >= 0);
balances[_addr] = _value;
emit TokenDataBalance(msg.sender, _addr, _value);
return true;
}
function _setAllowance(address _from, address _to, uint256 _value) internal returns (bool) {
require(_from != address(0));
require(_to != address(0));
require(_value >= 0);
allowed[_from][_to] = _value;
emit TokenDataAllowance(msg.sender, _from, _to, _value);
return true;
}
}
contract Crowdsale is Ownable, Pausable{
using SafeMath for uint256;
uint256 public startTime;
uint256 public endTime;
uint256 public saleCapacity;
uint256 public saledAmount;
uint256 public rate;
uint256 public weiRaised;
event TokenPurchase(address payor, address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);
BwinCommons internal commons;
function setCommons(address _addr) public onlyOwner {
commons = BwinCommons(_addr);
}
function buyTokens(address payor, address beneficiary, address _parent, uint256 _top) public payable returns(bool, uint256);
function hasEnded() public view returns (bool){
return (now > endTime || saledAmount >= saleCapacity);
}
modifier onlyFront() {
require(msg.sender == address(commons.get("CrowdsaleFront")));
_;
}
function validPurchase() internal view returns (bool) {
bool withinPeriod = now >= startTime && now <= endTime;
bool withinCapacity = saledAmount <= saleCapacity;
return withinPeriod && withinCapacity;
}
function getTokenAmount(uint256 weiAmount) internal view returns(uint256) {
return weiAmount.mul(rate);
}
}
library Roles {
struct Role {
mapping (address => bool) bearer;
}
/**
* @dev give an address access to this role
*/
function add(Role storage role, address addr)
internal
{
role.bearer[addr] = true;
}
/**
* @dev remove an address' access to this role
*/
function remove(Role storage role, address addr)
internal
{
role.bearer[addr] = false;
}
/**
* @dev check if an address has this role
* // reverts
*/
function check(Role storage role, address addr)
view
internal
{
require(has(role, addr));
}
/**
* @dev check if an address has this role
* @return bool
*/
function has(Role storage role, address addr)
view
internal
returns (bool)
{
return role.bearer[addr];
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"},{"name":"roleName","type":"string"}],"name":"checkRole","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"},{"name":"roleName","type":"string"}],"name":"hasRole","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"destroy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"roleName","type":"string"}],"name":"adminRemoveRole","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"roleName","type":"string"}],"name":"adminAddRole","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setCommons","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_ADMIN","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"destroyAndSend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"roleName","type":"string"}],"name":"RoleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"roleName","type":"string"}],"name":"RoleRemoved","type":"event"}]Contract Creation Code
60606040526000600160006101000a81548160ff02191690831515021790555034156200002b57600080fd5b62000080336040805190810160405280600581526020017f61646d696e0000000000000000000000000000000000000000000000000000008152506200011b64010000000002620022f2176401000000009004565b336001806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000115336040805190810160405280600581526020017f61646d696e0000000000000000000000000000000000000000000000000000008152506200011b64010000000002620022f2176401000000009004565b620002df565b620001aa826000836040518082805190602001908083835b6020831015156200015a578051825260208201915060208101905060208303925062000133565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206200028164010000000002620024a1179091906401000000009004565b7fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156200024157808201518184015260208101905062000224565b50505050905090810190601f1680156200026f5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61253f80620002ef6000396000f30060606040526004361061013e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde0314610143578063095ea7b3146101d15780630988ca8c1461022b57806318160ddd146102a7578063217fe6c6146102d057806323b872dd14610364578063313ce567146103dd5780633f4ba83a1461040c5780635c975abb14610421578063661884631461044e57806370a08231146104a857806383197ef0146104f55780638456cb591461050a57806388cee87e1461051f5780638da5cb5b1461059b57806395d89b41146105f0578063a9059cbb1461067e578063b25fa92c146106d8578063d23ad39d14610754578063d391014b1461078d578063d73dd6231461081b578063dd62ed3e14610875578063f2fde38b146108e1578063f5074f411461091a575b600080fd5b341561014e57600080fd5b610156610953565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561019657808201518184015260208101905061017b565b50505050905090810190601f1680156101c35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101dc57600080fd5b610211600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061098c565b604051808215151515815260200191505060405180910390f35b341561023657600080fd5b6102a5600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610bd5565b005b34156102b257600080fd5b6102ba610c56565b6040518082815260200191505060405180910390f35b34156102db57600080fd5b61034a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610db3565b604051808215151515815260200191505060405180910390f35b341561036f57600080fd5b6103c3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610e3a565b604051808215151515815260200191505060405180910390f35b34156103e857600080fd5b6103f06110b8565b604051808260ff1660ff16815260200191505060405180910390f35b341561041757600080fd5b61041f6110bd565b005b341561042c57600080fd5b610434611160565b604051808215151515815260200191505060405180910390f35b341561045957600080fd5b61048e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611173565b604051808215151515815260200191505060405180910390f35b34156104b357600080fd5b6104df600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506113d8565b6040518082815260200191505060405180910390f35b341561050057600080fd5b61050861156e565b005b341561051557600080fd5b61051d611603565b005b341561052a57600080fd5b610599600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506116a6565b005b34156105a657600080fd5b6105ae6116f3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105fb57600080fd5b610603611718565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610643578082015181840152602081019050610628565b50505050905090810190601f1680156106705780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561068957600080fd5b6106be600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611751565b604051808215151515815260200191505060405180910390f35b34156106e357600080fd5b610752600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611a11565b005b341561075f57600080fd5b61078b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a5e565b005b341561079857600080fd5b6107a0611afd565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107e05780820151818401526020810190506107c5565b50505050905090810190601f16801561080d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561082657600080fd5b61085b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611b36565b604051808215151515815260200191505060405180910390f35b341561088057600080fd5b6108cb600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611d9b565b6040518082815260200191505060405180910390f35b34156108ec57600080fd5b610918600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611f66565b005b341561092557600080fd5b610951600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506120bb565b005b6040805190810160405280600b81526020017f464667616d6520436f696e00000000000000000000000000000000000000000081525081565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1515610a5057600080fd5b5af11515610a5d57600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff1663104e81ff3386866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515610b3f57600080fd5b5af11515610b4c57600080fd5b5050506040518051905015610bc9578373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a360019150610bce565b600091505b5092915050565b610c52826000836040518082805190602001908083835b602083101515610c115780518252602082019150602081019050602083039250610bec565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902061212f90919063ffffffff16565b5050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1515610d1a57600080fd5b5af11515610d2757600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515610d9657600080fd5b5af11515610da357600080fd5b5050506040518051905091505090565b6000610e32836000846040518082805190602001908083835b602083101515610df15780518252602082019150602081019050602083039250610dcc565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902061214890919063ffffffff16565b905092915050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1515610efe57600080fd5b5af11515610f0b57600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff1663851d1c27338787876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b151561102157600080fd5b5af1151561102e57600080fd5b50505060405180519050156110ab578373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191506110b0565b600091505b509392505050565b601281565b6110fc336040805190810160405280600581526020017f61646d696e000000000000000000000000000000000000000000000000000000815250610bd5565b600160009054906101000a900460ff16151561111757600080fd5b6000600160006101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600160009054906101000a900460ff1681565b600080600160009054906101000a900460ff1615151561119257600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b151561125357600080fd5b5af1151561126057600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff1663a03928973386866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b151561134257600080fd5b5af1151561134f57600080fd5b50505060405180519050156113cc578373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a3600191506113d1565b600091505b5092915050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b151561149c57600080fd5b5af115156114a957600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561154f57600080fd5b5af1151561155c57600080fd5b50505060405180519050915050919050565b6001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115c957600080fd5b6001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b611642336040805190810160405280600581526020017f61646d696e000000000000000000000000000000000000000000000000000000815250610bd5565b600160009054906101000a900460ff1615151561165e57600080fd5b60018060006101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6116e5336040805190810160405280600581526020017f61646d696e000000000000000000000000000000000000000000000000000000815250610bd5565b6116ef82826121a1565b5050565b6001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600381526020017f464643000000000000000000000000000000000000000000000000000000000081525081565b600061175b6124ff565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b151561181e57600080fd5b5af1151561182b57600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff166312a837b4338787866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561192c578082015181840152602081019050611911565b50505050905090810190601f1680156119595780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b151561197a57600080fd5b5af1151561198757600080fd5b5050506040518051905015611a04578473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360019250611a09565b600092505b505092915050565b611a50336040805190810160405280600581526020017f61646d696e000000000000000000000000000000000000000000000000000000815250610bd5565b611a5a82826122f2565b5050565b6001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ab957600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040805190810160405280600581526020017f61646d696e00000000000000000000000000000000000000000000000000000081525081565b600080600160009054906101000a900460ff16151515611b5557600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1515611c1657600080fd5b5af11515611c2357600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff16638a6e0a8e3386866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515611d0557600080fd5b5af11515611d1257600080fd5b5050506040518051905015611d8f578373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a360019150611d94565b600091505b5092915050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1515611e5f57600080fd5b5af11515611e6c57600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e85856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1515611f4657600080fd5b5af11515611f5357600080fd5b5050506040518051905091505092915050565b6001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fc157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611ffd57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806001806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561211657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16ff5b6121398282612148565b151561214457600080fd5b5050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61221e826000836040518082805190602001908083835b6020831015156121dd57805182526020820191506020810190506020830392506121b8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902061244390919063ffffffff16565b7fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122b3578082015181840152602081019050612298565b50505050905090810190601f1680156122e05780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b61236f826000836040518082805190602001908083835b60208310151561232e5780518252602082019150602081019050602083039250612309565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206124a190919063ffffffff16565b7fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156124045780820151818401526020810190506123e9565b50505050905090810190601f1680156124315780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6020604051908101604052806000815250905600a165627a7a7230582079aa5201125b5861ab37b34dc129345840c94ae224b98313416024ad2d5fa1720029
Deployed Bytecode
0x60606040526004361061013e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde0314610143578063095ea7b3146101d15780630988ca8c1461022b57806318160ddd146102a7578063217fe6c6146102d057806323b872dd14610364578063313ce567146103dd5780633f4ba83a1461040c5780635c975abb14610421578063661884631461044e57806370a08231146104a857806383197ef0146104f55780638456cb591461050a57806388cee87e1461051f5780638da5cb5b1461059b57806395d89b41146105f0578063a9059cbb1461067e578063b25fa92c146106d8578063d23ad39d14610754578063d391014b1461078d578063d73dd6231461081b578063dd62ed3e14610875578063f2fde38b146108e1578063f5074f411461091a575b600080fd5b341561014e57600080fd5b610156610953565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561019657808201518184015260208101905061017b565b50505050905090810190601f1680156101c35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101dc57600080fd5b610211600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061098c565b604051808215151515815260200191505060405180910390f35b341561023657600080fd5b6102a5600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610bd5565b005b34156102b257600080fd5b6102ba610c56565b6040518082815260200191505060405180910390f35b34156102db57600080fd5b61034a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610db3565b604051808215151515815260200191505060405180910390f35b341561036f57600080fd5b6103c3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610e3a565b604051808215151515815260200191505060405180910390f35b34156103e857600080fd5b6103f06110b8565b604051808260ff1660ff16815260200191505060405180910390f35b341561041757600080fd5b61041f6110bd565b005b341561042c57600080fd5b610434611160565b604051808215151515815260200191505060405180910390f35b341561045957600080fd5b61048e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611173565b604051808215151515815260200191505060405180910390f35b34156104b357600080fd5b6104df600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506113d8565b6040518082815260200191505060405180910390f35b341561050057600080fd5b61050861156e565b005b341561051557600080fd5b61051d611603565b005b341561052a57600080fd5b610599600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506116a6565b005b34156105a657600080fd5b6105ae6116f3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105fb57600080fd5b610603611718565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610643578082015181840152602081019050610628565b50505050905090810190601f1680156106705780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561068957600080fd5b6106be600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611751565b604051808215151515815260200191505060405180910390f35b34156106e357600080fd5b610752600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611a11565b005b341561075f57600080fd5b61078b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a5e565b005b341561079857600080fd5b6107a0611afd565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107e05780820151818401526020810190506107c5565b50505050905090810190601f16801561080d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561082657600080fd5b61085b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611b36565b604051808215151515815260200191505060405180910390f35b341561088057600080fd5b6108cb600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611d9b565b6040518082815260200191505060405180910390f35b34156108ec57600080fd5b610918600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611f66565b005b341561092557600080fd5b610951600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506120bb565b005b6040805190810160405280600b81526020017f464667616d6520436f696e00000000000000000000000000000000000000000081525081565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1515610a5057600080fd5b5af11515610a5d57600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff1663104e81ff3386866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515610b3f57600080fd5b5af11515610b4c57600080fd5b5050506040518051905015610bc9578373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a360019150610bce565b600091505b5092915050565b610c52826000836040518082805190602001908083835b602083101515610c115780518252602082019150602081019050602083039250610bec565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902061212f90919063ffffffff16565b5050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1515610d1a57600080fd5b5af11515610d2757600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515610d9657600080fd5b5af11515610da357600080fd5b5050506040518051905091505090565b6000610e32836000846040518082805190602001908083835b602083101515610df15780518252602082019150602081019050602083039250610dcc565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902061214890919063ffffffff16565b905092915050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1515610efe57600080fd5b5af11515610f0b57600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff1663851d1c27338787876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b151561102157600080fd5b5af1151561102e57600080fd5b50505060405180519050156110ab578373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191506110b0565b600091505b509392505050565b601281565b6110fc336040805190810160405280600581526020017f61646d696e000000000000000000000000000000000000000000000000000000815250610bd5565b600160009054906101000a900460ff16151561111757600080fd5b6000600160006101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600160009054906101000a900460ff1681565b600080600160009054906101000a900460ff1615151561119257600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b151561125357600080fd5b5af1151561126057600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff1663a03928973386866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b151561134257600080fd5b5af1151561134f57600080fd5b50505060405180519050156113cc578373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a3600191506113d1565b600091505b5092915050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b151561149c57600080fd5b5af115156114a957600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561154f57600080fd5b5af1151561155c57600080fd5b50505060405180519050915050919050565b6001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115c957600080fd5b6001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b611642336040805190810160405280600581526020017f61646d696e000000000000000000000000000000000000000000000000000000815250610bd5565b600160009054906101000a900460ff1615151561165e57600080fd5b60018060006101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6116e5336040805190810160405280600581526020017f61646d696e000000000000000000000000000000000000000000000000000000815250610bd5565b6116ef82826121a1565b5050565b6001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600381526020017f464643000000000000000000000000000000000000000000000000000000000081525081565b600061175b6124ff565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b151561181e57600080fd5b5af1151561182b57600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff166312a837b4338787866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561192c578082015181840152602081019050611911565b50505050905090810190601f1680156119595780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b151561197a57600080fd5b5af1151561198757600080fd5b5050506040518051905015611a04578473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360019250611a09565b600092505b505092915050565b611a50336040805190810160405280600581526020017f61646d696e000000000000000000000000000000000000000000000000000000815250610bd5565b611a5a82826122f2565b5050565b6001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ab957600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040805190810160405280600581526020017f61646d696e00000000000000000000000000000000000000000000000000000081525081565b600080600160009054906101000a900460ff16151515611b5557600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1515611c1657600080fd5b5af11515611c2357600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff16638a6e0a8e3386866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515611d0557600080fd5b5af11515611d1257600080fd5b5050506040518051905015611d8f578373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a360019150611d94565b600091505b5092915050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693ec85e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260058152602001807f546f6b656e000000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1515611e5f57600080fd5b5af11515611e6c57600080fd5b5050506040518051905090508073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e85856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1515611f4657600080fd5b5af11515611f5357600080fd5b5050506040518051905091505092915050565b6001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fc157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611ffd57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806001806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561211657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16ff5b6121398282612148565b151561214457600080fd5b5050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61221e826000836040518082805190602001908083835b6020831015156121dd57805182526020820191506020810190506020830392506121b8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902061244390919063ffffffff16565b7fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122b3578082015181840152602081019050612298565b50505050905090810190601f1680156122e05780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b61236f826000836040518082805190602001908083835b60208310151561232e5780518252602082019150602081019050602083039250612309565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206124a190919063ffffffff16565b7fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156124045780820151818401526020810190506123e9565b50505050905090810190601f1680156124315780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6020604051908101604052806000815250905600a165627a7a7230582079aa5201125b5861ab37b34dc129345840c94ae224b98313416024ad2d5fa1720029
Swarm Source
bzzr://79aa5201125b5861ab37b34dc129345840c94ae224b98313416024ad2d5fa172
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.