Contract Overview
Balance: 0.83259456561372841 Ether
Ether Value: $74.49 (@ $89.47/ETH)
Transactions: 609 txns
Token Tracker: FoMo3D Asia (Official) (F3DA)
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x655b6970f139d1da8747493525f9f6712a0b5a33at txn 0x1469b048188da8b16c0915472c0a4736d53a3ce3df5c9c55caef9cc17b71d138
 Latest 25 transactions from a total of 609 transactions

TxHash Age From To Value [TxFee]
0x7c6835913385009b2feb7aafd8b7553eff582fba1d845773a5f7ed78ad06481b43 days 14 hrs ago0xbd5c52b1649e84ca3d27028b4df6b91851ef3d13  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70 Ether0.000379716
0x112c955db883bf08218837bb8053b879648a77898a3373f6b222ce635881b42a43 days 14 hrs ago0x50ae1c312737b2ff632ae42d9367ced56c0f1925  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70 Ether0.000759432
0xaac0e14ae95021119f394a64b5cd1940598659639581adfdc35f2f01fce83dca60 days 17 hrs ago0x896ff7ea12865ed89bc8496d9bf829dee8696757  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70 Ether0.001679607
0x60f224616dd0b7576c8db0f1507f5c8f2908fd0e8884942a176ffa883346505285 days 18 hrs ago0x896ff7ea12865ed89bc8496d9bf829dee8696757  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000000001 Ether0.001420374
0xf1fe2c3266649da1ba63a5095c9689eeba943f91fb3b3c5e08b17bd70e35a2e885 days 18 hrs ago0x896ff7ea12865ed89bc8496d9bf829dee8696757  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000000001 Ether0.001510374
0x7eeb6d1c55199457d061b80e56926c38ae03567fdaa164908d1a0547d4a2f7cb85 days 18 hrs ago0x896ff7ea12865ed89bc8496d9bf829dee8696757  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000000001 Ether0.00141999
0xd35cc8daa29e1f4370b64165dcdb1986132c3bf0a7463472a1efd5a11b7e8e1985 days 18 hrs ago0x896ff7ea12865ed89bc8496d9bf829dee8696757  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000000001 Ether0.002127966
0x2e61e788509ef70c21ab1022744617a93394c590833d3c077159260d3e4e1e5d86 days 15 hrs ago0x6d0acdd986b7589295a43c91b95fd1f26fbc59f6  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70 Ether0.00075976056
0x7acc49f21a327a0b350e3446d634565065c6ed7a2a23bf8c1cfe95712adf267d86 days 16 hrs ago0x6d0acdd986b7589295a43c91b95fd1f26fbc59f6  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000075 Ether0.00123654384
0x48f22004f6e9ba0ba0451ff149439013a3caa36a5b9f692ef443e0b6b3d98f9386 days 17 hrs ago0x6d0acdd986b7589295a43c91b95fd1f26fbc59f6  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70 Ether0.000627269315
0x3545da1322662151beee191f924a48c7adc6b909b14773c3733bd043a09ff99286 days 19 hrs ago0x6d0acdd986b7589295a43c91b95fd1f26fbc59f6  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.002 Ether0.0018348066
0x4316fd5fceee70b9dc003754b7e8d8f83d229b8d15750b8ad4582a50e49f8e0b86 days 19 hrs ago0x29890a05f8b7a75100efd49107a084ca4a0e3463  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000236389999226 Ether0.008655728
0x0792a3264893d13d93a3aa66483d9dd963a7683825fd2a9efc5b4610010df7d286 days 19 hrs ago0x29890a05f8b7a75100efd49107a084ca4a0e3463  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000157591954697 Ether0.008403418
0xbaff6ab53d24de80d978fc97dda93deb7521c7aa942f7aa0422e5c9c0f16969e86 days 20 hrs ago0x29890a05f8b7a75100efd49107a084ca4a0e3463  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000157591954697 Ether0.008403418
0x4d9489ebf5aa25bca4deb750448fedfa6a0e2ffcf9904eca7bba84a88a19c37d86 days 20 hrs ago0x29890a05f8b7a75100efd49107a084ca4a0e3463  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000157590576577 Ether0.008403418
0xd2a8553af4aa89892ff21c5fe11e6c3d8ed9eefd7b02353baadf451457ce135f86 days 20 hrs ago0x29890a05f8b7a75100efd49107a084ca4a0e3463  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000157590576577 Ether0.008403418
0xf5858f25d1fa1cf5ea4c0eadc313deaec6e9ef70beb206834356de0513bfa1e986 days 20 hrs ago0x29890a05f8b7a75100efd49107a084ca4a0e3463  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000157589887515 Ether0.008403418
0x6c364e8c97fbc57648741030fc575f4f67eb9f4405fbf763e7ccd7b1e4f0fab386 days 20 hrs ago0x29890a05f8b7a75100efd49107a084ca4a0e3463  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000157589198453 Ether0.008403418
0x5ff0a3459c34696ff03e929f68b58c975645d5663297ca3528302723a77beb3786 days 20 hrs ago0x29890a05f8b7a75100efd49107a084ca4a0e3463  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000157588509391 Ether0.008403418
0xa73ad5ae0ede24f15da20a4b6a63a79d8819c82e1925d9d4544ba6c2437896bc86 days 20 hrs ago0x29890a05f8b7a75100efd49107a084ca4a0e3463  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.00015758782033 Ether0.008403418
0x0bad7f63fa1d8e4cd2f92d0c394d2432f94c14dca56e555c44b0d243f8ea1ed186 days 20 hrs ago0x29890a05f8b7a75100efd49107a084ca4a0e3463  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.000078793737899 Ether0.003224381474
0x75e913f020f51e93e2595778f0b93871fafe3b9a664b5668cc3d54fe406b98c386 days 21 hrs ago0xf2d1210b0baf7fec6750918e0a95446e12e02e8e  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70 Ether0.000190892
0x484117ed4be069bd8ede27842c070f70443a5a051d0ed32859ef06a3dcd0bc8a86 days 23 hrs ago0x6d0acdd986b7589295a43c91b95fd1f26fbc59f6  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.02 Ether0.0016256913
0x1ff61a90ccda84e14d7f0b50c0d6456f8c3c3697e68201d7210b0de54758803f86 days 23 hrs ago0xb327d112a560f832765a12c72451de40af3c2be2  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70 Ether0.000250892
0x6488a41d8ece650172c58f29ffff669b2e7f116e7153fdbe866f9370ed2e488a86 days 23 hrs ago0xb327d112a560f832765a12c72451de40af3c2be2  IN   0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70.1 Ether0.002711335
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x7c6835913385009b2feb7aafd8b7553eff582fba1d845773a5f7ed78ad06481b661115743 days 14 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xbd5c52b1649e84ca3d27028b4df6b91851ef3d130.033771417843470381 Ether
0x112c955db883bf08218837bb8053b879648a77898a3373f6b222ce635881b42a661114143 days 14 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70x50ae1c312737b2ff632ae42d9367ced56c0f19250.036280442671238491 Ether
0xaac0e14ae95021119f394a64b5cd1940598659639581adfdc35f2f01fce83dca650649460 days 17 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70x896ff7ea12865ed89bc8496d9bf829dee86967570.138814442898139383 Ether
0xaac0e14ae95021119f394a64b5cd1940598659639581adfdc35f2f01fce83dca650649460 days 17 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000054609190979905 Ether
0x60f224616dd0b7576c8db0f1507f5c8f2908fd0e8884942a176ffa8833465052635322585 days 18 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000033000343750004 Ether
0xf1fe2c3266649da1ba63a5095c9689eeba943f91fb3b3c5e08b17bd70e35a2e8635322285 days 18 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000033000343750004 Ether
0x7eeb6d1c55199457d061b80e56926c38ae03567fdaa164908d1a0547d4a2f7cb635321985 days 18 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000033000343750004 Ether
0xd35cc8daa29e1f4370b64165dcdb1986132c3bf0a7463472a1efd5a11b7e8e19635321785 days 18 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000033000343750004 Ether
0x2e61e788509ef70c21ab1022744617a93394c590833d3c077159260d3e4e1e5d634793386 days 15 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70x6d0acdd986b7589295a43c91b95fd1f26fbc59f60.012434423031156963 Ether
0x2e61e788509ef70c21ab1022744617a93394c590833d3c077159260d3e4e1e5d634793386 days 15 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000282089159799021 Ether
0x7acc49f21a327a0b350e3446d634565065c6ed7a2a23bf8c1cfe95712adf267d634754386 days 16 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000003 Ether
0x48f22004f6e9ba0ba0451ff149439013a3caa36a5b9f692ef443e0b6b3d98f93634731386 days 17 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70x6d0acdd986b7589295a43c91b95fd1f26fbc59f60.057992663903792298 Ether
0x48f22004f6e9ba0ba0451ff149439013a3caa36a5b9f692ef443e0b6b3d98f93634731386 days 17 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000937797199330072 Ether
0x3545da1322662151beee191f924a48c7adc6b909b14773c3733bd043a09ff992634676886 days 19 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.00008 Ether
0x4316fd5fceee70b9dc003754b7e8d8f83d229b8d15750b8ad4582a50e49f8e0b634675086 days 19 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.003085990664433554 Ether
0x0792a3264893d13d93a3aa66483d9dd963a7683825fd2a9efc5b4610010df7d2634674486 days 19 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000006303678187899 Ether
0xbaff6ab53d24de80d978fc97dda93deb7521c7aa942f7aa0422e5c9c0f16969e634674186 days 20 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000006303678187899 Ether
0x4d9489ebf5aa25bca4deb750448fedfa6a0e2ffcf9904eca7bba84a88a19c37d634673986 days 20 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000006303623063083 Ether
0xd2a8553af4aa89892ff21c5fe11e6c3d8ed9eefd7b02353baadf451457ce135f634673786 days 20 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000006303623063083 Ether
0xf5858f25d1fa1cf5ea4c0eadc313deaec6e9ef70beb206834356de0513bfa1e9634673586 days 20 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000006303595500615 Ether
0x6c364e8c97fbc57648741030fc575f4f67eb9f4405fbf763e7ccd7b1e4f0fab3634673186 days 20 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000006303567938146 Ether
0x5ff0a3459c34696ff03e929f68b58c975645d5663297ca3528302723a77beb37634672886 days 20 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000006303540375678 Ether
0xa73ad5ae0ede24f15da20a4b6a63a79d8819c82e1925d9d4544ba6c2437896bc634672486 days 20 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.000006303512813209 Ether
0x0bad7f63fa1d8e4cd2f92d0c394d2432f94c14dca56e555c44b0d243f8ea1ed1634671686 days 20 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xc91ca445acdae9eebaf003a64088ca29a694c3ae0.00000315174951598 Ether
0x75e913f020f51e93e2595778f0b93871fafe3b9a664b5668cc3d54fe406b98c3634646386 days 21 hrs ago0x5cd17346bc2b8b3b04251dfea7763dbc70cceaf70xf2d1210b0baf7fec6750918e0a95446e12e02e8e0.285999655898229394 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: FoMo3D
Compiler Text: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.24;

