ETH Price: $2,092.68 (+0.71%)

Contract

0xc32D92E3bdf6dF2FF891224e3Ff9a2Da0e1D6e64
 

Overview

ETH Balance

0.526992040245989998 ETH

Eth Value

$1,102.83 (@ $2,092.68/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw244527542026-02-14 4:51:4729 days ago1771044707IN
0xc32D92E3...a0e1D6e64
0 ETH0.000002410.0414149
Buy Xid244527472026-02-14 4:50:2329 days ago1771044623IN
0xc32D92E3...a0e1D6e64
0.000076 ETH0.000014730.0427851
Re Load Xname61916812018-08-22 5:54:532762 days ago1534917293IN
0xc32D92E3...a0e1D6e64
0 ETH0.001066163.3
Re Load Xname61916642018-08-22 5:50:172762 days ago1534917017IN
0xc32D92E3...a0e1D6e64
0 ETH0.000486543.1
Buy Xname61916612018-08-22 5:49:112762 days ago1534916951IN
0xc32D92E3...a0e1D6e64
0.01 ETH0.000916333.1
Buy Xname61913692018-08-22 4:37:392762 days ago1534912659IN
0xc32D92E3...a0e1D6e64
0.01 ETH0.000606623.4
Buy Xname61911012018-08-22 3:32:442762 days ago1534908764IN
0xc32D92E3...a0e1D6e64
0.01 ETH0.000726582.5
Buy Xaddr61798732018-08-20 6:16:412764 days ago1534745801IN
0xc32D92E3...a0e1D6e64
0.007875 ETH0.000325262
Buy Xaddr61711492018-08-18 19:05:282765 days ago1534619128IN
0xc32D92E3...a0e1D6e64
0.007875 ETH0.000731894
Buy Xaddr61711482018-08-18 19:05:162765 days ago1534619116IN
0xc32D92E3...a0e1D6e64
0.007875 ETH0.000612374
Register Name Xn...61711462018-08-18 19:05:002765 days ago1534619100IN
0xc32D92E3...a0e1D6e64
0.01 ETH0.000956414
Re Load Xid61711452018-08-18 19:04:022765 days ago1534619042IN
0xc32D92E3...a0e1D6e64
0 ETH0.000847484
Re Load Xid61711452018-08-18 19:04:022765 days ago1534619042IN
0xc32D92E3...a0e1D6e64
0 ETH0.000392012
Re Load Xid61711452018-08-18 19:04:022765 days ago1534619042IN
0xc32D92E3...a0e1D6e64
0 ETH0.000681942
Re Load Xid61710292018-08-18 18:36:212765 days ago1534617381IN
0xc32D92E3...a0e1D6e64
0 ETH0.000312882
Register Name Xn...61669212018-08-18 1:45:112766 days ago1534556711IN
0xc32D92E3...a0e1D6e64
0.01 ETH0.000637772
Buy Xaddr61667042018-08-18 0:52:452766 days ago1534553565IN
0xc32D92E3...a0e1D6e64
0.0075 ETH0.0084723660
Buy Xaddr61667042018-08-18 0:52:452766 days ago1534553565IN
0xc32D92E3...a0e1D6e64
0.007875 ETH0.0097735260
Re Load Xid61667032018-08-18 0:52:162766 days ago1534553536IN
0xc32D92E3...a0e1D6e64
0 ETH0.000962833
Buy Xaddr61666982018-08-18 0:50:522766 days ago1534553452IN
0xc32D92E3...a0e1D6e64
0.00750001 ETH0.000158415
Buy Xaddr61666972018-08-18 0:50:422766 days ago1534553442IN
0xc32D92E3...a0e1D6e64
0.01500001 ETH0.000295262
Buy Xaddr61624372018-08-17 7:23:152767 days ago1534490595IN
0xc32D92E3...a0e1D6e64
0.0075 ETH0.0186805260
Buy Xaddr61623042018-08-17 6:51:352767 days ago1534488695IN
0xc32D92E3...a0e1D6e64
0.01 ETH0.0088578660
Buy Xaddr61567122018-08-16 8:12:212768 days ago1534407141IN
0xc32D92E3...a0e1D6e64
0.0075 ETH0.001305364
Buy Xaddr61567002018-08-16 8:07:432768 days ago1534406863IN
0xc32D92E3...a0e1D6e64
0.01 ETH0.000888155
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer244527542026-02-14 4:51:4729 days ago1771044707
0xc32D92E3...a0e1D6e64
0.000076 ETH
Transfer244527472026-02-14 4:50:2329 days ago1771044623
0xc32D92E3...a0e1D6e64
0.0001289 ETH
Transfer61916812018-08-22 5:54:532762 days ago1534917293
0xc32D92E3...a0e1D6e64
0.000375 ETH
Transfer61916642018-08-22 5:50:172762 days ago1534917017
0xc32D92E3...a0e1D6e64
0.00016406 ETH
Transfer61916612018-08-22 5:49:112762 days ago1534916951
0xc32D92E3...a0e1D6e64
0.0005 ETH
Transfer61913692018-08-22 4:37:392762 days ago1534912659
0xc32D92E3...a0e1D6e64
0.00042707 ETH
Transfer61911012018-08-22 3:32:442762 days ago1534908764
0xc32D92E3...a0e1D6e64
0.0005 ETH
Transfer61798732018-08-20 6:16:412764 days ago1534745801
0xc32D92E3...a0e1D6e64
0.00277075 ETH
Transfer61711492018-08-18 19:05:282765 days ago1534619128
0xc32D92E3...a0e1D6e64
0.00118125 ETH
Transfer61711482018-08-18 19:05:162765 days ago1534619116
0xc32D92E3...a0e1D6e64
0.00275625 ETH
Transfer61711462018-08-18 19:05:002765 days ago1534619100
0xc32D92E3...a0e1D6e64
0.01 ETH
Transfer61711452018-08-18 19:04:022765 days ago1534619042
0xc32D92E3...a0e1D6e64
0.0015 ETH
Transfer61711452018-08-18 19:04:022765 days ago1534619042
0xc32D92E3...a0e1D6e64
0.00112504 ETH
Transfer61711452018-08-18 19:04:022765 days ago1534619042
0xc32D92E3...a0e1D6e64
0.01800103 ETH
Transfer61710292018-08-18 18:36:212765 days ago1534617381
0xc32D92E3...a0e1D6e64
0.00023734 ETH
Transfer61669212018-08-18 1:45:112766 days ago1534556711
0xc32D92E3...a0e1D6e64
0.01 ETH
Transfer61667042018-08-18 0:52:452766 days ago1534553565
0xc32D92E3...a0e1D6e64
0.001125 ETH
Transfer61667042018-08-18 0:52:452766 days ago1534553565
0xc32D92E3...a0e1D6e64
0.00118125 ETH
Transfer61667032018-08-18 0:52:162766 days ago1534553536
0xc32D92E3...a0e1D6e64
0.001125 ETH
Transfer61666972018-08-18 0:50:422766 days ago1534553442
0xc32D92E3...a0e1D6e64
0.00008598 ETH
Transfer61624372018-08-17 7:23:152767 days ago1534490595
0xc32D92E3...a0e1D6e64
0.001125 ETH
Transfer61623042018-08-17 6:51:352767 days ago1534488695
0xc32D92E3...a0e1D6e64
0.00010989 ETH
Transfer61567122018-08-16 8:12:212768 days ago1534407141
0xc32D92E3...a0e1D6e64
0.001125 ETH
Transfer61567002018-08-16 8:07:432768 days ago1534406863
0xc32D92E3...a0e1D6e64
0.0002326 ETH
Transfer61566612018-08-16 7:56:202768 days ago1534406180
0xc32D92E3...a0e1D6e64
0.0035 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FoMo3Dlong

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-08-14
*/

pragma solidity ^0.4.24;

contract F3Devents {
    // 注册
    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 P3DAmount,
        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 P3DAmount,
        uint256 genAmount
    );
    
    // 购买触发结束.
    event onBuyAndDistribute
    (
        address playerAddress,
        bytes32 playerName,
        uint256 ethIn,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount
    );
    
    // 使用金库购买触发结束.
    event onReLoadAndDistribute
    (
        address playerAddress,
        bytes32 playerName,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount
    );
    
    // 被推荐人付费
    event onAffiliatePayout
    (
        uint256 indexed affiliateID,
        address affiliateAddress,
        bytes32 affiliateName,
        uint256 indexed roundID,
        uint256 indexed buyerID,
        uint256 amount,
        uint256 timeStamp
    );
}

contract modularLong is F3Devents {}

