ETH Price: $2,418.23 (+7.56%)

Transaction Decoder

Block:
10185391 at Jun-02-2020 08:49:12 AM +UTC
Transaction Fee:
0.008344992 ETH $20.18
Gas Used:
260,781 Gas / 32 Gwei

Emitted Events:

78 XoXo.RegisterUserEvent( _userid=14333, _user=[Sender] 0x621df50e3a341230eb053062da9c04fe03f1a6da, _referrerAddress=0x4622a7ac99546c421884cffb4d15d3604ec0bb82, _autopool=1, _amount=100000000000000000, _time=1591087752 )
79 XoXo.DistributeUplineEvent( amount=50000000000000000, _sponsorAddress=0x4622a7ac99546c421884cffb4d15d3604ec0bb82, _fromAddress=[Sender] 0x621df50e3a341230eb053062da9c04fe03f1a6da, _level=1, _fromPool=1, _time=1591087752 )
80 XoXo.DistributeUplineEvent( amount=25000000000000000, _sponsorAddress=0xd1fb750479806d61739ebd1235801ee05f5b2d62, _fromAddress=[Sender] 0x621df50e3a341230eb053062da9c04fe03f1a6da, _level=2, _fromPool=1, _time=1591087752 )
81 XoXo.DistributeUplineEvent( amount=15000000000000000, _sponsorAddress=0xf4fb71706bbe18cdc48cd3e061780ea4709dc4a5, _fromAddress=[Sender] 0x621df50e3a341230eb053062da9c04fe03f1a6da, _level=3, _fromPool=1, _time=1591087752 )
82 XoXo.DistributeUplineEvent( amount=10000000000000000, _sponsorAddress=0xd1a36503d555395a21361bff24789420e39af43d, _fromAddress=[Sender] 0x621df50e3a341230eb053062da9c04fe03f1a6da, _level=4, _fromPool=1, _time=1591087752 )

Account State Difference:

  Address   Before After State Difference Code
0x3b22779a...70b279889
0x4622A7Ac...04EC0bB82 0.082486548 Eth0.132486548 Eth0.05
0x621df50e...E03F1a6da
0.165 Eth
Nonce: 0
0.056655008 Eth
Nonce: 1
0.108344992
(F2Pool Old)
2,457.025478593589960787 Eth2,457.033823585589960787 Eth0.008344992
0xD1A36503...0E39AF43d 0 Eth0.01 Eth0.01
0xD1Fb7504...05F5b2D62 0.278895423 Eth0.303895423 Eth0.025
0xF4fb7170...4709dC4a5 0.210078391 Eth0.225078391 Eth0.015

Execution Trace