interface ExtSettingInterface {
    function getExtra() external returns(uint256);
    function getGap() external returns(uint256);
    function setGap(uint256 _gap) external;
}

interface FoundationInterface {
    function deposit() external payable;
}

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

contract Events {
    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 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 genAmount
    );

    event onBuyAndDistribute(
        address playerAddress,
        bytes32 playerName,
        uint256 ethIn,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 genAmount
    );

    event onReLoadAndDistribute(
        address playerAddress,
        bytes32 playerName,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 genAmount
    );

    event onAffiliatePayout(
        uint256 indexed affiliateID,
        address affiliateAddress,
        bytes32 affiliateName,
        uint256 indexed roundID,
        uint256 indexed buyerID,
        uint256 amount,
        uint256 timeStamp
    );
}

contract Ownable {
    address public owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "You are not owner.");
        _;
    }

    function transferOwnership(address _newOwner) public onlyOwner {
        require(_newOwner != address(0), "Invalid address.");

        owner = _newOwner;

        emit OwnershipTransferred(owner, _newOwner);
    }
}

contract FoMo3D is Ownable, Events {
    using SafeMath for *;
    using NameFilter for string;
    using KeysCalcLong for uint256;

    ExtSettingInterface private extSetting = ExtSettingInterface(0x2CFaEEF971d06B74eF2fc1Cb0c568ab92000e95e);
    FoundationInterface private foundation = FoundationInterface(0xc91CA445AcdAe9EebAf003A64088cA29A694C3ae);
	PlayerBookInterface private playerBook = PlayerBookInterface(0x4F86182FF4704330B0f169eD897D608B367015B7);

    string constant public name = "FoMo3D Asia (Official)";
    string constant public symbol = "F3DA";

    uint256 constant private rndInit_ = 1 hours;
    uint256 constant private rndInc_ = 30 seconds;
    uint256 constant private rndMax_ = 24 hours;

	uint256 private rndExtra_ = extSetting.getExtra();
    uint256 private rndGap_ = extSetting.getGap();

	uint256 public airDropPot_;
    uint256 public airDropTracker_ = 0;
    uint256 public rID_;

    bool public activated_ = false;

    mapping (address => uint256) public pIDxAddr_;
    mapping (bytes32 => uint256) public pIDxName_;
    mapping (uint256 => Datasets.Player) public plyr_;
    mapping (uint256 => mapping (uint256 => Datasets.PlayerRounds)) public plyrRnds_;
    mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_;

    mapping (uint256 => Datasets.Round) public round_;
    mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_;

    mapping (uint256 => uint256) public fees_;
    mapping (uint256 => uint256) public potSplit_;

    modifier isActivated() {
        require(activated_ == true, "its not ready yet.  check ?eta in discord");
        _;
    }

    modifier isHuman() {
        address _addr = msg.sender;
        uint256 _codeLength;

        assembly {
            _codeLength := extcodesize(_addr)
        }

        require(_codeLength == 0, "sorry humans only");
        _;
    }

    modifier isWithinLimits(uint256 _eth) {
        require(_eth >= 1000000000, "pocket lint: not a valid currency");
        require(_eth <= 100000000000000000000000, "no vitalik, no");
        _;
    }

    constructor() public {
		// 团队分配比例(0 = 鲸队; 1 = 熊队; 2 = 蛇队; 3 = 牛队)

        fees_[0] = 30;   //50% 奖池, 15% 推荐人, 4% 社区基金, 1% 空投奖池
        fees_[1] = 35;   //45% 奖池, 15% 推荐人, 4% 社区基金, 1% 空投奖池
        fees_[2] = 50;   //30% 奖池, 15% 推荐人, 4% 社区基金, 1% 空投奖池
        fees_[3] = 45;   //35% 奖池, 15% 推荐人, 4% 社区基金, 1% 空投奖池

        potSplit_[0] = 30;  //58% 中奖者, 10% 下一轮奖池, 2% 社区基金
        potSplit_[1] = 25;  //58% 中奖者, 15% 下一轮奖池, 2% 社区基金
        potSplit_[2] = 10;  //58% 中奖者, 30% 下一轮奖池, 2% 社区基金
        potSplit_[3] = 15;  //58% 中奖者, 25% 下一轮奖池, 2% 社区基金
	}

    function() public payable isActivated isHuman isWithinLimits(msg.value) {
        Datasets.EventData memory _eventData_ = determinePID(_eventData_);

        uint256 _pID = pIDxAddr_[msg.sender];
        buyCore(_pID, plyr_[_pID].laff, 2, _eventData_);
    }

    function setExtSettingInterface(address _extSetting) public onlyOwner {
        extSetting = ExtSettingInterface(_extSetting);
    }

    function setFoundationInterface(address _foundation) public onlyOwner {
        foundation = FoundationInterface(_foundation);
    }

    function setPlayerBookInterface(address _playerBook) public onlyOwner {
        playerBook = PlayerBookInterface(_playerBook);
    }

    function buyXid(uint256 _affCode, uint256 _team) public payable isActivated isHuman isWithinLimits(msg.value) {
        Datasets.EventData 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) public payable isActivated isHuman isWithinLimits(msg.value) {
        Datasets.EventData 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) public payable isActivated isHuman isWithinLimits(msg.value) {
        Datasets.EventData memory _eventData_ = determinePID(_eventData_);

        uint256 _pID = pIDxAddr_[msg.sender];

        uint256 _affID;
        if (_affCode == "" || _affCode == plyr_[_pID].name) {
            _affID = plyr_[_pID].laff;
        } else {
            _affID = pIDxName_[_affCode];
            if (_affID != plyr_[_pID].laff) {
                plyr_[_pID].laff = _affID;
            }
        }

        _team = verifyTeam(_team);

        buyCore(_pID, _affID, _team, _eventData_);
    }

    function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) public payable isActivated isHuman isWithinLimits(msg.value) {
        Datasets.EventData 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) public payable isActivated isHuman isWithinLimits(msg.value) {
        Datasets.EventData 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) public payable isActivated isHuman isWithinLimits(msg.value) {
        Datasets.EventData 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() public isActivated isHuman {
        uint256 _now = now;
        uint256 _eth;
        uint256 _pID = pIDxAddr_[msg.sender];
        uint256 _rID = rID_;

        if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) {
            Datasets.EventData 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 Events.onWithdrawAndDistribute(
                msg.sender,
                plyr_[_pID].name,
                _eth,
                _eventData_.compressedData,
                _eventData_.compressedIDs,
                _eventData_.winnerAddr,
                _eventData_.winnerName,
                _eventData_.amountWon,
                _eventData_.newPot,
                _eventData_.genAmount
            );
        } else {
            _eth = withdrawEarnings(_pID);
            if (_eth > 0) {
                plyr_[_pID].addr.transfer(_eth);
            }

            emit Events.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now);
        }
    }

    function registerNameXID(string _nameString, uint256 _affCode, bool _all) public payable isHuman {
        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 Events.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
    }

    function registerNameXaddr(string _nameString, address _affCode, bool _all) public payable isHuman {
        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 Events.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
    }

    function registerNameXname(string _nameString, bytes32 _affCode, bool _all) public payable isHuman {
        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 Events.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 (75000000000000);
        }
    }

    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])) / 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, Datasets.EventData 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 Events.onBuyAndDistribute(
                    msg.sender,
                    plyr_[_pID].name,
                    msg.value,
                    _eventData_.compressedData,
                    _eventData_.compressedIDs,
                    _eventData_.winnerAddr,
                    _eventData_.winnerName,
                    _eventData_.amountWon,
                    _eventData_.newPot,
                    _eventData_.genAmount
                );
            }

            plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value);
        }
    }

    function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, Datasets.EventData 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 Events.onReLoadAndDistribute(
                msg.sender,
                plyr_[_pID].name,
                _eventData_.compressedData,
                _eventData_.compressedIDs,
                _eventData_.winnerAddr,
                _eventData_.winnerName,
                _eventData_.amountWon,
                _eventData_.newPot,
                _eventData_.genAmount
            );
        }
    }

    function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, Datasets.EventData memory _eventData_) private {
        extSetting.setGap(_pID);

        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) {
            uint256 _keys = (round_[_rID].eth).keysRec(_eth);
            if (_keys >= 1000000000000000000) {
                updateTimer(_keys, _rID);

                if (round_[_rID].plyr != _pID) {
                    round_[_rID].plyr = _pID;
                }
                if (round_[_rID].team != _team) {
                    round_[_rID].team = _team;
                }

                _eventData_.compressedData = _eventData_.compressedData + 100;
            }

            if (_eth >= 100000000000000000) {
                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, _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));
    }

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

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

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

    function determinePID(Datasets.EventData memory _eventData_) private returns (Datasets.EventData) {
        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, Datasets.EventData memory _eventData_) private returns (Datasets.EventData) {
        if (plyr_[_pID].lrnd != 0) {
            updateGenVault(_pID, plyr_[_pID].lrnd);
        }
        plyr_[_pID].lrnd = rID_;

        _eventData_.compressedData = _eventData_.compressedData + 10;

        return(_eventData_);
    }

    function endRound(Datasets.EventData memory _eventData_) private returns (Datasets.EventData) {
        uint256 _rID = rID_;

        uint256 _winPID = round_[_rID].plyr;
        uint256 _winTID = round_[_rID].team;

        uint256 _pot = round_[_rID].pot;

        // 中奖者拿走 58%
        uint256 _win = (_pot.mul(58)) / 100;

        // 提取社区基金 2%
        uint256 _com = (_pot / 50);

        // 所在团队分红
        uint256 _gen = (_pot.mul(potSplit_[_winTID])) / 100;

        // 进入下一轮奖池
        uint256 _res = ((_pot.sub(_win)).sub(_com)).sub(_gen);

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

        foundation.deposit.value(_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_.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(
            (now).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, Datasets.EventData memory _eventData_) private returns(Datasets.EventData) {
        // 社区基金 4%
        uint256 _com = _eth / 25;
        foundation.deposit.value(_com)();

        // 推荐人 15%
        uint256 _aff = (_eth.mul(15)) / 100;
        if (_affID == _pID || plyr_[_affID].name == "") {
            _affID = 1;
        }
        plyr_[_affID].aff = _aff.add(plyr_[_affID].aff);

        emit Events.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now);

        return (_eventData_);
    }

    function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, Datasets.EventData memory _eventData_) private returns(Datasets.EventData) {
        // 团队分红
        uint256 _gen = (_eth.mul(fees_[_team])) / 100;

        // 空投奖池 1%
        uint256 _air = (_eth / 100);
        airDropPot_ = airDropPot_.add(_air);

        // 奖池
        uint256 _pot = _eth.sub((_eth / 5).add(_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, Datasets.EventData memory _eventData_) private {
        _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000);
        _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000);

        emit Events.onEndTx(
            _eventData_.compressedData,
            _eventData_.compressedIDs,
            plyr_[_pID].name,
            msg.sender,
            _eth,
            _keys,
            _eventData_.winnerAddr,
            _eventData_.winnerName,
            _eventData_.amountWon,
            _eventData_.newPot,
            _eventData_.genAmount,
            _eventData_.potAmount,
            airDropPot_
        );
    }

    function activate() public onlyOwner {
        require(activated_ == false, "fomo3d already activated");

        activated_ = true;

		rID_ = 1;
        round_[1].strt = now + rndExtra_ - rndGap_;
        round_[1].end = now + rndInit_ + rndExtra_;
    }
}