contract FoMo3Dlong is modularLong {
    using SafeMath for *;
    using NameFilter for string;
    using F3DKeysCalcLong for uint256;
    PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xa6fd21aa986247357f404aa37a7bc90809da1ad8);


    address public ceo;
    address public cfo; 
    string constant public name = "Must Be Hit 4D";
    string constant public symbol = "MBT4D";
    uint256 private rndExtra_ = 30 seconds;       
    uint256 private rndGap_ = 30 seconds;         
    uint256 constant private rndInit_ = 1 hours;                // 初始时间
    uint256 constant private rndInc_ = 30 seconds;              // 每一个完整KEY增加
    uint256 constant private rndMax_ = 12 hours;                // 最多允许增加到

    uint256 public airDropPot_;             // 空投
    uint256 public airDropTracker_ = 0;     
    uint256 public rID_;  

    mapping (address => uint256) public pIDxAddr_;          // 玩家地址 =》 玩家ID
    mapping (bytes32 => uint256) public pIDxName_;          // 玩家用户名=》 玩家ID
    mapping (uint256 => F3Ddatasets.Player) public plyr_;   // 玩家ID =》 玩家数据
    mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_;    // 玩家ID =》 第几轮 =》 玩家当轮数据
    mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // 玩家ID =》 玩家用户名 =》 True/False

    mapping (uint256 => F3Ddatasets.Round) public round_;   // 第几轮 =》 本轮数据
    mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_;      // 第几轮=》TeamID=>该组数据

    mapping (uint256 => F3Ddatasets.TeamFee) public fees_;          // TeamID => 购买分发比例配置
    mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_;     // TeamID => 结束分发比例配置


    constructor()
        public
    {
        ceo = msg.sender;
        cfo = msg.sender;
		//  青龙 奖池 30%, 所有持KEY玩家 -30%, 推荐 - 30%, 开发团队 - 5%, 空投 - 5%
        fees_[0] = F3Ddatasets.TeamFee(30,0);  
        //  白虎 奖池 25%, 所有持KEY玩家 -60%, 推荐 - 10%, 开发团队 - 5%, 空投 - 5%
        fees_[1] = F3Ddatasets.TeamFee(60,0);   
        //  朱雀 奖池 60%, 所有持KEY玩家 -20%, 推荐 - 10%, 开发团队 - 5%, 空投 - 5%
        fees_[2] = F3Ddatasets.TeamFee(20,0);   
        //  玄武 奖池 40%, 所有持KEY玩家 -40%, 推荐 - 10%, 开发团队 - 5%, 空投 - 5%
        fees_[3] = F3Ddatasets.TeamFee(40,0);   
        
        // 青龙 55 - 大赢家 25 -> 所有持KEY玩家 15-> 下一轮 5-> 开发团队
        potSplit_[0] = F3Ddatasets.PotSplit(25,0); 
        // 白虎 55 - 大赢家 30 -> 所有持KEY玩家 10-> 下一轮 5-> 开发团队
        potSplit_[1] = F3Ddatasets.PotSplit(30,0);  
        // 朱雀 55 - 大赢家 10 -> 所有持KEY玩家 30-> 下一轮 5-> 开发团队
        potSplit_[2] = F3Ddatasets.PotSplit(10,0);  
        // 玄武 55 - 大赢家 20 -> 所有持KEY玩家 20-> 下一轮 5-> 开发团队
        potSplit_[3] = F3Ddatasets.PotSplit(20,0);  
	}

    modifier isActivated() {
        require(activated_ == true, "Not Active!"); 
        _;
    }

    modifier isHuman() {
        address _addr = msg.sender;
        uint256 _codeLength;
        
        assembly {_codeLength := extcodesize(_addr)}
        require(_codeLength == 0, "Not Human");
        _;
    }

    modifier isWithinLimits(uint256 _eth) {
        require(_eth >= 1000000000, "Too Less");
        require(_eth <= 100000000000000000000000, "Too More");
        _;    
    }
    
    // 使用该玩家最近一次购买数据再次购买
    function()
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
        uint256 _pID = pIDxAddr_[msg.sender];
        buyCore(_pID, plyr_[_pID].laff, 2, _eventData_);
    }

    function modCEOAddress(address newCEO) 
        isHuman() 
        public
    {
        require(address(0) != newCEO, "CEO Can not be 0");
        require(ceo == msg.sender, "only ceo can modify ceo");
        ceo = newCEO;
    }

    function modCFOAddress(address newCFO) 
        isHuman() 
        public
    {
        require(address(0) != newCFO, "CFO Can not be 0");
        require(cfo == msg.sender, "only cfo can modify cfo");
        cfo = newCFO;
    }
    
    // 通过推荐者ID购买
    function buyXid(uint256 _affCode, uint256 _team)
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        F3Ddatasets.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
    {
        F3Ddatasets.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
    {
        F3Ddatasets.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_);
    }
    
    // 通过小金库和推荐者ID购买
    function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth)
        isActivated()
        isHuman()
        isWithinLimits(_eth)
        public
    {
        F3Ddatasets.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
    {
        F3Ddatasets.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
    {
        F3Ddatasets.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)
        {
            F3Ddatasets.EventReturns memory _eventData_;
        	round_[_rID].ended = true;
            _eventData_ = endRound(_eventData_);
            _eth = withdrawEarnings(_pID);
            if (_eth > 0)
                plyr_[_pID].addr.transfer(_eth);    
        
            _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
            _eventData_.compressedIDs = _eventData_.compressedIDs + _pID;
        
            emit F3Devents.onWithdrawAndDistribute
            (
                msg.sender, 
                plyr_[_pID].name, 
                _eth, 
                _eventData_.compressedData, 
                _eventData_.compressedIDs, 
                _eventData_.winnerAddr, 
                _eventData_.winnerName, 
                _eventData_.amountWon, 
                _eventData_.newPot, 
                _eventData_.P3DAmount, 
                _eventData_.genAmount
            );
        } 
        else 
        {
            _eth = withdrawEarnings(_pID);
            if (_eth > 0)
                plyr_[_pID].addr.transfer(_eth);
            emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now);
        }
    }
    
    // 通过推荐者ID注册
    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 F3Devents.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 F3Devents.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 F3Devents.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)))
            return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) );
        else 
            return ( 7500000000000000 );
    }
    
    // 获得剩余时间(秒)
    function getTimeLeft()
        public
        view
        returns(uint256)
    {
        uint256 _rID = rID_;
        uint256 _now = now;
        
        if (_now < round_[_rID].end)
            if (_now > round_[_rID].strt + rndGap_)
                return( (round_[_rID].end).sub(_now) );
            else
                return( (round_[_rID].strt + rndGap_).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 (round_[_rID].plyr == _pID)
            {
                return
                (
                    (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ),
                    (plyr_[_pID].gen).add(  getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask)   ),
                    plyr_[_pID].aff
                );
            } else {
                return
                (
                    plyr_[_pID].win,
                    (plyr_[_pID].gen).add(  getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask)  ),
                    plyr_[_pID].aff
                );
            }
        } 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)
    {
        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,               //0
            _rID,                           //1
            round_[_rID].keys,              //2
            round_[_rID].end,               //3
            round_[_rID].strt,              //4
            round_[_rID].pot,               //5
            (round_[_rID].team + (round_[_rID].plyr * 10)),     //6
            plyr_[round_[_rID].plyr].addr,  //7
            plyr_[round_[_rID].plyr].name,  //8
            rndTmEth_[_rID][0],             //9
            rndTmEth_[_rID][1],             //10
            rndTmEth_[_rID][2],             //11
            rndTmEth_[_rID][3],             //12
            airDropTracker_ + (airDropPot_ * 1000)              //13
        );
    }

    // 获得玩家信息
    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,                               //0
            plyr_[_pID].name,                   //1
            plyrRnds_[_pID][_rID].keys,         //2
            plyr_[_pID].win,                    //3
            (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)),       //4
            plyr_[_pID].aff,                    //5
            plyrRnds_[_pID][_rID].eth           //6
        );
    }

    // 核心购买逻辑
    function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.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))) 
        {
            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 F3Devents.onBuyAndDistribute
                (
                    msg.sender, 
                    plyr_[_pID].name, 
                    msg.value, 
                    _eventData_.compressedData, 
                    _eventData_.compressedIDs, 
                    _eventData_.winnerAddr, 
                    _eventData_.winnerName, 
                    _eventData_.amountWon, 
                    _eventData_.newPot, 
                    _eventData_.P3DAmount, 
                    _eventData_.genAmount
                );
            }
            
            // 玩家的钱放入小金库
            plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value);
        }
    }
    
    // 使用小金库购买核心逻辑
    function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.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))) 
        {
            // 取出玩家小金库
            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 F3Devents.onReLoadAndDistribute
            (
                msg.sender, 
                plyr_[_pID].name, 
                _eventData_.compressedData, 
                _eventData_.compressedIDs, 
                _eventData_.winnerAddr, 
                _eventData_.winnerName, 
                _eventData_.amountWon, 
                _eventData_.newPot, 
                _eventData_.P3DAmount, 
                _eventData_.genAmount
            );
        }
    }
    
    // 真正的购买在这里
    function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        if (plyrRnds_[_pID][_rID].keys == 0)
            _eventData_ = managePlayer(_pID, _eventData_);
        
        // 前期购买限制
        if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000)
        {
            uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth);
            uint256 _refund = _eth.sub(_availableLimit);
            plyr_[_pID].gen = plyr_[_pID].gen.add(_refund);
            _eth = _availableLimit;
        }
        
        // 最少数额
        if (_eth > 1000000000) 
        {
            // 购买的KEY数量
            uint256 _keys = (round_[_rID].eth).keysRec(_eth);
            // 至少要有一个KEY才可以领头
            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)
            {
                airDropTracker_++;
                if (airdrop() == true)
                {
                    uint256 _prize;
                    if (_eth >= 10000000000000000000)
                    {
                        _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) 
                    {
                        _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) 
                    {
                        _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]);
            // 各种分成,内部和外部
            _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)
    {
        return(  (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask)  );
    }
    
    // 给定以太的数量,返回KEY的数量
    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)))
            return ( (round_[_rID].eth).keysRec(_eth) );
        else
            return ( (_eth).keys() );
    }
    
    // 计算X个KEY需要多少ETH
    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)))
            return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) );
        else 
            return ( (_keys).eth() );
    }

    /* test use only
    function setEndAfterSecond(uint256 extraSecond)
        isActivated()
        isHuman()
        public
    {
        require((extraSecond > 0 && extraSecond <= 86400), "TIME Out Of Range");
        require( ceo == msg.sender, "only ceo can setEnd" );
        round_[rID_].end = now + extraSecond;
    }
    */
    
    function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff)
        external
    {
        require (msg.sender == address(PlayerBook), "your not playerNames contract... hmmm..");
        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), "your not playerNames contract... hmmm..");
        if(plyrNames_[_pID][_name] == false)
            plyrNames_[_pID][_name] = true;
    }   
        
    // 获取玩家PID
    function determinePID(F3Ddatasets.EventReturns memory _eventData_)
        private
        returns (F3Ddatasets.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;

            _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, F3Ddatasets.EventReturns memory _eventData_)
        private
        returns (F3Ddatasets.EventReturns)
    {
        // 玩家以前玩家。更新一下小金库
        if (plyr_[_pID].lrnd != 0)
            updateGenVault(_pID, plyr_[_pID].lrnd);
        
        plyr_[_pID].lrnd = rID_;

        _eventData_.compressedData = _eventData_.compressedData + 10;
        
        return(_eventData_);
    }
    
    // 结束
    function endRound(F3Ddatasets.EventReturns memory _eventData_)
        private
        returns (F3Ddatasets.EventReturns)
    {
        
        uint256 _rID = rID_;
        
        uint256 _winPID = round_[_rID].plyr;
        uint256 _winTID = round_[_rID].team;
        
        uint256 _pot = round_[_rID].pot;
        
        uint256 _win = (_pot.mul(55)) / 100;
        uint256 _com = (_pot / 20);
        uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100;
        uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100;
        uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d);
        
        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);

        _com = _com.add(_p3d);
        cfo.transfer(_com);
        
        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_.P3DAmount = _p3d;
        _eventData_.newPot = _res;
        
        rID_++;
        _rID++;
        round_[_rID].strt = now;
        round_[_rID].end = now.add(rndInit_).add(rndGap_);
        round_[_rID].pot = _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, F3Ddatasets.EventReturns memory _eventData_)
        private
        returns(F3Ddatasets.EventReturns)
    {
        // 5% 开发团队
        uint256 _com = _eth / 20;
        // 10 推荐人
        uint256 _aff = _eth / 10;
        // 第一队推荐人分成30%
        if (_team == 0 ) {
            _aff = _eth.mul(30) / 100;
        }
        
        // MODIFY 如果推荐人不存在 10% -> _com
        if (_affID != _pID && plyr_[_affID].name != '') {
            plyr_[_affID].aff = _aff.add(plyr_[_affID].aff);
            emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now);
        } else {
            _com = _com.add(_aff);
        }

        cfo.transfer(_com);
        
        return(_eventData_);
    }

    function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_)
        private
        returns(F3Ddatasets.EventReturns)
    {
        uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100;
        
        // 5% 到空投
        uint256 _air = (_eth / 20);
        airDropPot_ = airDropPot_.add(_air);
        if (_team == 0){
            _eth = _eth.sub(((_eth.mul(40)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100));
        }else{
            _eth = _eth.sub(((_eth.mul(20)) / 100).add((_eth.mul(fees_[_team].p3d)) / 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, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000);
        _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000);
        
        emit F3Devents.onEndTx
        (
            _eventData_.compressedData,
            _eventData_.compressedIDs,
            plyr_[_pID].name,
            msg.sender,
            _eth,
            _keys,
            _eventData_.winnerAddr,
            _eventData_.winnerName,
            _eventData_.amountWon,
            _eventData_.newPot,
            _eventData_.P3DAmount,
            _eventData_.genAmount,
            _eventData_.potAmount,
            airDropPot_
        );
    }

    bool public activated_ = false;
    function activate()
        public
    {
        require( msg.sender == ceo, "ONLY ceo CAN activate" );
        require(activated_ == false, "Already Activated");
        
        activated_ = true;
        
        rID_ = 1;
        round_[1].strt = now + rndExtra_ - rndGap_;
        round_[1].end = now + rndInit_ + rndExtra_;
    }
}

library F3Ddatasets {
    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 P3DAmount;          // amount distributed to p3d
        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
    }
    struct TeamFee {
        uint256 gen;    // % of buy in thats paid to key holders of current round
        uint256 p3d;    // % of buy in thats paid to p3d holders
    }
    struct PotSplit {
        uint256 gen;    // % of pot thats paid to key holders of current round
        uint256 p3d;    // % of pot thats paid to p3d holders
    }
}