ETH 0.1 XoXo.participatePool1( _referrerId=10039 )
  • ETH 0.05 0x4622a7ac99546c421884cffb4d15d3604ec0bb82.CALL( )
  • ETH 0.025 0xd1fb750479806d61739ebd1235801ee05f5b2d62.CALL( )
  • ETH 0.015 0xf4fb71706bbe18cdc48cd3e061780ea4709dc4a5.CALL( )
  • ETH 0.01 0xd1a36503d555395a21361bff24789420e39af43d.CALL( )
    participatePool1[XoXo (ln:240)]
    /**
    * ==========================================================
    *
    * XoXo Network
    * FIRST EVER FULLY DECENTRALIZED GLOBAL POWERLINE AUTOPOOL
    *
    * Website  : https://xoxonetwork.io
    * Telegram : https://t.me/xoxonetwork_official
    *
    * ==========================================================
    **/
    
    pragma solidity >=0.5.12 <0.7.0;
    
    contract XoXo {
    
        struct User {
            uint id;
            uint referrerCount;
            uint referrerId;
            uint earnedFromPool;
            uint earnedFromRef;
            uint earnedFromGlobal;
            address[] referrals;
        }
        
        struct UsersPool {
            uint id;
            uint referrerId;
            uint reinvestCount;
        }
        
        struct PoolSlots {
            uint id;
            address userAddress;
            uint referrerId;
            uint8 eventsCount;
        }
            
        modifier validReferrerId(uint _referrerId) {
            require((_referrerId > 0) && (_referrerId < newUserId), "Invalid referrer ID");
            _;
        }
        
        event RegisterUserEvent(uint _userid, address indexed _user, address indexed _referrerAddress, uint8 indexed _autopool, uint _amount, uint _time);
        event ReinvestEvent(uint _userid, address indexed _user, address indexed _referrerAddress, uint8 indexed _autopool, uint _amount, uint _time);
        event DistributeUplineEvent(uint amount, address indexed _sponsorAddress, address indexed _fromAddress, uint _level, uint8 _fromPool, uint _time);
        event ReferralPaymentEvent(uint amount, address indexed _from, address indexed _to, uint8 indexed _fromPool, uint _time);
    
        mapping(address => User) public users;
        mapping(address => UsersPool) public users_2;
        mapping(uint => PoolSlots) public pool_slots_2;
        mapping(address => UsersPool) public users_3;
        mapping(uint => PoolSlots) public pool_slots_3;
        mapping(address => UsersPool) public users_4;
        mapping(uint => PoolSlots) public pool_slots_4;
        mapping(address => UsersPool) public users_5;
        mapping(uint => PoolSlots) public pool_slots_5;
        mapping(address => UsersPool) public users_6;
        mapping(uint => PoolSlots) public pool_slots_6;
        mapping(address => UsersPool) public users_7;
        mapping(uint => PoolSlots) public pool_slots_7;
    
        mapping(uint => address) public idToAddress;
        mapping (uint8 => uint8) public uplineAmount;
        
        uint public newUserId = 1;
        uint public newUserId_ap2 = 1;
        uint public newUserId_ap3 = 1;
        uint public newUserId_ap4 = 1;
        uint public newUserId_ap5 = 1;
        uint public newUserId_ap6 = 1;
        uint public newUserId_ap7 = 1;
    
        uint public newSlotId_ap2 = 1;
        uint public activeSlot_ap2 = 1;
        uint public newSlotId_ap3 = 1;
        uint public activeSlot_ap3 = 1;
        uint public newSlotId_ap4 = 1;
        uint public activeSlot_ap4 = 1;
        uint public newSlotId_ap5 = 1;
        uint public activeSlot_ap5 = 1;
        uint public newSlotId_ap6 = 1;
        uint public activeSlot_ap6 = 1;
        uint public newSlotId_ap7 = 1;
        uint public activeSlot_ap7 = 1;
        
        address public owner;
        
        constructor(address _ownerAddress) public {
            
            uplineAmount[1] = 50;
            uplineAmount[2] = 25;
            uplineAmount[3] = 15;
            uplineAmount[4] = 10;
            
            owner = _ownerAddress;
            
            User memory user = User({
                id: newUserId,
                referrerCount: uint(0),
                referrerId: uint(0),
                earnedFromPool: uint(0),
                earnedFromRef: uint(0),
                earnedFromGlobal: uint(0),
                referrals: new address[](0)
            });
            
            users[_ownerAddress] = user;
            idToAddress[newUserId] = _ownerAddress;
            newUserId++;
            
            //////
            
            UsersPool memory user2 = UsersPool({
                id: newSlotId_ap2,
                referrerId: uint(0),
                reinvestCount: uint(0)
            });
            
            users_2[_ownerAddress] = user2;
            
            PoolSlots memory _newSlot2 = PoolSlots({
                id: newSlotId_ap2,
                userAddress: _ownerAddress,
                referrerId: uint(0),
                eventsCount: uint8(0)
            });
            
            pool_slots_2[newSlotId_ap2] = _newSlot2;
            newUserId_ap2++;
            newSlotId_ap2++;
            
            ///////
            
            UsersPool memory user3 = UsersPool({
                id: newSlotId_ap3,
                referrerId: uint(0),
                reinvestCount: uint(0)
            });
            
            users_3[_ownerAddress] = user3;
            
            PoolSlots memory _newSlot3 = PoolSlots({
                id: newSlotId_ap3,
                userAddress: _ownerAddress,
                referrerId: uint(0),
                eventsCount: uint8(0)
            });
            
            pool_slots_3[newSlotId_ap3] = _newSlot3;
            newUserId_ap3++;
            newSlotId_ap3++;
            
            ///////
            
            UsersPool memory user4 = UsersPool({
                id: newSlotId_ap4,
                referrerId: uint(0),
                reinvestCount: uint(0)
            });
            
            users_4[_ownerAddress] = user4;
            
            PoolSlots memory _newSlot4 = PoolSlots({
                id: newSlotId_ap4,
                userAddress: _ownerAddress,
                referrerId: uint(0),
                eventsCount: uint8(0)
            });
            
            pool_slots_4[newSlotId_ap4] = _newSlot4;
            newUserId_ap4++;
            newSlotId_ap4++;
            
            ///////
            
            UsersPool memory user5 = UsersPool({
                id: newSlotId_ap5,
                referrerId: uint(0),
                reinvestCount: uint(0)
            });
            
            users_5[_ownerAddress] = user5;
            
            PoolSlots memory _newSlot5 = PoolSlots({
                id: newSlotId_ap5,
                userAddress: _ownerAddress,
                referrerId: uint(0),
                eventsCount: uint8(0)
            });
            
            pool_slots_5[newSlotId_ap5] = _newSlot5;
            newUserId_ap5++;
            newSlotId_ap5++;
            
            ///////
            
            UsersPool memory user6 = UsersPool({
                id: newSlotId_ap6,
                referrerId: uint(0),
                reinvestCount: uint(0)
            });
            
            users_6[_ownerAddress] = user6;
            
            PoolSlots memory _newSlot6 = PoolSlots({
                id: newSlotId_ap6,
                userAddress: _ownerAddress,
                referrerId: uint(0),
                eventsCount: uint8(0)
            });
            
            pool_slots_6[newSlotId_ap6] = _newSlot6;
            newUserId_ap6++;
            newSlotId_ap6++;
            
            ///////
            
            UsersPool memory user7 = UsersPool({
                id: newSlotId_ap7,
                referrerId: uint(0),
                reinvestCount: uint(0)
            });
            
            users_7[_ownerAddress] = user7;
            
            PoolSlots memory _newSlot7 = PoolSlots({
                id: newSlotId_ap7,
                userAddress: _ownerAddress,
                referrerId: uint(0),
                eventsCount: uint8(0)
            });
            
            pool_slots_7[newSlotId_ap7] = _newSlot7;
            newUserId_ap7++;
            newSlotId_ap7++;
        }
        
        function participatePool1(uint _referrerId) 
          public 
          payable 
          validReferrerId(_referrerId) 
        {
            
            require(msg.value == 0.1 ether, "Participation fee is 0.1 ETH");
            require(!isUserExists(msg.sender, 1), "User already registered");
    
            address _userAddress = msg.sender;
            address _referrerAddress = idToAddress[_referrerId];
            
            uint32 size;
            assembly {
                size := extcodesize(_userAddress)
            }
            require(size == 0, "cannot be a contract");
            
            users[_userAddress] = User({
                id: newUserId,
                referrerCount: uint(0),
                referrerId: _referrerId,
                earnedFromPool: uint(0),
                earnedFromRef: uint(0),
                earnedFromGlobal: uint(0),
                referrals: new address[](0)
            });
            idToAddress[newUserId] = _userAddress;
    
            emit RegisterUserEvent(newUserId, msg.sender, _referrerAddress, 1, msg.value, now);
            
            newUserId++;
            
            users[_referrerAddress].referrals.push(_userAddress);
            users[_referrerAddress].referrerCount++;
            
            uint amountToDistribute = msg.value;
            address sponsorAddress = idToAddress[_referrerId];        
            
            for (uint8 i = 1; i <= 4; i++) {
                
                if ( isUserExists(sponsorAddress, 1) ) {
                    uint paid = payUpline(sponsorAddress, i, 1);
                    amountToDistribute -= paid;
                    users[sponsorAddress].earnedFromPool += paid;
                    address _nextSponsorAddress = idToAddress[users[sponsorAddress].referrerId];
                    sponsorAddress = _nextSponsorAddress;
                }
                
            }
            
            if (amountToDistribute > 0) {
                payFirstLine(idToAddress[1], amountToDistribute, 1);
                users[idToAddress[1]].earnedFromPool += amountToDistribute;
            }
            
        }
        
        function participatePool2() 
          public 
          payable 
        {
            require(msg.value == 0.2 ether, "Participation fee in Autopool is 0.2 ETH");
            require(isUserExists(msg.sender, 1), "User not present in AP1");
            require(isUserQualified(msg.sender), "User not qualified in AP1");
            require(!isUserExists(msg.sender, 2), "User already registered in AP2");
    
            uint eventCount = pool_slots_2[activeSlot_ap2].eventsCount;
            uint newEventCount = eventCount + 1;
    
            if (newEventCount == 3) {
                require(reinvestSlot(
                    pool_slots_2[activeSlot_ap2].userAddress, 
                    pool_slots_2[activeSlot_ap2].id, 
                    idToAddress[users[pool_slots_2[activeSlot_ap2].userAddress].referrerId], 
                    2
                ));
                pool_slots_2[activeSlot_ap2].eventsCount++;
            }
            
            uint _referrerId = users[msg.sender].referrerId;
    
            UsersPool memory user2 = UsersPool({
                id: newSlotId_ap2,
                referrerId: _referrerId,
                reinvestCount: uint(0)
            });
            users_2[msg.sender] = user2;
            
            PoolSlots memory _newSlot = PoolSlots({
                id: newSlotId_ap2,
                userAddress: msg.sender,
                referrerId: _referrerId,
                eventsCount: uint8(0)
            });
            
            pool_slots_2[newSlotId_ap2] = _newSlot;
            newUserId_ap2++;
            emit RegisterUserEvent(newSlotId_ap2, msg.sender, idToAddress[_referrerId], 2, msg.value, now);
            
            if (_referrerId > 0) {
                payUpline(idToAddress[_referrerId], 1, 2);
                users[idToAddress[_referrerId]].earnedFromRef += msg.value/2;
            }
            else{
                payUpline(idToAddress[1], 1, 2);
                users[idToAddress[1]].earnedFromRef += msg.value/2;
            }
    
            newSlotId_ap2++;
    
            if (eventCount < 2) {
                
                if(eventCount == 0) {
                    payUpline(pool_slots_2[activeSlot_ap2].userAddress, 1, 2);
                    users[pool_slots_2[activeSlot_ap2].userAddress].earnedFromGlobal += msg.value/2;
                }
                if(eventCount == 1) {
                    if (pool_slots_2[activeSlot_ap2].referrerId > 0) {
                        payUpline(idToAddress[pool_slots_2[activeSlot_ap2].referrerId], 1, 2);
                        users[idToAddress[pool_slots_2[activeSlot_ap2].referrerId]].earnedFromRef += msg.value/2;
                    }
                    else {
                        payUpline(idToAddress[1], 1, 2);
                        users[idToAddress[1]].earnedFromRef += msg.value/2;
                    }
                }
    
                pool_slots_2[activeSlot_ap2].eventsCount++;
                
            }
            
        }
    
        function participatePool3() 
          public 
          payable 
        {
            require(msg.value == 0.3 ether, "Participation fee in Autopool is 0.3 ETH");
            require(isUserExists(msg.sender, 1), "User not present in AP1");
            require(isUserQualified(msg.sender), "User not qualified in AP1");
            require(!isUserExists(msg.sender, 3), "User already registered in AP3");
    
            uint eventCount = pool_slots_3[activeSlot_ap3].eventsCount;
            uint newEventCount = eventCount + 1;
    
            if (newEventCount == 3) {
                require(reinvestSlot(
                    pool_slots_3[activeSlot_ap3].userAddress, 
                    pool_slots_3[activeSlot_ap3].id, 
                    idToAddress[users[pool_slots_3[activeSlot_ap3].userAddress].referrerId], 
                    3
                ));
                pool_slots_3[activeSlot_ap3].eventsCount++;
            }
            
            uint _referrerId = users[msg.sender].referrerId;
    
            UsersPool memory user3 = UsersPool({
                id: newSlotId_ap3,
                referrerId: _referrerId,
                reinvestCount: uint(0)
            });
            users_3[msg.sender] = user3;
            
            PoolSlots memory _newSlot = PoolSlots({
                id: newSlotId_ap3,
                userAddress: msg.sender,
                referrerId: _referrerId,
                eventsCount: uint8(0)
            });
            
            pool_slots_3[newSlotId_ap3] = _newSlot;
            newUserId_ap3++;
            emit RegisterUserEvent(newSlotId_ap3, msg.sender, idToAddress[_referrerId], 3, msg.value, now);
            
            if (_referrerId > 0) {
                payUpline(idToAddress[_referrerId], 1, 3);
                users[idToAddress[_referrerId]].earnedFromRef += msg.value/2;
            }
            else{
                payUpline(idToAddress[1], 1, 3);
                users[idToAddress[1]].earnedFromRef += msg.value/2;
            }
    
            newSlotId_ap3++;
    
            if (eventCount < 2) {
                
                if(eventCount == 0) {
                    payUpline(pool_slots_3[activeSlot_ap3].userAddress, 1, 3);
                    users[pool_slots_3[activeSlot_ap3].userAddress].earnedFromGlobal += msg.value/2;
                }
                if(eventCount == 1) {
                    if (pool_slots_3[activeSlot_ap3].referrerId > 0) {
                        payUpline(idToAddress[pool_slots_3[activeSlot_ap3].referrerId], 1, 3);
                        users[idToAddress[pool_slots_3[activeSlot_ap3].referrerId]].earnedFromRef += msg.value/2;
                    }
                    else {
                        payUpline(idToAddress[1], 1, 3);
                        users[idToAddress[1]].earnedFromRef += msg.value/2;
                    }
                }
    
                pool_slots_3[activeSlot_ap3].eventsCount++;
                
            }
            
        }
    
        function participatePool4() 
          public 
          payable 
        {
            require(msg.value == 0.4 ether, "Participation fee in Autopool is 0.4 ETH");
            require(isUserExists(msg.sender, 1), "User not present in AP1");
            require(isUserQualified(msg.sender), "User not qualified in AP1");
            require(!isUserExists(msg.sender, 4), "User already registered in AP4");
    
            uint eventCount = pool_slots_4[activeSlot_ap4].eventsCount;
            uint newEventCount = eventCount + 1;
    
            if (newEventCount == 3) {
                require(reinvestSlot(
                    pool_slots_4[activeSlot_ap4].userAddress, 
                    pool_slots_4[activeSlot_ap4].id, 
                    idToAddress[users[pool_slots_4[activeSlot_ap4].userAddress].referrerId], 
                    4
                ));
                pool_slots_4[activeSlot_ap4].eventsCount++;
            }
            
            uint _referrerId = users[msg.sender].referrerId;
    
            UsersPool memory user4 = UsersPool({
                id: newSlotId_ap4,
                referrerId: _referrerId,
                reinvestCount: uint(0)
            });
            users_4[msg.sender] = user4;
            
            PoolSlots memory _newSlot = PoolSlots({
                id: newSlotId_ap4,
                userAddress: msg.sender,
                referrerId: _referrerId,
                eventsCount: uint8(0)
            });
            
            pool_slots_4[newSlotId_ap4] = _newSlot;
            newUserId_ap4++;
            emit RegisterUserEvent(newSlotId_ap4, msg.sender, idToAddress[_referrerId], 4, msg.value, now);
            
            if (_referrerId > 0) {
                payUpline(idToAddress[_referrerId], 1, 4);
                users[idToAddress[_referrerId]].earnedFromRef += msg.value/2;
            }
            else{
                payUpline(idToAddress[1], 1, 4);
                users[idToAddress[1]].earnedFromRef += msg.value/2;
            }
    
            newSlotId_ap4++;
    
            if (eventCount < 2) {
                
                if(eventCount == 0) {
                    payUpline(pool_slots_4[activeSlot_ap4].userAddress, 1, 4);
                    users[pool_slots_4[activeSlot_ap4].userAddress].earnedFromGlobal += msg.value/2;
                }
                if(eventCount == 1) {
                    if (pool_slots_4[activeSlot_ap4].referrerId > 0) {
                        payUpline(idToAddress[pool_slots_4[activeSlot_ap4].referrerId], 1, 4);
                        users[idToAddress[pool_slots_4[activeSlot_ap4].referrerId]].earnedFromRef += msg.value/2;
                    }
                    else {
                        payUpline(idToAddress[1], 1, 4);
                        users[idToAddress[1]].earnedFromRef += msg.value/2;
                    }
                }
    
                pool_slots_4[activeSlot_ap4].eventsCount++;
                
            }
            
        }
    
        function participatePool5() 
          public 
          payable 
        {
            require(msg.value == 0.5 ether, "Participation fee in Autopool is 0.5 ETH");
            require(isUserExists(msg.sender, 1), "User not present in AP1");
            require(isUserQualified(msg.sender), "User not qualified in AP1");
            require(!isUserExists(msg.sender, 5), "User already registered in AP5");
    
            uint eventCount = pool_slots_5[activeSlot_ap5].eventsCount;
            uint newEventCount = eventCount + 1;
    
            if (newEventCount == 3) {
                require(reinvestSlot(
                    pool_slots_5[activeSlot_ap5].userAddress, 
                    pool_slots_5[activeSlot_ap5].id, 
                    idToAddress[users[pool_slots_5[activeSlot_ap5].userAddress].referrerId], 
                    5
                ));
                pool_slots_5[activeSlot_ap5].eventsCount++;
            }
            
            uint _referrerId = users[msg.sender].referrerId;
    
            UsersPool memory user5 = UsersPool({
                id: newSlotId_ap5,
                referrerId: _referrerId,
                reinvestCount: uint(0)
            });
            users_5[msg.sender] = user5;
            
            PoolSlots memory _newSlot = PoolSlots({
                id: newSlotId_ap5,
                userAddress: msg.sender,
                referrerId: _referrerId,
                eventsCount: uint8(0)
            });
            
            pool_slots_5[newSlotId_ap5] = _newSlot;
            newUserId_ap5++;
            emit RegisterUserEvent(newSlotId_ap5, msg.sender, idToAddress[_referrerId], 5, msg.value, now);
            
            if (_referrerId > 0) {
                payUpline(idToAddress[_referrerId], 1, 5);
                users[idToAddress[_referrerId]].earnedFromRef += msg.value/2;
            }
            else{
                payUpline(idToAddress[1], 1, 5);
                users[idToAddress[1]].earnedFromRef += msg.value/2;
            }
    
            newSlotId_ap5++;
    
            if (eventCount < 2) {
                
                if(eventCount == 0) {
                    payUpline(pool_slots_5[activeSlot_ap5].userAddress, 1, 5);
                    users[pool_slots_5[activeSlot_ap5].userAddress].earnedFromGlobal += msg.value/2;
                }
                if(eventCount == 1) {
                    if (pool_slots_5[activeSlot_ap5].referrerId > 0) {
                        payUpline(idToAddress[pool_slots_5[activeSlot_ap5].referrerId], 1, 5);
                        users[idToAddress[pool_slots_5[activeSlot_ap5].referrerId]].earnedFromRef += msg.value/2;
                    }
                    else {
                        payUpline(idToAddress[1], 1, 5);
                        users[idToAddress[1]].earnedFromRef += msg.value/2;
                    }
                }
    
                pool_slots_5[activeSlot_ap5].eventsCount++;
                
            }
            
        }
    
        function participatePool6() 
          public 
          payable 
        {
            require(msg.value == 0.7 ether, "Participation fee in Autopool is 0.7 ETH");
            require(isUserExists(msg.sender, 1), "User not present in AP1");
            require(isUserQualified(msg.sender), "User not qualified in AP1");
            require(!isUserExists(msg.sender, 6), "User already registered in AP6");
    
            uint eventCount = pool_slots_6[activeSlot_ap6].eventsCount;
            uint newEventCount = eventCount + 1;
    
            if (newEventCount == 3) {
                require(reinvestSlot(
                    pool_slots_6[activeSlot_ap6].userAddress, 
                    pool_slots_6[activeSlot_ap6].id, 
                    idToAddress[users[pool_slots_6[activeSlot_ap6].userAddress].referrerId], 
                    6
                ));
                pool_slots_6[activeSlot_ap6].eventsCount++;
            }
            
            uint _referrerId = users[msg.sender].referrerId;
    
            UsersPool memory user6 = UsersPool({
                id: newSlotId_ap6,
                referrerId: _referrerId,
                reinvestCount: uint(0)
            });
            users_6[msg.sender] = user6;
            
            PoolSlots memory _newSlot = PoolSlots({
                id: newSlotId_ap6,
                userAddress: msg.sender,
                referrerId: _referrerId,
                eventsCount: uint8(0)
            });
            
            pool_slots_6[newSlotId_ap6] = _newSlot;
            newUserId_ap6++;
            emit RegisterUserEvent(newSlotId_ap6, msg.sender, idToAddress[_referrerId], 6, msg.value, now);
            
            if (_referrerId > 0) {
                payUpline(idToAddress[_referrerId], 1, 6);
                users[idToAddress[_referrerId]].earnedFromRef += msg.value/2;
            }
            else{
                payUpline(idToAddress[1], 1, 6);
                users[idToAddress[1]].earnedFromRef += msg.value/2;
            }
    
            newSlotId_ap6++;
    
            if (eventCount < 2) {
                
                if(eventCount == 0) {
                    payUpline(pool_slots_6[activeSlot_ap6].userAddress, 1, 6);
                    users[pool_slots_6[activeSlot_ap6].userAddress].earnedFromGlobal += msg.value/2;
                }
                if(eventCount == 1) {
                    if (pool_slots_6[activeSlot_ap6].referrerId > 0) {
                        payUpline(idToAddress[pool_slots_6[activeSlot_ap6].referrerId], 1, 6);
                        users[idToAddress[pool_slots_6[activeSlot_ap6].referrerId]].earnedFromRef += msg.value/2;
                    }
                    else {
                        payUpline(idToAddress[1], 1, 6);
                        users[idToAddress[1]].earnedFromRef += msg.value/2;
                    }
                }
    
                pool_slots_6[activeSlot_ap6].eventsCount++;
                
            }
            
        }
    
        function participatePool7() 
          public 
          payable 
        {
            require(msg.value == 1 ether, "Participation fee in Autopool is 1 ETH");
            require(isUserExists(msg.sender, 1), "User not present in AP1");
            require(isUserQualified(msg.sender), "User not qualified in AP1");
            require(!isUserExists(msg.sender, 7), "User already registered in AP7");
    
            uint eventCount = pool_slots_7[activeSlot_ap7].eventsCount;
            uint newEventCount = eventCount + 1;
    
            if (newEventCount == 3) {
                require(reinvestSlot(
                    pool_slots_7[activeSlot_ap7].userAddress, 
                    pool_slots_7[activeSlot_ap7].id, 
                    idToAddress[users[pool_slots_7[activeSlot_ap7].userAddress].referrerId], 
                    7
                ));
                pool_slots_7[activeSlot_ap7].eventsCount++;
            }
            
            uint _referrerId = users[msg.sender].referrerId;
    
            UsersPool memory user7 = UsersPool({
                id: newSlotId_ap7,
                referrerId: _referrerId,
                reinvestCount: uint(0)
            });
            users_7[msg.sender] = user7;
            
            PoolSlots memory _newSlot = PoolSlots({
                id: newSlotId_ap7,
                userAddress: msg.sender,
                referrerId: _referrerId,
                eventsCount: uint8(0)
            });
            
            pool_slots_7[newSlotId_ap7] = _newSlot;
            newUserId_ap7++;
            emit RegisterUserEvent(newSlotId_ap7, msg.sender, idToAddress[_referrerId], 7, msg.value, now);
    
            if (_referrerId > 0) {
                payUpline(idToAddress[_referrerId], 1, 7);
                users[idToAddress[_referrerId]].earnedFromRef += msg.value/2;
            }
            else{
                payUpline(idToAddress[1], 1, 7);
                users[idToAddress[1]].earnedFromRef += msg.value/2;
            }
            
            newSlotId_ap7++;
    
            if (eventCount < 2) {
                
                if(eventCount == 0) {
                    payUpline(pool_slots_7[activeSlot_ap7].userAddress, 1, 7);
                    users[pool_slots_7[activeSlot_ap7].userAddress].earnedFromGlobal += msg.value/2;
                }
                if(eventCount == 1) {
                    if (pool_slots_7[activeSlot_ap7].referrerId > 0) {
                        payUpline(idToAddress[pool_slots_7[activeSlot_ap7].referrerId], 1, 7);
                        users[idToAddress[pool_slots_7[activeSlot_ap7].referrerId]].earnedFromRef += msg.value/2;
                    }
                    else {
                        payUpline(idToAddress[1], 1, 7);
                        users[idToAddress[1]].earnedFromRef += msg.value/2;
                    }
                }
    
                pool_slots_7[activeSlot_ap7].eventsCount++;
                
            }
            
        }
    
        function reinvestSlot(address _userAddress, uint _userId, address _sponsorAddress, uint8 _fromPool) private returns (bool _isReinvested) {
    
            uint _referrerId = users[_userAddress].referrerId;
    
            PoolSlots memory _reinvestslot = PoolSlots({
                id: _userId,
                userAddress: _userAddress,
                referrerId: _referrerId,
                eventsCount: uint8(0)
            });
            
            if (_fromPool == 2) {
                users_2[pool_slots_2[activeSlot_ap2].userAddress].reinvestCount++;        
                pool_slots_2[newSlotId_ap2] = _reinvestslot;
                emit ReinvestEvent(newSlotId_ap2, _userAddress, _sponsorAddress, 2, msg.value, now);
                newSlotId_ap2++;
            }
            if (_fromPool == 3) {
                users_3[pool_slots_3[activeSlot_ap3].userAddress].reinvestCount++;        
                pool_slots_3[newSlotId_ap3] = _reinvestslot;
                emit ReinvestEvent(newSlotId_ap3, _userAddress, _sponsorAddress, 3, msg.value, now);
                newSlotId_ap3++;
            }
            if (_fromPool == 4) {
                users_4[pool_slots_4[activeSlot_ap4].userAddress].reinvestCount++;        
                pool_slots_4[newSlotId_ap4] = _reinvestslot;
                emit ReinvestEvent(newSlotId_ap4, _userAddress, _sponsorAddress, 4, msg.value, now);
                newSlotId_ap4++;
            }
            if (_fromPool == 5) {
                users_5[pool_slots_5[activeSlot_ap5].userAddress].reinvestCount++;        
                pool_slots_5[newSlotId_ap5] = _reinvestslot;
                emit ReinvestEvent(newSlotId_ap5, _userAddress, _sponsorAddress, 5, msg.value, now);
                newSlotId_ap5++;
            }
            if (_fromPool == 6) {
                users_6[pool_slots_6[activeSlot_ap6].userAddress].reinvestCount++;        
                pool_slots_6[newSlotId_ap6] = _reinvestslot;
                emit ReinvestEvent(newSlotId_ap6, _userAddress, _sponsorAddress, 6, msg.value, now);
                newSlotId_ap6++;
            }
            if (_fromPool == 7) {
                users_7[pool_slots_7[activeSlot_ap7].userAddress].reinvestCount++;        
                pool_slots_7[newSlotId_ap7] = _reinvestslot;
                emit ReinvestEvent(newSlotId_ap7, _userAddress, _sponsorAddress, 7, msg.value, now);
                newSlotId_ap7++;
            }
            
            if (_fromPool == 2) {
                pool_slots_2[activeSlot_ap2].eventsCount = 3;
                uint _nextActiveSlot = activeSlot_ap2+1;
    
                payUpline(pool_slots_2[_nextActiveSlot].userAddress, 1, 2);
                users[pool_slots_2[_nextActiveSlot].userAddress].earnedFromGlobal += msg.value/2;
                activeSlot_ap2++;
            }
            if (_fromPool == 3) {
                pool_slots_3[activeSlot_ap3].eventsCount = 3;
                uint _nextActiveSlot = activeSlot_ap3+1;
    
                payUpline(pool_slots_3[_nextActiveSlot].userAddress, 1, 3);
                users[pool_slots_3[_nextActiveSlot].userAddress].earnedFromGlobal += msg.value/2;
                activeSlot_ap3++;
            }
            if (_fromPool == 4) {
                pool_slots_4[activeSlot_ap4].eventsCount = 3;
                uint _nextActiveSlot = activeSlot_ap4+1;
    
                payUpline(pool_slots_4[_nextActiveSlot].userAddress, 1, 4);
                users[pool_slots_4[_nextActiveSlot].userAddress].earnedFromGlobal += msg.value/2;
                activeSlot_ap4++;
            }
            if (_fromPool == 5) {
                pool_slots_5[activeSlot_ap5].eventsCount = 3;
                uint _nextActiveSlot = activeSlot_ap5+1;
    
                payUpline(pool_slots_5[_nextActiveSlot].userAddress, 1, 5);
                users[pool_slots_5[_nextActiveSlot].userAddress].earnedFromGlobal += msg.value/2;
                activeSlot_ap5++;
            }
            if (_fromPool == 6) {
                pool_slots_6[activeSlot_ap6].eventsCount = 3;
                uint _nextActiveSlot = activeSlot_ap6+1;
    
                payUpline(pool_slots_6[_nextActiveSlot].userAddress, 1, 6);
                users[pool_slots_6[_nextActiveSlot].userAddress].earnedFromGlobal += msg.value/2;
                activeSlot_ap6++;
            }
            if (_fromPool == 7) {
                pool_slots_7[activeSlot_ap7].eventsCount = 3;
                uint _nextActiveSlot = activeSlot_ap7+1;
    
                payUpline(pool_slots_7[_nextActiveSlot].userAddress, 1, 7);
                users[pool_slots_7[_nextActiveSlot].userAddress].earnedFromGlobal += msg.value/2;
                activeSlot_ap7++;
            }
    
            _isReinvested = true;
    
            return _isReinvested;
    
        }
        
        function payUpline(address _sponsorAddress, uint8 _refLevel, uint8 _fromPool) private returns (uint distributeAmount) {        
            require( _refLevel <= 4);
            distributeAmount = msg.value / 100 * uplineAmount[_refLevel];
            if (address(uint160(_sponsorAddress)).send(distributeAmount)) {
                if (_fromPool > 1) {
                    emit ReferralPaymentEvent(distributeAmount, msg.sender, _sponsorAddress, _fromPool, now);
                } else
                    emit DistributeUplineEvent(distributeAmount, _sponsorAddress, msg.sender, _refLevel, _fromPool, now);
            }        
            return distributeAmount;
        }
        
        function payFirstLine(address _sponsorAddress, uint payAmount, uint8 _fromPool) private returns (uint distributeAmount) {        
            distributeAmount = payAmount;
            if (address(uint160(_sponsorAddress)).send(distributeAmount)) {
                if (_fromPool > 1) {
                    emit ReferralPaymentEvent(distributeAmount, msg.sender, _sponsorAddress, _fromPool, now);
                } else emit DistributeUplineEvent(distributeAmount, _sponsorAddress, msg.sender, 1, _fromPool, now);
            }        
            return distributeAmount;        
        }
        
        function isUserQualified(address _userAddress) public view returns (bool) {
            return (users[_userAddress].referrerCount > 0);
        }
        
        function isUserExists(address _userAddress, uint8 _autopool) public view returns (bool) {
            require((_autopool > 0) && (_autopool <= 7));
            if (_autopool == 1) return (users[_userAddress].id != 0);
            if (_autopool == 2) return (users_2[_userAddress].id != 0);
            if (_autopool == 3) return (users_3[_userAddress].id != 0);
            if (_autopool == 4) return (users_4[_userAddress].id != 0);
            if (_autopool == 5) return (users_5[_userAddress].id != 0);
            if (_autopool == 6) return (users_6[_userAddress].id != 0);
            if (_autopool == 7) return (users_7[_userAddress].id != 0);
        }
        
        function getUserReferrals(address _userAddress)
            public
            view
            returns (address[] memory)
          {
            return users[_userAddress].referrals;
          }
        
    }