library Datasets {
    struct EventData {
        uint256 compressedData;
        uint256 compressedIDs;
        address winnerAddr;
        bytes32 winnerName;
        uint256 amountWon;
        uint256 newPot;
        uint256 genAmount;
        uint256 potAmount;
    }

    struct Player {
        address addr;
        bytes32 name;
        uint256 win;
        uint256 gen;
        uint256 aff;
        uint256 lrnd;
        uint256 laff;
    }

    struct PlayerRounds {
        uint256 eth;
        uint256 keys;
        uint256 mask;
        uint256 ico;
    }

    struct Round {
        uint256 plyr;
        uint256 team;
        uint256 end;
        bool ended;
        uint256 strt;
        uint256 keys;
        uint256 eth;
        uint256 pot;
        uint256 mask;
        uint256 ico;
        uint256 icoGen;
        uint256 icoAvg;
    }
}

library KeysCalcLong {
    using SafeMath for *;

    function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) {
        return(keys((_curEth).add(_newEth)).sub(keys(_curEth)));
    }

    function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) {
        return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys))));
    }

    function keys(uint256 _eth) internal pure returns(uint256) {
        return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000);
    }

    function eth(uint256 _keys) internal pure returns(uint256) {
        return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq());
    }
}

library NameFilter {
    function nameFilter(string _input) internal pure returns(bytes32) {
        bytes memory _temp = bytes(_input);
        uint256 _length = _temp.length;

        require (_length <= 32 && _length > 0, "string must be between 1 and 32 characters");
        require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, "string cannot start or end with space");
        if (_temp[0] == 0x30) {
            require(_temp[1] != 0x78, "string cannot start with 0x");
            require(_temp[1] != 0x58, "string cannot 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), "string contains invalid characters");

                if (_temp[i] == 0x20) {
                    require( _temp[i+1] != 0x20, "string cannot contain consecutive spaces");
                }

                if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) {
                    _hasNonNumber = true;
                }
            }
        }

        require(_hasNonNumber == true, "string cannot be only numbers");

        bytes32 _ret;
        assembly {
            _ret := mload(add(_temp, 32))
        }

        return (_ret);
    }
}

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, "SafeMath mul failed");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath sub failed");
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        require(c >= a, "SafeMath 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));
    }

    function pwr(uint256 x, uint256 y) internal pure returns (uint256) {
        if (x == 0) {
            return (0);
        } else if (y == 0) {
            return (1);
        } else {
            uint256 z = x;
            for (uint256 i = 1; i < y; i++) {
                z = mul(z, x);
            }
            return (z);
        }
    }
}

    Contract ABI  
