More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 803 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 6282184 | 2020 days ago | IN | 0 ETH | 0.0007603 | ||||
Register Name Xn... | 6234131 | 2028 days ago | IN | 0 ETH | 0.00023075 | ||||
Register Name Xn... | 6234129 | 2028 days ago | IN | 0 ETH | 0.00023075 | ||||
Withdraw | 6222572 | 2030 days ago | IN | 0 ETH | 0.00126718 | ||||
Withdraw | 6217155 | 2031 days ago | IN | 0 ETH | 0.00011744 | ||||
Withdraw | 6180395 | 2038 days ago | IN | 0 ETH | 0.00031679 | ||||
Register Name Xn... | 6170803 | 2039 days ago | IN | 0 ETH | 0.00045544 | ||||
Register Name Xn... | 6168011 | 2040 days ago | IN | 0 ETH | 0.00083025 | ||||
Withdraw | 6165120 | 2040 days ago | IN | 0 ETH | 0.00019007 | ||||
Buy Xaddr | 6165118 | 2040 days ago | IN | 0.00017737 ETH | 0.00073003 | ||||
Buy Xaddr | 6165115 | 2040 days ago | IN | 0.00017737 ETH | 0.00073003 | ||||
Buy Xaddr | 6165109 | 2040 days ago | IN | 0.00017737 ETH | 0.00073003 | ||||
Buy Xaddr | 6165104 | 2040 days ago | IN | 0.00017737 ETH | 0.00121673 | ||||
Buy Xaddr | 6165102 | 2040 days ago | IN | 0.00017736 ETH | 0.00073003 | ||||
Withdraw | 6165064 | 2040 days ago | IN | 0 ETH | 0.00029015 | ||||
Withdraw | 6159359 | 2041 days ago | IN | 0 ETH | 0.00025343 | ||||
Withdraw | 6159272 | 2041 days ago | IN | 0 ETH | 0.00159584 | ||||
Withdraw | 6155408 | 2042 days ago | IN | 0 ETH | 0.00031679 | ||||
Buy Xname | 6155103 | 2042 days ago | IN | 0 ETH | 0.00023939 | ||||
Buy Xid | 6150762 | 2043 days ago | IN | 0.00008125 ETH | 0.00637467 | ||||
Buy Xid | 6150762 | 2043 days ago | IN | 0.00008125 ETH | 0.00637467 | ||||
Buy Xid | 6150762 | 2043 days ago | IN | 0.00008125 ETH | 0.0038248 | ||||
Buy Xid | 6150746 | 2043 days ago | IN | 0.00008125 ETH | 0.00075688 | ||||
Withdraw | 6148978 | 2043 days ago | IN | 0 ETH | 0.00049594 | ||||
Withdraw | 6148965 | 2043 days ago | IN | 0 ETH | 0.00025054 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
7355946 | 1833 days ago | 0.04716058 ETH | ||||
7355946 | 1833 days ago | 0.00129207 ETH | ||||
7352552 | 1834 days ago | 0.12861803 ETH | ||||
7352552 | 1834 days ago | 0.013 ETH | ||||
7352552 | 1834 days ago | 0.1 ETH | ||||
7342367 | 1835 days ago | 0.05226564 ETH | ||||
7342364 | 1835 days ago | 0.00172828 ETH | ||||
7339104 | 1836 days ago | 0.13529435 ETH | ||||
7339104 | 1836 days ago | 0.013 ETH | ||||
7339104 | 1836 days ago | 0.1 ETH | ||||
7339094 | 1836 days ago | 0.19443206 ETH | ||||
7339094 | 1836 days ago | 0.013 ETH | ||||
7339094 | 1836 days ago | 0.1 ETH | ||||
6519293 | 1981 days ago | 0.003 ETH | ||||
6519293 | 1981 days ago | 0.1 ETH | ||||
6282184 | 2020 days ago | 0.0615546 ETH | ||||
6222572 | 2030 days ago | 0.09560399 ETH | ||||
6180395 | 2038 days ago | 0.19560334 ETH | ||||
6177315 | 2038 days ago | 0.1 ETH | ||||
6165120 | 2040 days ago | 0.00002908 ETH | ||||
6165118 | 2040 days ago | 0.00002305 ETH | ||||
6165115 | 2040 days ago | 0.00002305 ETH | ||||
6165109 | 2040 days ago | 0.00002305 ETH | ||||
6165104 | 2040 days ago | 0.00002305 ETH | ||||
6165102 | 2040 days ago | 0.00002305 ETH |
Loading...
Loading
Contract Name:
NTech3DLong
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-08-08 */ pragma solidity ^0.4.24; /*********************************************************** * @title SafeMath v0.1.9 * @dev Math operations with safety checks that throw on error * change notes: original SafeMath library from OpenZeppelin modified by Inventor * - added sqrt * - added sq * - added pwr * - changed asserts to requires with error log outputs * - removed div, its useless ***********************************************************/ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, "SafeMath mul failed"); 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 Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath sub failed"); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, "SafeMath add failed"); return c; } /** * @dev gives square root of given x. */ function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } /** * @dev gives square. multiplies x by x */ function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } /** * @dev x to the power of y */ function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } } /*********************************************************** * NameFilter library ***********************************************************/ library NameFilter { /** * @dev filters name strings * -converts uppercase to lower case. * -makes sure it does not start/end with a space * -makes sure it does not contain multiple spaces in a row * -cannot be only numbers * -cannot start with 0x * -restricts characters to A-Z, a-z, 0-9, and space. * @return reprocessed string in bytes32 format */ function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; //sorry limited to 32 characters require (_length <= 32 && _length > 0, "string must be between 1 and 32 characters"); // make sure it doesnt start with or end with space require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, "string cannot start or end with space"); // make sure first two characters are not 0x if (_temp[0] == 0x30) { require(_temp[1] != 0x78, "string cannot start with 0x"); require(_temp[1] != 0x58, "string cannot start with 0X"); } // create a bool to track if we have a non number character bool _hasNonNumber; // convert & check for (uint256 i = 0; i < _length; i++) { // if its uppercase A-Z if (_temp[i] > 0x40 && _temp[i] < 0x5b) { // convert to lower case a-z _temp[i] = byte(uint(_temp[i]) + 32); // we have a non number if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( // require character is a space _temp[i] == 0x20 || // OR lowercase a-z (_temp[i] > 0x60 && _temp[i] < 0x7b) || // or 0-9 (_temp[i] > 0x2f && _temp[i] < 0x3a), "string contains invalid characters" ); // make sure theres not 2x spaces in a row if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, "string cannot contain consecutive spaces"); // see if we have a character other than a number if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, "string cannot be only numbers"); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } /*********************************************************** * NTech3DDatasets library ***********************************************************/ library NTech3DDatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; // winner address bytes32 winnerName; // winner name uint256 amountWon; // amount won uint256 newPot; // amount in new pot uint256 NTAmount; // amount distributed to nt uint256 genAmount; // amount distributed to gen uint256 potAmount; // amount added to pot } struct Player { address addr; // player address bytes32 name; // player name uint256 win; // winnings vault uint256 gen; // general vault uint256 aff; // affiliate vault uint256 lrnd; // last round played uint256 laff; // last affiliate id used } struct PlayerRounds { uint256 eth; // eth player has added to round (used for eth limiter) uint256 keys; // keys uint256 mask; // player mask uint256 ico; // ICO phase investment } struct Round { uint256 plyr; // pID of player in lead uint256 team; // tID of team in lead uint256 end; // time ends/ended bool ended; // has round end function been ran uint256 strt; // time round started uint256 keys; // keys uint256 eth; // total eth in uint256 pot; // eth to pot (during round) / final amount paid to winner (after round ends) uint256 mask; // global mask uint256 ico; // total eth sent in during ICO phase uint256 icoGen; // total eth for gen during ICO phase uint256 icoAvg; // average key price for ICO phase uint256 prevres; // 上一轮或者奖池互换流入本轮的奖金 } struct TeamFee { uint256 gen; // % of buy in thats paid to key holders of current round uint256 nt; // % of buy in thats paid to nt holders } struct PotSplit { uint256 gen; // % of pot thats paid to key holders of current round uint256 nt; // % of pot thats paid to NT foundation } } /*********************************************************** interface : OtherNTech3D 主要用作奖池互换 ***********************************************************/ interface OtherNTech3D { function potSwap() external payable; } /*********************************************************** * NTech3DKeysCalcLong library ***********************************************************/ library NTech3DKeysCalcLong { using SafeMath for *; /** * @dev calculates number of keys received given X eth * @param _curEth current amount of eth in contract * @param _newEth eth being spent * @return amount of ticket purchased */ function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } /** * @dev calculates amount of eth received if you sold X keys * @param _curKeys current amount of keys that exist * @param _sellKeys amount of keys you wish to sell * @return amount of eth received */ function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } /** * @dev calculates how many keys would exist with given an amount of eth * @param _eth eth "in contract" * @return number of keys that would exist */ function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } /** * @dev calculates how much eth would be in contract given a number of keys * @param _keys number of keys "in contract" * @return eth that would exists */ function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } /*********************************************************** * ERC20 interface * see https://github.com/ethereum/EIPs/issues/20 ***********************************************************/ contract ERC20 { function totalSupply() public view returns (uint supply); function balanceOf( address who ) public view returns (uint value); function allowance( address owner, address spender ) public view returns (uint _allowance); function transfer( address to, uint value) public returns (bool ok); function transferFrom( address from, address to, uint value) public returns (bool ok); function approve( address spender, uint value ) public returns (bool ok); event Transfer( address indexed from, address indexed to, uint value); event Approval( address indexed owner, address indexed spender, uint value); } /*********************************************************** interface : PlayerBookInterface ***********************************************************/ interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } /*********************************************************** * NTech3DLong contract ***********************************************************/ contract NTech3DLong { /****************************************************************************************** 导入的库 */ using SafeMath for *; using NameFilter for string; using NTech3DKeysCalcLong for uint256; /****************************************************************************************** 事件 */ // 当玩家注册名字时调用 event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); // 购买完成后或者再次载入时调用 event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 NTAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); // 撤退时调用 event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); // 当撤退并且分发时调用 event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 NTAmount, uint256 genAmount ); // 当一轮时间过后,有玩家试图购买时调用 event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 NTAmount, uint256 genAmount ); //当一轮时间过后,有玩家重载时调用 event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 NTAmount, uint256 genAmount ); // 附属账号有支付时调用 event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); // 收到奖池存款调用 event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); /****************************************************************************************** 合约权限管理 设计:会设计用户权限管理, 9 => 管理员角色 0 => 没有任何权限 */ // 用户地址到角色的表 mapping(address => uint256) private users ; // 初始化 function initUsers() private { // 初始化下列地址帐户为管理员 users[0x89b2E7Ee504afd522E07F80Ae7b9d4D228AF3fe2] = 9 ; users[msg.sender] = 9 ; } // 是否是管理员 modifier isAdmin() { uint256 role = users[msg.sender]; require((role==9), "Must be admin."); _; } /****************************************************************************************** 检查是帐户地址还是合约地址 */ modifier isHuman { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, "Humans only"); _; } /****************************************************************************************** 关联合约定义 */ // 玩家信息数据库合约 PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x410526CD583AF0bE0530166d53Efcd7da969F7B7); /****************************************************************************************** 社区地址 NT基金地址 代币空投的收款地址 */ address public communityAddr_; address public NTFoundationAddr_; address private NTTokenSeller_ ; /****************************************************************************************** 设置代币地址 条件: 1. 地址不能为空 2. 管理员 */ ERC20 private NTToken_ ; function setNTToken(address addr) isAdmin() public { require(address(addr) != address(0x0), "Empty address not allowed."); NTToken_ = ERC20(addr); } /** 将游戏合约中的未用完的代币转走 条件: 1. 数值大于0 2. 管理员 */ function transfer(address toAddr, uint256 amount) isAdmin() public returns (bool) { require(amount > 0, "Must > 0 "); NTToken_.transfer(toAddr, amount); return true ; } /****************************************************************************************** 启动 */ bool public activated_ = false; modifier isActivated() { require(activated_ == true, "its not active yet."); _; } /** TODO 激活游戏 条件: 1、要是管理员 2、要设定代币地址 3、要设定用作奖池呼唤的游戏地址 4、只可以激活一次 */ function activate() isAdmin() public { // 必须设定代币地址 require(address(NTToken_) != address(0x0), "Must setup NTToken."); // 必须设定社区基金地址 require(address(communityAddr_) != address(0x0), "Must setup CommunityAddr_."); // 必须设定购买NT地址 require(address(NTTokenSeller_) != address(0x0), "Must setup NTTokenSeller."); // 必须设定NT基金地址 require(address(NTFoundationAddr_) != address(0x0), "Must setup NTFoundationAddr."); // 只能激活一次 require(activated_ == false, "Only once"); // activated_ = true ; // 初始化开始轮信息 rID_ = 1; round_[1].strt = now ; round_[1].end = now + rndMax_; } /****************************************************************************************** 合约信息 */ string constant public name = "NTech 3D Long Official"; // 合约名称 string constant public symbol = "NT3D"; // 合约符号 /** */ uint256 constant private rndInc_ = 1 minutes; // 每购买一个key延迟的时间 uint256 constant private rndMax_ = 6 hours; // 一轮的最长时间 uint256 private ntOf1Ether_ = 30000; // 一个以太兑换30000代币 /****************************************************************************************** 奖池互换 */ OtherNTech3D private otherNTech3D_ ; // 另外一个游戏接口,主要用作奖池呼唤 /** 设定奖池呼唤的另外一个游戏合约地址 条件 1. 管理员权限 2. 之前没有设定过 3. 设定的地址不能为空 */ function setOtherNTech3D(address _otherNTech3D) isAdmin() public { require(address(_otherNTech3D) != address(0x0), "Empty address not allowed."); require(address(otherNTech3D_) == address(0x0), "OtherNTech3D has been set."); otherNTech3D_ = OtherNTech3D(_otherNTech3D); } /****************************************************************************************** 判断金额 */ modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, "Too little"); require(_eth <= 100000000000000000000000, "Too much"); _; } /****************************************************************************************** 玩家信息 */ // 玩家地址 => 玩家ID mapping (address => uint256) public pIDxAddr_; // 玩家名称 => 玩家ID mapping (bytes32 => uint256) public pIDxName_; // 玩家ID => 玩家信息 mapping (uint256 => NTech3DDatasets.Player) public plyr_; // 玩家ID => 游戏轮编号 => 玩家游戏轮信息 mapping (uint256 => mapping (uint256 => NTech3DDatasets.PlayerRounds)) public plyrRnds_; // 玩家ID => 玩家名称 => mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; /****************************************************************************************** 游戏信息 */ uint256 public rID_; // 当前游戏轮编号 uint256 public airDropPot_; // 空投小奖池 uint256 public airDropTracker_ = 0; // 空投小奖池计数 // 游戏每轮ID => 游戏轮 mapping (uint256 => NTech3DDatasets.Round) public round_; // 游戏每轮ID -> 团队ID => ETH mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; /****************************************************************************************** 团队信息 0 : 水鲸队 1 : 懒熊队 2 : 玩蛇队 3 : 疯牛队 */ // 团队ID => 分配规则 mapping (uint256 => NTech3DDatasets.TeamFee) public fees_; // 团队ID => 分配规则 mapping (uint256 => NTech3DDatasets.PotSplit) public potSplit_; /****************************************************************************************** 构造函数 */ constructor() public { // 水鲸:本轮玩家 30% 空投 6% fees_[0] = NTech3DDatasets.TeamFee(30,6); // 懒熊:本轮玩家 43% 空投 0% fees_[1] = NTech3DDatasets.TeamFee(43,0); // 玩蛇:本轮玩家 56% 空投 10% fees_[2] = NTech3DDatasets.TeamFee(56,10); // 疯牛:本轮玩家 43% 空投 8% fees_[3] = NTech3DDatasets.TeamFee(43,8); // 此轮奖池分配: // 水鲸:本轮玩家 25% potSplit_[0] = NTech3DDatasets.PotSplit(15,10); // 懒熊:本轮玩家 25% potSplit_[1] = NTech3DDatasets.PotSplit(25,0); // 玩蛇:本轮玩家 40% potSplit_[2] = NTech3DDatasets.PotSplit(20,20); // 疯牛:本轮玩家 40% potSplit_[3] = NTech3DDatasets.PotSplit(30,10); // 初始化用户管理 initUsers(); /** */ NTToken_ = ERC20(address(0x09341B5d43a9b2362141675b9276B777470222Be)); communityAddr_ = address(0x3C07f9f7164Bf72FDBefd9438658fAcD94Ed4439); NTTokenSeller_ = address(0x531100a6b3686E6140f170B0920962A5D7A2DD25); NTFoundationAddr_ = address(0x89b2E7Ee504afd522E07F80Ae7b9d4D228AF3fe2); } /****************************************************************************************** 购买 */ function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { NTech3DDatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID){ _affCode = plyr_[_pID].laff; }else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { NTech3DDatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender){ _affID = plyr_[_pID].laff; }else{ _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { NTech3DDatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name){ _affID = plyr_[_pID].laff; }else{ _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { NTech3DDatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID){ _affCode = plyr_[_pID].laff; }else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { NTech3DDatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender){ _affID = plyr_[_pID].laff; }else{ _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { NTech3DDatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name){ _affID = plyr_[_pID].laff; }else{ _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } /** 撤退 */ function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && (round_[_rID].ended == false) && round_[_rID].plyr != 0){ NTech3DDatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); // get their earnings _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit onWithdrawAndDistribute( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.NTAmount, _eventData_.genAmount ); }else{ _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit onWithdraw( _pID, msg.sender, plyr_[_pID].name, _eth, _now ); } } /****************************************************************************************** 注册 */ function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable{ bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit onNewName( _pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now ); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable{ bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit onNewName( _pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now ); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable{ bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit onNewName( _pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now ); } /****************************************************************************************** 获取购买价格 */ function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; //if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else // rounds over. need price for new round return ( 75000000000000 ); // init } /****************************************************************************************** 得到剩余时间 */ function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) //if (_now > round_[_rID].strt + rndGap_) if (_now > round_[_rID].strt) return( (round_[_rID].end).sub(_now) ); else //return( (round_[_rID].strt + rndGap_).sub(_now) ); return( (round_[_rID].end).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0){ // if player is winner if (round_[_rID].plyr == _pID){ // Added by Huwei uint256 _pot = round_[_rID].pot.add(round_[_rID].prevres); return ( // Fix by huwei //(plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].win).add( ((_pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); // if player is not the winner } else { return( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } // if round is still going on, or round has ended and round end has been ran } else { return( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { // Fixed by Huwei uint256 _pot = round_[_rID].pot.add(round_[_rID].prevres); return( ((((round_[_rID].mask).add(((((_pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); //return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } /** 得到当前此轮信息 */ function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256){ uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, NTech3DDatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; //if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); }else{ if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit onBuyAndDistribute( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.NTAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, NTech3DDatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; //if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); }else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit onReLoadAndDistribute( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.NTAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, NTech3DDatasets.EventReturns memory _eventData_) private{ if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); // 每轮早期的限制 (5 ether 以下) // 智能合约收到的总额达到100 ETH之前,每个以太坊地址最多只能购买总额10个ETH的Key。 if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 10000000000000000000){ uint256 _availableLimit = (10000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000){ updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000){ // > 0.1 ether, 才有空投 airDropTracker_++; if (airdrop() == true){ uint256 _prize; if (_eth >= 10000000000000000000){ // <= 10 ether _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; }else if(_eth >= 1000000000000000000 && _eth < 10000000000000000000) { // >= 1 ether and < 10 ether _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; }else if(_eth >= 100000000000000000 && _eth < 1000000000000000000){ // >= 0.1 ether and < 1 ether _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); // distribute eth _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { // round_[_rIDlast].mask * plyrRnds_[_pID][_rIDlast].keys / 1000000000000000000 - plyrRnds_[_pID][_rIDlast].mask return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256){ uint256 _now = now; //if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else // rounds over. need keys for new round return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; //if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else // rounds over. need price for new round return ( (_keys).eth() ); } /** interface : PlayerBookReceiverInterface */ function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), "Called from PlayerBook only"); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), "Called from PlayerBook only"); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } /** 识别玩家 */ function determinePID(NTech3DDatasets.EventReturns memory _eventData_) private returns (NTech3DDatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0){ _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != ""){ pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; // set the new player bool to true _eventData_.compressedData = _eventData_.compressedData + 1; } return _eventData_ ; } /** 识别团队,默认是玩蛇队 */ function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, NTech3DDatasets.EventReturns memory _eventData_) private returns (NTech3DDatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return _eventData_ ; } /** 这轮游戏结束 */ function endRound(NTech3DDatasets.EventReturns memory _eventData_) private returns (NTech3DDatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; // grab our pot amount // Fixed by Huwei //uint256 _pot = round_[_rID].pot; uint256 _pot = round_[_rID].pot.add(round_[_rID].prevres); // 赢家获取奖池的48% uint256 _win = (_pot.mul(48)) / 100; // 社区基金获取2% uint256 _com = (_pot / 50); // 这轮游戏玩家获取的奖金 uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; // NT基金获取的奖金 uint256 _nt = (_pot.mul(potSplit_[_winTID].nt)) / 100; // 剩下的奖金 uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_nt); // calculate ppt for round mask uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0){ _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); if(address(communityAddr_)!=address(0x0)) { // 将社区基金奖金发到社区奖金地址 communityAddr_.transfer(_com); _com = 0 ; }else{ // 如果没有设置社区地址,那么资金分给下一轮 _res = SafeMath.add(_res,_com); _com = 0 ; } if(_nt > 0) { if(address(NTFoundationAddr_) != address(0x0)) { // 分配NT基金奖金 NTFoundationAddr_.transfer(_nt); }else{ // 如果没有设定,那么资金计入下一轮 _res = SafeMath.add(_res,_nt); _nt = 0 ; } } round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.NTAmount = 0; _eventData_.newPot = _res; // 下一轮 rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndMax_); //round_[_rID].end = now.add(rndInit_).add(rndGap_); // Fixed by Huwei //round_[_rID].pot = _res; round_[_rID].prevres = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0){ plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } /** 计算空投小奖池 */ function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } /** 社区基金 奖池互换 分享 空投 */ function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, NTech3DDatasets.EventReturns memory _eventData_) private returns(NTech3DDatasets.EventReturns){ // 社区基金2%, 如果没有设置社区基金,则这份空投到用户地址 uint256 _com = _eth / 50; // 奖池互换,如果没有设置,进入到社区基金 uint256 _long = _eth / 100; if(address(otherNTech3D_)!=address(0x0)){ otherNTech3D_.potSwap.value(_long)(); }else{ _com = _com.add(_long); } // 分享,如果没有分享,进入到社区基金 uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit onAffiliatePayout( _affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now ); } else { _com = _com.add(_aff); } // 空投(如果没有设置社区基金地址,那么放入空投) uint256 _nt = (_eth.mul(fees_[_team].nt)).div(100); if(_com>0){ if(address(communityAddr_)!=address(0x0)) { communityAddr_.transfer(_com); }else{ _nt = _nt.add(_com); } } if(_nt > 0 ){ // amount = _nt * ntOf1Ether_ ; uint256 amount = _nt.mul(ntOf1Ether_); _eventData_.NTAmount = amount.add(_eventData_.NTAmount); NTToken_.transfer(msg.sender,amount); // address(NTTokenSeller_).transfer(_nt); } return (_eventData_) ; } /** 奖池互换 */ function potSwap() external payable { // 奖池互换放入下一轮 uint256 _rID = rID_ + 1; // Fixed by Huwei //round_[_rID].pot = round_[_rID].pot.add(msg.value); round_[_rID].prevres = round_[_rID].prevres.add(msg.value); emit onPotSwapDeposit( _rID, msg.value ); } /** 持有者 空投小奖池 终极奖池 */ function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, NTech3DDatasets.EventReturns memory _eventData_) private returns(NTech3DDatasets.EventReturns) { // 持有者的份额 uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; // 空投小奖池 1% uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); // 14% = 2% 社区 + 10% 佣金 + 1% 奖池互换 + 1% 空投小奖池 _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].nt)) / 100)); // 奖池 uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } /** 撤退时的收益 */ function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0){ plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } /** 完成交易 */ function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, NTech3DDatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit onEndTx( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.NTAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"getBuyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"bytes32"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXname","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"activate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"pIDxAddr_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropTracker_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_otherNTech3D","type":"address"}],"name":"setOtherNTech3D","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"round_","outputs":[{"name":"plyr","type":"uint256"},{"name":"team","type":"uint256"},{"name":"end","type":"uint256"},{"name":"ended","type":"bool"},{"name":"strt","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"eth","type":"uint256"},{"name":"pot","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"ico","type":"uint256"},{"name":"icoGen","type":"uint256"},{"name":"icoAvg","type":"uint256"},{"name":"prevres","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"}],"name":"plyrNames_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"fees_","outputs":[{"name":"gen","type":"uint256"},{"name":"nt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"pIDxName_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"uint256"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"address"},{"name":"_all","type":"bool"}],"name":"registerNameXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"communityAddr_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_pID","type":"uint256"},{"name":"_addr","type":"address"},{"name":"_name","type":"bytes32"},{"name":"_laff","type":"uint256"}],"name":"receivePlayerInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"rndTmEth_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rID_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_pID","type":"uint256"}],"name":"getPlayerVaults","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NTFoundationAddr_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"bytes32"},{"name":"_all","type":"bool"}],"name":"registerNameXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentRoundInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"address"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXaddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"uint256"},{"name":"_team","type":"uint256"}],"name":"buyXid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_pID","type":"uint256"},{"name":"_name","type":"bytes32"}],"name":"receivePlayerNameList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"uint256"},{"name":"_all","type":"bool"}],"name":"registerNameXID","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"address"},{"name":"_team","type":"uint256"}],"name":"buyXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setNTToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"plyrRnds_","outputs":[{"name":"eth","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"ico","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"bytes32"},{"name":"_team","type":"uint256"}],"name":"buyXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"toAddr","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"potSplit_","outputs":[{"name":"gen","type":"uint256"},{"name":"nt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTimeLeft","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_rID","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"calcKeysReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_keys","type":"uint256"}],"name":"iWantXKeys","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"activated_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropPot_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"plyr_","outputs":[{"name":"addr","type":"address"},{"name":"name","type":"bytes32"},{"name":"win","type":"uint256"},{"name":"gen","type":"uint256"},{"name":"aff","type":"uint256"},{"name":"lrnd","type":"uint256"},{"name":"laff","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"potSwap","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getPlayerInfoByAddress","outputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerID","type":"uint256"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":true,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"isNewPlayer","type":"bool"},{"indexed":false,"name":"affiliateID","type":"uint256"},{"indexed":false,"name":"affiliateAddress","type":"address"},{"indexed":false,"name":"affiliateName","type":"bytes32"},{"indexed":false,"name":"amountPaid","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onNewName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"ethIn","type":"uint256"},{"indexed":false,"name":"keysBought","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"NTAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"},{"indexed":false,"name":"potAmount","type":"uint256"},{"indexed":false,"name":"airDropPot","type":"uint256"}],"name":"onEndTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerID","type":"uint256"},{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethOut","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethOut","type":"uint256"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"NTAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onWithdrawAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethIn","type":"uint256"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"NTAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onBuyAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"NTAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onReLoadAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"affiliateID","type":"uint256"},{"indexed":false,"name":"affiliateAddress","type":"address"},{"indexed":false,"name":"affiliateName","type":"bytes32"},{"indexed":true,"name":"roundID","type":"uint256"},{"indexed":true,"name":"buyerID","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onAffiliatePayout","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"roundID","type":"uint256"},{"indexed":false,"name":"amountAddedToPot","type":"uint256"}],"name":"onPotSwapDeposit","type":"event"}]
Contract Creation Code
60806040526004805460a060020a60ff02191690556175306005556000600e553480156200002c57600080fd5b50604080518082018252601e808252600660208084019182526000808052601180835294517f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b75591517f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b85584518086018652602b808252818301848152600180865287855292517f17bc176d2408558f6e4111feebc3cab4e16b63e967be91cde721f4c8a488b55255517f17bc176d2408558f6e4111feebc3cab4e16b63e967be91cde721f4c8a488b553558651808801885260388152600a818501818152600280885289875292517f08037d7b151cc412d25674a4e66b334d9ae9d2e5517a7feaae5cdb828bf1c62855517f08037d7b151cc412d25674a4e66b334d9ae9d2e5517a7feaae5cdb828bf1c629558851808a018a529283526008838601908152600380885298865292517f9bfbaa59f8e10e7868f8b402de9d605a390c45ddaebd8c9de3c6f31e733c87ff5591517f9bfbaa59f8e10e7868f8b402de9d605a390c45ddaebd8c9de3c6f31e733c88005587518089018952600f8152808501838152868052601280875291517f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7b55517f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7c558851808a018a5260198152808601878152948752818652517f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a35592517f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a455875180890189526014808252818601908152918652838552517f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b255517f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b3558651808801909752938652858201938452939091529190915290517f0f36ad39aee03e7108cc48f54934702a5f0d4066f10344cebf8198978d86976a55517f0f36ad39aee03e7108cc48f54934702a5f0d4066f10344cebf8198978d86976b556200034b640100000000620003d5810204565b60048054600160a060020a03199081167309341b5d43a9b2362141675b9276b777470222be17909155600180548216733c07f9f7164bf72fdbefd9438658facd94ed443917905560038054821673531100a6b3686e6140f170b0920962a5d7a2dd25179055600280549091167389b2e7ee504afd522e07f80ae7b9d4d228af3fe21790556200040d565b6000602081905260097ff25715a569b1a79ae52abfbdc79bc4bfb1801cbc0f53c65f2e725338f898a573819055338252604090912055565b615800806200041d6000396000f3006080604052600436106101f85763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e881146101fd57806306fdde0314610224578063079ce327146102ae5780630f15f4c0146102ce57806310f01eba146102e357806311a09ae7146103045780631bf678cf1461031957806324c33d331461033a5780632660316e146103b75780632ce21999146103e65780632e19ebdc14610417578063349cdcac1461042f5780633ccfd60b1461044d5780633ddd4698146104625780633f03aab4146104be57806349cc635d146104ef5780635893d48114610519578063624ae5c014610534578063630664341461054957806363c194f11461057f578063685ffd8314610594578063747dff42146105e757806382bfc739146106725780638f38f309146106995780638f7140ea146106a7578063921dec21146106c257806395d89b411461071557806398a0871d1461072a5780639ae5dc9114610741578063a2bccae914610762578063a65b37a1146107a3578063a9059cbb146107b1578063c519500e146107d5578063c7e284b8146107ed578063ce89c80c14610802578063cf8080001461081d578063d53b267914610835578063d87574e01461084a578063de7874f31461085f578063ed78cf4a146108b9578063ee0b5d8b146108c1575b600080fd5b34801561020957600080fd5b5061021261091a565b60408051918252519081900360200190f35b34801561023057600080fd5b506102396109db565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027357818101518382015260200161025b565b50505050905090810190601f1680156102a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ba57600080fd5b506102cc600435602435604435610a12565b005b3480156102da57600080fd5b506102cc610c04565b3480156102ef57600080fd5b50610212600160a060020a0360043516610ec5565b34801561031057600080fd5b50610212610ed7565b34801561032557600080fd5b506102cc600160a060020a0360043516610edd565b34801561034657600080fd5b50610352600435611024565b604080519d8e5260208e019c909c528c8c019a909a5297151560608c015260808b019690965260a08a019490945260c089019290925260e088015261010087015261012086015261014085015261016084015261018083015251908190036101a00190f35b3480156103c357600080fd5b506103d260043560243561108f565b604080519115158252519081900360200190f35b3480156103f257600080fd5b506103fe6004356110af565b6040805192835260208301919091528051918290030190f35b34801561042357600080fd5b506102126004356110c8565b34801561043b57600080fd5b506102cc6004356024356044356110da565b34801561045957600080fd5b506102cc6112a6565b6040805160206004803580820135601f81018490048402850184019095528484526102cc94369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050505060200135151561161a565b3480156104ca57600080fd5b506104d36117d3565b60408051600160a060020a039092168252519081900360200190f35b3480156104fb57600080fd5b506102cc600435600160a060020a03602435166044356064356117e2565b34801561052557600080fd5b506102126004356024356119ad565b34801561054057600080fd5b506102126119ca565b34801561055557600080fd5b506105616004356119d0565b60408051938452602084019290925282820152519081900360600190f35b34801561058b57600080fd5b506104d3611b8f565b6040805160206004803580820135601f81018490048402850184019095528484526102cc943694929360249392840191908190840183828082843750949750508435955050505050602001351515611b9e565b3480156105f357600080fd5b506105fc611c7e565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b34801561067e57600080fd5b506102cc600160a060020a0360043516602435604435611e7c565b6102cc60043560243561205e565b3480156106b357600080fd5b506102cc60043560243561222b565b6040805160206004803580820135601f81018490048402850184019095528484526102cc9436949293602493928401919081908401838280828437509497505084359550505050506020013515156122e2565b34801561072157600080fd5b506102396123c2565b6102cc600160a060020a03600435166024356123f9565b34801561074d57600080fd5b506102cc600160a060020a03600435166125f6565b34801561076e57600080fd5b5061077d6004356024356126dc565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6102cc60043560243561270e565b3480156107bd57600080fd5b506103d2600160a060020a03600435166024356128f1565b3480156107e157600080fd5b506103fe600435612a4a565b3480156107f957600080fd5b50610212612a63565b34801561080e57600080fd5b50610212600435602435612aea565b34801561082957600080fd5b50610212600435612b85565b34801561084157600080fd5b506103d2612c33565b34801561085657600080fd5b50610212612c43565b34801561086b57600080fd5b50610877600435612c49565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6102cc612c90565b3480156108cd57600080fd5b506108e2600160a060020a0360043516612d0e565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b600c546000818152600f602052604081206004015490919042908111801561098457506000828152600f60205260409020600201548111158061098457506000828152600f60205260409020600201548111801561098457506000828152600f6020526040902054155b156109cc576000828152600f60205260409020600501546109c590670de0b6b3a7640000906109b9908263ffffffff612de316565b9063ffffffff612e4416565b92506109d6565b6544364c5bb00092505b505090565b60408051808201909152601681527f4e54656368203344204c6f6e67204f6666696369616c00000000000000000000602082015281565b610a1a6156db565b600454600090819060a060020a900460ff161515600114610a73576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015610aba576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b85633b9aca00811015610b05576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115610b55576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b336000908152600760205260409020549450881580610b84575060008581526009602052604090206001015489145b15610ba2576000858152600960205260409020600601549350610be1565b6000898152600860209081526040808320548884526009909252909120600601549094508414610be15760008581526009602052604090206006018490555b610bea88612e71565b9750610bf985858a8a8a612e96565b505050505050505050565b3360009081526020819052604090205460098114610c5a576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b600454600160a060020a03161515610cbc576040805160e560020a62461bcd02815260206004820152601360248201527f4d757374207365747570204e54546f6b656e2e00000000000000000000000000604482015290519081900360640190fd5b600154600160a060020a03161515610d1e576040805160e560020a62461bcd02815260206004820152601a60248201527f4d75737420736574757020436f6d6d756e697479416464725f2e000000000000604482015290519081900360640190fd5b600354600160a060020a03161515610d80576040805160e560020a62461bcd02815260206004820152601960248201527f4d757374207365747570204e54546f6b656e53656c6c65722e00000000000000604482015290519081900360640190fd5b600254600160a060020a03161515610de2576040805160e560020a62461bcd02815260206004820152601c60248201527f4d757374207365747570204e54466f756e646174696f6e416464722e00000000604482015290519081900360640190fd5b60045460a060020a900460ff1615610e44576040805160e560020a62461bcd02815260206004820152600960248201527f4f6e6c79206f6e63650000000000000000000000000000000000000000000000604482015290519081900360640190fd5b506004805474ff0000000000000000000000000000000000000000191660a060020a1790556001600c819055600052600f602052427f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f893819055615460017f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f89155565b60076020526000908152604090205481565b600e5481565b3360009081526020819052604090205460098114610f33576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b600160a060020a0382161515610f93576040805160e560020a62461bcd02815260206004820152601a60248201527f456d7074792061646472657373206e6f7420616c6c6f7765642e000000000000604482015290519081900360640190fd5b600654600160a060020a031615610ff4576040805160e560020a62461bcd02815260206004820152601a60248201527f4f746865724e54656368334420686173206265656e207365742e000000000000604482015290519081900360640190fd5b506006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600f60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a989960ff909816989697959694959394929391929091908d565b600b60209081526000928352604080842090915290825290205460ff1681565b6011602052600090815260409020805460019091015482565b60086020526000908152604090205481565b6110e26156db565b60045460009060a060020a900460ff161515600114611139576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015611180576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b84633b9aca008110156111cb576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561121b576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b33600090815260076020526040902054935087158061123957508388145b15611257576000848152600960205260409020600601549750611284565b60008481526009602052604090206006015488146112845760008481526009602052604090206006018890555b61128d87612e71565b965061129c8489898989612e96565b5050505050505050565b6000806000806112b46156db565b60045460a060020a900460ff161515600114611308576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b801561134f576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b600c5433600090815260076020908152604080832054848452600f9092529091206002015491985042975095508611801561139c57506000878152600f602052604090206003015460ff16155b80156113b557506000878152600f602052604090205415155b1561155b576000878152600f60205260409020600301805460ff191660011790556113df836130ae565b92506113ea856134ff565b9350600084111561143b57600085815260096020526040808220549051600160a060020a039091169186156108fc02918791818181858888f19350505050158015611439573d6000803e3d6000fd5b505b85670de0b6b3a764000002836000015101836000018181525050848360200151018360200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc3360096000888152602001908152602001600020600101548686600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611611565b611564856134ff565b935060008411156115b557600085815260096020526040808220549051600160a060020a039091169186156108fc02918791818181858888f193505050501580156115b3573d6000803e3d6000fd5b505b6000858152600960209081526040918290206001015482513381529182015280820186905260608101889052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050565b6000808080808033803b8015611668576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b6116718b613592565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038e1660448301528c151560648301528251939b50995034985073410526cd583af0be0530166d53efcd7da969f7b79263aa4d490b928a926084808201939182900301818588803b15801561170257600080fd5b505af1158015611716573d6000803e3d6000fd5b50505050506040513d604081101561172d57600080fd5b508051602091820151600160a060020a03808b1660008181526007865260408082205485835260098852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b600154600160a060020a031681565b3373410526cd583af0be0530166d53efcd7da969f7b71461184d576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c65642066726f6d20506c61796572426f6f6b206f6e6c790000000000604482015290519081900360640190fd5b600160a060020a038316600090815260076020526040902054841461188857600160a060020a03831660009081526007602052604090208490555b60008281526008602052604090205484146118af5760008281526008602052604090208490555b600084815260096020526040902054600160a060020a03848116911614611905576000848152600960205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b60008481526009602052604090206001015482146119325760008481526009602052604090206001018290555b600084815260096020526040902060060154811461195f5760008481526009602052604090206006018190555b6000848152600b6020908152604080832085845290915290205460ff1615156119a7576000848152600b602090815260408083208584529091529020805460ff191660011790555b50505050565b601060209081526000928352604080842090915290825290205481565b600c5481565b600c546000818152600f602052604081206002015490918291829190829042118015611a0e57506000828152600f602052604090206003015460ff16155b8015611a2757506000828152600f602052604090205415155b15611b5e576000828152600f6020526040902054861415611b22576000828152600f60205260409020600c810154600790910154611a6a9163ffffffff612de316565b9050611aab6064611a8283603063ffffffff613da516565b811515611a8b57fe5b60008981526009602052604090206002015491900463ffffffff612de316565b6000878152600a60209081526040808320868452909152902060020154611b0490611ae690611ada8a87613e1c565b9063ffffffff613f0b16565b6000898152600960205260409020600301549063ffffffff612de316565b60008881526009602052604090206004015491965094509250611b86565b6000868152600960209081526040808320600290810154600a8452828520878652909352922090910154611b0490611ae690611ada8a87613e1c565b60008681526009602052604090206002810154600590910154611b0490611ae6908990613f6b565b50509193909250565b600254600160a060020a031681565b6000808080808033803b8015611bec576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b611bf58b613592565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073410526cd583af0be0530166d53efcd7da969f7b79263745ea0c1928a926084808201939182900301818588803b15801561170257600080fd5b6000806000806000806000806000806000806000806000600c549050600f60008281526020019081526020016000206009015481600f600084815260200190815260200160002060050154600f600085815260200190815260200160002060020154600f600086815260200190815260200160002060040154600f600087815260200190815260200160002060070154600f600088815260200190815260200160002060000154600a02600f6000898152602001908152602001600020600101540160096000600f60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a031660096000600f60008c815260200190815260200160002060000154815260200190815260200160002060010154601060008b8152602001908152602001600020600080815260200190815260200160002054601060008c815260200190815260200160002060006001815260200190815260200160002054601060008d815260200190815260200160002060006002815260200190815260200160002054601060008e815260200190815260200160002060006003815260200190815260200160002054600d546103e802600e54019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b611e846156db565b600454600090819060a060020a900460ff161515600114611edd576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015611f24576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b85633b9aca00811015611f6f576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115611fbf576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b336000908152600760205260409020549450600160a060020a0389161580611fef5750600160a060020a03891633145b1561200d576000858152600960205260409020600601549350610be1565b600160a060020a0389166000908152600760209081526040808320548884526009909252909120600601549094508414610be1576000858152600960205260409020600601849055610bea88612e71565b6120666156db565b60045460009060a060020a900460ff1615156001146120bd576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015612104576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b34633b9aca0081101561214f576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561219f576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b6121a885613fc8565b3360009081526007602052604090205490955093508615806121c957508387145b156121e7576000848152600960205260409020600601549650612214565b60008481526009602052604090206006015487146122145760008481526009602052604090206006018790555b61221d86612e71565b95506116118488888861427c565b3373410526cd583af0be0530166d53efcd7da969f7b714612296576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c65642066726f6d20506c61796572426f6f6b206f6e6c790000000000604482015290519081900360640190fd5b6000828152600b6020908152604080832084845290915290205460ff1615156122de576000828152600b602090815260408083208484529091529020805460ff191660011790555b5050565b6000808080808033803b8015612330576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b6123398b613592565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073410526cd583af0be0530166d53efcd7da969f7b79263c0942dfd928a926084808201939182900301818588803b15801561170257600080fd5b60408051808201909152600481527f4e54334400000000000000000000000000000000000000000000000000000000602082015281565b6124016156db565b600454600090819060a060020a900460ff16151560011461245a576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b80156124a1576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b34633b9aca008110156124ec576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561253c576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b61254586613fc8565b336000908152600760205260409020549096509450600160a060020a03881615806125785750600160a060020a03881633145b156125965760008581526009602052604090206006015493506125df565b600160a060020a03881660009081526007602090815260408083205488845260099092529091206006015490945084146125df5760008581526009602052604090206006018490555b6125e887612e71565b965061129c8585898961427c565b336000908152602081905260409020546009811461264c576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b600160a060020a03821615156126ac576040805160e560020a62461bcd02815260206004820152601a60248201527f456d7074792061646472657373206e6f7420616c6c6f7765642e000000000000604482015290519081900360640190fd5b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600a60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b6127166156db565b600454600090819060a060020a900460ff16151560011461276f576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b80156127b6576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b34633b9aca00811015612801576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115612851576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b61285a86613fc8565b33600090815260076020526040902054909650945087158061288c575060008581526009602052604090206001015488145b156128aa5760008581526009602052604090206006015493506125df565b60008881526008602090815260408083205488845260099092529091206006015490945084146125df5760008581526009602052604090206006018490556125e887612e71565b3360009081526020819052604081205460098114612947576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b6000831161299f576040805160e560020a62461bcd02815260206004820152600960248201527f4d757374203e2030200000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0388811694820194909452602481018790529051929091169163a9059cbb916044808201926020929091908290030181600087803b158015612a1257600080fd5b505af1158015612a26573d6000803e3d6000fd5b505050506040513d6020811015612a3c57600080fd5b5060019250505b5092915050565b6012602052600090815260409020805460019091015482565b600c546000818152600f60205260408120600201549091904290811015612ae1576000828152600f6020526040902060040154811115612abf576000828152600f60205260409020600201546109c5908263ffffffff613f0b16565b6000828152600f60205260409020600201546109c5908263ffffffff613f0b16565b600092506109d6565b6000828152600f6020526040812060040154429081118015612b4e57506000848152600f602052604090206002015481111580612b4e57506000848152600f602052604090206002015481118015612b4e57506000848152600f6020526040902054155b15612b7c576000848152600f6020526040902060060154612b75908463ffffffff6144b216565b9150612a43565b612b75836144d3565b600c546000818152600f6020526040812060040154909190429081118015612bef57506000828152600f602052604090206002015481111580612bef57506000828152600f602052604090206002015481118015612bef57506000828152600f6020526040902054155b15612c23576000828152600f6020526040902060050154612c1c9085906109b9908263ffffffff612de316565b9250612c2c565b612c1c8461454b565b5050919050565b60045460a060020a900460ff1681565b600d5481565b6009602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b600c80546001016000818152600f6020526040902090910154612cb9903463ffffffff612de316565b6000828152600f6020908152604091829020600c01929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000600c54915050600160a060020a0389166000908152600760209081526040808320548084526009808452828520600180820154600a8752858820898952875294872001549583905293526002830154600590930154909384939091612da490612d86908690613f6b565b6000878152600960205260409020600301549063ffffffff612de316565b600095865260096020908152604080882060040154600a83528189209989529890915290952054939e929d50909b509950919750919550909350915050565b81810182811015612e3e576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b6000612e6a612e61612e5c858563ffffffff613f0b16565b61454b565b611ada8561454b565b9392505050565b600080821080612e815750600382115b15612e8e57506002612e91565b50805b919050565b600c546000818152600f6020526040902060040154429081118015612efd57506000828152600f602052604090206002015481111580612efd57506000828152600f602052604090206002015481118015612efd57506000828152600f6020526040902054155b15612f3457612f0f84611ada896134ff565b600088815260096020526040902060030155612f2f8288868989886145b8565b611611565b6000828152600f602052604090206002015481118015612f6657506000828152600f602052604090206003015460ff16155b15611611576000828152600f60205260409020600301805460ff19166001179055612f90836130ae565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600960008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6130b66156db565b600c80546000818152600f6020526040812080546001820154948201546007909201549394909390929182918291829182918291829182916130fd9163ffffffff612de316565b9750606461311289603063ffffffff613da516565b81151561311b57fe5b04965060328860008b8152601260205260409020549190049650606490613149908a9063ffffffff613da516565b81151561315257fe5b60008b815260126020526040902060010154919004955060649061317d908a9063ffffffff613da516565b81151561318657fe5b0493506131a184611ada87818a818e8e63ffffffff613f0b16565b60008c8152600f60205260409020600501549093506131ce86670de0b6b3a764000063ffffffff613da516565b8115156131d757fe5b60008d8152600f6020526040902060050154919004925061322590670de0b6b3a76400009061320d90859063ffffffff613da516565b81151561321657fe5b8791900463ffffffff613f0b16565b9050600081111561325557613240858263ffffffff613f0b16565b9450613252838263ffffffff612de316565b92505b60008a81526009602052604090206002015461327890889063ffffffff612de316565b60008b815260096020526040902060020155600154600160a060020a0316156132df57600154604051600160a060020a039091169087156108fc029088906000818181858888f193505050501580156132d5573d6000803e3d6000fd5b50600095506132f0565b6132e98387612de3565b9250600095505b600084111561335b57600254600160a060020a03161561334a57600254604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015613344573d6000803e3d6000fd5b5061335b565b6133548385612de3565b9250600093505b60008b8152600f602052604090206008015461337e90839063ffffffff612de316565b600f60008d815260200190815260200160002060080181905550600f60008c815260200190815260200160002060020154620f4240028d60000151018d60000181815250508867016345785d8a0000028a6a52b7d2dcc80cd2e4000000028e6020015101018d6020018181525050600960008b815260200190815260200160002060000160009054906101000a9004600160a060020a03168d60400190600160a060020a03169081600160a060020a031681525050600960008b8152602001908152602001600020600101548d606001906000191690816000191681525050868d6080018181525050848d60e001818152505060008d60c0018181525050828d60a0018181525050600c600081548092919060010191905055508a806001019b505042600f60008d8152602001908152602001600020600401819055506134d061546042612de390919063ffffffff16565b60008c8152600f602052604090206002810191909155600c018390558c9b505050505050505050505050919050565b600081815260096020526040812060050154819061351e908490614b09565b60008381526009602052604090206004810154600382015460029092015461355c92613550919063ffffffff612de316565b9063ffffffff612de316565b905060008111156135885760008381526009602052604081206002810182905560038101829055600401555b8091505b50919050565b80516000908290828080602084118015906135ad5750600084115b1515613629576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b84600081518110151561363857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415801561369f5750846001850381518110151561367757fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b151561371b576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b84600081518110151561372a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a02141561386d5784600181518110151561376457fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a02141515156137e1576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b8460018151811015156137f057fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a021415151561386d576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b83821015613d3d5784517f4000000000000000000000000000000000000000000000000000000000000000908690849081106138aa57fe5b90602001015160f860020a900460f860020a02600160f860020a03191611801561391e575084517f5b00000000000000000000000000000000000000000000000000000000000000908690849081106138ff57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1561398b57848281518110151561393157fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a02858381518110151561396257fe5b906020010190600160f860020a031916908160001a90535082151561398657600192505b613d32565b848281518110151561399957fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480613a69575084517f6000000000000000000000000000000000000000000000000000000000000000908690849081106139f557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613a69575084517f7b0000000000000000000000000000000000000000000000000000000000000090869084908110613a4a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80613b13575084517f2f0000000000000000000000000000000000000000000000000000000000000090869084908110613a9f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613b13575084517f3a0000000000000000000000000000000000000000000000000000000000000090869084908110613af457fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1515613b8f576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8482815181101515613b9d57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415613c7c578482600101815181101515613bd957fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214151515613c7c576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015613d28575084517f300000000000000000000000000000000000000000000000000000000000000090869084908110613cb557fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080613d28575084517f390000000000000000000000000000000000000000000000000000000000000090869084908110613d0957fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b15613d3257600192505b600190910190613872565b600183151514613d97576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b6000821515613db657506000612e3e565b50818102818382811515613dc657fe5b0414612e3e576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b6000818152600f60205260408120600c8101546007909101548291613e47919063ffffffff612de316565b6000858152600a602090815260408083208784528252808320600190810154600f8452828520600581015492015485526012909352922054929350670de0b6b3a764000092613ef992613eed91613ec4908690606490613eae908a9063ffffffff613da516565b811515613eb757fe5b049063ffffffff613da516565b811515613ecd57fe5b6000898152600f602052604090206008015491900463ffffffff612de316565b9063ffffffff613da516565b811515613f0257fe5b04949350505050565b600082821115613f65576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b6000828152600a6020908152604080832084845282528083206002810154600190910154600f90935290832060080154612e6a92670de0b6b3a764000091613fb291613da5565b811515613fbb57fe5b049063ffffffff613f0b16565b613fd06156db565b33600090815260076020526040812054908082151561427357604080517fe56556a9000000000000000000000000000000000000000000000000000000008152336004820152905173410526cd583af0be0530166d53efcd7da969f7b79163e56556a99160248083019260209291908290030181600087803b15801561405557600080fd5b505af1158015614069573d6000803e3d6000fd5b505050506040513d602081101561407f57600080fd5b5051604080517f82e37b2c00000000000000000000000000000000000000000000000000000000815260048101839052905191945073410526cd583af0be0530166d53efcd7da969f7b7916382e37b2c916024808201926020929091908290030181600087803b1580156140f257600080fd5b505af1158015614106573d6000803e3d6000fd5b505050506040513d602081101561411c57600080fd5b5051604080517fe3c08adf00000000000000000000000000000000000000000000000000000000815260048101869052905191935073410526cd583af0be0530166d53efcd7da969f7b79163e3c08adf916024808201926020929091908290030181600087803b15801561418f57600080fd5b505af11580156141a3573d6000803e3d6000fd5b505050506040513d60208110156141b957600080fd5b505133600081815260076020908152604080832088905587835260099091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115614242576000828152600860209081526040808320869055858352600982528083206001908101869055600b8352818420868552909252909120805460ff191690911790555b80158015906142515750828114155b1561426b5760008381526009602052604090206006018190555b845160010185525b50929392505050565b600c546000818152600f60205260409020600401544290811180156142e357506000828152600f6020526040902060020154811115806142e357506000828152600f6020526040902060020154811180156142e357506000828152600f6020526040902054155b156142fb576142f68287348888886145b8565b6144aa565b6000828152600f60205260409020600201548111801561432d57506000828152600f602052604090206003015460ff16155b15614475576000828152600f60205260409020600301805460ff19166001179055614357836130ae565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a3360096000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b600086815260096020526040902060030154614497903463ffffffff612de316565b6000878152600960205260409020600301555b505050505050565b6000612e6a6144c0846144d3565b611ada6144d3868663ffffffff612de316565b60006309502f9061453b6d03b2a1d15167e7c5699bfde00000611ada6145367a0dac7055469777a6122ee4310dd6c14410500f29048400000000006135506b01027e72f1f1281308800000613eed8a670de0b6b3a764000063ffffffff613da516565b614ba0565b81151561454457fe5b0492915050565b600061455e670de0b6b3a7640000614bf3565b61453b600261459161457e86670de0b6b3a764000063ffffffff613da516565b65886c8f6730709063ffffffff613da516565b81151561459a57fe5b046135506145a786614bf3565b6304a817c89063ffffffff613da516565b6000858152600a6020908152604080832089845290915281206001015481908190819015156145ee576145eb8986614bff565b94505b60008a8152600f602052604090206006015468056bc75e2d6310000011801561464857506000898152600a602090815260408083208d8452909152902054678ac7230489e8000090614646908a63ffffffff612de316565b115b156146cf576000898152600a602090815260408083208d845290915290205461468090678ac7230489e800009063ffffffff613f0b16565b9350614692888563ffffffff613f0b16565b60008a8152600960205260409020600301549093506146b7908463ffffffff612de316565b60008a81526009602052604090206003015592965086925b633b9aca00881115614afd5760008a8152600f60205260409020600601546146fd908963ffffffff6144b216565b9150670de0b6b3a7640000821061477457614718828b614c5f565b60008a8152600f6020526040902054891461473f5760008a8152600f602052604090208990555b60008a8152600f6020526040902060010154861461476c5760008a8152600f602052604090206001018690555b845160640185525b67016345785d8a000088106149b457600e80546001019055614794614d3b565b1515600114156149b457678ac7230489e80000881061483557600d546064906147c490604b63ffffffff613da516565b8115156147cd57fe5b60008b81526009602052604090206002015491900491506147f4908263ffffffff612de316565b60008a815260096020526040902060020155600d54614819908263ffffffff613f0b16565b600d5584516d0eca8847c4129106ce8300000000018552614989565b670de0b6b3a764000088101580156148545750678ac7230489e8000088105b156148e157600d5460649061487090603263ffffffff613da516565b81151561487957fe5b60008b81526009602052604090206002015491900491506148a0908263ffffffff612de316565b60008a815260096020526040902060020155600d546148c5908263ffffffff613f0b16565b600d5584516d09dc5ada82b70b59df0200000000018552614989565b67016345785d8a000088101580156149005750670de0b6b3a764000088105b1561498957600d5460649061491c90601963ffffffff613da516565b81151561492557fe5b60008b815260096020526040902060020154919004915061494c908263ffffffff612de316565b60008a815260096020526040902060020155600d54614971908263ffffffff613f0b16565b600d5584516d0eca8847c4129106ce83000000000185525b84516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b26800000000185526000600e555b600e5485516103e89091020185526000898152600a602090815260408083208d84529091529020600101546149f090839063ffffffff612de316565b60008a8152600a602090815260408083208e84529091529020600181019190915554614a1d908990612de3565b60008a8152600a602090815260408083208e8452825280832093909355600f90522060050154614a5490839063ffffffff612de316565b60008b8152600f60205260409020600581019190915560060154614a7f90899063ffffffff612de316565b60008b8152600f60209081526040808320600601939093556010815282822089835290522054614ab690899063ffffffff612de316565b60008b81526010602090815260408083208a8452909152902055614ade8a8a8a8a8a8a614f52565b9450614aee8a8a8a89868a6152b8565b9450614afd89878a8589615426565b50505050505050505050565b6000614b158383613f6b565b90506000811115614b9b57600083815260096020526040902060030154614b4390829063ffffffff612de316565b600084815260096020908152604080832060030193909355600a815282822085835290522060020154614b7d90829063ffffffff612de316565b6000848152600a602090815260408083208684529091529020600201555b505050565b6000806002614bb0846001612de3565b811515614bb957fe5b0490508291505b8181101561358c578091506002614be28285811515614bdb57fe5b0483612de3565b811515614beb57fe5b049050614bc0565b6000612e3e8283613da5565b614c076156db565b60008381526009602052604090206005015415614c3b57600083815260096020526040902060050154614c3b908490614b09565b50600c546000838152600960205260409020600501558051600a0181528092915050565b6000818152600f602052604081206002015442919082118015614c8e57506000838152600f6020526040902054155b15614cb257614cab82613550603c670de0b6b3a764000088613eb7565b9050614cdf565b6000838152600f6020526040902060020154614cdc90613550603c670de0b6b3a764000088613eb7565b90505b614cf16154608363ffffffff612de316565b811015614d11576000838152600f602052604090206002018190556119a7565b614d236154608363ffffffff612de316565b6000848152600f602052604090206002015550505050565b600080614eac4361355042336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614db65780518252601f199092019160209182019101614d97565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614dec57fe5b046135504561355042416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614e655780518252601f199092019160209182019101614e46565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614e9b57fe5b04613550424463ffffffff612de316565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310614efa5780518252601f199092019160209182019101614edb565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120600e5490945092506103e89150839050046103e80282031015614f495760019150614f4e565b600091505b5090565b614f5a6156db565b6006546032860490606487049060009081908190600160a060020a03161561500657600660009054906101000a9004600160a060020a0316600160a060020a031663ed78cf4a856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b158015614fe857600080fd5b505af1158015614ffc573d6000803e3d6000fd5b5050505050615019565b615016858563ffffffff612de316565b94505b600a8a0492508a891415801561503f575060008981526009602052604090206001015415155b156150df5760008981526009602052604090206004015461506790849063ffffffff612de316565b60008a815260096020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101859052426060830152518c918e918c917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a46150f2565b6150ef858463ffffffff612de316565b94505b6000888152601160205260409020600101546151289060649061511c908d9063ffffffff613da516565b9063ffffffff61559416565b9150600085111561519757600154600160a060020a03161561518457600154604051600160a060020a039091169086156108fc029087906000818181858888f1935050505015801561517e573d6000803e3d6000fd5b50615197565b615194828663ffffffff612de316565b91505b60008211156152a8576005546151b490839063ffffffff613da516565b90506151cd8760c0015182612de390919063ffffffff16565b60c088015260048054604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233938101939093526024830184905251600160a060020a039091169163a9059cbb9160448083019260209291908290030181600087803b15801561524057600080fd5b505af1158015615254573d6000803e3d6000fd5b505050506040513d602081101561526a57600080fd5b5050600354604051600160a060020a039091169083156108fc029084906000818181858888f193505050501580156152a6573d6000803e3d6000fd5b505b50949a9950505050505050505050565b6152c06156db565b6000848152601160205260408120548190819081906064906152e9908b9063ffffffff613da516565b8115156152f257fe5b04935060648904925061531083600d54612de390919063ffffffff16565b600d556000888152601160205260409020600101546153819061537490606490615341908d9063ffffffff613da516565b81151561534a57fe5b04606461535e8d600e63ffffffff613da516565b81151561536757fe5b049063ffffffff612de316565b8a9063ffffffff613f0b16565b9850615393898563ffffffff613f0b16565b91506153a18b8b868a6155a2565b905060008111156153bf576153bc848263ffffffff613f0b16565b93505b60008b8152600f60205260409020600701546153e590613550848463ffffffff612de316565b60008c8152600f602052604090206007015560e086015161540d90859063ffffffff612de316565b60e0870152506101008501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600c54751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c7468160000151826020015160096000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600d54604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000808284811515613f0257fe5b6000848152600f6020526040812060050154819081906155d086670de0b6b3a764000063ffffffff613da516565b8115156155d957fe5b6000898152600f6020526040902060080154919004925061560190839063ffffffff612de316565b6000888152600f6020526040902060080155670de0b6b3a764000061562c838663ffffffff613da516565b81151561563557fe5b6000888152600a602090815260408083208c8452825280832060020154600f9092529091206008015492909104925061568891613550908490670de0b6b3a764000090613fb2908a63ffffffff613da516565b6000878152600a602090815260408083208b8452825280832060020193909355600f905220600501546156d090670de0b6b3a76400009061320d90859063ffffffff613da516565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a031681526020016000801916815260200160008152602001600081526020016000815260200160008152602001600081525090560048756d616e73206f6e6c79000000000000000000000000000000000000000000697473206e6f7420616374697665207965742e000000000000000000000000004d7573742062652061646d696e2e000000000000000000000000000000000000546f6f206c6974746c6500000000000000000000000000000000000000000000546f6f206d756368000000000000000000000000000000000000000000000000a165627a7a7230582014785a19f98eb6f4f9adfc80b78a9a7005075298cadf6f3146e6f2cbd1ee8fce0029
Deployed Bytecode
0x6080604052600436106101f85763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e881146101fd57806306fdde0314610224578063079ce327146102ae5780630f15f4c0146102ce57806310f01eba146102e357806311a09ae7146103045780631bf678cf1461031957806324c33d331461033a5780632660316e146103b75780632ce21999146103e65780632e19ebdc14610417578063349cdcac1461042f5780633ccfd60b1461044d5780633ddd4698146104625780633f03aab4146104be57806349cc635d146104ef5780635893d48114610519578063624ae5c014610534578063630664341461054957806363c194f11461057f578063685ffd8314610594578063747dff42146105e757806382bfc739146106725780638f38f309146106995780638f7140ea146106a7578063921dec21146106c257806395d89b411461071557806398a0871d1461072a5780639ae5dc9114610741578063a2bccae914610762578063a65b37a1146107a3578063a9059cbb146107b1578063c519500e146107d5578063c7e284b8146107ed578063ce89c80c14610802578063cf8080001461081d578063d53b267914610835578063d87574e01461084a578063de7874f31461085f578063ed78cf4a146108b9578063ee0b5d8b146108c1575b600080fd5b34801561020957600080fd5b5061021261091a565b60408051918252519081900360200190f35b34801561023057600080fd5b506102396109db565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027357818101518382015260200161025b565b50505050905090810190601f1680156102a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ba57600080fd5b506102cc600435602435604435610a12565b005b3480156102da57600080fd5b506102cc610c04565b3480156102ef57600080fd5b50610212600160a060020a0360043516610ec5565b34801561031057600080fd5b50610212610ed7565b34801561032557600080fd5b506102cc600160a060020a0360043516610edd565b34801561034657600080fd5b50610352600435611024565b604080519d8e5260208e019c909c528c8c019a909a5297151560608c015260808b019690965260a08a019490945260c089019290925260e088015261010087015261012086015261014085015261016084015261018083015251908190036101a00190f35b3480156103c357600080fd5b506103d260043560243561108f565b604080519115158252519081900360200190f35b3480156103f257600080fd5b506103fe6004356110af565b6040805192835260208301919091528051918290030190f35b34801561042357600080fd5b506102126004356110c8565b34801561043b57600080fd5b506102cc6004356024356044356110da565b34801561045957600080fd5b506102cc6112a6565b6040805160206004803580820135601f81018490048402850184019095528484526102cc94369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050505060200135151561161a565b3480156104ca57600080fd5b506104d36117d3565b60408051600160a060020a039092168252519081900360200190f35b3480156104fb57600080fd5b506102cc600435600160a060020a03602435166044356064356117e2565b34801561052557600080fd5b506102126004356024356119ad565b34801561054057600080fd5b506102126119ca565b34801561055557600080fd5b506105616004356119d0565b60408051938452602084019290925282820152519081900360600190f35b34801561058b57600080fd5b506104d3611b8f565b6040805160206004803580820135601f81018490048402850184019095528484526102cc943694929360249392840191908190840183828082843750949750508435955050505050602001351515611b9e565b3480156105f357600080fd5b506105fc611c7e565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b34801561067e57600080fd5b506102cc600160a060020a0360043516602435604435611e7c565b6102cc60043560243561205e565b3480156106b357600080fd5b506102cc60043560243561222b565b6040805160206004803580820135601f81018490048402850184019095528484526102cc9436949293602493928401919081908401838280828437509497505084359550505050506020013515156122e2565b34801561072157600080fd5b506102396123c2565b6102cc600160a060020a03600435166024356123f9565b34801561074d57600080fd5b506102cc600160a060020a03600435166125f6565b34801561076e57600080fd5b5061077d6004356024356126dc565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6102cc60043560243561270e565b3480156107bd57600080fd5b506103d2600160a060020a03600435166024356128f1565b3480156107e157600080fd5b506103fe600435612a4a565b3480156107f957600080fd5b50610212612a63565b34801561080e57600080fd5b50610212600435602435612aea565b34801561082957600080fd5b50610212600435612b85565b34801561084157600080fd5b506103d2612c33565b34801561085657600080fd5b50610212612c43565b34801561086b57600080fd5b50610877600435612c49565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6102cc612c90565b3480156108cd57600080fd5b506108e2600160a060020a0360043516612d0e565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b600c546000818152600f602052604081206004015490919042908111801561098457506000828152600f60205260409020600201548111158061098457506000828152600f60205260409020600201548111801561098457506000828152600f6020526040902054155b156109cc576000828152600f60205260409020600501546109c590670de0b6b3a7640000906109b9908263ffffffff612de316565b9063ffffffff612e4416565b92506109d6565b6544364c5bb00092505b505090565b60408051808201909152601681527f4e54656368203344204c6f6e67204f6666696369616c00000000000000000000602082015281565b610a1a6156db565b600454600090819060a060020a900460ff161515600114610a73576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015610aba576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b85633b9aca00811015610b05576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115610b55576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b336000908152600760205260409020549450881580610b84575060008581526009602052604090206001015489145b15610ba2576000858152600960205260409020600601549350610be1565b6000898152600860209081526040808320548884526009909252909120600601549094508414610be15760008581526009602052604090206006018490555b610bea88612e71565b9750610bf985858a8a8a612e96565b505050505050505050565b3360009081526020819052604090205460098114610c5a576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b600454600160a060020a03161515610cbc576040805160e560020a62461bcd02815260206004820152601360248201527f4d757374207365747570204e54546f6b656e2e00000000000000000000000000604482015290519081900360640190fd5b600154600160a060020a03161515610d1e576040805160e560020a62461bcd02815260206004820152601a60248201527f4d75737420736574757020436f6d6d756e697479416464725f2e000000000000604482015290519081900360640190fd5b600354600160a060020a03161515610d80576040805160e560020a62461bcd02815260206004820152601960248201527f4d757374207365747570204e54546f6b656e53656c6c65722e00000000000000604482015290519081900360640190fd5b600254600160a060020a03161515610de2576040805160e560020a62461bcd02815260206004820152601c60248201527f4d757374207365747570204e54466f756e646174696f6e416464722e00000000604482015290519081900360640190fd5b60045460a060020a900460ff1615610e44576040805160e560020a62461bcd02815260206004820152600960248201527f4f6e6c79206f6e63650000000000000000000000000000000000000000000000604482015290519081900360640190fd5b506004805474ff0000000000000000000000000000000000000000191660a060020a1790556001600c819055600052600f602052427f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f893819055615460017f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f89155565b60076020526000908152604090205481565b600e5481565b3360009081526020819052604090205460098114610f33576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b600160a060020a0382161515610f93576040805160e560020a62461bcd02815260206004820152601a60248201527f456d7074792061646472657373206e6f7420616c6c6f7765642e000000000000604482015290519081900360640190fd5b600654600160a060020a031615610ff4576040805160e560020a62461bcd02815260206004820152601a60248201527f4f746865724e54656368334420686173206265656e207365742e000000000000604482015290519081900360640190fd5b506006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600f60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a989960ff909816989697959694959394929391929091908d565b600b60209081526000928352604080842090915290825290205460ff1681565b6011602052600090815260409020805460019091015482565b60086020526000908152604090205481565b6110e26156db565b60045460009060a060020a900460ff161515600114611139576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015611180576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b84633b9aca008110156111cb576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561121b576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b33600090815260076020526040902054935087158061123957508388145b15611257576000848152600960205260409020600601549750611284565b60008481526009602052604090206006015488146112845760008481526009602052604090206006018890555b61128d87612e71565b965061129c8489898989612e96565b5050505050505050565b6000806000806112b46156db565b60045460a060020a900460ff161515600114611308576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b801561134f576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b600c5433600090815260076020908152604080832054848452600f9092529091206002015491985042975095508611801561139c57506000878152600f602052604090206003015460ff16155b80156113b557506000878152600f602052604090205415155b1561155b576000878152600f60205260409020600301805460ff191660011790556113df836130ae565b92506113ea856134ff565b9350600084111561143b57600085815260096020526040808220549051600160a060020a039091169186156108fc02918791818181858888f19350505050158015611439573d6000803e3d6000fd5b505b85670de0b6b3a764000002836000015101836000018181525050848360200151018360200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc3360096000888152602001908152602001600020600101548686600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611611565b611564856134ff565b935060008411156115b557600085815260096020526040808220549051600160a060020a039091169186156108fc02918791818181858888f193505050501580156115b3573d6000803e3d6000fd5b505b6000858152600960209081526040918290206001015482513381529182015280820186905260608101889052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050565b6000808080808033803b8015611668576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b6116718b613592565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038e1660448301528c151560648301528251939b50995034985073410526cd583af0be0530166d53efcd7da969f7b79263aa4d490b928a926084808201939182900301818588803b15801561170257600080fd5b505af1158015611716573d6000803e3d6000fd5b50505050506040513d604081101561172d57600080fd5b508051602091820151600160a060020a03808b1660008181526007865260408082205485835260098852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b600154600160a060020a031681565b3373410526cd583af0be0530166d53efcd7da969f7b71461184d576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c65642066726f6d20506c61796572426f6f6b206f6e6c790000000000604482015290519081900360640190fd5b600160a060020a038316600090815260076020526040902054841461188857600160a060020a03831660009081526007602052604090208490555b60008281526008602052604090205484146118af5760008281526008602052604090208490555b600084815260096020526040902054600160a060020a03848116911614611905576000848152600960205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b60008481526009602052604090206001015482146119325760008481526009602052604090206001018290555b600084815260096020526040902060060154811461195f5760008481526009602052604090206006018190555b6000848152600b6020908152604080832085845290915290205460ff1615156119a7576000848152600b602090815260408083208584529091529020805460ff191660011790555b50505050565b601060209081526000928352604080842090915290825290205481565b600c5481565b600c546000818152600f602052604081206002015490918291829190829042118015611a0e57506000828152600f602052604090206003015460ff16155b8015611a2757506000828152600f602052604090205415155b15611b5e576000828152600f6020526040902054861415611b22576000828152600f60205260409020600c810154600790910154611a6a9163ffffffff612de316565b9050611aab6064611a8283603063ffffffff613da516565b811515611a8b57fe5b60008981526009602052604090206002015491900463ffffffff612de316565b6000878152600a60209081526040808320868452909152902060020154611b0490611ae690611ada8a87613e1c565b9063ffffffff613f0b16565b6000898152600960205260409020600301549063ffffffff612de316565b60008881526009602052604090206004015491965094509250611b86565b6000868152600960209081526040808320600290810154600a8452828520878652909352922090910154611b0490611ae690611ada8a87613e1c565b60008681526009602052604090206002810154600590910154611b0490611ae6908990613f6b565b50509193909250565b600254600160a060020a031681565b6000808080808033803b8015611bec576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b611bf58b613592565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073410526cd583af0be0530166d53efcd7da969f7b79263745ea0c1928a926084808201939182900301818588803b15801561170257600080fd5b6000806000806000806000806000806000806000806000600c549050600f60008281526020019081526020016000206009015481600f600084815260200190815260200160002060050154600f600085815260200190815260200160002060020154600f600086815260200190815260200160002060040154600f600087815260200190815260200160002060070154600f600088815260200190815260200160002060000154600a02600f6000898152602001908152602001600020600101540160096000600f60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a031660096000600f60008c815260200190815260200160002060000154815260200190815260200160002060010154601060008b8152602001908152602001600020600080815260200190815260200160002054601060008c815260200190815260200160002060006001815260200190815260200160002054601060008d815260200190815260200160002060006002815260200190815260200160002054601060008e815260200190815260200160002060006003815260200190815260200160002054600d546103e802600e54019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b611e846156db565b600454600090819060a060020a900460ff161515600114611edd576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015611f24576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b85633b9aca00811015611f6f576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115611fbf576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b336000908152600760205260409020549450600160a060020a0389161580611fef5750600160a060020a03891633145b1561200d576000858152600960205260409020600601549350610be1565b600160a060020a0389166000908152600760209081526040808320548884526009909252909120600601549094508414610be1576000858152600960205260409020600601849055610bea88612e71565b6120666156db565b60045460009060a060020a900460ff1615156001146120bd576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015612104576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b34633b9aca0081101561214f576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561219f576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b6121a885613fc8565b3360009081526007602052604090205490955093508615806121c957508387145b156121e7576000848152600960205260409020600601549650612214565b60008481526009602052604090206006015487146122145760008481526009602052604090206006018790555b61221d86612e71565b95506116118488888861427c565b3373410526cd583af0be0530166d53efcd7da969f7b714612296576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c65642066726f6d20506c61796572426f6f6b206f6e6c790000000000604482015290519081900360640190fd5b6000828152600b6020908152604080832084845290915290205460ff1615156122de576000828152600b602090815260408083208484529091529020805460ff191660011790555b5050565b6000808080808033803b8015612330576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b6123398b613592565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073410526cd583af0be0530166d53efcd7da969f7b79263c0942dfd928a926084808201939182900301818588803b15801561170257600080fd5b60408051808201909152600481527f4e54334400000000000000000000000000000000000000000000000000000000602082015281565b6124016156db565b600454600090819060a060020a900460ff16151560011461245a576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b80156124a1576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b34633b9aca008110156124ec576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561253c576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b61254586613fc8565b336000908152600760205260409020549096509450600160a060020a03881615806125785750600160a060020a03881633145b156125965760008581526009602052604090206006015493506125df565b600160a060020a03881660009081526007602090815260408083205488845260099092529091206006015490945084146125df5760008581526009602052604090206006018490555b6125e887612e71565b965061129c8585898961427c565b336000908152602081905260409020546009811461264c576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b600160a060020a03821615156126ac576040805160e560020a62461bcd02815260206004820152601a60248201527f456d7074792061646472657373206e6f7420616c6c6f7765642e000000000000604482015290519081900360640190fd5b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600a60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b6127166156db565b600454600090819060a060020a900460ff16151560011461276f576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b80156127b6576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b34633b9aca00811015612801576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115612851576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b61285a86613fc8565b33600090815260076020526040902054909650945087158061288c575060008581526009602052604090206001015488145b156128aa5760008581526009602052604090206006015493506125df565b60008881526008602090815260408083205488845260099092529091206006015490945084146125df5760008581526009602052604090206006018490556125e887612e71565b3360009081526020819052604081205460098114612947576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b6000831161299f576040805160e560020a62461bcd02815260206004820152600960248201527f4d757374203e2030200000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0388811694820194909452602481018790529051929091169163a9059cbb916044808201926020929091908290030181600087803b158015612a1257600080fd5b505af1158015612a26573d6000803e3d6000fd5b505050506040513d6020811015612a3c57600080fd5b5060019250505b5092915050565b6012602052600090815260409020805460019091015482565b600c546000818152600f60205260408120600201549091904290811015612ae1576000828152600f6020526040902060040154811115612abf576000828152600f60205260409020600201546109c5908263ffffffff613f0b16565b6000828152600f60205260409020600201546109c5908263ffffffff613f0b16565b600092506109d6565b6000828152600f6020526040812060040154429081118015612b4e57506000848152600f602052604090206002015481111580612b4e57506000848152600f602052604090206002015481118015612b4e57506000848152600f6020526040902054155b15612b7c576000848152600f6020526040902060060154612b75908463ffffffff6144b216565b9150612a43565b612b75836144d3565b600c546000818152600f6020526040812060040154909190429081118015612bef57506000828152600f602052604090206002015481111580612bef57506000828152600f602052604090206002015481118015612bef57506000828152600f6020526040902054155b15612c23576000828152600f6020526040902060050154612c1c9085906109b9908263ffffffff612de316565b9250612c2c565b612c1c8461454b565b5050919050565b60045460a060020a900460ff1681565b600d5481565b6009602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b600c80546001016000818152600f6020526040902090910154612cb9903463ffffffff612de316565b6000828152600f6020908152604091829020600c01929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000600c54915050600160a060020a0389166000908152600760209081526040808320548084526009808452828520600180820154600a8752858820898952875294872001549583905293526002830154600590930154909384939091612da490612d86908690613f6b565b6000878152600960205260409020600301549063ffffffff612de316565b600095865260096020908152604080882060040154600a83528189209989529890915290952054939e929d50909b509950919750919550909350915050565b81810182811015612e3e576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b6000612e6a612e61612e5c858563ffffffff613f0b16565b61454b565b611ada8561454b565b9392505050565b600080821080612e815750600382115b15612e8e57506002612e91565b50805b919050565b600c546000818152600f6020526040902060040154429081118015612efd57506000828152600f602052604090206002015481111580612efd57506000828152600f602052604090206002015481118015612efd57506000828152600f6020526040902054155b15612f3457612f0f84611ada896134ff565b600088815260096020526040902060030155612f2f8288868989886145b8565b611611565b6000828152600f602052604090206002015481118015612f6657506000828152600f602052604090206003015460ff16155b15611611576000828152600f60205260409020600301805460ff19166001179055612f90836130ae565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600960008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6130b66156db565b600c80546000818152600f6020526040812080546001820154948201546007909201549394909390929182918291829182918291829182916130fd9163ffffffff612de316565b9750606461311289603063ffffffff613da516565b81151561311b57fe5b04965060328860008b8152601260205260409020549190049650606490613149908a9063ffffffff613da516565b81151561315257fe5b60008b815260126020526040902060010154919004955060649061317d908a9063ffffffff613da516565b81151561318657fe5b0493506131a184611ada87818a818e8e63ffffffff613f0b16565b60008c8152600f60205260409020600501549093506131ce86670de0b6b3a764000063ffffffff613da516565b8115156131d757fe5b60008d8152600f6020526040902060050154919004925061322590670de0b6b3a76400009061320d90859063ffffffff613da516565b81151561321657fe5b8791900463ffffffff613f0b16565b9050600081111561325557613240858263ffffffff613f0b16565b9450613252838263ffffffff612de316565b92505b60008a81526009602052604090206002015461327890889063ffffffff612de316565b60008b815260096020526040902060020155600154600160a060020a0316156132df57600154604051600160a060020a039091169087156108fc029088906000818181858888f193505050501580156132d5573d6000803e3d6000fd5b50600095506132f0565b6132e98387612de3565b9250600095505b600084111561335b57600254600160a060020a03161561334a57600254604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015613344573d6000803e3d6000fd5b5061335b565b6133548385612de3565b9250600093505b60008b8152600f602052604090206008015461337e90839063ffffffff612de316565b600f60008d815260200190815260200160002060080181905550600f60008c815260200190815260200160002060020154620f4240028d60000151018d60000181815250508867016345785d8a0000028a6a52b7d2dcc80cd2e4000000028e6020015101018d6020018181525050600960008b815260200190815260200160002060000160009054906101000a9004600160a060020a03168d60400190600160a060020a03169081600160a060020a031681525050600960008b8152602001908152602001600020600101548d606001906000191690816000191681525050868d6080018181525050848d60e001818152505060008d60c0018181525050828d60a0018181525050600c600081548092919060010191905055508a806001019b505042600f60008d8152602001908152602001600020600401819055506134d061546042612de390919063ffffffff16565b60008c8152600f602052604090206002810191909155600c018390558c9b505050505050505050505050919050565b600081815260096020526040812060050154819061351e908490614b09565b60008381526009602052604090206004810154600382015460029092015461355c92613550919063ffffffff612de316565b9063ffffffff612de316565b905060008111156135885760008381526009602052604081206002810182905560038101829055600401555b8091505b50919050565b80516000908290828080602084118015906135ad5750600084115b1515613629576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b84600081518110151561363857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415801561369f5750846001850381518110151561367757fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b151561371b576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b84600081518110151561372a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a02141561386d5784600181518110151561376457fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a02141515156137e1576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b8460018151811015156137f057fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a021415151561386d576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b83821015613d3d5784517f4000000000000000000000000000000000000000000000000000000000000000908690849081106138aa57fe5b90602001015160f860020a900460f860020a02600160f860020a03191611801561391e575084517f5b00000000000000000000000000000000000000000000000000000000000000908690849081106138ff57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1561398b57848281518110151561393157fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a02858381518110151561396257fe5b906020010190600160f860020a031916908160001a90535082151561398657600192505b613d32565b848281518110151561399957fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480613a69575084517f6000000000000000000000000000000000000000000000000000000000000000908690849081106139f557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613a69575084517f7b0000000000000000000000000000000000000000000000000000000000000090869084908110613a4a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80613b13575084517f2f0000000000000000000000000000000000000000000000000000000000000090869084908110613a9f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613b13575084517f3a0000000000000000000000000000000000000000000000000000000000000090869084908110613af457fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1515613b8f576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8482815181101515613b9d57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415613c7c578482600101815181101515613bd957fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214151515613c7c576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015613d28575084517f300000000000000000000000000000000000000000000000000000000000000090869084908110613cb557fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080613d28575084517f390000000000000000000000000000000000000000000000000000000000000090869084908110613d0957fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b15613d3257600192505b600190910190613872565b600183151514613d97576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b6000821515613db657506000612e3e565b50818102818382811515613dc657fe5b0414612e3e576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b6000818152600f60205260408120600c8101546007909101548291613e47919063ffffffff612de316565b6000858152600a602090815260408083208784528252808320600190810154600f8452828520600581015492015485526012909352922054929350670de0b6b3a764000092613ef992613eed91613ec4908690606490613eae908a9063ffffffff613da516565b811515613eb757fe5b049063ffffffff613da516565b811515613ecd57fe5b6000898152600f602052604090206008015491900463ffffffff612de316565b9063ffffffff613da516565b811515613f0257fe5b04949350505050565b600082821115613f65576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b6000828152600a6020908152604080832084845282528083206002810154600190910154600f90935290832060080154612e6a92670de0b6b3a764000091613fb291613da5565b811515613fbb57fe5b049063ffffffff613f0b16565b613fd06156db565b33600090815260076020526040812054908082151561427357604080517fe56556a9000000000000000000000000000000000000000000000000000000008152336004820152905173410526cd583af0be0530166d53efcd7da969f7b79163e56556a99160248083019260209291908290030181600087803b15801561405557600080fd5b505af1158015614069573d6000803e3d6000fd5b505050506040513d602081101561407f57600080fd5b5051604080517f82e37b2c00000000000000000000000000000000000000000000000000000000815260048101839052905191945073410526cd583af0be0530166d53efcd7da969f7b7916382e37b2c916024808201926020929091908290030181600087803b1580156140f257600080fd5b505af1158015614106573d6000803e3d6000fd5b505050506040513d602081101561411c57600080fd5b5051604080517fe3c08adf00000000000000000000000000000000000000000000000000000000815260048101869052905191935073410526cd583af0be0530166d53efcd7da969f7b79163e3c08adf916024808201926020929091908290030181600087803b15801561418f57600080fd5b505af11580156141a3573d6000803e3d6000fd5b505050506040513d60208110156141b957600080fd5b505133600081815260076020908152604080832088905587835260099091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115614242576000828152600860209081526040808320869055858352600982528083206001908101869055600b8352818420868552909252909120805460ff191690911790555b80158015906142515750828114155b1561426b5760008381526009602052604090206006018190555b845160010185525b50929392505050565b600c546000818152600f60205260409020600401544290811180156142e357506000828152600f6020526040902060020154811115806142e357506000828152600f6020526040902060020154811180156142e357506000828152600f6020526040902054155b156142fb576142f68287348888886145b8565b6144aa565b6000828152600f60205260409020600201548111801561432d57506000828152600f602052604090206003015460ff16155b15614475576000828152600f60205260409020600301805460ff19166001179055614357836130ae565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a3360096000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b600086815260096020526040902060030154614497903463ffffffff612de316565b6000878152600960205260409020600301555b505050505050565b6000612e6a6144c0846144d3565b611ada6144d3868663ffffffff612de316565b60006309502f9061453b6d03b2a1d15167e7c5699bfde00000611ada6145367a0dac7055469777a6122ee4310dd6c14410500f29048400000000006135506b01027e72f1f1281308800000613eed8a670de0b6b3a764000063ffffffff613da516565b614ba0565b81151561454457fe5b0492915050565b600061455e670de0b6b3a7640000614bf3565b61453b600261459161457e86670de0b6b3a764000063ffffffff613da516565b65886c8f6730709063ffffffff613da516565b81151561459a57fe5b046135506145a786614bf3565b6304a817c89063ffffffff613da516565b6000858152600a6020908152604080832089845290915281206001015481908190819015156145ee576145eb8986614bff565b94505b60008a8152600f602052604090206006015468056bc75e2d6310000011801561464857506000898152600a602090815260408083208d8452909152902054678ac7230489e8000090614646908a63ffffffff612de316565b115b156146cf576000898152600a602090815260408083208d845290915290205461468090678ac7230489e800009063ffffffff613f0b16565b9350614692888563ffffffff613f0b16565b60008a8152600960205260409020600301549093506146b7908463ffffffff612de316565b60008a81526009602052604090206003015592965086925b633b9aca00881115614afd5760008a8152600f60205260409020600601546146fd908963ffffffff6144b216565b9150670de0b6b3a7640000821061477457614718828b614c5f565b60008a8152600f6020526040902054891461473f5760008a8152600f602052604090208990555b60008a8152600f6020526040902060010154861461476c5760008a8152600f602052604090206001018690555b845160640185525b67016345785d8a000088106149b457600e80546001019055614794614d3b565b1515600114156149b457678ac7230489e80000881061483557600d546064906147c490604b63ffffffff613da516565b8115156147cd57fe5b60008b81526009602052604090206002015491900491506147f4908263ffffffff612de316565b60008a815260096020526040902060020155600d54614819908263ffffffff613f0b16565b600d5584516d0eca8847c4129106ce8300000000018552614989565b670de0b6b3a764000088101580156148545750678ac7230489e8000088105b156148e157600d5460649061487090603263ffffffff613da516565b81151561487957fe5b60008b81526009602052604090206002015491900491506148a0908263ffffffff612de316565b60008a815260096020526040902060020155600d546148c5908263ffffffff613f0b16565b600d5584516d09dc5ada82b70b59df0200000000018552614989565b67016345785d8a000088101580156149005750670de0b6b3a764000088105b1561498957600d5460649061491c90601963ffffffff613da516565b81151561492557fe5b60008b815260096020526040902060020154919004915061494c908263ffffffff612de316565b60008a815260096020526040902060020155600d54614971908263ffffffff613f0b16565b600d5584516d0eca8847c4129106ce83000000000185525b84516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b26800000000185526000600e555b600e5485516103e89091020185526000898152600a602090815260408083208d84529091529020600101546149f090839063ffffffff612de316565b60008a8152600a602090815260408083208e84529091529020600181019190915554614a1d908990612de3565b60008a8152600a602090815260408083208e8452825280832093909355600f90522060050154614a5490839063ffffffff612de316565b60008b8152600f60205260409020600581019190915560060154614a7f90899063ffffffff612de316565b60008b8152600f60209081526040808320600601939093556010815282822089835290522054614ab690899063ffffffff612de316565b60008b81526010602090815260408083208a8452909152902055614ade8a8a8a8a8a8a614f52565b9450614aee8a8a8a89868a6152b8565b9450614afd89878a8589615426565b50505050505050505050565b6000614b158383613f6b565b90506000811115614b9b57600083815260096020526040902060030154614b4390829063ffffffff612de316565b600084815260096020908152604080832060030193909355600a815282822085835290522060020154614b7d90829063ffffffff612de316565b6000848152600a602090815260408083208684529091529020600201555b505050565b6000806002614bb0846001612de3565b811515614bb957fe5b0490508291505b8181101561358c578091506002614be28285811515614bdb57fe5b0483612de3565b811515614beb57fe5b049050614bc0565b6000612e3e8283613da5565b614c076156db565b60008381526009602052604090206005015415614c3b57600083815260096020526040902060050154614c3b908490614b09565b50600c546000838152600960205260409020600501558051600a0181528092915050565b6000818152600f602052604081206002015442919082118015614c8e57506000838152600f6020526040902054155b15614cb257614cab82613550603c670de0b6b3a764000088613eb7565b9050614cdf565b6000838152600f6020526040902060020154614cdc90613550603c670de0b6b3a764000088613eb7565b90505b614cf16154608363ffffffff612de316565b811015614d11576000838152600f602052604090206002018190556119a7565b614d236154608363ffffffff612de316565b6000848152600f602052604090206002015550505050565b600080614eac4361355042336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614db65780518252601f199092019160209182019101614d97565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614dec57fe5b046135504561355042416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614e655780518252601f199092019160209182019101614e46565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614e9b57fe5b04613550424463ffffffff612de316565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310614efa5780518252601f199092019160209182019101614edb565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120600e5490945092506103e89150839050046103e80282031015614f495760019150614f4e565b600091505b5090565b614f5a6156db565b6006546032860490606487049060009081908190600160a060020a03161561500657600660009054906101000a9004600160a060020a0316600160a060020a031663ed78cf4a856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b158015614fe857600080fd5b505af1158015614ffc573d6000803e3d6000fd5b5050505050615019565b615016858563ffffffff612de316565b94505b600a8a0492508a891415801561503f575060008981526009602052604090206001015415155b156150df5760008981526009602052604090206004015461506790849063ffffffff612de316565b60008a815260096020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101859052426060830152518c918e918c917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a46150f2565b6150ef858463ffffffff612de316565b94505b6000888152601160205260409020600101546151289060649061511c908d9063ffffffff613da516565b9063ffffffff61559416565b9150600085111561519757600154600160a060020a03161561518457600154604051600160a060020a039091169086156108fc029087906000818181858888f1935050505015801561517e573d6000803e3d6000fd5b50615197565b615194828663ffffffff612de316565b91505b60008211156152a8576005546151b490839063ffffffff613da516565b90506151cd8760c0015182612de390919063ffffffff16565b60c088015260048054604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233938101939093526024830184905251600160a060020a039091169163a9059cbb9160448083019260209291908290030181600087803b15801561524057600080fd5b505af1158015615254573d6000803e3d6000fd5b505050506040513d602081101561526a57600080fd5b5050600354604051600160a060020a039091169083156108fc029084906000818181858888f193505050501580156152a6573d6000803e3d6000fd5b505b50949a9950505050505050505050565b6152c06156db565b6000848152601160205260408120548190819081906064906152e9908b9063ffffffff613da516565b8115156152f257fe5b04935060648904925061531083600d54612de390919063ffffffff16565b600d556000888152601160205260409020600101546153819061537490606490615341908d9063ffffffff613da516565b81151561534a57fe5b04606461535e8d600e63ffffffff613da516565b81151561536757fe5b049063ffffffff612de316565b8a9063ffffffff613f0b16565b9850615393898563ffffffff613f0b16565b91506153a18b8b868a6155a2565b905060008111156153bf576153bc848263ffffffff613f0b16565b93505b60008b8152600f60205260409020600701546153e590613550848463ffffffff612de316565b60008c8152600f602052604090206007015560e086015161540d90859063ffffffff612de316565b60e0870152506101008501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600c54751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c7468160000151826020015160096000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600d54604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000808284811515613f0257fe5b6000848152600f6020526040812060050154819081906155d086670de0b6b3a764000063ffffffff613da516565b8115156155d957fe5b6000898152600f6020526040902060080154919004925061560190839063ffffffff612de316565b6000888152600f6020526040902060080155670de0b6b3a764000061562c838663ffffffff613da516565b81151561563557fe5b6000888152600a602090815260408083208c8452825280832060020154600f9092529091206008015492909104925061568891613550908490670de0b6b3a764000090613fb2908a63ffffffff613da516565b6000878152600a602090815260408083208b8452825280832060020193909355600f905220600501546156d090670de0b6b3a76400009061320d90859063ffffffff613da516565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a031681526020016000801916815260200160008152602001600081526020016000815260200160008152602001600081525090560048756d616e73206f6e6c79000000000000000000000000000000000000000000697473206e6f7420616374697665207965742e000000000000000000000000004d7573742062652061646d696e2e000000000000000000000000000000000000546f6f206c6974746c6500000000000000000000000000000000000000000000546f6f206d756368000000000000000000000000000000000000000000000000a165627a7a7230582014785a19f98eb6f4f9adfc80b78a9a7005075298cadf6f3146e6f2cbd1ee8fce0029
Swarm Source
bzzr://14785a19f98eb6f4f9adfc80b78a9a7005075298cadf6f3146e6f2cbd1ee8fce
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 23 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,277.42 | 0.8713 | $2,855.46 |
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.