library F3DKeysCalcLong {
    using SafeMath for *;
    // 根据ETH计算KEY
    function keysRec(uint256 _curEth, uint256 _newEth)
        internal
        pure
        returns (uint256)
    {
        return(keys((_curEth).add(_newEth)).sub(keys(_curEth)));
    }
    
    // 根据KEY算ETH
    function ethRec(uint256 _curKeys, uint256 _sellKeys)
        internal
        pure
        returns (uint256)
    {
        return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys))));
    }

    // 根据ETH算KEY
    function keys(uint256 _eth) 
        internal
        pure
        returns(uint256)
    {
        return ((((((_eth).mul(1000000000000000000)).mul(31250000000000000000000000000)).add(56249882812561035156250000000000000000000000000000000000000000000000)).sqrt()).sub(7499992187500000000000000000000000)) / (15625000000);
    }
    
    // 根据KEY算ETH
    function eth(uint256 _keys) 
        internal
        pure
        returns(uint256)  
    {
        return ((7812500000).mul(_keys.sq()).add((7499992187500000).mul(_keys.mul(1000000000000000000)))) / ((1000000000000000000).sq()) ;
    }
}

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);
}

library NameFilter {
    function nameFilter(string _input)
        internal
        pure
        returns(bytes32)
    {
        bytes memory _temp = bytes(_input);
        uint256 _length = _temp.length;
        
        require (_length <= 32 && _length > 0, "Invalid Length");
        require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, "Can NOT start with SPACE");
        if (_temp[0] == 0x30)
        {
            require(_temp[1] != 0x78, "CAN NOT Start With 0x");
            require(_temp[1] != 0x58, "CAN NOT Start With 0X");
        }
        
        bool _hasNonNumber;
        
        for (uint256 i = 0; i < _length; i++)
        {
            // 大写转小写
            if (_temp[i] > 0x40 && _temp[i] < 0x5b)
            {
                _temp[i] = byte(uint(_temp[i]) + 32);
                if (_hasNonNumber == false)
                    _hasNonNumber = true;
            } else {
                require
                (
                    _temp[i] == 0x20 || 
                    (_temp[i] > 0x60 && _temp[i] < 0x7b) ||
                    (_temp[i] > 0x2f && _temp[i] < 0x3a),
                    "Include Illegal Characters!"
                );
                if (_temp[i] == 0x20)
                    require( _temp[i+1] != 0x20, 
                    "ONLY One Space Allowed");
                
                if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39))
                    _hasNonNumber = true;    
            }
        }
        
        require(_hasNonNumber == true, "All Numbers Not Allowed");
        
        bytes32 _ret;
        assembly {
            _ret := mload(add(_temp, 32))
        }
        return (_ret);
    }
}

library SafeMath {
    function mul(uint256 a, uint256 b) 
        internal 
        pure 
        returns (uint256 c) 
    {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b, "Mul Failed");
        return c;
    }
    function sub(uint256 a, uint256 b)
        internal
        pure
        returns (uint256) 
    {
        require(b <= a, "Sub Failed");
        return a - b;
    }

    function add(uint256 a, uint256 b)
        internal
        pure
        returns (uint256 c) 
    {
        c = a + b;
        require(c >= a, "Add Failed");
        return c;
    }
    
    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);
        }
    }
    function sq(uint256 x)
        internal
        pure
        returns (uint256)
    {
        return (mul(x,x));
    }
}

Contract Security Audit

Contract ABI

