ERC-20
Overview
Max Total Supply
156,852,447.959188553626084366 FFC
Holders
6,784
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
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
[{"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
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.