[{"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":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"activate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_extSetting","type":"address"}],"name":"setExtSettingInterface","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":"","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":false,"inputs":[{"name":"_playerBook","type":"address"}],"name":"setPlayerBookInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"fees_","outputs":[{"name":"","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":true,"stateMutability":"payable","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":"_foundation","type":"address"}],"name":"setFoundationInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"_affCode","type":"address"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"uint256"},{"name":"_team","type":"uint256"}],"name":"buyXid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_pID","type":"uint256"},{"name":"_name","type":"bytes32"}],"name":"receivePlayerNameList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"uint256"},{"name":"_all","type":"bool"}],"name":"registerNameXID","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"address"},{"name":"_team","type":"uint256"}],"name":"buyXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":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":"","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":"_newOwner","type":"address"}],"name":"transferOwnership","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":"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":"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":"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":"genAmount","type":"uint256"}],"name":"onReLoadAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"affiliateID","type":"uint256"},{"indexed":false,"name":"affiliateAddress","type":"address"},{"indexed":false,"name":"affiliateName","type":"bytes32"},{"indexed":true,"name":"roundID","type":"uint256"},{"indexed":true,"name":"buyerID","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onAffiliatePayout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6080604081905260018054600160a060020a0319908116732cfaeef971d06b74ef2fc1cb0c568ab92000e95e179182905560028054821673c91ca445acdae9eebaf003a64088ca29a694c3ae17905560038054909116734f86182ff4704330b0f169ed897d608b367015b71790557f5c925b9d000000000000000000000000000000000000000000000000000000008252600160a060020a031690635c925b9d90608490602090600481600087803b158015620000bb57600080fd5b505af1158015620000d0573d6000803e3d6000fd5b505050506040513d6020811015620000e757600080fd5b50516004908155600154604080517ffae784f60000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169263fae784f69282820192602092908290030181600087803b1580156200014b57600080fd5b505af115801562000160573d6000803e3d6000fd5b505050506040513d60208110156200017757600080fd5b505160055560006007556009805460ff191690553480156200019857600080fd5b5060008054600160a060020a03191633178155601e7f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b781905560237f17bc176d2408558f6e4111feebc3cab4e16b63e967be91cde721f4c8a488b5525560327f08037d7b151cc412d25674a4e66b334d9ae9d2e5517a7feaae5cdb828bf1c62855602d7f9bfbaa59f8e10e7868f8b402de9d605a390c45ddaebd8c9de3c6f31e733c87ff5560126020527f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7b5560197f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a355600a7f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b25560039052600f7f0f36ad39aee03e7108cc48f54934702a5f0d4066f10344cebf8198978d86976a5561537a80620002e46000396000f3006080604052600436106101ed5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461038d57806306fdde03146103b4578063079ce3271461043e5780630f15f4c014610451578063107397441461046657806310f01eba1461048757806311a09ae7146104a857806324c33d33146104bd5780632660316e146105345780632a9b92a6146105635780632ce21999146105845780632e19ebdc1461059c578063349cdcac146105b45780633ccfd60b146105c55780633ddd4698146105da5780633f1092051461063657806349cc635d146106575780635893d48114610681578063624ae5c01461069c57806363066434146106b1578063685ffd83146106e7578063747dff421461073a57806382bfc739146107c55780638da5cb5b146107df5780638f38f309146108105780638f7140ea1461081e578063921dec211461083957806395d89b411461088c57806398a0871d146108a1578063a2bccae9146108b8578063a65b37a1146108f9578063c519500e14610907578063c7e284b81461091f578063ce89c80c14610934578063cf8080001461094f578063d53b267914610967578063d87574e01461097c578063de7874f314610991578063ee0b5d8b146109eb578063f2fde38b14610a44575b6101f561523c565b60095460009060ff161515600114610259576040805160e560020a62461bcd02815260206004820152602960248201526000805160206152ef833981519152604482015260008051602061528f833981519152606482015290519081900360840190fd5b33803b80156102a0576040805160e560020a62461bcd028152602060048201526011602482015260008051602061532f833981519152604482015290519081900360640190fd5b34633b9aca008110156102f8576040805160e560020a62461bcd02815260206004820152602160248201526000805160206152af833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115610348576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061530f833981519152604482015290519081900360640190fd5b61035185610a65565b336000908152600a6020908152604080832054808452600c909252909120600601549196509450610386908590600288610d05565b5050505050005b34801561039957600080fd5b506103a2610eeb565b60408051918252519081900360200190f35b3480156103c057600080fd5b506103c9610fb0565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104035781810151838201526020016103eb565b50505050905090810190601f1680156104305780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61044f600435602435604435610fe7565b005b34801561045d57600080fd5b5061044f6111f3565b34801561047257600080fd5b5061044f600160a060020a0360043516611315565b34801561049357600080fd5b506103a2600160a060020a0360043516611394565b3480156104b457600080fd5b506103a26113a6565b3480156104c957600080fd5b506104d56004356113ac565b604080519c8d5260208d019b909b528b8b019990995296151560608b015260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561054057600080fd5b5061054f60043560243561140f565b604080519115158252519081900360200190f35b34801561056f57600080fd5b5061044f600160a060020a036004351661142f565b34801561059057600080fd5b506103a26004356114ae565b3480156105a857600080fd5b506103a26004356114c0565b61044f6004356024356044356114d2565b3480156105d157600080fd5b5061044f6116b8565b6040805160206004803580820135601f810184900484028501840190955284845261044f94369492936024939284019190819084018382808284375094975050600160a060020a03853516955050505050602001351515611a2c565b34801561064257600080fd5b5061044f600160a060020a0360043516611bd9565b34801561066357600080fd5b5061044f600435600160a060020a0360243516604435606435611c58565b34801561068d57600080fd5b506103a2600435602435611e40565b3480156106a857600080fd5b506103a2611e5d565b3480156106bd57600080fd5b506106c9600435611e63565b60408051938452602084019290925282820152519081900360600190f35b6040805160206004803580820135601f810184900484028501840190955284845261044f943694929360249392840191908190840183828082843750949750508435955050505050602001351515612009565b34801561074657600080fd5b5061074f6120e3565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b61044f600160a060020a03600435166024356044356122e1565b3480156107eb57600080fd5b506107f46124dd565b60408051600160a060020a039092168252519081900360200190f35b61044f6004356024356124ec565b34801561082a57600080fd5b5061044f6004356024356126d3565b6040805160206004803580820135601f810184900484028501840190955284845261044f9436949293602493928401919081908401838280828437509497505084359550505050506020013515156127a7565b34801561089857600080fd5b506103c9612881565b61044f600160a060020a03600435166024356128b8565b3480156108c457600080fd5b506108d3600435602435612acf565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61044f600435602435612b01565b34801561091357600080fd5b506103a2600435612cfe565b34801561092b57600080fd5b506103a2612d10565b34801561094057600080fd5b506103a2600435602435612d9f565b34801561095b57600080fd5b506103a2600435612e47565b34801561097357600080fd5b5061054f612ef9565b34801561098857600080fd5b506103a2612f02565b34801561099d57600080fd5b506109a9600435612f08565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b3480156109f757600080fd5b50610a0c600160a060020a0360043516612f4f565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b348015610a5057600080fd5b5061044f600160a060020a0360043516613024565b610a6d61523c565b336000908152600a60205260408120549080821515610cfc57600354604080517fe56556a90000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163e56556a9916024808201926020929091908290030181600087803b158015610aec57600080fd5b505af1158015610b00573d6000803e3d6000fd5b505050506040513d6020811015610b1657600080fd5b5051600354604080517f82e37b2c000000000000000000000000000000000000000000000000000000008152600481018490529051929550600160a060020a03909116916382e37b2c916024808201926020929091908290030181600087803b158015610b8257600080fd5b505af1158015610b96573d6000803e3d6000fd5b505050506040513d6020811015610bac57600080fd5b5051600354604080517fe3c08adf000000000000000000000000000000000000000000000000000000008152600481018790529051929450600160a060020a039091169163e3c08adf916024808201926020929091908290030181600087803b158015610c1857600080fd5b505af1158015610c2c573d6000803e3d6000fd5b505050506040513d6020811015610c4257600080fd5b5051336000818152600a60209081526040808320889055878352600c9091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115610ccb576000828152600b60209081526040808320869055858352600c82528083206001908101869055600e8352818420868552909252909120805460ff191690911790555b8015801590610cda5750828114155b15610cf4576000838152600c602052604090206006018190555b845160010185525b50929392505050565b6008546005546000828152600f602052604090206004015442910181118015610d7057506000828152600f602052604090206002015481111580610d7057506000828152600f602052604090206002015481118015610d7057506000828152600f6020526040902054155b15610d8857610d8382873488888861312f565b610ee3565b6000828152600f602052604090206002015481118015610dba57506000828152600f602052604090206003015460ff16155b15610eae576000828152600f60205260409020600301805460ff19166001179055610de4836136fd565b8051670de0b6b3a7640000830201815260208082018051890181526000898152600c83526040908190206001015484519251828601516060808801516080808a015160a0808c015160c0808e01518b513381529d8e019a909a52348d8c0152958c019a909a52918a0195909552600160a060020a039093169288019290925286015260e0850152610100840192909252610120830191909152519194507f5905265be09e3f6f7813c1dce4febfad76d4b3a46288aa344d2531532c3519c991908190036101400190a15b6000868152600c6020526040902060030154610ed0903463ffffffff613aa016565b6000878152600c60205260409020600301555b505050505050565b6008546005546000828152600f602052604081206004015490929142910181118015610f5957506000828152600f602052604090206002015481111580610f5957506000828152600f602052604090206002015481118015610f5957506000828152600f6020526040902054155b15610fa1576000828152600f6020526040902060050154610f9a90670de0b6b3a764000090610f8e908263ffffffff613aa016565b9063ffffffff613b0116565b9250610fab565b6544364c5bb00092505b505090565b60408051808201909152601681527f466f4d6f3344204173696120284f6666696369616c2900000000000000000000602082015281565b610fef61523c565b600954600090819060ff161515600114611055576040805160e560020a62461bcd02815260206004820152602960248201526000805160206152ef833981519152604482015260008051602061528f833981519152606482015290519081900360840190fd5b33803b801561109c576040805160e560020a62461bcd028152602060048201526011602482015260008051602061532f833981519152604482015290519081900360640190fd5b34633b9aca008110156110f4576040805160e560020a62461bcd02815260206004820152602160248201526000805160206152af833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115611144576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061530f833981519152604482015290519081900360640190fd5b336000908152600a6020526040902054945088158061117357506000858152600c602052604090206001015489145b15611191576000858152600c602052604090206006015493506111d0565b6000898152600b6020908152604080832054888452600c9092529091206006015490945084146111d0576000858152600c602052604090206006018490555b6111d988613b2e565b97506111e885858a8a8a613b53565b505050505050505050565b600054600160a060020a03163314611243576040805160e560020a62461bcd02815260206004820152601260248201526000805160206152cf833981519152604482015290519081900360640190fd5b60095460ff161561129e576040805160e560020a62461bcd02815260206004820152601860248201527f666f6d6f336420616c7265616479206163746976617465640000000000000000604482015290519081900360640190fd5b6009805460ff191660019081179091556008819055600554600454600092909252600f602052429091019081037f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f89355610e10017f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f89155565b600054600160a060020a03163314611365576040805160e560020a62461bcd02815260206004820152601260248201526000805160206152cf833981519152604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600a6020526000908152604090205481565b60075481565b600f60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b909b0154999a9899979860ff909716979596949593949293919290918c565b600e60209081526000928352604080842090915290825290205460ff1681565b600054600160a060020a0316331461147f576040805160e560020a62461bcd02815260206004820152601260248201526000805160206152cf833981519152604482015290519081900360640190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60116020526000908152604090205481565b600b6020526000908152604090205481565b6114da61523c565b60095460009060ff16151560011461153e576040805160e560020a62461bcd02815260206004820152602960248201526000805160206152ef833981519152604482015260008051602061528f833981519152606482015290519081900360840190fd5b33803b8015611585576040805160e560020a62461bcd028152602060048201526011602482015260008051602061532f833981519152604482015290519081900360640190fd5b34633b9aca008110156115dd576040805160e560020a62461bcd02815260206004820152602160248201526000805160206152af833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561162d576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061530f833981519152604482015290519081900360640190fd5b336000908152600a6020526040902054935087158061164b57508388145b15611669576000848152600c60205260409020600601549750611696565b6000848152600c60205260409020600601548814611696576000848152600c602052604090206006018890555b61169f87613b2e565b96506116ae8489898989613b53565b5050505050505050565b6000806000806116c661523c565b60095460ff161515600114611727576040805160e560020a62461bcd02815260206004820152602960248201526000805160206152ef833981519152604482015260008051602061528f833981519152606482015290519081900360840190fd5b33803b801561176e576040805160e560020a62461bcd028152602060048201526011602482015260008051602061532f833981519152604482015290519081900360640190fd5b336000908152600a6020908152604080832054600854808552600f9093529220600201544299509196509450871180156117ba57506000848152600f602052604090206003015460ff16155b80156117d357506000848152600f602052604090205415155b1561196d576000848152600f60205260409020600301805460ff191660011790556117fd836136fd565b925061180885613d20565b95506000861115611859576000858152600c6020526040808220549051600160a060020a039091169188156108fc02918991818181858888f19350505050158015611857573d6000803e3d6000fd5b505b86670de0b6b3a764000002836000015101836000018181525050848360200151018360200181815250507f9e9c9331834267c84342f2dce38f9ba35eb0bfbcc207c64872e1e74f9706f2a333600c6000888152602001908152602001600020600101548886600001518760200151886040015189606001518a608001518b60a001518c60c00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187815260200186600160a060020a0316600160a060020a0316815260200185600019166000191681526020018481526020018381526020018281526020019a505050505050505050505060405180910390a1611a23565b61197685613d20565b955060008611156119c7576000858152600c6020526040808220549051600160a060020a039091169188156108fc02918991818181858888f193505050501580156119c5573d6000803e3d6000fd5b505b6000858152600c60209081526040918290206001015482513381529182015280820188905260608101899052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050565b6000808080808033803b8015611a7a576040805160e560020a62461bcd028152602060048201526011602482015260008051602061532f833981519152604482015290519081900360640190fd5b611a838b613da7565b600354604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201859052600160a060020a038f811660448401528e151560648401528351959d50909b50349a509092169263aa4d490b928a92608480830193919282900301818588803b158015611b0857600080fd5b505af1158015611b1c573d6000803e3d6000fd5b50505050506040513d6040811015611b3357600080fd5b508051602091820151600160a060020a03808b166000818152600a8652604080822054858352600c8852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b600054600160a060020a03163314611c29576040805160e560020a62461bcd02815260206004820152601260248201526000805160206152cf833981519152604482015290519081900360640190fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354600160a060020a03163314611ce0576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600a60205260409020548414611d1b57600160a060020a0383166000908152600a602052604090208490555b6000828152600b60205260409020548414611d42576000828152600b602052604090208490555b6000848152600c6020526040902054600160a060020a03848116911614611d98576000848152600c60205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b6000848152600c60205260409020600101548214611dc5576000848152600c602052604090206001018290555b6000848152600c60205260409020600601548114611df2576000848152600c602052604090206006018190555b6000848152600e6020908152604080832085845290915290205460ff161515611e3a576000848152600e602090815260408083208584529091529020805460ff191660011790555b50505050565b601060209081526000928352604080842090915290825290205481565b60085481565b6008546000818152600f60205260408120600201549091829182919042118015611e9f57506000818152600f602052604090206003015460ff16155b8015611eb857506000818152600f602052604090205415155b15611fd9576000818152600f6020526040902054851415611f9d576000818152600f6020526040902060070154611f2690606490611efd90603063ffffffff6145ba16565b811515611f0657fe5b6000888152600c602052604090206002015491900463ffffffff613aa016565b6000868152600d60209081526040808320858452909152902060020154611f7f90611f6190611f558986614631565b9063ffffffff6146ff16565b6000888152600c60205260409020600301549063ffffffff613aa016565b6000878152600c602052604090206004015491955093509150612001565b6000858152600c60209081526040808320600290810154600d8452828520868652909352922090910154611f7f90611f6190611f558986614631565b6000858152600c602052604090206002810154600590910154611f7f90611f6190889061475f565b509193909250565b6000808080808033803b8015612057576040805160e560020a62461bcd028152602060048201526011602482015260008051602061532f833981519152604482015290519081900360640190fd5b6120608b613da7565b600354604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201859052604482018f90528d151560648301528251949c509a50349950600160a060020a039092169263745ea0c1928a92608480830193919282900301818588803b158015611b0857600080fd5b60008060008060008060008060008060008060008060006008549050600f60008281526020019081526020016000206009015481600f600084815260200190815260200160002060050154600f600085815260200190815260200160002060020154600f600086815260200190815260200160002060040154600f600087815260200190815260200160002060070154600f600088815260200190815260200160002060000154600a02600f60008981526020019081526020016000206001015401600c6000600f60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a0316600c6000600f60008c815260200190815260200160002060000154815260200190815260200160002060010154601060008b8152602001908152602001600020600080815260200190815260200160002054601060008c815260200190815260200160002060006001815260200190815260200160002054601060008d815260200190815260200160002060006002815260200190815260200160002054601060008e8152602001908152602001600020600060038152602001908152602001600020546006546103e802600754019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b6122e961523c565b600954600090819060ff16151560011461234f576040805160e560020a62461bcd02815260206004820152602960248201526000805160206152ef833981519152604482015260008051602061528f833981519152606482015290519081900360840190fd5b33803b8015612396576040805160e560020a62461bcd028152602060048201526011602482015260008051602061532f833981519152604482015290519081900360640190fd5b34633b9aca008110156123ee576040805160e560020a62461bcd02815260206004820152602160248201526000805160206152af833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561243e576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061530f833981519152604482015290519081900360640190fd5b336000908152600a60205260409020549450600160a060020a038916158061246e5750600160a060020a03891633145b1561248c576000858152600c602052604090206006015493506111d0565b600160a060020a0389166000908152600a6020908152604080832054888452600c9092529091206006015490945084146111d0576000858152600c602052604090206006018490556111d988613b2e565b600054600160a060020a031681565b6124f461523c565b60095460009060ff161515600114612558576040805160e560020a62461bcd02815260206004820152602960248201526000805160206152ef833981519152604482015260008051602061528f833981519152606482015290519081900360840190fd5b33803b801561259f576040805160e560020a62461bcd028152602060048201526011602482015260008051602061532f833981519152604482015290519081900360640190fd5b34633b9aca008110156125f7576040805160e560020a62461bcd02815260206004820152602160248201526000805160206152af833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612647576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061530f833981519152604482015290519081900360640190fd5b61265085610a65565b336000908152600a6020526040902054909550935086158061267157508387145b1561268f576000848152600c602052604090206006015496506126bc565b6000848152600c602052604090206006015487146126bc576000848152600c602052604090206006018790555b6126c586613b2e565b9550611a2384888888610d05565b600354600160a060020a0316331461275b576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000828152600e6020908152604080832084845290915290205460ff1615156127a3576000828152600e602090815260408083208484529091529020805460ff191660011790555b5050565b6000808080808033803b80156127f5576040805160e560020a62461bcd028152602060048201526011602482015260008051602061532f833981519152604482015290519081900360640190fd5b6127fe8b613da7565b600354604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201859052604482018f90528d151560648301528251949c509a50349950600160a060020a039092169263c0942dfd928a92608480830193919282900301818588803b158015611b0857600080fd5b60408051808201909152600481527f4633444100000000000000000000000000000000000000000000000000000000602082015281565b6128c061523c565b600954600090819060ff161515600114612926576040805160e560020a62461bcd02815260206004820152602960248201526000805160206152ef833981519152604482015260008051602061528f833981519152606482015290519081900360840190fd5b33803b801561296d576040805160e560020a62461bcd028152602060048201526011602482015260008051602061532f833981519152604482015290519081900360640190fd5b34633b9aca008110156129c5576040805160e560020a62461bcd02815260206004820152602160248201526000805160206152af833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612a15576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061530f833981519152604482015290519081900360640190fd5b612a1e86610a65565b336000908152600a60205260409020549096509450600160a060020a0388161580612a515750600160a060020a03881633145b15612a6f576000858152600c60205260409020600601549350612ab8565b600160a060020a0388166000908152600a6020908152604080832054888452600c909252909120600601549094508414612ab8576000858152600c602052604090206006018490555b612ac187613b2e565b96506116ae85858989610d05565b600d60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b612b0961523c565b600954600090819060ff161515600114612b6f576040805160e560020a62461bcd02815260206004820152602960248201526000805160206152ef833981519152604482015260008051602061528f833981519152606482015290519081900360840190fd5b33803b8015612bb6576040805160e560020a62461bcd028152602060048201526011602482015260008051602061532f833981519152604482015290519081900360640190fd5b34633b9aca00811015612c0e576040805160e560020a62461bcd02815260206004820152602160248201526000805160206152af833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612c5e576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061530f833981519152604482015290519081900360640190fd5b612c6786610a65565b336000908152600a60205260409020549096509450871580612c9957506000858152600c602052604090206001015488145b15612cb7576000858152600c60205260409020600601549350612ab8565b6000888152600b6020908152604080832054888452600c909252909120600601549094508414612ab8576000858152600c60205260409020600601849055612ac187613b2e565b60126020526000908152604090205481565b6008546000818152600f60205260408120600201549091904290811015612d96576005546000838152600f602052604090206004015401811115612d70576000828152600f6020526040902060020154610f9a908263ffffffff6146ff16565b6005546000838152600f6020526040902060040154610f9a91018263ffffffff6146ff16565b60009250610fab565b6005546000838152600f6020526040812060040154909142910181118015612e0957506000848152600f602052604090206002015481111580612e0957506000848152600f602052604090206002015481118015612e0957506000848152600f6020526040902054155b15612e37576000848152600f6020526040902060060154612e30908463ffffffff6147bc16565b9150612e40565b612e30836147dd565b5092915050565b6008546005546000828152600f602052604081206004015490929142910181118015612eb557506000828152600f602052604090206002015481111580612eb557506000828152600f602052604090206002015481118015612eb557506000828152600f6020526040902054155b15612ee9576000828152600f6020526040902060050154612ee2908590610f8e908263ffffffff613aa016565b9250612ef2565b612ee284614855565b5050919050565b60095460ff1681565b60065481565b600c602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b6000806000806000806000806000600854915050600160a060020a0389166000908152600a6020908152604080832054808452600c808452828520600180820154600d8752858820898952875294872001549583905293526002830154600590930154909384939091612fe590612fc790869061475f565b6000878152600c60205260409020600301549063ffffffff613aa016565b6000958652600c6020908152604080882060040154600d83528189209989529890915290952054939e929d50909b509950919750919550909350915050565b600054600160a060020a03163314613074576040805160e560020a62461bcd02815260206004820152601260248201526000805160206152cf833981519152604482015290519081900360640190fd5b600160a060020a03811615156130d4576040805160e560020a62461bcd02815260206004820152601060248201527f496e76616c696420616464726573732e00000000000000000000000000000000604482015290519081900360640190fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600154604080517fa9178ebd000000000000000000000000000000000000000000000000000000008152600481018890529051600092839283928392600160a060020a03169163a9178ebd916024808301928692919082900301818387803b15801561319a57600080fd5b505af11580156131ae573d6000803e3d6000fd5b50505060008a8152600d602090815260408083208e8452909152902060010154151590506131e3576131e089866148c2565b94505b60008a8152600f602052604090206006015468056bc75e2d6310000011801561323d57506000898152600d602090815260408083208d8452909152902054670de0b6b3a76400009061323b908a63ffffffff613aa016565b115b156132c4576000898152600d602090815260408083208d845290915290205461327590670de0b6b3a76400009063ffffffff6146ff16565b9350613287888563ffffffff6146ff16565b60008a8152600c60205260409020600301549093506132ac908463ffffffff613aa016565b60008a8152600c602052604090206003015592965086925b633b9aca008811156136f15760008a8152600f60205260409020600601546132f2908963ffffffff6147bc16565b9150670de0b6b3a764000082106133695761330d828b614922565b60008a8152600f602052604090205489146133345760008a8152600f602052604090208990555b60008a8152600f602052604090206001015486146133615760008a8152600f602052604090206001018690555b845160640185525b67016345785d8a000088106135a957600780546001019055613389614a00565b1515600114156135a957678ac7230489e80000881061342a576006546064906133b990604b63ffffffff6145ba16565b8115156133c257fe5b60008b8152600c602052604090206002015491900491506133e9908263ffffffff613aa016565b60008a8152600c602052604090206002015560065461340e908263ffffffff6146ff16565b60065584516d0eca8847c4129106ce830000000001855261357e565b670de0b6b3a764000088101580156134495750678ac7230489e8000088105b156134d65760065460649061346590603263ffffffff6145ba16565b81151561346e57fe5b60008b8152600c60205260409020600201549190049150613495908263ffffffff613aa016565b60008a8152600c60205260409020600201556006546134ba908263ffffffff6146ff16565b60065584516d09dc5ada82b70b59df020000000001855261357e565b67016345785d8a000088101580156134f55750670de0b6b3a764000088105b1561357e5760065460649061351190601963ffffffff6145ba16565b81151561351a57fe5b60008b8152600c60205260409020600201549190049150613541908263ffffffff613aa016565b60008a8152600c6020526040902060020155600654613566908263ffffffff6146ff16565b60065584516d0eca8847c4129106ce83000000000185525b84516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b268000000001855260006007555b60075485516103e89091020185526000898152600d602090815260408083208d84529091529020600101546135e590839063ffffffff613aa016565b60008a8152600d602090815260408083208e84529091529020600181019190915554613612908990613aa0565b60008a8152600d602090815260408083208e8452825280832093909355600f9052206005015461364990839063ffffffff613aa016565b60008b8152600f6020526040902060058101919091556006015461367490899063ffffffff613aa016565b60008b8152600f602090815260408083206006019390935560108152828220898352905220546136ab90899063ffffffff613aa016565b60008b81526010602090815260408083208a84529091529020556136d28a8a8a8a89614c17565b94506136e28a8a8a89868a614d8a565b94506136f189878a8589614e94565b50505050505050505050565b61370561523c565b6008546000818152600f602052604081208054600182015460079092015490928080808080606461373d88603a63ffffffff6145ba16565b81151561374657fe5b04955060328760008a815260126020526040902054919004955060649061377490899063ffffffff6145ba16565b81151561377d57fe5b04935061379684611f5587818b8b63ffffffff6146ff16565b60008b8152600f60205260409020600501549093506137c385670de0b6b3a764000063ffffffff6145ba16565b8115156137cc57fe5b60008c8152600f6020526040902060050154919004925061381a90670de0b6b3a76400009061380290859063ffffffff6145ba16565b81151561380b57fe5b8691900463ffffffff6146ff16565b9050600081111561384a57613835848263ffffffff6146ff16565b9350613847838263ffffffff613aa016565b92505b6000898152600c602052604090206002015461386d90879063ffffffff613aa016565b60008a8152600c6020526040808220600290810193909355915482517fd0e30db00000000000000000000000000000000000000000000000000000000081529251600160a060020a039091169263d0e30db092899260048084019382900301818588803b1580156138dd57600080fd5b505af11580156138f1573d6000803e3d6000fd5b50505060008c8152600f6020526040902060080154613919925084915063ffffffff613aa016565b600f60008c815260200190815260200160002060080181905550600f60008b815260200190815260200160002060020154620f4240028c60000151018c60000181815250508767016345785d8a000002896a52b7d2dcc80cd2e4000000028d6020015101018c6020018181525050600c60008a815260200190815260200160002060000160009054906101000a9004600160a060020a03168c60400190600160a060020a03169081600160a060020a031681525050600c60008a8152602001908152602001600020600101548c606001906000191690816000191681525050858c6080018181525050838c60c0018181525050828c60a001818152505060086000815480929190600101919050555089806001019a505042600f60008c815260200190815260200160002060040181905550613a72600554613a66610e1042613aa090919063ffffffff16565b9063ffffffff613aa016565b60008b8152600f6020526040902060028101919091556007018390558b9a5050505050505050505050919050565b81810182811015613afb576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b6000613b27613b1e613b19858563ffffffff6146ff16565b614855565b611f5585614855565b9392505050565b600080821080613b3e5750600382115b15613b4b57506002613b4e565b50805b919050565b6008546005546000828152600f602052604090206004015442910181118015613bbe57506000828152600f602052604090206002015481111580613bbe57506000828152600f602052604090206002015481118015613bbe57506000828152600f6020526040902054155b15613bf557613bd084611f5589613d20565b6000888152600c6020526040902060030155613bf082888689898861312f565b611a23565b6000828152600f602052604090206002015481118015613c2757506000828152600f602052604090206003015460ff16155b15611a23576000828152600f60205260409020600301805460ff19166001179055613c51836136fd565b8051670de0b6b3a76400008302018152602080820180518a01815260008a8152600c83526040908190206001015484519251828601516060808801516080808a015160a0808c015160c0808e01518b513381529d8e019a909a528c8b019b909b52948b0196909652600160a060020a0390941690890152928701929092529385019390935260e0840192909252610100830191909152519194507f603a740c9291cc914e0c8d16b355cdb091aefd5d9bbdf4f95371ce756f5e8a4091908190036101200190a150505050505050565b6000818152600c60205260408120600501548190613d3f908490614ff5565b6000838152600c6020526040902060048101546003820154600290920154613d7192613a66919063ffffffff613aa016565b90506000811115613d9d576000838152600c602052604081206002810182905560038101829055600401555b8091505b50919050565b8051600090829082808060208411801590613dc25750600084115b1515613e3e576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613e4d57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214158015613eb457508460018503815181101515613e8c57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515613f30576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613f3f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a02141561408257846001815181101515613f7957fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515613ff6576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b84600181518110151561400557fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515614082576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b838210156145525784517f4000000000000000000000000000000000000000000000000000000000000000908690849081106140bf57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614133575084517f5b000000000000000000000000000000000000000000000000000000000000009086908490811061411457fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b156141a057848281518110151561414657fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a02858381518110151561417757fe5b906020010190600160f860020a031916908160001a90535082151561419b57600192505b614547565b84828151811015156141ae57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02148061427e575084517f60000000000000000000000000000000000000000000000000000000000000009086908490811061420a57fe5b90602001015160f860020a900460f860020a02600160f860020a03191611801561427e575084517f7b000000000000000000000000000000000000000000000000000000000000009086908490811061425f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80614328575084517f2f00000000000000000000000000000000000000000000000000000000000000908690849081106142b457fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614328575084517f3a000000000000000000000000000000000000000000000000000000000000009086908490811061430957fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b15156143a4576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b84828151811015156143b257fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214156144915784826001018151811015156143ee57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214151515614491576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8215801561453d575084517f3000000000000000000000000000000000000000000000000000000000000000908690849081106144ca57fe5b90602001015160f860020a900460f860020a02600160f860020a031916108061453d575084517f39000000000000000000000000000000000000000000000000000000000000009086908490811061451e57fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b1561454757600192505b600190910190614087565b6001831515146145ac576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b60008215156145cb57506000613afb565b508181028183828115156145db57fe5b0414613afb576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b6000828152600d602090815260408083208484528252808320600190810154600f808552838620600581015493810154875260128652938620548787529452600790920154670de0b6b3a7640000936146ee93926146e29290916146b99187916064916146a39163ffffffff6145ba16565b8115156146ac57fe5b049063ffffffff6145ba16565b8115156146c257fe5b6000888152600f602052604090206008015491900463ffffffff613aa016565b9063ffffffff6145ba16565b8115156146f757fe5b049392505050565b600082821115614759576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b6000828152600d6020908152604080832084845282528083206002810154600190910154600f90935290832060080154613b2792670de0b6b3a7640000916147a6916145ba565b8115156147af57fe5b049063ffffffff6146ff16565b6000613b276147ca846147dd565b611f556147dd868663ffffffff613aa016565b60006309502f906148456d03b2a1d15167e7c5699bfde00000611f556148407a0dac7055469777a6122ee4310dd6c14410500f2904840000000000613a666b01027e72f1f12813088000006146e28a670de0b6b3a764000063ffffffff6145ba16565b61508c565b81151561484e57fe5b0492915050565b6000614868670de0b6b3a76400006150df565b614845600261489b61488886670de0b6b3a764000063ffffffff6145ba16565b65886c8f6730709063ffffffff6145ba16565b8115156148a457fe5b04613a666148b1866150df565b6304a817c89063ffffffff6145ba16565b6148ca61523c565b6000838152600c6020526040902060050154156148fe576000838152600c60205260409020600501546148fe908490614ff5565b506008546000838152600c60205260409020600501558051600a0181528092915050565b6000818152600f60205260408120600201544291908211801561495157506000838152600f6020526040902054155b156149755761496e82613a66601e670de0b6b3a7640000886146ac565b90506149a2565b6000838152600f602052604090206002015461499f90613a66601e670de0b6b3a7640000886146ac565b90505b6149b5620151808363ffffffff613aa016565b8110156149d5576000838152600f60205260409020600201819055611e3a565b6149e8620151808363ffffffff613aa016565b6000848152600f602052604090206002015550505050565b600080614b7143613a6642336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614a7b5780518252601f199092019160209182019101614a5c565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614ab157fe5b04613a6645613a6642416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614b2a5780518252601f199092019160209182019101614b0b565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614b6057fe5b04613a66424463ffffffff613aa016565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310614bbf5780518252601f199092019160209182019101614ba0565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060075490945092506103e89150839050046103e80282031015614c0e5760019150614c13565b600091505b5090565b614c1f61523c565b600254604080517fd0e30db000000000000000000000000000000000000000000000000000000000815290516019870492600092600160a060020a039091169163d0e30db09185916004808301928792919082900301818588803b158015614c8657600080fd5b505af1158015614c9a573d6000803e3d6000fd5b50505050506064614cb5600f886145ba90919063ffffffff16565b811515614cbe57fe5b04905086851480614cde57506000858152600c6020526040902060010154155b15614ce857600194505b6000858152600c6020526040902060040154614d0b90829063ffffffff613aa016565b6000868152600c6020908152604091829020600481019390935582546001909301548251600160a060020a039094168452908301528181018390524260608301525188918a9188917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a450919695505050505050565b614d9261523c565b600084815260116020526040812054819081908190606490614dbb908b9063ffffffff6145ba16565b811515614dc457fe5b049350606489049250614de283600654613aa090919063ffffffff16565b600655614e02614df560058b0486613aa0565b8a9063ffffffff6146ff16565b9150614e108b8b868a6150eb565b90506000811115614e2e57614e2b848263ffffffff6146ff16565b93505b60008b8152600f6020526040902060070154614e5490613a66848463ffffffff613aa016565b60008c8152600f602052604090206007015560c0860151614e7c90859063ffffffff613aa016565b60c08701525060e08501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600854751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f3671a735b2c7f1e43f1ab4385d4c5b480bbff437ad893b703fb0dfdbd24679e281600001518260200151600c6000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e00151600654604051808e81526020018d81526020018c600019166000191681526020018b600160a060020a0316600160a060020a031681526020018a815260200189815260200188600160a060020a0316600160a060020a0316815260200187600019166000191681526020018681526020018581526020018481526020018381526020018281526020019d505050505050505050505050505060405180910390a15050505050565b6000615001838361475f565b90506000811115615087576000838152600c602052604090206003015461502f90829063ffffffff613aa016565b6000848152600c6020908152604080832060030193909355600d81528282208583529052206002015461506990829063ffffffff613aa016565b6000848152600d602090815260408083208684529091529020600201555b505050565b600080600261509c846001613aa0565b8115156150a557fe5b0490508291505b81811015613da15780915060026150ce82858115156150c757fe5b0483613aa0565b8115156150d757fe5b0490506150ac565b6000613afb82836145ba565b6000848152600f60205260408120600501548190819061511986670de0b6b3a764000063ffffffff6145ba16565b81151561512257fe5b6000898152600f6020526040902060080154919004925061514a90839063ffffffff613aa016565b6000888152600f6020526040902060080155670de0b6b3a7640000615175838663ffffffff6145ba16565b81151561517e57fe5b6000888152600d602090815260408083208c8452825280832060020154600f909252909120600801549290910492506151d191613a66908490670de0b6b3a7640000906147a6908a63ffffffff6145ba16565b6000878152600d602090815260408083208b8452825280832060020193909355600f9052206005015461523190670de0b6b3a76400009061521990859063ffffffff6145ba16565b81151561522257fe5b8791900463ffffffff6146ff16565b979650505050505050565b6101006040519081016040528060008152602001600081526020016000600160a060020a031681526020016000801916815260200160008152602001600081526020016000815260200160008152509056006e20646973636f72640000000000000000000000000000000000000000000000706f636b6574206c696e743a206e6f7420612076616c69642063757272656e63596f7520617265206e6f74206f776e65722e0000000000000000000000000000697473206e6f74207265616479207965742e2020636865636b203f65746120696e6f20766974616c696b2c206e6f000000000000000000000000000000000000736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a72305820e12bd77d91108b086df0703db6ea24f156acdfe3126bb0ff45f37292e564d6c10029

   Swarm Source:
bzzr://e12bd77d91108b086df0703db6ea24f156acdfe3126bb0ff45f37292e564d6c1

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.