API
[{"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":true,"inputs":[],"name":"cfo","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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"}],"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":"p3d","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":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":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":"newCEO","type":"address"}],"name":"modCEOAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","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":true,"inputs":[],"name":"ceo","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":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":true,"inputs":[{"name":"","type":"uint256"}],"name":"potSplit_","outputs":[{"name":"gen","type":"uint256"},{"name":"p3d","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":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"},{"constant":false,"inputs":[{"name":"newCFO","type":"address"}],"name":"modCFOAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"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":"P3DAmount","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":"P3DAmount","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":"P3DAmount","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":"P3DAmount","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"}]

6080604052601e600281905560035560006005556010805460ff1916905534801561002957600080fd5b506000805433600160a060020a03199182168117835560018054909216178155604080518082018252601e8082526020808301868152868052600e80835293517fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c55517fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881d5583518085018552603c815280820187815286885284835290517fa7c5ba7114a813b50159add3a36832908dc83db71d0b9a24c2ad0f83be95820755517fa7c5ba7114a813b50159add3a36832908dc83db71d0b9a24c2ad0f83be958208558351808501855260148082528183018881526002808a5286855292517f9adb202b1492743bc00c81d33cdc6423fa8c79109027eb6a845391e8fc1f048155517f9adb202b1492743bc00c81d33cdc6423fa8c79109027eb6a845391e8fc1f04825585518087018752602881528084018981526003808b5296855290517fe0283e559c29e31ee7f56467acc9dd307779c843a883aeeb3bf5c6128c90814455517fe0283e559c29e31ee7f56467acc9dd307779c843a883aeeb3bf5c6128c908145558551808701875260198152808401898152898052600f80865291517ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec37555517ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec376558651808801885294855284840189815297895280845293517f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5595517f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f8905584518086018652600a8152808301888152918852838352517fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55517fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeeae558351808501909452938352828401858152918552909252517f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc829682855517f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc8296829556152e490819061035590396000f3006080604052600436106101e25763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461036157806306fdde0314610388578063079ce327146104125780630f15f4c01461043257806310f01eba1461044757806311a09ae7146104685780631ed203471461047d57806324c33d33146104ae5780632660316e146105255780632ce21999146105545780632e19ebdc14610585578063349cdcac1461059d5780633ccfd60b146105bb5780633ddd4698146105d057806349cc635d1461062c5780635893d48114610656578063624ae5c0146106715780636306643414610686578063685ffd83146106bc578063747dff421461070f578063827037d61461079a57806382bfc739146107bb5780638f38f309146107e25780638f7140ea146107f0578063908921fc1461080b578063921dec211461082057806395d89b411461087357806398a0871d14610888578063a2bccae91461089f578063a65b37a1146108e0578063c519500e146108ee578063c7e284b814610906578063ce89c80c1461091b578063cf80800014610936578063d53b26791461094e578063d87574e014610963578063de7874f314610978578063ee0b5d8b146109d2578063f04893c214610a2b575b6101ea6151df565b60105460009060ff16151560011461023a576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b8015610281576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b34633b9aca008110156102cc576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561031c576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b61032585610a4c565b33600090815260076020908152604080832054808452600990925290912060060154919650945061035a908590600288610d00565b5050505050005b34801561036d57600080fd5b50610376610f3a565b60408051918252519081900360200190f35b34801561039457600080fd5b5061039d611000565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d75781810151838201526020016103bf565b50505050905090810190601f1680156104045780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041e57600080fd5b50610430600435602435604435611037565b005b34801561043e57600080fd5b50610430611222565b34801561045357600080fd5b50610376600160a060020a0360043516611356565b34801561047457600080fd5b50610376611368565b34801561048957600080fd5b5061049261136e565b60408051600160a060020a039092168252519081900360200190f35b3480156104ba57600080fd5b506104c660043561137d565b604080519c8d5260208d019b909b528b8b019990995296151560608b015260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561053157600080fd5b506105406004356024356113e0565b604080519115158252519081900360200190f35b34801561056057600080fd5b5061056c600435611400565b6040805192835260208301919091528051918290030190f35b34801561059157600080fd5b50610376600435611419565b3480156105a957600080fd5b5061043060043560243560443561142b565b3480156105c757600080fd5b506104306115f0565b6040805160206004803580820135601f810184900484028501840190955284845261043094369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050505060200135151561195d565b34801561063857600080fd5b50610430600435600160a060020a0360243516604435606435611b16565b34801561066257600080fd5b50610376600435602435611d07565b34801561067d57600080fd5b50610376611d24565b34801561069257600080fd5b5061069e600435611d2a565b60408051938452602084019290925282820152519081900360600190f35b6040805160206004803580820135601f8101849004840285018401909552848452610430943694929360249392840191908190840183828082843750949750508435955050505050602001351515611ed0565b34801561071b57600080fd5b50610724611fb0565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b3480156107a657600080fd5b50610430600160a060020a03600435166121ae565b3480156107c757600080fd5b50610430600160a060020a03600435166024356044356122e8565b6104306004356024356124c3565b3480156107fc57600080fd5b50610430600435602435612689565b34801561081757600080fd5b50610492612766565b6040805160206004803580820135601f8101849004840285018401909552848452610430943694929360249392840191908190840183828082843750949750508435955050505050602001351515612775565b34801561087f57600080fd5b5061039d612855565b610430600160a060020a036004351660243561288c565b3480156108ab57600080fd5b506108ba600435602435612a82565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610430600435602435612ab4565b3480156108fa57600080fd5b5061056c600435612c90565b34801561091257600080fd5b50610376612ca9565b34801561092757600080fd5b50610376600435602435612d38565b34801561094257600080fd5b50610376600435612de0565b34801561095a57600080fd5b50610540612e92565b34801561096f57600080fd5b50610376612e9b565b34801561098457600080fd5b50610990600435612ea1565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b3480156109de57600080fd5b506109f3600160a060020a0360043516612ee8565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b348015610a3757600080fd5b50610430600160a060020a0360043516612fbd565b610a546151df565b336000908152600760205260408120549080821515610cf757604080517fe56556a9000000000000000000000000000000000000000000000000000000008152336004820152905173a6fd21aa986247357f404aa37a7bc90809da1ad89163e56556a99160248083019260209291908290030181600087803b158015610ad957600080fd5b505af1158015610aed573d6000803e3d6000fd5b505050506040513d6020811015610b0357600080fd5b5051604080517f82e37b2c00000000000000000000000000000000000000000000000000000000815260048101839052905191945073a6fd21aa986247357f404aa37a7bc90809da1ad8916382e37b2c916024808201926020929091908290030181600087803b158015610b7657600080fd5b505af1158015610b8a573d6000803e3d6000fd5b505050506040513d6020811015610ba057600080fd5b5051604080517fe3c08adf00000000000000000000000000000000000000000000000000000000815260048101869052905191935073a6fd21aa986247357f404aa37a7bc90809da1ad89163e3c08adf916024808201926020929091908290030181600087803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b505050506040513d6020811015610c3d57600080fd5b505133600081815260076020908152604080832088905587835260099091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115610cc6576000828152600860209081526040808320869055858352600982528083206001908101869055600b8352818420868552909252909120805460ff191690911790555b8015801590610cd55750828114155b15610cef5760008381526009602052604090206006018190555b845160010185525b50929392505050565b6006546003546000828152600c602052604090206004015442910181118015610d6b57506000828152600c602052604090206002015481111580610d6b57506000828152600c602052604090206002015481118015610d6b57506000828152600c6020526040902054155b15610d8357610d7e8287348888886130f7565b610f32565b6000828152600c602052604090206002015481118015610db557506000828152600c602052604090206003015460ff16155b15610efd576000828152600c60205260409020600301805460ff19166001179055610ddf83613648565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a3360096000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b600086815260096020526040902060030154610f1f903463ffffffff613a0216565b6000878152600960205260409020600301555b505050505050565b6006546003546000828152600c602052604081206004015490929142910181118015610fa857506000828152600c602052604090206002015481111580610fa857506000828152600c602052604090206002015481118015610fa857506000828152600c6020526040902054155b15610ff0576000828152600c6020526040902060050154610fe990670de0b6b3a764000090610fdd908263ffffffff613a0216565b9063ffffffff613a6316565b9250610ffb565b661aa535d3d0c00092505b505090565b60408051808201909152600e81527f4d75737420426520486974203444000000000000000000000000000000000000602082015281565b61103f6151df565b601054600090819060ff161515600114611091576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b80156110d8576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b85633b9aca00811015611123576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115611173576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b3360009081526007602052604090205494508815806111a2575060008581526009602052604090206001015489145b156111c05760008581526009602052604090206006015493506111ff565b60008981526008602090815260408083205488845260099092529091206006015490945084146111ff5760008581526009602052604090206006018490555b61120888613a90565b975061121785858a8a8a613ab5565b505050505050505050565b600054600160a060020a03163314611284576040805160e560020a62461bcd02815260206004820152601560248201527f4f4e4c592063656f2043414e2061637469766174650000000000000000000000604482015290519081900360640190fd5b60105460ff16156112df576040805160e560020a62461bcd02815260206004820152601160248201527f416c726561647920416374697661746564000000000000000000000000000000604482015290519081900360640190fd5b6010805460ff191660019081179091556006819055600354600254600092909252600c602052429091019081037fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b6055610e10017fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b5e55565b60076020526000908152604090205481565b60055481565b600154600160a060020a031681565b600c60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b909b0154999a9899979860ff909716979596949593949293919290918c565b600b60209081526000928352604080842090915290825290205460ff1681565b600e602052600090815260409020805460019091015482565b60086020526000908152604090205481565b6114336151df565b60105460009060ff161515600114611483576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b80156114ca576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b84633b9aca00811015611515576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115611565576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b33600090815260076020526040902054935087158061158357508388145b156115a15760008481526009602052604090206006015497506115ce565b60008481526009602052604090206006015488146115ce5760008481526009602052604090206006018890555b6115d787613a90565b96506115e68489898989613ab5565b5050505050505050565b6000806000806115fe6151df565b60105460ff16151560011461164b576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b8015611692576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b60065433600090815260076020908152604080832054848452600c909252909120600201549198504297509550861180156116df57506000878152600c602052604090206003015460ff16155b80156116f857506000878152600c602052604090205415155b1561189e576000878152600c60205260409020600301805460ff1916600117905561172283613648565b925061172d85613cd1565b9350600084111561177e57600085815260096020526040808220549051600160a060020a039091169186156108fc02918791818181858888f1935050505015801561177c573d6000803e3d6000fd5b505b85670de0b6b3a764000002836000015101836000018181525050848360200151018360200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc3360096000888152602001908152602001600020600101548686600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611954565b6118a785613cd1565b935060008411156118f857600085815260096020526040808220549051600160a060020a039091169186156108fc02918791818181858888f193505050501580156118f6573d6000803e3d6000fd5b505b6000858152600960209081526040918290206001015482513381529182015280820186905260608101889052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050565b6000808080808033803b80156119ab576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b6119b48b613d58565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038e1660448301528c151560648301528251939b50995034985073a6fd21aa986247357f404aa37a7bc90809da1ad89263aa4d490b928a926084808201939182900301818588803b158015611a4557600080fd5b505af1158015611a59573d6000803e3d6000fd5b50505050506040513d6040811015611a7057600080fd5b508051602091820151600160a060020a03808b1660008181526007865260408082205485835260098852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b3373a6fd21aa986247357f404aa37a7bc90809da1ad814611ba7576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600760205260409020548414611be257600160a060020a03831660009081526007602052604090208490555b6000828152600860205260409020548414611c095760008281526008602052604090208490555b600084815260096020526040902054600160a060020a03848116911614611c5f576000848152600960205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b6000848152600960205260409020600101548214611c8c5760008481526009602052604090206001018290555b6000848152600960205260409020600601548114611cb95760008481526009602052604090206006018190555b6000848152600b6020908152604080832085845290915290205460ff161515611d01576000848152600b602090815260408083208584529091529020805460ff191660011790555b50505050565b600d60209081526000928352604080842090915290825290205481565b60065481565b6006546000818152600c60205260408120600201549091829182919042118015611d6657506000818152600c602052604090206003015460ff16155b8015611d7f57506000818152600c602052604090205415155b15611ea0576000818152600c6020526040902054851415611e64576000818152600c6020526040902060070154611ded90606490611dc490603063ffffffff6144d316565b811515611dcd57fe5b60008881526009602052604090206002015491900463ffffffff613a0216565b6000868152600a60209081526040808320858452909152902060020154611e4690611e2890611e1c898661454a565b9063ffffffff61461816565b6000888152600960205260409020600301549063ffffffff613a0216565b60008781526009602052604090206004015491955093509150611ec8565b6000858152600960209081526040808320600290810154600a8452828520868652909352922090910154611e4690611e2890611e1c898661454a565b60008581526009602052604090206002810154600590910154611e4690611e28908890614678565b509193909250565b6000808080808033803b8015611f1e576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b611f278b613d58565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073a6fd21aa986247357f404aa37a7bc90809da1ad89263745ea0c1928a926084808201939182900301818588803b158015611a4557600080fd5b60008060008060008060008060008060008060008060006006549050600c60008281526020019081526020016000206009015481600c600084815260200190815260200160002060050154600c600085815260200190815260200160002060020154600c600086815260200190815260200160002060040154600c600087815260200190815260200160002060070154600c600088815260200190815260200160002060000154600a02600c6000898152602001908152602001600020600101540160096000600c60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a031660096000600c60008c815260200190815260200160002060000154815260200190815260200160002060010154600d60008b8152602001908152602001600020600080815260200190815260200160002054600d60008c815260200190815260200160002060006001815260200190815260200160002054600d60008d815260200190815260200160002060006002815260200190815260200160002054600d60008e8152602001908152602001600020600060038152602001908152602001600020546004546103e802600554019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b33803b80156121f5576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b600160a060020a0383161515612255576040805160e560020a62461bcd02815260206004820152601060248201527f43454f2043616e206e6f74206265203000000000000000000000000000000000604482015290519081900360640190fd5b600054600160a060020a031633146122b7576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c792063656f2063616e206d6f646966792063656f000000000000000000604482015290519081900360640190fd5b50506000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6122f06151df565b601054600090819060ff161515600114612342576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b8015612389576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b85633b9aca008110156123d4576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115612424576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b336000908152600760205260409020549450600160a060020a03891615806124545750600160a060020a03891633145b156124725760008581526009602052604090206006015493506111ff565b600160a060020a03891660009081526007602090815260408083205488845260099092529091206006015490945084146111ff57600085815260096020526040902060060184905561120888613a90565b6124cb6151df565b60105460009060ff16151560011461251b576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b8015612562576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b34633b9aca008110156125ad576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af68000008111156125fd576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b61260685610a4c565b33600090815260076020526040902054909550935086158061262757508387145b15612645576000848152600960205260409020600601549650612672565b60008481526009602052604090206006015487146126725760008481526009602052604090206006018790555b61267b86613a90565b955061195484888888610d00565b3373a6fd21aa986247357f404aa37a7bc90809da1ad81461271a576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000828152600b6020908152604080832084845290915290205460ff161515612762576000828152600b602090815260408083208484529091529020805460ff191660011790555b5050565b600054600160a060020a031681565b6000808080808033803b80156127c3576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b6127cc8b613d58565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073a6fd21aa986247357f404aa37a7bc90809da1ad89263c0942dfd928a926084808201939182900301818588803b158015611a4557600080fd5b60408051808201909152600581527f4d42543444000000000000000000000000000000000000000000000000000000602082015281565b6128946151df565b601054600090819060ff1615156001146128e6576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b801561292d576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b34633b9aca00811015612978576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af68000008111156129c8576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b6129d186610a4c565b336000908152600760205260409020549096509450600160a060020a0388161580612a045750600160a060020a03881633145b15612a22576000858152600960205260409020600601549350612a6b565b600160a060020a0388166000908152600760209081526040808320548884526009909252909120600601549094508414612a6b5760008581526009602052604090206006018490555b612a7487613a90565b96506115e685858989610d00565b600a60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b612abc6151df565b601054600090819060ff161515600114612b0e576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b8015612b55576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b34633b9aca00811015612ba0576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115612bf0576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b612bf986610a4c565b336000908152600760205260409020549096509450871580612c2b575060008581526009602052604090206001015488145b15612c49576000858152600960205260409020600601549350612a6b565b6000888152600860209081526040808320548884526009909252909120600601549094508414612a6b576000858152600960205260409020600601849055612a7487613a90565b600f602052600090815260409020805460019091015482565b6006546000818152600c60205260408120600201549091904290811015612d2f576003546000838152600c602052604090206004015401811115612d09576000828152600c6020526040902060020154610fe9908263ffffffff61461816565b6003546000838152600c6020526040902060040154610fe991018263ffffffff61461816565b60009250610ffb565b6003546000838152600c6020526040812060040154909142910181118015612da257506000848152600c602052604090206002015481111580612da257506000848152600c602052604090206002015481118015612da257506000848152600c6020526040902054155b15612dd0576000848152600c6020526040902060060154612dc9908463ffffffff6146d516565b9150612dd9565b612dc9836146f6565b5092915050565b6006546003546000828152600c602052604081206004015490929142910181118015612e4e57506000828152600c602052604090206002015481111580612e4e57506000828152600c602052604090206002015481118015612e4e57506000828152600c6020526040902054155b15612e82576000828152600c6020526040902060050154612e7b908590610fdd908263ffffffff613a0216565b9250612e8b565b612e7b84614772565b5050919050565b60105460ff1681565b60045481565b6009602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b6000806000806000806000806000600654915050600160a060020a0389166000908152600760209081526040808320548084526009808452828520600180820154600a8752858820898952875294872001549583905293526002830154600590930154909384939091612f7e90612f60908690614678565b6000878152600960205260409020600301549063ffffffff613a0216565b600095865260096020908152604080882060040154600a83528189209989529890915290952054939e929d50909b509950919750919550909350915050565b33803b8015613004576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b600160a060020a0383161515613064576040805160e560020a62461bcd02815260206004820152601060248201527f43464f2043616e206e6f74206265203000000000000000000000000000000000604482015290519081900360640190fd5b600154600160a060020a031633146130c6576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c792063666f2063616e206d6f646966792063666f000000000000000000604482015290519081900360640190fd5b50506001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000858152600a60209081526040808320898452909152812060010154819081908190151561312d5761312a89866147d5565b94505b60008a8152600c602052604090206006015468056bc75e2d6310000011801561318757506000898152600a602090815260408083208d8452909152902054670de0b6b3a764000090613185908a63ffffffff613a0216565b115b1561320e576000898152600a602090815260408083208d84529091529020546131bf90670de0b6b3a76400009063ffffffff61461816565b93506131d1888563ffffffff61461816565b60008a8152600960205260409020600301549093506131f6908463ffffffff613a0216565b60008a81526009602052604090206003015592965086925b633b9aca0088111561363c5760008a8152600c602052604090206006015461323c908963ffffffff6146d516565b9150670de0b6b3a764000082106132b357613257828b614835565b60008a8152600c6020526040902054891461327e5760008a8152600c602052604090208990555b60008a8152600c602052604090206001015486146132ab5760008a8152600c602052604090206001018690555b845160640185525b67016345785d8a000088106134f3576005805460010190556132d3614911565b1515600114156134f357678ac7230489e8000088106133745760045460649061330390604b63ffffffff6144d316565b81151561330c57fe5b60008b8152600960205260409020600201549190049150613333908263ffffffff613a0216565b60008a815260096020526040902060020155600454613358908263ffffffff61461816565b60045584516d0eca8847c4129106ce83000000000185526134c8565b670de0b6b3a764000088101580156133935750678ac7230489e8000088105b15613420576004546064906133af90603263ffffffff6144d316565b8115156133b857fe5b60008b81526009602052604090206002015491900491506133df908263ffffffff613a0216565b60008a815260096020526040902060020155600454613404908263ffffffff61461816565b60045584516d09dc5ada82b70b59df02000000000185526134c8565b67016345785d8a0000881015801561343f5750670de0b6b3a764000088105b156134c85760045460649061345b90601963ffffffff6144d316565b81151561346457fe5b60008b815260096020526040902060020154919004915061348b908263ffffffff613a0216565b60008a8152600960205260409020600201556004546134b0908263ffffffff61461816565b60045584516d0eca8847c4129106ce83000000000185525b84516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b268000000001855260006005555b60055485516103e89091020185526000898152600a602090815260408083208d845290915290206001015461352f90839063ffffffff613a0216565b60008a8152600a602090815260408083208e8452909152902060018101919091555461355c908990613a02565b60008a8152600a602090815260408083208e8452825280832093909355600c9052206005015461359390839063ffffffff613a0216565b60008b8152600c602052604090206005810191909155600601546135be90899063ffffffff613a0216565b60008b8152600c6020908152604080832060060193909355600d8152828220898352905220546135f590899063ffffffff613a0216565b60008b8152600d602090815260408083208a845290915290205561361d8a8a8a8a8a8a614b28565b945061362d8a8a8a89868a614c7a565b945061363c89878a8589614e42565b50505050505050505050565b6136506151df565b6006546000818152600c60205260408120805460018201546007909201549092808080808080606461368989603763ffffffff6144d316565b81151561369257fe5b04965060148860008b8152600f602052604090205491900496506064906136c0908a9063ffffffff6144d316565b8115156136c957fe5b60008b8152600f602052604090206001015491900495506064906136f4908a9063ffffffff6144d316565b8115156136fd57fe5b04935061371884611e1c87818a818e8e63ffffffff61461816565b60008c8152600c602052604090206005015490935061374586670de0b6b3a764000063ffffffff6144d316565b81151561374e57fe5b60008d8152600c6020526040902060050154919004925061379c90670de0b6b3a76400009061378490859063ffffffff6144d316565b81151561378d57fe5b8791900463ffffffff61461816565b905060008111156137cc576137b7858263ffffffff61461816565b94506137c9838263ffffffff613a0216565b92505b60008a8152600960205260409020600201546137ef90889063ffffffff613a0216565b60008b815260096020526040902060020155613811868563ffffffff613a0216565b600154604051919750600160a060020a03169087156108fc029088906000818181858888f1935050505015801561384c573d6000803e3d6000fd5b5060008b8152600c602052604090206008015461387090839063ffffffff613a0216565b600c60008d815260200190815260200160002060080181905550600c60008c815260200190815260200160002060020154620f4240028d60000151018d60000181815250508867016345785d8a0000028a6a52b7d2dcc80cd2e4000000028e6020015101018d6020018181525050600960008b815260200190815260200160002060000160009054906101000a9004600160a060020a03168d60400190600160a060020a03169081600160a060020a031681525050600960008b8152602001908152602001600020600101548d606001906000191690816000191681525050868d6080018181525050848d60e0018181525050838d60c0018181525050828d60a00181815250506006600081548092919060010191905055508a806001019b505042600c60008d8152602001908152602001600020600401819055506139d36003546139c7610e1042613a0290919063ffffffff16565b9063ffffffff613a0216565b60008c8152600c6020526040902060028101919091556007018390558c9b505050505050505050505050919050565b81810182811015613a5d576040805160e560020a62461bcd02815260206004820152600a60248201527f416464204661696c656400000000000000000000000000000000000000000000604482015290519081900360640190fd5b92915050565b6000613a89613a80613a7b858563ffffffff61461816565b614772565b611e1c85614772565b9392505050565b600080821080613aa05750600382115b15613aad57506002613ab0565b50805b919050565b6006546003546000828152600c602052604090206004015442910181118015613b2057506000828152600c602052604090206002015481111580613b2057506000828152600c602052604090206002015481118015613b2057506000828152600c6020526040902054155b15613b5757613b3284611e1c89613cd1565b600088815260096020526040902060030155613b528288868989886130f7565b611954565b6000828152600c602052604090206002015481118015613b8957506000828152600c602052604090206003015460ff16155b15611954576000828152600c60205260409020600301805460ff19166001179055613bb383613648565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600960008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6000818152600960205260408120600501548190613cf0908490614fb0565b600083815260096020526040902060048101546003820154600290920154613d22926139c7919063ffffffff613a0216565b90506000811115613d4e5760008381526009602052604081206002810182905560038101829055600401555b8091505b50919050565b8051600090829082808060208411801590613d735750600084115b1515613dc9576040805160e560020a62461bcd02815260206004820152600e60248201527f496e76616c6964204c656e677468000000000000000000000000000000000000604482015290519081900360640190fd5b846000815181101515613dd857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214158015613e3f57508460018503815181101515613e1757fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515613e95576040805160e560020a62461bcd02815260206004820152601860248201527f43616e204e4f5420737461727420776974682053504143450000000000000000604482015290519081900360640190fd5b846000815181101515613ea457fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415613fe757846001815181101515613ede57fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515613f5b576040805160e560020a62461bcd02815260206004820152601560248201527f43414e204e4f5420537461727420576974682030780000000000000000000000604482015290519081900360640190fd5b846001815181101515613f6a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515613fe7576040805160e560020a62461bcd02815260206004820152601560248201527f43414e204e4f5420537461727420576974682030580000000000000000000000604482015290519081900360640190fd5b600091505b8382101561446b5784517f40000000000000000000000000000000000000000000000000000000000000009086908490811061402457fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614098575084517f5b000000000000000000000000000000000000000000000000000000000000009086908490811061407957fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b156141055784828151811015156140ab57fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a0285838151811015156140dc57fe5b906020010190600160f860020a031916908160001a90535082151561410057600192505b614460565b848281518110151561411357fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214806141e3575084517f60000000000000000000000000000000000000000000000000000000000000009086908490811061416f57fe5b90602001015160f860020a900460f860020a02600160f860020a0319161180156141e3575084517f7b00000000000000000000000000000000000000000000000000000000000000908690849081106141c457fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b8061428d575084517f2f000000000000000000000000000000000000000000000000000000000000009086908490811061421957fe5b90602001015160f860020a900460f860020a02600160f860020a03191611801561428d575084517f3a000000000000000000000000000000000000000000000000000000000000009086908490811061426e57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b15156142e3576040805160e560020a62461bcd02815260206004820152601b60248201527f496e636c75646520496c6c6567616c2043686172616374657273210000000000604482015290519081900360640190fd5b84828151811015156142f157fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214156143aa57848260010181518110151561432d57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141515156143aa576040805160e560020a62461bcd02815260206004820152601660248201527f4f4e4c59204f6e6520537061636520416c6c6f77656400000000000000000000604482015290519081900360640190fd5b82158015614456575084517f3000000000000000000000000000000000000000000000000000000000000000908690849081106143e357fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080614456575084517f39000000000000000000000000000000000000000000000000000000000000009086908490811061443757fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b1561446057600192505b600190910190613fec565b6001831515146144c5576040805160e560020a62461bcd02815260206004820152601760248201527f416c6c204e756d62657273204e6f7420416c6c6f776564000000000000000000604482015290519081900360640190fd5b505050506020015192915050565b60008215156144e457506000613a5d565b508181028183828115156144f457fe5b0414613a5d576040805160e560020a62461bcd02815260206004820152600a60248201527f4d756c204661696c656400000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000828152600a602090815260408083208484528252808320600190810154600c8085528386206005810154938101548752600f8652938620548787529452600790920154670de0b6b3a76400009361460793926145fb9290916145d29187916064916145bc9163ffffffff6144d316565b8115156145c557fe5b049063ffffffff6144d316565b8115156145db57fe5b6000888152600c602052604090206008015491900463ffffffff613a0216565b9063ffffffff6144d316565b81151561461057fe5b049392505050565b600082821115614672576040805160e560020a62461bcd02815260206004820152600a60248201527f537562204661696c656400000000000000000000000000000000000000000000604482015290519081900360640190fd5b50900390565b6000828152600a6020908152604080832084845282528083206002810154600190910154600c90935290832060080154613a8992670de0b6b3a7640000916146bf916144d3565b8115156146c857fe5b049063ffffffff61461816565b6000613a896146e3846146f6565b611e1c6146f6868663ffffffff613a0216565b60006403a35294406147626e0171c735c3cc96891d40ef2b800000611e1c61475d7c02161fe403157cb1c72647b1bc2c94dd72bd37503240644000000000006139c76b64f964e68233a76f520000006145fb8a670de0b6b3a764000063ffffffff6144d316565b615047565b81151561476b57fe5b0492915050565b6000614785670de0b6b3a764000061509a565b6147626147b76147a385670de0b6b3a764000063ffffffff6144d316565b661aa534022775e09063ffffffff6144d316565b6139c76147c38661509a565b6401d1a94a209063ffffffff6144d316565b6147dd6151df565b6000838152600960205260409020600501541561481157600083815260096020526040902060050154614811908490614fb0565b506006546000838152600960205260409020600501558051600a0181528092915050565b6000818152600c60205260408120600201544291908211801561486457506000838152600c6020526040902054155b1561488857614881826139c7601e670de0b6b3a7640000886145c5565b90506148b5565b6000838152600c60205260409020600201546148b2906139c7601e670de0b6b3a7640000886145c5565b90505b6148c761a8c08363ffffffff613a0216565b8110156148e7576000838152600c60205260409020600201819055611d01565b6148f961a8c08363ffffffff613a0216565b6000848152600c602052604090206002015550505050565b600080614a82436139c742336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061498c5780518252601f19909201916020918201910161496d565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120925050508115156149c257fe5b046139c7456139c742416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614a3b5780518252601f199092019160209182019101614a1c565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614a7157fe5b046139c7424463ffffffff613a0216565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310614ad05780518252601f199092019160209182019101614ab1565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060055490945092506103e89150839050046103e80282031015614b1f5760019150614b24565b600091505b5090565b614b306151df565b60148504600a8604841515614b5f576064614b5288601e63ffffffff6144d316565b811515614b5b57fe5b0490505b878614158015614b7f575060008681526009602052604090206001015415155b15614c1f57600086815260096020526040902060040154614ba790829063ffffffff613a0216565b600087815260096020908152604091829020600481019390935582546001909301548251600160a060020a039094168452908301528181018390524260608301525189918b9189917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a4614c32565b614c2f828263ffffffff613a0216565b91505b600154604051600160a060020a039091169083156108fc029084906000818181858888f19350505050158015614c6c573d6000803e3d6000fd5b509298975050505050505050565b614c826151df565b6000848152600e6020526040812054819081908190606490614cab908b9063ffffffff6144d316565b811515614cb457fe5b049350601489049250614cd283600454613a0290919063ffffffff16565b600455871515614d51576000888152600e6020526040902060010154614d4a90614d3d90606490614d0a908d9063ffffffff6144d316565b811515614d1357fe5b046064614d278d602863ffffffff6144d316565b811515614d3057fe5b049063ffffffff613a0216565b8a9063ffffffff61461816565b9850614d9f565b6000888152600e6020526040902060010154614d9c90614d3d90606490614d7f908d9063ffffffff6144d316565b811515614d8857fe5b046064614d278d601463ffffffff6144d316565b98505b614daf898563ffffffff61461816565b9150614dbd8b8b868a6150a6565b90506000811115614ddb57614dd8848263ffffffff61461816565b93505b60008b8152600c6020526040902060070154614e01906139c7848463ffffffff613a0216565b60008c8152600c602052604090206007015560e0860151614e2990859063ffffffff613a0216565b60e0870152506101008501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600654751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c7468160000151826020015160096000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600454604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000614fbc8383614678565b9050600081111561504257600083815260096020526040902060030154614fea90829063ffffffff613a0216565b600084815260096020908152604080832060030193909355600a81528282208583529052206002015461502490829063ffffffff613a0216565b6000848152600a602090815260408083208684529091529020600201555b505050565b6000806002615057846001613a02565b81151561506057fe5b0490508291505b81811015613d52578091506002615089828581151561508257fe5b0483613a02565b81151561509257fe5b049050615067565b6000613a5d82836144d3565b6000848152600c6020526040812060050154819081906150d486670de0b6b3a764000063ffffffff6144d316565b8115156150dd57fe5b6000898152600c6020526040902060080154919004925061510590839063ffffffff613a0216565b6000888152600c6020526040902060080155670de0b6b3a7640000615130838663ffffffff6144d316565b81151561513957fe5b6000888152600a602090815260408083208c8452825280832060020154600c9092529091206008015492909104925061518c916139c7908490670de0b6b3a7640000906146bf908a63ffffffff6144d316565b6000878152600a602090815260408083208b8452825280832060020193909355600c905220600501546151d490670de0b6b3a76400009061378490859063ffffffff6144d316565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152509056004e6f742048756d616e0000000000000000000000000000000000000000000000546f6f204c6573730000000000000000000000000000000000000000000000004e6f742041637469766521000000000000000000000000000000000000000000546f6f204d6f7265000000000000000000000000000000000000000000000000a165627a7a72305820e9b4b68977c8828a4c6d7b594d044db5e0d70f9fc5a23d9079f4d750595f50890029

Deployed Bytecode

0x6080604052600436106101e25763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461036157806306fdde0314610388578063079ce327146104125780630f15f4c01461043257806310f01eba1461044757806311a09ae7146104685780631ed203471461047d57806324c33d33146104ae5780632660316e146105255780632ce21999146105545780632e19ebdc14610585578063349cdcac1461059d5780633ccfd60b146105bb5780633ddd4698146105d057806349cc635d1461062c5780635893d48114610656578063624ae5c0146106715780636306643414610686578063685ffd83146106bc578063747dff421461070f578063827037d61461079a57806382bfc739146107bb5780638f38f309146107e25780638f7140ea146107f0578063908921fc1461080b578063921dec211461082057806395d89b411461087357806398a0871d14610888578063a2bccae91461089f578063a65b37a1146108e0578063c519500e146108ee578063c7e284b814610906578063ce89c80c1461091b578063cf80800014610936578063d53b26791461094e578063d87574e014610963578063de7874f314610978578063ee0b5d8b146109d2578063f04893c214610a2b575b6101ea6151df565b60105460009060ff16151560011461023a576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b8015610281576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b34633b9aca008110156102cc576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561031c576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b61032585610a4c565b33600090815260076020908152604080832054808452600990925290912060060154919650945061035a908590600288610d00565b5050505050005b34801561036d57600080fd5b50610376610f3a565b60408051918252519081900360200190f35b34801561039457600080fd5b5061039d611000565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d75781810151838201526020016103bf565b50505050905090810190601f1680156104045780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041e57600080fd5b50610430600435602435604435611037565b005b34801561043e57600080fd5b50610430611222565b34801561045357600080fd5b50610376600160a060020a0360043516611356565b34801561047457600080fd5b50610376611368565b34801561048957600080fd5b5061049261136e565b60408051600160a060020a039092168252519081900360200190f35b3480156104ba57600080fd5b506104c660043561137d565b604080519c8d5260208d019b909b528b8b019990995296151560608b015260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561053157600080fd5b506105406004356024356113e0565b604080519115158252519081900360200190f35b34801561056057600080fd5b5061056c600435611400565b6040805192835260208301919091528051918290030190f35b34801561059157600080fd5b50610376600435611419565b3480156105a957600080fd5b5061043060043560243560443561142b565b3480156105c757600080fd5b506104306115f0565b6040805160206004803580820135601f810184900484028501840190955284845261043094369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050505060200135151561195d565b34801561063857600080fd5b50610430600435600160a060020a0360243516604435606435611b16565b34801561066257600080fd5b50610376600435602435611d07565b34801561067d57600080fd5b50610376611d24565b34801561069257600080fd5b5061069e600435611d2a565b60408051938452602084019290925282820152519081900360600190f35b6040805160206004803580820135601f8101849004840285018401909552848452610430943694929360249392840191908190840183828082843750949750508435955050505050602001351515611ed0565b34801561071b57600080fd5b50610724611fb0565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b3480156107a657600080fd5b50610430600160a060020a03600435166121ae565b3480156107c757600080fd5b50610430600160a060020a03600435166024356044356122e8565b6104306004356024356124c3565b3480156107fc57600080fd5b50610430600435602435612689565b34801561081757600080fd5b50610492612766565b6040805160206004803580820135601f8101849004840285018401909552848452610430943694929360249392840191908190840183828082843750949750508435955050505050602001351515612775565b34801561087f57600080fd5b5061039d612855565b610430600160a060020a036004351660243561288c565b3480156108ab57600080fd5b506108ba600435602435612a82565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610430600435602435612ab4565b3480156108fa57600080fd5b5061056c600435612c90565b34801561091257600080fd5b50610376612ca9565b34801561092757600080fd5b50610376600435602435612d38565b34801561094257600080fd5b50610376600435612de0565b34801561095a57600080fd5b50610540612e92565b34801561096f57600080fd5b50610376612e9b565b34801561098457600080fd5b50610990600435612ea1565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b3480156109de57600080fd5b506109f3600160a060020a0360043516612ee8565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b348015610a3757600080fd5b50610430600160a060020a0360043516612fbd565b610a546151df565b336000908152600760205260408120549080821515610cf757604080517fe56556a9000000000000000000000000000000000000000000000000000000008152336004820152905173a6fd21aa986247357f404aa37a7bc90809da1ad89163e56556a99160248083019260209291908290030181600087803b158015610ad957600080fd5b505af1158015610aed573d6000803e3d6000fd5b505050506040513d6020811015610b0357600080fd5b5051604080517f82e37b2c00000000000000000000000000000000000000000000000000000000815260048101839052905191945073a6fd21aa986247357f404aa37a7bc90809da1ad8916382e37b2c916024808201926020929091908290030181600087803b158015610b7657600080fd5b505af1158015610b8a573d6000803e3d6000fd5b505050506040513d6020811015610ba057600080fd5b5051604080517fe3c08adf00000000000000000000000000000000000000000000000000000000815260048101869052905191935073a6fd21aa986247357f404aa37a7bc90809da1ad89163e3c08adf916024808201926020929091908290030181600087803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b505050506040513d6020811015610c3d57600080fd5b505133600081815260076020908152604080832088905587835260099091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115610cc6576000828152600860209081526040808320869055858352600982528083206001908101869055600b8352818420868552909252909120805460ff191690911790555b8015801590610cd55750828114155b15610cef5760008381526009602052604090206006018190555b845160010185525b50929392505050565b6006546003546000828152600c602052604090206004015442910181118015610d6b57506000828152600c602052604090206002015481111580610d6b57506000828152600c602052604090206002015481118015610d6b57506000828152600c6020526040902054155b15610d8357610d7e8287348888886130f7565b610f32565b6000828152600c602052604090206002015481118015610db557506000828152600c602052604090206003015460ff16155b15610efd576000828152600c60205260409020600301805460ff19166001179055610ddf83613648565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a3360096000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b600086815260096020526040902060030154610f1f903463ffffffff613a0216565b6000878152600960205260409020600301555b505050505050565b6006546003546000828152600c602052604081206004015490929142910181118015610fa857506000828152600c602052604090206002015481111580610fa857506000828152600c602052604090206002015481118015610fa857506000828152600c6020526040902054155b15610ff0576000828152600c6020526040902060050154610fe990670de0b6b3a764000090610fdd908263ffffffff613a0216565b9063ffffffff613a6316565b9250610ffb565b661aa535d3d0c00092505b505090565b60408051808201909152600e81527f4d75737420426520486974203444000000000000000000000000000000000000602082015281565b61103f6151df565b601054600090819060ff161515600114611091576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b80156110d8576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b85633b9aca00811015611123576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115611173576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b3360009081526007602052604090205494508815806111a2575060008581526009602052604090206001015489145b156111c05760008581526009602052604090206006015493506111ff565b60008981526008602090815260408083205488845260099092529091206006015490945084146111ff5760008581526009602052604090206006018490555b61120888613a90565b975061121785858a8a8a613ab5565b505050505050505050565b600054600160a060020a03163314611284576040805160e560020a62461bcd02815260206004820152601560248201527f4f4e4c592063656f2043414e2061637469766174650000000000000000000000604482015290519081900360640190fd5b60105460ff16156112df576040805160e560020a62461bcd02815260206004820152601160248201527f416c726561647920416374697661746564000000000000000000000000000000604482015290519081900360640190fd5b6010805460ff191660019081179091556006819055600354600254600092909252600c602052429091019081037fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b6055610e10017fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b5e55565b60076020526000908152604090205481565b60055481565b600154600160a060020a031681565b600c60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b909b0154999a9899979860ff909716979596949593949293919290918c565b600b60209081526000928352604080842090915290825290205460ff1681565b600e602052600090815260409020805460019091015482565b60086020526000908152604090205481565b6114336151df565b60105460009060ff161515600114611483576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b80156114ca576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b84633b9aca00811015611515576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115611565576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b33600090815260076020526040902054935087158061158357508388145b156115a15760008481526009602052604090206006015497506115ce565b60008481526009602052604090206006015488146115ce5760008481526009602052604090206006018890555b6115d787613a90565b96506115e68489898989613ab5565b5050505050505050565b6000806000806115fe6151df565b60105460ff16151560011461164b576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b8015611692576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b60065433600090815260076020908152604080832054848452600c909252909120600201549198504297509550861180156116df57506000878152600c602052604090206003015460ff16155b80156116f857506000878152600c602052604090205415155b1561189e576000878152600c60205260409020600301805460ff1916600117905561172283613648565b925061172d85613cd1565b9350600084111561177e57600085815260096020526040808220549051600160a060020a039091169186156108fc02918791818181858888f1935050505015801561177c573d6000803e3d6000fd5b505b85670de0b6b3a764000002836000015101836000018181525050848360200151018360200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc3360096000888152602001908152602001600020600101548686600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611954565b6118a785613cd1565b935060008411156118f857600085815260096020526040808220549051600160a060020a039091169186156108fc02918791818181858888f193505050501580156118f6573d6000803e3d6000fd5b505b6000858152600960209081526040918290206001015482513381529182015280820186905260608101889052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050565b6000808080808033803b80156119ab576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b6119b48b613d58565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038e1660448301528c151560648301528251939b50995034985073a6fd21aa986247357f404aa37a7bc90809da1ad89263aa4d490b928a926084808201939182900301818588803b158015611a4557600080fd5b505af1158015611a59573d6000803e3d6000fd5b50505050506040513d6040811015611a7057600080fd5b508051602091820151600160a060020a03808b1660008181526007865260408082205485835260098852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b3373a6fd21aa986247357f404aa37a7bc90809da1ad814611ba7576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600760205260409020548414611be257600160a060020a03831660009081526007602052604090208490555b6000828152600860205260409020548414611c095760008281526008602052604090208490555b600084815260096020526040902054600160a060020a03848116911614611c5f576000848152600960205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b6000848152600960205260409020600101548214611c8c5760008481526009602052604090206001018290555b6000848152600960205260409020600601548114611cb95760008481526009602052604090206006018190555b6000848152600b6020908152604080832085845290915290205460ff161515611d01576000848152600b602090815260408083208584529091529020805460ff191660011790555b50505050565b600d60209081526000928352604080842090915290825290205481565b60065481565b6006546000818152600c60205260408120600201549091829182919042118015611d6657506000818152600c602052604090206003015460ff16155b8015611d7f57506000818152600c602052604090205415155b15611ea0576000818152600c6020526040902054851415611e64576000818152600c6020526040902060070154611ded90606490611dc490603063ffffffff6144d316565b811515611dcd57fe5b60008881526009602052604090206002015491900463ffffffff613a0216565b6000868152600a60209081526040808320858452909152902060020154611e4690611e2890611e1c898661454a565b9063ffffffff61461816565b6000888152600960205260409020600301549063ffffffff613a0216565b60008781526009602052604090206004015491955093509150611ec8565b6000858152600960209081526040808320600290810154600a8452828520868652909352922090910154611e4690611e2890611e1c898661454a565b60008581526009602052604090206002810154600590910154611e4690611e28908890614678565b509193909250565b6000808080808033803b8015611f1e576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b611f278b613d58565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073a6fd21aa986247357f404aa37a7bc90809da1ad89263745ea0c1928a926084808201939182900301818588803b158015611a4557600080fd5b60008060008060008060008060008060008060008060006006549050600c60008281526020019081526020016000206009015481600c600084815260200190815260200160002060050154600c600085815260200190815260200160002060020154600c600086815260200190815260200160002060040154600c600087815260200190815260200160002060070154600c600088815260200190815260200160002060000154600a02600c6000898152602001908152602001600020600101540160096000600c60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a031660096000600c60008c815260200190815260200160002060000154815260200190815260200160002060010154600d60008b8152602001908152602001600020600080815260200190815260200160002054600d60008c815260200190815260200160002060006001815260200190815260200160002054600d60008d815260200190815260200160002060006002815260200190815260200160002054600d60008e8152602001908152602001600020600060038152602001908152602001600020546004546103e802600554019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b33803b80156121f5576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b600160a060020a0383161515612255576040805160e560020a62461bcd02815260206004820152601060248201527f43454f2043616e206e6f74206265203000000000000000000000000000000000604482015290519081900360640190fd5b600054600160a060020a031633146122b7576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c792063656f2063616e206d6f646966792063656f000000000000000000604482015290519081900360640190fd5b50506000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6122f06151df565b601054600090819060ff161515600114612342576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b8015612389576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b85633b9aca008110156123d4576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115612424576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b336000908152600760205260409020549450600160a060020a03891615806124545750600160a060020a03891633145b156124725760008581526009602052604090206006015493506111ff565b600160a060020a03891660009081526007602090815260408083205488845260099092529091206006015490945084146111ff57600085815260096020526040902060060184905561120888613a90565b6124cb6151df565b60105460009060ff16151560011461251b576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b8015612562576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b34633b9aca008110156125ad576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af68000008111156125fd576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b61260685610a4c565b33600090815260076020526040902054909550935086158061262757508387145b15612645576000848152600960205260409020600601549650612672565b60008481526009602052604090206006015487146126725760008481526009602052604090206006018790555b61267b86613a90565b955061195484888888610d00565b3373a6fd21aa986247357f404aa37a7bc90809da1ad81461271a576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000828152600b6020908152604080832084845290915290205460ff161515612762576000828152600b602090815260408083208484529091529020805460ff191660011790555b5050565b600054600160a060020a031681565b6000808080808033803b80156127c3576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b6127cc8b613d58565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073a6fd21aa986247357f404aa37a7bc90809da1ad89263c0942dfd928a926084808201939182900301818588803b158015611a4557600080fd5b60408051808201909152600581527f4d42543444000000000000000000000000000000000000000000000000000000602082015281565b6128946151df565b601054600090819060ff1615156001146128e6576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b801561292d576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b34633b9aca00811015612978576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af68000008111156129c8576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b6129d186610a4c565b336000908152600760205260409020549096509450600160a060020a0388161580612a045750600160a060020a03881633145b15612a22576000858152600960205260409020600601549350612a6b565b600160a060020a0388166000908152600760209081526040808320548884526009909252909120600601549094508414612a6b5760008581526009602052604090206006018490555b612a7487613a90565b96506115e685858989610d00565b600a60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b612abc6151df565b601054600090819060ff161515600114612b0e576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615279833981519152604482015290519081900360640190fd5b33803b8015612b55576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b34633b9aca00811015612ba0576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615259833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115612bf0576040805160e560020a62461bcd0281526020600482015260086024820152600080516020615299833981519152604482015290519081900360640190fd5b612bf986610a4c565b336000908152600760205260409020549096509450871580612c2b575060008581526009602052604090206001015488145b15612c49576000858152600960205260409020600601549350612a6b565b6000888152600860209081526040808320548884526009909252909120600601549094508414612a6b576000858152600960205260409020600601849055612a7487613a90565b600f602052600090815260409020805460019091015482565b6006546000818152600c60205260408120600201549091904290811015612d2f576003546000838152600c602052604090206004015401811115612d09576000828152600c6020526040902060020154610fe9908263ffffffff61461816565b6003546000838152600c6020526040902060040154610fe991018263ffffffff61461816565b60009250610ffb565b6003546000838152600c6020526040812060040154909142910181118015612da257506000848152600c602052604090206002015481111580612da257506000848152600c602052604090206002015481118015612da257506000848152600c6020526040902054155b15612dd0576000848152600c6020526040902060060154612dc9908463ffffffff6146d516565b9150612dd9565b612dc9836146f6565b5092915050565b6006546003546000828152600c602052604081206004015490929142910181118015612e4e57506000828152600c602052604090206002015481111580612e4e57506000828152600c602052604090206002015481118015612e4e57506000828152600c6020526040902054155b15612e82576000828152600c6020526040902060050154612e7b908590610fdd908263ffffffff613a0216565b9250612e8b565b612e7b84614772565b5050919050565b60105460ff1681565b60045481565b6009602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b6000806000806000806000806000600654915050600160a060020a0389166000908152600760209081526040808320548084526009808452828520600180820154600a8752858820898952875294872001549583905293526002830154600590930154909384939091612f7e90612f60908690614678565b6000878152600960205260409020600301549063ffffffff613a0216565b600095865260096020908152604080882060040154600a83528189209989529890915290952054939e929d50909b509950919750919550909350915050565b33803b8015613004576040805160e560020a62461bcd0281526020600482015260096024820152600080516020615239833981519152604482015290519081900360640190fd5b600160a060020a0383161515613064576040805160e560020a62461bcd02815260206004820152601060248201527f43464f2043616e206e6f74206265203000000000000000000000000000000000604482015290519081900360640190fd5b600154600160a060020a031633146130c6576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c792063666f2063616e206d6f646966792063666f000000000000000000604482015290519081900360640190fd5b50506001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000858152600a60209081526040808320898452909152812060010154819081908190151561312d5761312a89866147d5565b94505b60008a8152600c602052604090206006015468056bc75e2d6310000011801561318757506000898152600a602090815260408083208d8452909152902054670de0b6b3a764000090613185908a63ffffffff613a0216565b115b1561320e576000898152600a602090815260408083208d84529091529020546131bf90670de0b6b3a76400009063ffffffff61461816565b93506131d1888563ffffffff61461816565b60008a8152600960205260409020600301549093506131f6908463ffffffff613a0216565b60008a81526009602052604090206003015592965086925b633b9aca0088111561363c5760008a8152600c602052604090206006015461323c908963ffffffff6146d516565b9150670de0b6b3a764000082106132b357613257828b614835565b60008a8152600c6020526040902054891461327e5760008a8152600c602052604090208990555b60008a8152600c602052604090206001015486146132ab5760008a8152600c602052604090206001018690555b845160640185525b67016345785d8a000088106134f3576005805460010190556132d3614911565b1515600114156134f357678ac7230489e8000088106133745760045460649061330390604b63ffffffff6144d316565b81151561330c57fe5b60008b8152600960205260409020600201549190049150613333908263ffffffff613a0216565b60008a815260096020526040902060020155600454613358908263ffffffff61461816565b60045584516d0eca8847c4129106ce83000000000185526134c8565b670de0b6b3a764000088101580156133935750678ac7230489e8000088105b15613420576004546064906133af90603263ffffffff6144d316565b8115156133b857fe5b60008b81526009602052604090206002015491900491506133df908263ffffffff613a0216565b60008a815260096020526040902060020155600454613404908263ffffffff61461816565b60045584516d09dc5ada82b70b59df02000000000185526134c8565b67016345785d8a0000881015801561343f5750670de0b6b3a764000088105b156134c85760045460649061345b90601963ffffffff6144d316565b81151561346457fe5b60008b815260096020526040902060020154919004915061348b908263ffffffff613a0216565b60008a8152600960205260409020600201556004546134b0908263ffffffff61461816565b60045584516d0eca8847c4129106ce83000000000185525b84516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b268000000001855260006005555b60055485516103e89091020185526000898152600a602090815260408083208d845290915290206001015461352f90839063ffffffff613a0216565b60008a8152600a602090815260408083208e8452909152902060018101919091555461355c908990613a02565b60008a8152600a602090815260408083208e8452825280832093909355600c9052206005015461359390839063ffffffff613a0216565b60008b8152600c602052604090206005810191909155600601546135be90899063ffffffff613a0216565b60008b8152600c6020908152604080832060060193909355600d8152828220898352905220546135f590899063ffffffff613a0216565b60008b8152600d602090815260408083208a845290915290205561361d8a8a8a8a8a8a614b28565b945061362d8a8a8a89868a614c7a565b945061363c89878a8589614e42565b50505050505050505050565b6136506151df565b6006546000818152600c60205260408120805460018201546007909201549092808080808080606461368989603763ffffffff6144d316565b81151561369257fe5b04965060148860008b8152600f602052604090205491900496506064906136c0908a9063ffffffff6144d316565b8115156136c957fe5b60008b8152600f602052604090206001015491900495506064906136f4908a9063ffffffff6144d316565b8115156136fd57fe5b04935061371884611e1c87818a818e8e63ffffffff61461816565b60008c8152600c602052604090206005015490935061374586670de0b6b3a764000063ffffffff6144d316565b81151561374e57fe5b60008d8152600c6020526040902060050154919004925061379c90670de0b6b3a76400009061378490859063ffffffff6144d316565b81151561378d57fe5b8791900463ffffffff61461816565b905060008111156137cc576137b7858263ffffffff61461816565b94506137c9838263ffffffff613a0216565b92505b60008a8152600960205260409020600201546137ef90889063ffffffff613a0216565b60008b815260096020526040902060020155613811868563ffffffff613a0216565b600154604051919750600160a060020a03169087156108fc029088906000818181858888f1935050505015801561384c573d6000803e3d6000fd5b5060008b8152600c602052604090206008015461387090839063ffffffff613a0216565b600c60008d815260200190815260200160002060080181905550600c60008c815260200190815260200160002060020154620f4240028d60000151018d60000181815250508867016345785d8a0000028a6a52b7d2dcc80cd2e4000000028e6020015101018d6020018181525050600960008b815260200190815260200160002060000160009054906101000a9004600160a060020a03168d60400190600160a060020a03169081600160a060020a031681525050600960008b8152602001908152602001600020600101548d606001906000191690816000191681525050868d6080018181525050848d60e0018181525050838d60c0018181525050828d60a00181815250506006600081548092919060010191905055508a806001019b505042600c60008d8152602001908152602001600020600401819055506139d36003546139c7610e1042613a0290919063ffffffff16565b9063ffffffff613a0216565b60008c8152600c6020526040902060028101919091556007018390558c9b505050505050505050505050919050565b81810182811015613a5d576040805160e560020a62461bcd02815260206004820152600a60248201527f416464204661696c656400000000000000000000000000000000000000000000604482015290519081900360640190fd5b92915050565b6000613a89613a80613a7b858563ffffffff61461816565b614772565b611e1c85614772565b9392505050565b600080821080613aa05750600382115b15613aad57506002613ab0565b50805b919050565b6006546003546000828152600c602052604090206004015442910181118015613b2057506000828152600c602052604090206002015481111580613b2057506000828152600c602052604090206002015481118015613b2057506000828152600c6020526040902054155b15613b5757613b3284611e1c89613cd1565b600088815260096020526040902060030155613b528288868989886130f7565b611954565b6000828152600c602052604090206002015481118015613b8957506000828152600c602052604090206003015460ff16155b15611954576000828152600c60205260409020600301805460ff19166001179055613bb383613648565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600960008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6000818152600960205260408120600501548190613cf0908490614fb0565b600083815260096020526040902060048101546003820154600290920154613d22926139c7919063ffffffff613a0216565b90506000811115613d4e5760008381526009602052604081206002810182905560038101829055600401555b8091505b50919050565b8051600090829082808060208411801590613d735750600084115b1515613dc9576040805160e560020a62461bcd02815260206004820152600e60248201527f496e76616c6964204c656e677468000000000000000000000000000000000000604482015290519081900360640190fd5b846000815181101515613dd857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214158015613e3f57508460018503815181101515613e1757fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515613e95576040805160e560020a62461bcd02815260206004820152601860248201527f43616e204e4f5420737461727420776974682053504143450000000000000000604482015290519081900360640190fd5b846000815181101515613ea457fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415613fe757846001815181101515613ede57fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515613f5b576040805160e560020a62461bcd02815260206004820152601560248201527f43414e204e4f5420537461727420576974682030780000000000000000000000604482015290519081900360640190fd5b846001815181101515613f6a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515613fe7576040805160e560020a62461bcd02815260206004820152601560248201527f43414e204e4f5420537461727420576974682030580000000000000000000000604482015290519081900360640190fd5b600091505b8382101561446b5784517f40000000000000000000000000000000000000000000000000000000000000009086908490811061402457fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614098575084517f5b000000000000000000000000000000000000000000000000000000000000009086908490811061407957fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b156141055784828151811015156140ab57fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a0285838151811015156140dc57fe5b906020010190600160f860020a031916908160001a90535082151561410057600192505b614460565b848281518110151561411357fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214806141e3575084517f60000000000000000000000000000000000000000000000000000000000000009086908490811061416f57fe5b90602001015160f860020a900460f860020a02600160f860020a0319161180156141e3575084517f7b00000000000000000000000000000000000000000000000000000000000000908690849081106141c457fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b8061428d575084517f2f000000000000000000000000000000000000000000000000000000000000009086908490811061421957fe5b90602001015160f860020a900460f860020a02600160f860020a03191611801561428d575084517f3a000000000000000000000000000000000000000000000000000000000000009086908490811061426e57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b15156142e3576040805160e560020a62461bcd02815260206004820152601b60248201527f496e636c75646520496c6c6567616c2043686172616374657273210000000000604482015290519081900360640190fd5b84828151811015156142f157fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214156143aa57848260010181518110151561432d57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141515156143aa576040805160e560020a62461bcd02815260206004820152601660248201527f4f4e4c59204f6e6520537061636520416c6c6f77656400000000000000000000604482015290519081900360640190fd5b82158015614456575084517f3000000000000000000000000000000000000000000000000000000000000000908690849081106143e357fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080614456575084517f39000000000000000000000000000000000000000000000000000000000000009086908490811061443757fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b1561446057600192505b600190910190613fec565b6001831515146144c5576040805160e560020a62461bcd02815260206004820152601760248201527f416c6c204e756d62657273204e6f7420416c6c6f776564000000000000000000604482015290519081900360640190fd5b505050506020015192915050565b60008215156144e457506000613a5d565b508181028183828115156144f457fe5b0414613a5d576040805160e560020a62461bcd02815260206004820152600a60248201527f4d756c204661696c656400000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000828152600a602090815260408083208484528252808320600190810154600c8085528386206005810154938101548752600f8652938620548787529452600790920154670de0b6b3a76400009361460793926145fb9290916145d29187916064916145bc9163ffffffff6144d316565b8115156145c557fe5b049063ffffffff6144d316565b8115156145db57fe5b6000888152600c602052604090206008015491900463ffffffff613a0216565b9063ffffffff6144d316565b81151561461057fe5b049392505050565b600082821115614672576040805160e560020a62461bcd02815260206004820152600a60248201527f537562204661696c656400000000000000000000000000000000000000000000604482015290519081900360640190fd5b50900390565b6000828152600a6020908152604080832084845282528083206002810154600190910154600c90935290832060080154613a8992670de0b6b3a7640000916146bf916144d3565b8115156146c857fe5b049063ffffffff61461816565b6000613a896146e3846146f6565b611e1c6146f6868663ffffffff613a0216565b60006403a35294406147626e0171c735c3cc96891d40ef2b800000611e1c61475d7c02161fe403157cb1c72647b1bc2c94dd72bd37503240644000000000006139c76b64f964e68233a76f520000006145fb8a670de0b6b3a764000063ffffffff6144d316565b615047565b81151561476b57fe5b0492915050565b6000614785670de0b6b3a764000061509a565b6147626147b76147a385670de0b6b3a764000063ffffffff6144d316565b661aa534022775e09063ffffffff6144d316565b6139c76147c38661509a565b6401d1a94a209063ffffffff6144d316565b6147dd6151df565b6000838152600960205260409020600501541561481157600083815260096020526040902060050154614811908490614fb0565b506006546000838152600960205260409020600501558051600a0181528092915050565b6000818152600c60205260408120600201544291908211801561486457506000838152600c6020526040902054155b1561488857614881826139c7601e670de0b6b3a7640000886145c5565b90506148b5565b6000838152600c60205260409020600201546148b2906139c7601e670de0b6b3a7640000886145c5565b90505b6148c761a8c08363ffffffff613a0216565b8110156148e7576000838152600c60205260409020600201819055611d01565b6148f961a8c08363ffffffff613a0216565b6000848152600c602052604090206002015550505050565b600080614a82436139c742336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061498c5780518252601f19909201916020918201910161496d565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120925050508115156149c257fe5b046139c7456139c742416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614a3b5780518252601f199092019160209182019101614a1c565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614a7157fe5b046139c7424463ffffffff613a0216565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310614ad05780518252601f199092019160209182019101614ab1565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060055490945092506103e89150839050046103e80282031015614b1f5760019150614b24565b600091505b5090565b614b306151df565b60148504600a8604841515614b5f576064614b5288601e63ffffffff6144d316565b811515614b5b57fe5b0490505b878614158015614b7f575060008681526009602052604090206001015415155b15614c1f57600086815260096020526040902060040154614ba790829063ffffffff613a0216565b600087815260096020908152604091829020600481019390935582546001909301548251600160a060020a039094168452908301528181018390524260608301525189918b9189917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a4614c32565b614c2f828263ffffffff613a0216565b91505b600154604051600160a060020a039091169083156108fc029084906000818181858888f19350505050158015614c6c573d6000803e3d6000fd5b509298975050505050505050565b614c826151df565b6000848152600e6020526040812054819081908190606490614cab908b9063ffffffff6144d316565b811515614cb457fe5b049350601489049250614cd283600454613a0290919063ffffffff16565b600455871515614d51576000888152600e6020526040902060010154614d4a90614d3d90606490614d0a908d9063ffffffff6144d316565b811515614d1357fe5b046064614d278d602863ffffffff6144d316565b811515614d3057fe5b049063ffffffff613a0216565b8a9063ffffffff61461816565b9850614d9f565b6000888152600e6020526040902060010154614d9c90614d3d90606490614d7f908d9063ffffffff6144d316565b811515614d8857fe5b046064614d278d601463ffffffff6144d316565b98505b614daf898563ffffffff61461816565b9150614dbd8b8b868a6150a6565b90506000811115614ddb57614dd8848263ffffffff61461816565b93505b60008b8152600c6020526040902060070154614e01906139c7848463ffffffff613a0216565b60008c8152600c602052604090206007015560e0860151614e2990859063ffffffff613a0216565b60e0870152506101008501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600654751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c7468160000151826020015160096000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600454604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000614fbc8383614678565b9050600081111561504257600083815260096020526040902060030154614fea90829063ffffffff613a0216565b600084815260096020908152604080832060030193909355600a81528282208583529052206002015461502490829063ffffffff613a0216565b6000848152600a602090815260408083208684529091529020600201555b505050565b6000806002615057846001613a02565b81151561506057fe5b0490508291505b81811015613d52578091506002615089828581151561508257fe5b0483613a02565b81151561509257fe5b049050615067565b6000613a5d82836144d3565b6000848152600c6020526040812060050154819081906150d486670de0b6b3a764000063ffffffff6144d316565b8115156150dd57fe5b6000898152600c6020526040902060080154919004925061510590839063ffffffff613a0216565b6000888152600c6020526040902060080155670de0b6b3a7640000615130838663ffffffff6144d316565b81151561513957fe5b6000888152600a602090815260408083208c8452825280832060020154600c9092529091206008015492909104925061518c916139c7908490670de0b6b3a7640000906146bf908a63ffffffff6144d316565b6000878152600a602090815260408083208b8452825280832060020193909355600c905220600501546151d490670de0b6b3a76400009061378490859063ffffffff6144d316565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152509056004e6f742048756d616e0000000000000000000000000000000000000000000000546f6f204c6573730000000000000000000000000000000000000000000000004e6f742041637469766521000000000000000000000000000000000000000000546f6f204d6f7265000000000000000000000000000000000000000000000000a165627a7a72305820e9b4b68977c8828a4c6d7b594d044db5e0d70f9fc5a23d9079f4d750595f50890029

Swarm Source

bzzr://e9b4b68977c8828a4c6d7b594d044db5e0d70f9fc5a23d9079f4d750595f5089

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.