Contract 0x6a63F74cC9f8544920805ecCBEE2AFF0e05d2E42

 
Ad
Ad
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb61af08894d19e96d48d5fa95b57bbe050623370f21ae5a6e5874fde9505a9d4New Mecenas Pool215370112021-11-19 2:16:3912 days 30 mins ago0xaef68c6b81fd82e6d8292524d0723f9dae201b36 IN  0x6a63f74cc9f8544920805eccbee2aff0e05d2e420 MATIC0.020094265
0xe623284db287c9f2042dc2e917b4837e902db659de27f9a1176b7fb1fb59e7650x60a06040215285742021-11-18 20:59:1012 days 5 hrs ago0xaef68c6b81fd82e6d8292524d0723f9dae201b36 IN  Contract Creation0 MATIC0.15474099
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xb61af08894d19e96d48d5fa95b57bbe050623370f21ae5a6e5874fde9505a9d4215370112021-11-19 2:16:3912 days 30 mins ago 0x6a63f74cc9f8544920805eccbee2aff0e05d2e42  Contract Creation0 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MecenasFactoryV3Aave

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 3: MecenasFactoryV3Aave.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./MecenasV3Aave.sol";


contract MecenasFactoryV3Aave {

    address public constant EMPTY_ADDRESS_FACTORY = address(0);
    LendingAddressProvider public immutable addressproviderfactory;
    
    struct Pool {
        MecenasV3Aave newpool;
        address newmarket;
        address newunderlying;
        string newnametoken;
    }
    
    mapping(address => Pool[]) public OwnerPools;
    mapping(MecenasV3Aave => uint) public MapPools;
    Pool[] public FactoryPools;

    uint public counterpools;

    address public factoryowner;
    address public factorydeveloper;
    address public factoryseeker;

    bool public lockfactory;

 
    event ChildCreated(address childAddress, address indexed yield, address indexed underlying, address indexed owner, uint _mindeposit, uint _agedeposit, uint _agelottery);
    event ChangeFactoryDeveloper(address indexed olddeveloper, address indexed newdeveloper);
    event ChangeFactorySeeker(address indexed oldseeker, address indexed newseeker);
    event ChangeFactoryOwner(address indexed oldowner, address indexed newowner);
    event ChangeFactoryLock(bool oldlock, bool newlock);


    constructor(address _developer, address _seeker) {
        factoryowner = msg.sender;
        factorydeveloper = _developer;
        factoryseeker = _seeker;
        addressproviderfactory = LendingAddressProvider(0xd05e3E715d945B59290df0ae8eF85c1BdB684744);
    }    

    
    // this function changes the factory developer address

    function changedeveloper(address _newdeveloper) public {
        require(_newdeveloper != EMPTY_ADDRESS_FACTORY && msg.sender == factoryowner);
        address olddeveloper = factorydeveloper;
        factorydeveloper = _newdeveloper;
    
        emit ChangeFactoryDeveloper(olddeveloper, factorydeveloper);
    }


    // this function changes the factory seeker address

    function changeseeker(address _newseeker) public {
        require(_newseeker != EMPTY_ADDRESS_FACTORY && msg.sender == factoryowner);
        address oldseeker = factoryseeker;
        factoryseeker = _newseeker;
    
        emit ChangeFactorySeeker(oldseeker, factoryseeker);
    }


    // this function changes the factory owner address

    function changeowner(address _newowner) public {
        require(_newowner != EMPTY_ADDRESS_FACTORY && msg.sender == factoryowner);
        address oldowner = factoryowner;
        factoryowner = _newowner;
    
        emit ChangeFactoryOwner(oldowner, factoryowner);
    }


    // this function locks and unlocks de factory 
    // false = unlock
    // true = lock
    

    function changelockfactory(bool _newlock) public {
        require(_newlock == true || _newlock == false);
        require(msg.sender == factoryowner);
        bool oldlock = lockfactory;
        lockfactory = _newlock;
    
        emit ChangeFactoryLock(oldlock, lockfactory);
    }


    // this function creates a new Mecenas pool

    function newMecenasPool(address _underlying, uint mindeposit, uint agedeposit, uint agelottery) external {
        require(lockfactory == false);
        require(msg.sender != EMPTY_ADDRESS_FACTORY && _underlying != EMPTY_ADDRESS_FACTORY);
        require(mindeposit > 0 && agedeposit > 0 && agelottery > 0 );
        
        counterpools++;
    
        MecenasV3Aave newpool = new MecenasV3Aave(msg.sender, _underlying, factorydeveloper, factoryseeker, mindeposit, agedeposit, agelottery);
    
        address marketaavefactory = addressproviderfactory.getLendingPool();          
        ERC20 underlyingfactory = ERC20(_underlying); 
        string memory nametokenfactory = underlyingfactory.symbol();
        
        OwnerPools[msg.sender].push(Pool(MecenasV3Aave(newpool), marketaavefactory, _underlying, nametokenfactory));
        MapPools[newpool] = 1;
        FactoryPools.push(Pool(MecenasV3Aave(newpool), marketaavefactory, _underlying, nametokenfactory));
        
        emit ChildCreated(address(newpool), marketaavefactory, _underlying, msg.sender, mindeposit, agedeposit, agelottery);
    }
    
    
    // this function returns an array of struct of pools created by owner
    
    function getOwnerPools(address _account) external view returns (Pool[] memory) {
      return OwnerPools[_account];
    } 


    // this function returns an array of struct of pools created
    
    function getTotalPools() external view returns (Pool[] memory) {
      return FactoryPools;
    }

}

File 2 of 3: MecenasV3Aave.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ReentrancyGuard.sol";


interface ERC20 {

    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
}


interface ProtocolDataProvider {

    function getReserveData(address asset) external view returns (uint256 availableLiquidity, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex, uint40 lastUpdateTimestamp);
    function getReserveTokensAddresses(address asset) external view returns (address aTokenAddress, address stableDebtTokenAddress, address variableDebtTokenAddress);
}


interface AaveYield {
    
    function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;
    function withdraw(address asset, uint256 amount, address to) external returns (uint256);
}


interface LendingAddressProvider {

    function getLendingPool() external view returns (address);    
}


contract MecenasV3Aave is ReentrancyGuard {


    LendingAddressProvider public immutable addressprovider;
    ProtocolDataProvider public immutable dataprovider;

    address public constant EMPTY_ADDRESS = address(0);
    uint public immutable LOT_DEPOSIT;
    uint public immutable LOCK_PLAYERS;
    uint public immutable LOCK_LOTTERY;

    AaveYield public marketaave;
    ERC20 public underlying;
    ERC20 public atoken;
    
    uint public totalseekerinterest;
    uint public totaldevelopinterest;
    uint public reservevalue;
    uint public totalinterestpaid;
    uint public totalreservepaid;
    uint public supporters;
    uint public lockdeposits;
    uint public jackpotvalue;
    uint public interestvalue;
    uint private nonce;
    uint private blockNumber;
    
    bool public spinning;
    bool public picking;

    uint public jackpotsettled;
    uint public timejackpot;
    uint public supporterslottery;
    uint public jackpotspaid;
    uint public lastjackpotresult;
    address public lastjackpotwinner;
    uint public lastjackpotamount;
    uint public lastjackpotdate;
    uint public developsettled;
    uint public seekersettled;
    
    uint public lastjackpotcounter;
    
    uint public balancedonations;
    uint public totaldonations;
    uint public totaldonationspaid;
    mapping(address => uint) public balancedonators;
    mapping(address => uint) public balancepatrons;
    uint public balancepool;

    uint public decimalstoken;
    string public nametoken;

    address[] private players;
    
    mapping(address => uint) public timeplayers;
    
    mapping(address => uint) private indexplayers;
    
    address public owner;
    address public developer;
    address public seeker;

    uint public lotterycounter;
    
    struct Lottery {
        uint lotteryid;
        uint lotterydate;
        uint lotteryresult;
        address lotterywinner;
        uint lotteryamount;
    }    
    
    Lottery[] public LotteryResults;
    
    event Deposit(address indexed from, uint amount);
    event Withdraw(address indexed to, uint amount);
    event DepositDonation(address indexed from, uint amount);
    event WithdrawDonation(address indexed to, uint amount);
    event CollectInterest(address indexed to, uint amount);
    event CollectReserve(address indexed to, uint amount);
    event PayWinner(address indexed to, uint amount);
    event PayDeveloper(address indexed to, uint amount);
    event PaySeeker(address indexed to, uint amount);
    event ChangeOwner(address indexed oldowner, address indexed newowner);
    event ChangeDeveloper(address indexed olddeveloper, address indexed newdeveloper);
    event ChangeSeeker(address indexed oldseeker, address indexed newseeker);
    event ChangePoolLock(address indexed ownerchanger, uint oldlock, uint newlock);
    event LotteryAwarded(uint counter, uint date, address indexed thewinner, uint amount, uint result);
    
    
    constructor(address _owner, address _underlying, address _developer, address _seeker, uint _mindeposit, uint _agedeposit, uint _agelottery) {
        
        addressprovider = LendingAddressProvider(0xd05e3E715d945B59290df0ae8eF85c1BdB684744);
        dataprovider = ProtocolDataProvider(0x7551b5D2763519d4e37e8B81929D336De671d46d);
        
        marketaave = AaveYield(addressprovider.getLendingPool());          
        underlying = ERC20(_underlying);
        
        (address x,,) = dataprovider.getReserveTokensAddresses(_underlying);
        atoken = ERC20(x);
        
        owner = _owner;
        developer = _developer;
        seeker = _seeker;
        LOT_DEPOSIT = _mindeposit;
        LOCK_PLAYERS = _agedeposit;
        LOCK_LOTTERY = _agelottery;
        decimalstoken = underlying.decimals();
        nametoken = underlying.symbol();
    }


    // this modifier checks if msg.sender is the owner
    
    modifier onlyowner() {
        require(msg.sender == owner);
        _;
    }

    
    // this function modifies the address of the owner
    
    function transferowner(address _newowner) external onlyowner {
        require(_newowner != EMPTY_ADDRESS);
        address oldowner = owner;
        owner = _newowner;
    
        emit ChangeOwner(oldowner, owner);
    }


    // this function modifies the address of the developer

    function transferdeveloper(address _newdeveloper) external {
        require(_newdeveloper != EMPTY_ADDRESS && msg.sender == developer);
        address olddeveloper = developer;
        developer = _newdeveloper;
    
        emit ChangeDeveloper(olddeveloper, developer);
    }


    // this function modifies the address of the seeker

    function transferseeker(address _newseeker) external {
        require(_newseeker != EMPTY_ADDRESS && msg.sender == seeker);
        address oldseeker = seeker;
        seeker = _newseeker;
    
        emit ChangeSeeker(oldseeker, seeker);
    }


    // this function is used to lock or unlock functions deposit() and depositdonation()
    // 0 = unlock 
    // 1 = lock
    
    function lockpool(uint _lockdeposits) external onlyowner {
        require(_lockdeposits == 1 || _lockdeposits == 0);
        uint oldlockdeposits = lockdeposits;
        lockdeposits = _lockdeposits;
    
        emit ChangePoolLock(owner, oldlockdeposits, lockdeposits);
    }
    
    
    // this function is used to deposit underlying and transfer it to yield source
    // evaluates if is a jackpot participant
    
    function deposit(uint _amount) external nonReentrant {
        require(spinning == false && lockdeposits == 0 && msg.sender != EMPTY_ADDRESS);
        require(_amount > 0 && underlying.balanceOf(msg.sender) >= _amount);
        require(underlying.allowance(msg.sender, address(this)) >= _amount);
        
        require(underlying.transferFrom(msg.sender, address(this), _amount) == true);
        
        uint balancesupporter = balancepatrons[msg.sender];
        
        if (balancesupporter == 0) {
            supporters += 1;
            if (_amount >= LOT_DEPOSIT) {
                supporterslottery += 1;
                players.push(msg.sender);
                indexplayers[msg.sender] = players.length - 1;
                timeplayers[msg.sender] = block.timestamp;
            } 
        }
        
        if (balancesupporter > 0) {
            if (balancesupporter < LOT_DEPOSIT && (balancesupporter + _amount) >= LOT_DEPOSIT) {
                supporterslottery += 1;
                players.push(msg.sender);
                indexplayers[msg.sender] = players.length - 1;
                timeplayers[msg.sender] = block.timestamp;
            }
        }
        
        if (supporterslottery > 0 && timejackpot == 0 && spinning == false) {
            timejackpot = block.timestamp;
        }
        
        require(underlying.approve(address(marketaave), _amount) == true);
        balancepatrons[msg.sender] += _amount;
        balancepool += _amount;
        
        marketaave.deposit(address(underlying), _amount, address(this), 0);
        
        emit Deposit(msg.sender, _amount);
    }
    
    
    // this function is used to deposit underlying and transfer it to yield source
  
    function depositdonation(uint _amount) external nonReentrant {
        require(lockdeposits == 0 && msg.sender != EMPTY_ADDRESS);
        require(_amount > 0 && underlying.balanceOf(msg.sender) >= _amount);
        require(underlying.allowance(msg.sender, address(this)) >= _amount);
        
        require(underlying.transferFrom(msg.sender, address(this), _amount) == true);
        
        require(underlying.approve(address(marketaave), _amount) == true);
        
        balancedonations += _amount;
        
        marketaave.deposit(address(underlying), _amount, address(this), 0);
        
        totaldonations += _amount;
        balancedonators[msg.sender] += _amount;
        
        emit DepositDonation(msg.sender, _amount);
    }
    
    
    // this function is used to redeem underlying from yield source and withdraw
    // evaluates if is a jackpot participant
    
    function withdraw(uint _amount) external nonReentrant {
        require(spinning == false && msg.sender != EMPTY_ADDRESS);
        require(_amount > 0 && balancepatrons[msg.sender] >= _amount);
        
        (uint x,,,,,,,,,) = dataprovider.getReserveData(address(underlying));
        require(x >= _amount);
        
        marketaave.withdraw(address(underlying), _amount, address(this));
        
        balancepatrons[msg.sender] -= _amount; 
        balancepool -= _amount;
        
        uint balancesupporter = balancepatrons[msg.sender];
        
        if (balancesupporter == 0) {
            supporters -= 1;
        }
    
        if (balancesupporter >= 0) {
            if (balancesupporter < LOT_DEPOSIT && (balancesupporter + _amount) >= LOT_DEPOSIT) {
                supporterslottery -= 1;
                timeplayers[msg.sender] = 0;
                
                uint index = indexplayers[msg.sender];
                uint indexmove = players.length - 1;
                address addressmove = players[indexmove];
                
                if (index == indexmove || players.length == 1) {
                    delete indexplayers[msg.sender];
                    players.pop();
                
                    
                } else {
                    delete indexplayers[msg.sender];
                    players[index] = addressmove;
                    indexplayers[addressmove] = index;
                    players.pop();
                }
                    
            }
        } 
        
        if (supporterslottery == 0) {
            timejackpot = 0;
            spinning = false;
            picking = false;
            jackpotsettled = 0;
            developsettled = 0;
            seekersettled = 0;
        }    
        
        require(underlying.transfer(msg.sender, _amount) == true);
    
        emit Withdraw(msg.sender, _amount);
    }


    // this function accrues the yield and splits into interests, reserves and jackpot
    
    function splityield() internal {
        uint interest = interestaccrued();
        
        uint totransferinterest = interest * (50 * 10 ** decimalstoken / 100);
        totransferinterest = totransferinterest / 10 ** decimalstoken;
        
        interestvalue += totransferinterest;
        
        uint jackpotinterest = interest * (25 * 10 ** decimalstoken / 100);
        jackpotinterest = jackpotinterest / 10 ** decimalstoken;
        jackpotvalue += jackpotinterest;
        
        uint reserveinterest = interest - totransferinterest - jackpotinterest;
        reservevalue += reserveinterest;
        
        assert(interest == (totransferinterest + jackpotinterest + reserveinterest));
        assert(atoken.balanceOf(address(this)) >= (interestvalue + jackpotvalue + reservevalue + balancepool + balancedonations));
    }


    // this function is used to calculate interest accrued in yield source
    
    function interestaccrued() internal view returns (uint) {
        uint interest = (atoken.balanceOf(address(this)) - balancepool - balancedonations - reservevalue - jackpotvalue - interestvalue); 
        return interest;
    }


    // this function is used to settle the prize and seeds with block number and nonce to be used to generate random number
    
    function settlejackpot() external nonReentrant {
        
        require(spinning == false && supporterslottery > 0 && timejackpot > 0 && block.number - blockNumber > 0);
        
        uint end = block.timestamp;
        uint totaltime = end - timejackpot;
        require(totaltime >= LOCK_LOTTERY);

        spinning = true;
        timejackpot = 0;
        blockNumber = block.number;

        splityield();
    
        require(jackpotvalue > 0);
        
        jackpotsettled = jackpotvalue;
        uint distjackpot = jackpotsettled;
        
        developsettled = distjackpot * (20 * 10 ** decimalstoken / 100);
        developsettled = developsettled / 10 ** decimalstoken;
        seekersettled = distjackpot * (5 * 10 ** decimalstoken / 100);
        seekersettled = seekersettled / 10 ** decimalstoken;
        
        jackpotsettled = jackpotsettled - developsettled - seekersettled;
        
        assert(distjackpot == (jackpotsettled + developsettled + seekersettled));
        
        nonce += 1;
        picking = true;
    }
    
    
    // this function generates a random number using future Blockhash
    
    function generaterandomnumber() internal view returns (uint) {
        uint randnum = uint(keccak256(abi.encode(blockhash(blockNumber), nonce))) % players.length;
        return randnum;  
    }


    // this function is used to pick a winner, redeem underlying from yield source and transfer to
    // the winner, to the developer and to the seeker
    
    function pickawinner() external nonReentrant {
        
        require(spinning == true && picking == true && block.number - blockNumber > 0 && supporterslottery > 0);
        
        picking = false;
        uint toredeem =  jackpotsettled + developsettled + seekersettled;
        
        (uint x,,,,,,,,,) = dataprovider.getReserveData(address(underlying));
        require(x >= toredeem);
        
        uint totransferbeneficiary = jackpotsettled;
        uint totransferdevelop = developsettled;
        uint totransferseeker = seekersettled;
        
        jackpotsettled = 0;
        developsettled = 0;
        seekersettled = 0;
        
        lotterycounter++;
        uint end = block.timestamp;
        
        if (block.number - blockNumber > 250) {
    
            lastjackpotresult = 2;
            
            LotteryResults.push(Lottery(lotterycounter, end, 2, EMPTY_ADDRESS, 0));

            emit LotteryAwarded(lotterycounter, end, EMPTY_ADDRESS, 0, 2);
        
        } else {
        
        uint w = 0;
        uint winner = 0;
        address beneficiary;
        
        uint randomnumber;
        
        while(w < players.length && winner < 1 ) {
        
            w++;
        
            randomnumber = generaterandomnumber();
        
            address candidate = players[randomnumber];
        
                if (timeplayers[candidate] > 0 && balancepatrons[candidate] >= LOT_DEPOSIT) { 
        
                    uint totaltime = end - timeplayers[candidate];
                        if (totaltime >= LOCK_PLAYERS) {
                            winner = 1;
                            beneficiary = candidate;
                        }
                }
            
            nonce++; 
        }        

        if (winner == 1) {
            
            jackpotspaid += totransferbeneficiary;
            totaldevelopinterest += totransferdevelop;
            totalseekerinterest += totransferseeker;
            
            
            marketaave.withdraw(address(underlying), toredeem, address(this));
            
            jackpotvalue -= toredeem;
            
            require(underlying.transfer(beneficiary, totransferbeneficiary) == true);
            require(underlying.transfer(developer, totransferdevelop) == true);
            require(underlying.transfer(seeker, totransferseeker) == true);
        
            lastjackpotresult = 1;
            lastjackpotwinner = beneficiary;
            lastjackpotamount = totransferbeneficiary;
            lastjackpotdate = end;
            lastjackpotcounter = lotterycounter;
        
            LotteryResults.push(Lottery(lotterycounter, end, 1, beneficiary, totransferbeneficiary));
        
            emit PayWinner(beneficiary, totransferbeneficiary);
            emit PayDeveloper(developer, totransferdevelop);
            emit PaySeeker(seeker, totransferseeker);
            
            emit LotteryAwarded(lotterycounter, end, beneficiary, totransferbeneficiary, 1);
            
        } else {
        
            lastjackpotresult = 2;
            
            LotteryResults.push(Lottery(lotterycounter, end, 2, EMPTY_ADDRESS, 0));
            
            emit LotteryAwarded(lotterycounter, end, EMPTY_ADDRESS, 0, 2);
        }    
          
        }
          
        timejackpot = block.timestamp;
        spinning = false;
    }
        
    
    // this function returns the timeleft to execute function settlejackpot()
    // 0 = no time left

    function calculatetimeleft() public view returns (uint) {
        uint end = block.timestamp;
        uint totaltime = end - timejackpot;
        
        if(totaltime < LOCK_LOTTERY) {
            uint timeleft = LOCK_LOTTERY - totaltime;
            return timeleft;
        } else {
            return 0;
        }
    }
    
    
    // this function returns if conditions are met to execute function settlejackpot()
    // 1 = met
    // 2 = not met 
    
    function calculatesettlejackpot() public view returns (uint) {
        
        uint end = block.timestamp;
        uint totaltime = end - timejackpot;

        if (spinning == false && supporterslottery > 0 && timejackpot > 0 && (block.number - blockNumber) > 0 && totaltime >= LOCK_LOTTERY) {
            return 1;
    
        } else {
            return 2;
        }    
    }        
            
    
    // this function returns if conditions are met to execute function pickawinner()
    // 1 = met
    // 2 = not met 
        
    function calculatepickawinner() public view returns (uint) {
        
        uint toredeem = jackpotsettled + developsettled + seekersettled;
        uint metwinner;
        (uint x,,,,,,,,,) = dataprovider.getReserveData(address(underlying));
        
            if (spinning == true && block.number - blockNumber > 0 && supporterslottery > 0 && x >= toredeem) {
                metwinner = 1;
        
            } else {
                metwinner = 2;
            }
        
        
        return metwinner;
    }
    
    
    // this function returns if account is the owner
    // 1 = is owner
    // 2 = is not owner
    
    function verifyowner(address _account) public view returns (uint) {
        
        if (_account == owner) {
            return 1;
        } else {
            return 2;
        }
    }
    
  
    // this  function returns an array of struct of jackpots drawn results
  
    function getLotteryResults() external view returns (Lottery[] memory) {
    return LotteryResults;
    }
  
    
    // this function is used to redeem underlying from yield source and withdraw interests and reserves
    // flag 1 = interests
    // flag 2 = reserves

    function withdrawyield(uint _amount, uint _flag) external nonReentrant onlyowner {
        require(_amount > 0 && (_flag == 1 || _flag == 2));
        
        splityield();
        
        if (_flag == 1) {
        require(_amount <= interestvalue);
        }
        
        if (_flag == 2) {
        require(_amount <= reservevalue);
        }
        
        (uint x,,,,,,,,,) = dataprovider.getReserveData(address(underlying));
        require(x >= _amount);
        
        uint totransferinterestnet = _amount;
        
        if (_flag == 1) {
        totalinterestpaid += _amount;
        }
        
        if (_flag == 2) {
        totalreservepaid += _amount;
        }
        
        marketaave.withdraw(address(underlying), totransferinterestnet, address(this));
        
        if (_flag == 1) {
        interestvalue -= _amount;
        }
        
        if (_flag == 2) {
        reservevalue -= _amount;
        }
        
        require(underlying.transfer(owner, totransferinterestnet) == true);

        if (_flag == 1) {
        emit CollectInterest(owner, totransferinterestnet);
        }
        
        if (_flag == 2) {
        emit CollectReserve(owner, totransferinterestnet);
        }
    }

    
    
    // this function is used to redeem underlying from yield source and withdraw donations     
    
    function withdrawdonations(uint _amount) external nonReentrant onlyowner {
        require(_amount > 0);
        require(balancedonations >= _amount);
        
        (uint x,,,,,,,,,) = dataprovider.getReserveData(address(underlying));
        require(x >= _amount);
        
        marketaave.withdraw(address(underlying), _amount, address(this));
        
        balancedonations -= _amount;
        totaldonationspaid += _amount;
        
        require(underlying.transfer(owner, _amount) == true);

        emit WithdrawDonation(owner, _amount);
    }
    

    // this function returns yield generated
    // _amount = balance of underlying of yieldsource
    
    function calculateinterest() external view returns(uint, uint, uint) {
        
        uint yield = interestaccrued();
        
        uint interest = yield * (50 * 10 ** decimalstoken / 100);
        interest = interest / 10 ** decimalstoken;
        
        uint reserve = yield * (25 * 10 ** decimalstoken / 100);
        reserve = reserve / 10 ** decimalstoken;
        
        uint jackpot = yield - interest - reserve;
        
        interest = interest + interestvalue;
        reserve = reserve + reservevalue;
        jackpot = jackpot + jackpotvalue - jackpotsettled - developsettled - seekersettled;
    
        jackpot = jackpot * (75 * 10 ** decimalstoken / 100);
        jackpot = jackpot / 10 ** decimalstoken;
        
        return (interest, reserve, jackpot);
    }
    

    // this function returns data to the front end

    function calculatedata() external view returns (uint [] memory) {
        
        uint[] memory datafront = new uint[](23);
        
        (uint x,,,,,,,,,) = dataprovider.getReserveData(address(underlying));
        
        datafront[0] = balancepool + balancedonations; // deposits
        datafront[1] = x; // liquidity
        datafront[2] = calculatetimeleft(); // leftime lottery
        datafront[3] = calculatesettlejackpot(); // evaluates if conditions are met to settle the lottery
        datafront[4] = calculatepickawinner(); // evaluates if conditions are met to pick a lottery winner
        
        datafront[5] = totalinterestpaid;
        datafront[6] = totalreservepaid;
        datafront[7] = totaldonationspaid;
        datafront[8] = balancedonations;
        
        datafront[9] = totaldonations;
        datafront[10] = jackpotsettled;
        datafront[11] = jackpotspaid;
        
        datafront[12] = lastjackpotamount;
        datafront[13] = supporters;
        datafront[14] = supporterslottery;
        
        datafront[15] = lastjackpotresult;
        datafront[16] = lastjackpotdate;
        datafront[17] = lastjackpotcounter;
        
        datafront[18] = LOT_DEPOSIT;
        datafront[19] = LOCK_PLAYERS;
        datafront[20] = LOCK_LOTTERY;
        
        datafront[21] = decimalstoken;
        datafront[22] = balancepool;
        
        return (datafront);
    }

   
   // this function returns data to the front end
    
    function calculatedataaccount(address _account) external view returns (uint [] memory) {
        require(_account != EMPTY_ADDRESS);

        uint[] memory datafrontaccount = new uint[](6);
        
        datafrontaccount[0] = balancepatrons[_account]; // balance depositors
        datafrontaccount[1] = underlying.balanceOf(_account); // balance wallet underlying depositors
        datafrontaccount[2] = underlying.allowance(_account, address(this)); // allowance underlying depositors behalf pool
        datafrontaccount[3] = lockdeposits;
        datafrontaccount[4] = balancedonators[_account]; // balance donators
        datafrontaccount[5] = verifyowner(_account); // evaluates if caller is the owner of the pool

        return (datafrontaccount);
    }


    // this  function is used by the front end to check conditions of operations
    // flag 1 = deposits
    // flag 2 = donations
    // flag 3 = withdraw
    // flag 4 = withdraw donations
    // flag 5 = withdraw yield

    function checkoperations(uint _amount, uint _amount1, address _account, uint _flag) external view returns (uint) {
        require(_account != EMPTY_ADDRESS && _amount > 0 && _flag > 0);
        
        (uint x,,,,,,,,,) = dataprovider.getReserveData(address(underlying));
        
        uint result = 0;
        
        if (lockdeposits == 1 && (_flag == 1 || _flag == 2)) {
            result = 1;
        } else {
            if (spinning == true && (_flag == 1 || _flag == 3)) {
                result = 2;
            } else {
                if (_amount > underlying.balanceOf(_account) && (_flag == 1 || _flag == 2)) {
                    result = 3;
                } else {
                    if (_amount > underlying.allowance(_account, address(this)) && (_flag == 1 || _flag == 2)) {
                        result = 4;
                    } else {
                        if (_amount > balancepatrons[_account] && _flag == 3) {
                            result = 5;            
                        } else {
                             if (verifyowner(_account) == 2 && (_flag == 4 || _flag == 5)) {
                                result = 6;
                            } else {
                                if (_amount > balancedonations && _flag == 4) {
                                    result = 7;
                                } else {
                                    if (_amount > _amount1 && _flag == 5) {
                                        result = 8;
                                    } else {
                                        if (_amount > x && (_flag == 3 || _flag == 4 || _flag == 5)) {
                                            result = 9;
                                        }
                                    }
                                }
                            }     
                        }
                    }                        
                }
            }
        }
        
        return result;
    }

}

File 3 of 3: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_developer","type":"address"},{"internalType":"address","name":"_seeker","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"olddeveloper","type":"address"},{"indexed":true,"internalType":"address","name":"newdeveloper","type":"address"}],"name":"ChangeFactoryDeveloper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"oldlock","type":"bool"},{"indexed":false,"internalType":"bool","name":"newlock","type":"bool"}],"name":"ChangeFactoryLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldowner","type":"address"},{"indexed":true,"internalType":"address","name":"newowner","type":"address"}],"name":"ChangeFactoryOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldseeker","type":"address"},{"indexed":true,"internalType":"address","name":"newseeker","type":"address"}],"name":"ChangeFactorySeeker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"childAddress","type":"address"},{"indexed":true,"internalType":"address","name":"yield","type":"address"},{"indexed":true,"internalType":"address","name":"underlying","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_mindeposit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_agedeposit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_agelottery","type":"uint256"}],"name":"ChildCreated","type":"event"},{"inputs":[],"name":"EMPTY_ADDRESS_FACTORY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"FactoryPools","outputs":[{"internalType":"contract MecenasV3Aave","name":"newpool","type":"address"},{"internalType":"address","name":"newmarket","type":"address"},{"internalType":"address","name":"newunderlying","type":"address"},{"internalType":"string","name":"newnametoken","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract MecenasV3Aave","name":"","type":"address"}],"name":"MapPools","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"OwnerPools","outputs":[{"internalType":"contract MecenasV3Aave","name":"newpool","type":"address"},{"internalType":"address","name":"newmarket","type":"address"},{"internalType":"address","name":"newunderlying","type":"address"},{"internalType":"string","name":"newnametoken","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addressproviderfactory","outputs":[{"internalType":"contract LendingAddressProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newdeveloper","type":"address"}],"name":"changedeveloper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_newlock","type":"bool"}],"name":"changelockfactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newowner","type":"address"}],"name":"changeowner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newseeker","type":"address"}],"name":"changeseeker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"counterpools","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factorydeveloper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factoryowner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factoryseeker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getOwnerPools","outputs":[{"components":[{"internalType":"contract MecenasV3Aave","name":"newpool","type":"address"},{"internalType":"address","name":"newmarket","type":"address"},{"internalType":"address","name":"newunderlying","type":"address"},{"internalType":"string","name":"newnametoken","type":"string"}],"internalType":"struct MecenasFactoryV3Aave.Pool[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalPools","outputs":[{"components":[{"internalType":"contract MecenasV3Aave","name":"newpool","type":"address"},{"internalType":"address","name":"newmarket","type":"address"},{"internalType":"address","name":"newunderlying","type":"address"},{"internalType":"string","name":"newnametoken","type":"string"}],"internalType":"struct MecenasFactoryV3Aave.Pool[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockfactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_underlying","type":"address"},{"internalType":"uint256","name":"mindeposit","type":"uint256"},{"internalType":"uint256","name":"agedeposit","type":"uint256"},{"internalType":"uint256","name":"agelottery","type":"uint256"}],"name":"newMecenasPool","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b5060405162005c4738038062005c47833981016040819052610031916100a1565b600480546001600160a01b03199081163317909155600580546001600160a01b039485169083161790556006805492909316911617905573d05e3e715d945b59290df0ae8ef85c1bdb6847446080526100d4565b80516001600160a01b038116811461009c57600080fd5b919050565b600080604083850312156100b457600080fd5b6100bd83610085565b91506100cb60208401610085565b90509250929050565b608051615b50620000f7600039600081816101ef01526105f00152615b506000f3fe60806040523480156200001157600080fd5b5060043610620001215760003560e01c8063a60e1c2b11620000af578063d4537f94116200007a578063d4537f94146200027e578063dac17de214620002b0578063df9e4c2214620002c4578063e44d0e0514620002db578063f6f0291414620002f257600080fd5b8063a60e1c2b1462000211578063b5809d1b1462000228578063cb4a9368146200024e578063d3ffe67a146200027457600080fd5b8063751c8b1a11620000f0578063751c8b1a146200019f578063789a7b0b14620001cc57806387926c8d14620001d55780638a276b2114620001e957600080fd5b80635246fb8a1462000126578063662e4ee4146200013f57806367416705146200015657806370c383181462000188575b600080fd5b6200013d6200013736600462000e03565b620002fc565b005b6200013d6200015036600462000e03565b6200037b565b6200016d6200016736600462000e2a565b620003fa565b6040516200017f949392919062000eba565b60405180910390f35b6200013d6200019936600462000efa565b620004e4565b600454620001b3906001600160a01b031681565b6040516001600160a01b0390911681526020016200017f565b620001b3600081565b600654620001b3906001600160a01b031681565b620001b37f000000000000000000000000000000000000000000000000000000000000000081565b6200013d6200022236600462000f38565b6200094f565b6200023f6200023936600462000e03565b620009f4565b6040516200017f919062000f5c565b6006546200026390600160a01b900460ff1681565b60405190151581526020016200017f565b6200023f62000b35565b620002a16200028f36600462000e03565b60016020526000908152604090205481565b6040519081526020016200017f565b600554620001b3906001600160a01b031681565b6200013d620002d536600462000e03565b62000c62565b6200016d620002ec36600462000ff9565b62000ce1565b620002a160035481565b6001600160a01b038116158015906200031f57506004546001600160a01b031633145b6200032957600080fd5b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fb6d779092e744a55bfbd14f79a5e14960cbe681b56050d437a0efbce933b829b90600090a35050565b6001600160a01b038116158015906200039e57506004546001600160a01b031633145b620003a857600080fd5b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f7eee5cbc033ec172b73198088b64e108dc7242d7d8722dbdd10945c3c05d4c3f90600090a35050565b600060205281600052604060002081815481106200041757600080fd5b600091825260209091206004909102018054600182015460028301546003840180546001600160a01b039485169750928416955092169291906200045b9062001013565b80601f0160208091040260200160405190810160405280929190818152602001828054620004899062001013565b8015620004da5780601f10620004ae57610100808354040283529160200191620004da565b820191906000526020600020905b815481529060010190602001808311620004bc57829003601f168201915b5050505050905084565b600654600160a01b900460ff1615620004fc57600080fd5b33158015906200051457506001600160a01b03841615155b6200051e57600080fd5b6000831180156200052f5750600082115b80156200053c5750600081115b6200054657600080fd5b60038054906000620005588362001050565b9091555050600554600654604051600092339288926001600160a01b0392831692909116908890889088906200058e9062000d36565b6001600160a01b03978816815295871660208701529386166040860152949091166060840152608083015260a082019290925260c081019190915260e001604051809103906000f080158015620005e9573d6000803e3d6000fd5b50905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200064857600080fd5b505afa1580156200065d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068391906200107a565b905060008690506000816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620006c657600080fd5b505afa158015620006db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007059190810190620010b0565b3360009081526020818152604080832081516080810183526001600160a01b038a811682528981168286019081528f82169483019485526060830188815284546001808201875595895297879020845160049099020180546001600160a01b031990811699851699909917815591519482018054891695841695909517909455935160028501805490971691161790945551805194955092939092620007b392600385019291019062000d44565b5050506001600160a01b03808516600081815260016020818152604080842083905580516080810182529485528886168583019081528e871691860191825260608601888152600280549586018155909552855160049094027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace810180549589166001600160a01b031996871617815591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82018054918a1691871691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad083018054919098169416939093179095559151805193949193620008e7937f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad190930192919091019062000d44565b5050604080516001600160a01b038781168252602082018b9052918101899052606081018890523392508a8216918616907f03563f5d73f944c303453d8d2c50d1873cf2ee3f5efc53596a4dc4e3487928d49060800160405180910390a45050505050505050565b600181151514806200095f575080155b6200096957600080fd5b6004546001600160a01b031633146200098157600080fd5b60068054821515600160a01b90810260ff60a01b198316179283905560405160ff928290048316937fbe7d1cb79f3095a7130e4c3390d628e846d218e281792d2ccfbc7611f21d44cd93620009e89386939204169091151582521515602082015260400190565b60405180910390a15050565b6001600160a01b038116600090815260208181526040808320805482518185028101850190935280835260609492939192909184015b8282101562000b2a576000848152602090819020604080516080810182526004860290920180546001600160a01b039081168452600182015481169484019490945260028101549093169082015260038201805491929160608401919062000a929062001013565b80601f016020809104026020016040519081016040528092919081815260200182805462000ac09062001013565b801562000b115780601f1062000ae55761010080835404028352916020019162000b11565b820191906000526020600020905b81548152906001019060200180831162000af357829003601f168201915b5050505050815250508152602001906001019062000a2a565b505050509050919050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101562000c59576000848152602090819020604080516080810182526004860290920180546001600160a01b039081168452600182015481169484019490945260028101549093169082015260038201805491929160608401919062000bc19062001013565b80601f016020809104026020016040519081016040528092919081815260200182805462000bef9062001013565b801562000c405780601f1062000c145761010080835404028352916020019162000c40565b820191906000526020600020905b81548152906001019060200180831162000c2257829003601f168201915b5050505050815250508152602001906001019062000b59565b50505050905090565b6001600160a01b0381161580159062000c8557506004546001600160a01b031633145b62000c8f57600080fd5b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f999d368309e1bd77323845a60ea9e56ac0436ad448c1f110a355b37508fc461a90600090a35050565b6002818154811062000cf257600080fd5b600091825260209091206004909102018054600182015460028301546003840180546001600160a01b039485169650928416949390911692916200045b9062001013565b6149b1806200116a83390190565b82805462000d529062001013565b90600052602060002090601f01602090048101928262000d76576000855562000dc1565b82601f1062000d9157805160ff191683800117855562000dc1565b8280016001018555821562000dc1579182015b8281111562000dc157825182559160200191906001019062000da4565b5062000dcf92915062000dd3565b5090565b5b8082111562000dcf576000815560010162000dd4565b6001600160a01b038116811462000e0057600080fd5b50565b60006020828403121562000e1657600080fd5b813562000e238162000dea565b9392505050565b6000806040838503121562000e3e57600080fd5b823562000e4b8162000dea565b946020939093013593505050565b60005b8381101562000e7657818101518382015260200162000e5c565b8381111562000e86576000848401525b50505050565b6000815180845262000ea681602086016020860162000e59565b601f01601f19169290920160200192915050565b6001600160a01b03858116825284811660208301528316604082015260806060820181905260009062000ef09083018462000e8c565b9695505050505050565b6000806000806080858703121562000f1157600080fd5b843562000f1e8162000dea565b966020860135965060408601359560600135945092505050565b60006020828403121562000f4b57600080fd5b8135801515811462000e2357600080fd5b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101562000feb57888303603f19018552815180516001600160a01b0390811685528882015181168986015287820151168785015260609081015160809185018290529062000fd68186018362000e8c565b96890196945050509086019060010162000f83565b509098975050505050505050565b6000602082840312156200100c57600080fd5b5035919050565b600181811c908216806200102857607f821691505b602082108114156200104a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200107357634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156200108d57600080fd5b815162000e238162000dea565b634e487b7160e01b600052604160045260246000fd5b600060208284031215620010c357600080fd5b815167ffffffffffffffff80821115620010dc57600080fd5b818401915084601f830112620010f157600080fd5b8151818111156200110657620011066200109a565b604051601f8201601f19908116603f011681019083821181831017156200113157620011316200109a565b816040528281528760208487010111156200114b57600080fd5b6200115e83602083016020880162000e59565b97965050505050505056fe6101206040523480156200001257600080fd5b50604051620049b1380380620049b18339810160408190526200003591620003cb565b600160005573d05e3e715d945b59290df0ae8ef85c1bdb6847446080819052737551b5d2763519d4e37e8b81929d336de671d46d60a05260408051630261bf8b60e01b81529051630261bf8b91600480820192602092909190829003018186803b158015620000a357600080fd5b505afa158015620000b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000de919062000445565b600180546001600160a01b039283166001600160a01b0319918216179091556002805489841692168217905560a0516040516334924edb60e21b81526004810192909252600092169063d2493b6c9060240160606040518083038186803b1580156200014957600080fd5b505afa1580156200015e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018491906200046a565b5050600380546001600160a01b03199081166001600160a01b03848116919091179092556026805482168c84161790556027805482168a84161790556028805490911688831617905560c086905260e08590526101008490526002546040805163313ce56760e01b8152905193945091169163313ce56791600480820192602092909190829003018186803b1580156200021d57600080fd5b505afa15801562000232573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002589190620004b4565b60ff16602155600254604080516395d89b4160e01b815290516001600160a01b03909216916395d89b4191600480820192600092909190829003018186803b158015620002a457600080fd5b505afa158015620002b9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620002e39190810190620004ef565b8051620002f99160229160209091019062000308565b50505050505050505062000608565b8280546200031690620005cb565b90600052602060002090601f0160209004810192826200033a576000855562000385565b82601f106200035557805160ff191683800117855562000385565b8280016001018555821562000385579182015b828111156200038557825182559160200191906001019062000368565b506200039392915062000397565b5090565b5b8082111562000393576000815560010162000398565b80516001600160a01b0381168114620003c657600080fd5b919050565b600080600080600080600060e0888a031215620003e757600080fd5b620003f288620003ae565b96506200040260208901620003ae565b95506200041260408901620003ae565b94506200042260608901620003ae565b93506080880151925060a0880151915060c0880151905092959891949750929550565b6000602082840312156200045857600080fd5b6200046382620003ae565b9392505050565b6000806000606084860312156200048057600080fd5b6200048b84620003ae565b92506200049b60208501620003ae565b9150620004ab60408501620003ae565b90509250925092565b600060208284031215620004c757600080fd5b815160ff811681146200046357600080fd5b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200050357600080fd5b82516001600160401b03808211156200051b57600080fd5b818501915085601f8301126200053057600080fd5b815181811115620005455762000545620004d9565b604051601f8201601f19908116603f01168101908382118183101715620005705762000570620004d9565b8160405282815288868487010111156200058957600080fd5b600093505b82841015620005ad57848401860151818501870152928501926200058e565b82841115620005bf5760008684830101525b98975050505050505050565b600181811c90821680620005e057607f821691505b602082108114156200060257634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516142d1620006e0600039600081816104d501528181611e1701528181612cd0015281816134f401528181613a280152613a560152600081816103e50152818161126b0152611dd701526000818161043401528181610b3101528181610b5b0152818161121d01528181611d9701528181612fbf01528181613073015261309d01526000818161054b015281816109a601528181610f390152818161195d01528181611a8f015281816122ad0152818161263701526136c60152600061058c01526142d16000f3fe608060405234801561001057600080fd5b50600436106103db5760003560e01c80638da5cb5b1161020a578063b6b55f2511610125578063cfb00f32116100b8578063eb39c3af11610087578063eb39c3af1461084a578063f3ab7ea914610852578063f641a52914610865578063fdc31f6f1461086d578063ff7f28671461087657600080fd5b8063cfb00f321461080f578063dabf048814610818578063dcdf098214610821578063e35255771461082a57600080fd5b8063c381cf30116100f4578063c381cf301461079c578063c6b9b541146107af578063ca4b208b146107b8578063cd698753146107cb57600080fd5b8063b6b55f2514610755578063bf93d70614610768578063bfa4f2961461078b578063c30e14a81461079457600080fd5b8063a293b0cd1161019d578063b076731c1161016c578063b076731c14610710578063b4e420ae14610723578063b5fba7371461072c578063b64fbe5f1461073557600080fd5b8063a293b0cd146106cf578063a696a889146106e2578063a8a87d49146106f5578063ae08abe41461070857600080fd5b8063954e7297116101d9578063954e72971461069757806396866fda146106aa578063a1507db7146106bd578063a27cd02b146106c657600080fd5b80638da5cb5b146106485780638e90ab671461065b5780639408f1ec14610664578063950d84c21461067757600080fd5b806359780c33116102fa57806375388cc91161028d57806383db2c6a1161025c57806383db2c6a1461060e57806386b833c91461061757806387c455911461062c578063882ffd2c1461063557600080fd5b806375388cc9146105d657806375cfbac9146105e95780637b040eba146105fc5780637e86b38e1461060557600080fd5b8063697fb6e5116102c9578063697fb6e51461057f5780636bae0658146105875780636be94a1a146105ae5780636f307dc3146105c357600080fd5b806359780c331461053d5780635c9247e3146105465780635debc4661461056d5780635f5737fd1461057657600080fd5b80633de15e36116103725780634a17410a116103415780634a17410a146104f75780634bb4285f1461050057806352fba2aa1461050957806355ac34811461053457600080fd5b80633de15e36146104b65780633df153dc146104be5780634111a810146104c757806349ae9143146104d057600080fd5b806325a16511116103ae57806325a16511146104735780632e1a7d4d146104855780633312cbf41461049a5780633ae19642146104ad57600080fd5b806305ebb47b146103e05780630b8d13861461041a5780631e4aef701461042f57806321f72fd014610456575b600080fd5b6104077f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61042261087f565b6040516104119190613d92565b6104077f000000000000000000000000000000000000000000000000000000000000000081565b600f546104639060ff1681565b6040519015158152602001610411565b600f5461046390610100900460ff1681565b610498610493366004613de7565b61090d565b005b6104986104a8366004613e17565b610dee565b61040760135481565b610498610e6a565b61040760295481565b61040760195481565b6104077f000000000000000000000000000000000000000000000000000000000000000081565b610407601a5481565b61040760185481565b60015461051c906001600160a01b031681565b6040516001600160a01b039091168152602001610411565b610407600b5481565b610407601c5481565b61051c7f000000000000000000000000000000000000000000000000000000000000000081565b610407601b5481565b610407600a5481565b610407611913565b61051c7f000000000000000000000000000000000000000000000000000000000000000081565b6105b6611a40565b6040516104119190613e39565b60025461051c906001600160a01b031681565b6105b66105e4366004613e17565b611e9e565b6104986105f7366004613e17565b6120dd565b61040760055481565b61040760045481565b610407600c5481565b61061f61215a565b6040516104119190613e7d565b61040760175481565b610498610643366004613ef4565b6121ee565b60265461051c906001600160a01b031681565b61040760085481565b610407610672366004613e17565b612589565b610407610685366004613e17565b601f6020526000908152604090205481565b6104986106a5366004613de7565b6125b7565b6104986106b8366004613de7565b612867565b61040760205481565b61040760165481565b60035461051c906001600160a01b031681565b6104986106f0366004613e17565b612bf7565b60155461051c906001600160a01b031681565b610407612c74565b61049861071e366004613de7565b612d0a565b61040760215481565b61040760065481565b610407610743366004613e17565b60246020526000908152604090205481565b610498610763366004613de7565b612d8b565b6107706132fa565b60408051938452602084019290925290820152606001610411565b61040760125481565b610498613471565b6104076107aa366004613f16565b613672565b61040760145481565b60275461051c906001600160a01b031681565b6107de6107d9366004613de7565b6139c3565b604080519586526020860194909452928401919091526001600160a01b03166060830152608082015260a001610411565b610407601d5481565b61040760105481565b61040760115481565b610407610838366004613e17565b601e6020526000908152604090205481565b61051c600081565b60285461051c906001600160a01b031681565b610407613a10565b61040760095481565b61040760075481565b6022805461088c90613f53565b80601f01602080910402602001604051908101604052809291908181526020018280546108b890613f53565b80156109055780601f106108da57610100808354040283529160200191610905565b820191906000526020600020905b8154815290600101906020018083116108e857829003601f168201915b505050505081565b600260005414156109395760405162461bcd60e51b815260040161093090613f8e565b60405180910390fd5b6002600055600f5460ff1615801561095057503315155b61095957600080fd5b6000811180156109785750336000908152601f60205260409020548111155b61098157600080fd5b6002546040516335ea6a7560e01b81526001600160a01b0391821660048201526000917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101406040518083038186803b1580156109e957600080fd5b505afa1580156109fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a219190613fc5565b505050505050505050905081811015610a3957600080fd5b600154600254604051631a4ca37b60e21b81526001600160a01b03928316926369328dec92610a71929116908690309060040161404e565b602060405180830381600087803b158015610a8b57600080fd5b505af1158015610a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac39190614071565b50336000908152601f602052604081208054849290610ae39084906140a0565b925050819055508160206000828254610afc91906140a0565b9091555050336000908152601f602052604090205480610b2f57600160096000828254610b2991906140a0565b90915550505b7f000000000000000000000000000000000000000000000000000000000000000081108015610b8757507f0000000000000000000000000000000000000000000000000000000000000000610b8484836140b7565b10155b15610cf657600160126000828254610b9f91906140a0565b90915550503360009081526024602090815260408083208390556025909152812054602354909190610bd3906001906140a0565b9050600060238281548110610bea57610bea6140cf565b6000918252602090912001546001600160a01b0316905082821480610c1157506023546001145b15610c5e57336000908152602560205260408120556023805480610c3757610c376140e5565b600082815260209020810160001990810180546001600160a01b0319169055019055610cf2565b336000908152602560205260408120556023805482919085908110610c8557610c856140cf565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526025909152604090208390556023805480610ccf57610ccf6140e5565b600082815260209020810160001990810180546001600160a01b03191690550190555b5050505b601254610d1d5760006011819055600f805461ffff19169055601081905560188190556019555b60025460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da191906140fb565b1515600114610daf57600080fd5b60405183815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a25050600160005550565b6026546001600160a01b03163314610e0557600080fd5b6001600160a01b038116610e1857600080fd5b602680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f9aecf86140d81442289f667eb72e1202a8fbb3478a686659952e145e8531965690600090a35050565b60026000541415610e8d5760405162461bcd60e51b815260040161093090613f8e565b6002600055600f5460ff1615156001148015610eb65750600f5460ff6101009091041615156001145b8015610ecf57506000600e5443610ecd91906140a0565b115b8015610edd57506000601254115b610ee657600080fd5b600f805461ff001916905560195460185460105460009291610f07916140b7565b610f1191906140b7565b6002546040516335ea6a7560e01b81526001600160a01b0391821660048201529192506000917f0000000000000000000000000000000000000000000000000000000000000000909116906335ea6a75906024016101406040518083038186803b158015610f7e57600080fd5b505afa158015610f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb69190613fc5565b505050505050505050905081811015610fce57600080fd5b60108054601880546019805460009586905592859055849055602980549394919391610ff98361411d565b9091555050600e54429060fa9061101090436140a0565b111561118857600260148190556040805160a0810182526029805482526020808301868152838501868152600060608087018281526080808901848152602a805460018101825590865299517fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d26005909b029a8b015595517fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d38a015593517fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d4890155517fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d5880180546001600160a01b0319166001600160a01b0390921691909117905592517fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d6909601959095559254855190815291820187905293810183905292830193909352917f0ea40012165a20f800adbe7d44e3d2d460cf9048a7a2b7b6cf86980fc6513b22910160405180910390a26118f8565b6000806000805b602354841080156111a05750600183105b156112b557836111af8161411d565b9450506111ba613a8b565b90506000602382815481106111d1576111d16140cf565b60009182526020808320909101546001600160a01b031680835260249091526040909120549091501580159061123f57506001600160a01b0381166000908152601f60205260409020547f000000000000000000000000000000000000000000000000000000000000000011155b1561129a576001600160a01b03811660009081526024602052604081205461126790886140a0565b90507f0000000000000000000000000000000000000000000000000000000000000000811061129857600194508193505b505b600d80549060006112aa8361411d565b91905055505061118f565b82600114156117855787601360008282546112d091906140b7565b9250508190555086600560008282546112e991906140b7565b92505081905550856004600082825461130291906140b7565b9091555050600154600254604051631a4ca37b60e21b81526001600160a01b03928316926369328dec9261133f929116908e90309060040161404e565b602060405180830381600087803b15801561135957600080fd5b505af115801561136d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113919190614071565b5089600b60008282546113a491906140a0565b909155505060025460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018b90529091169063a9059cbb90604401602060405180830381600087803b1580156113f757600080fd5b505af115801561140b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142f91906140fb565b151560011461143d57600080fd5b60025460275460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018a905291169063a9059cbb90604401602060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c591906140fb565b15156001146114d357600080fd5b60025460285460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810189905291169063a9059cbb90604401602060405180830381600087803b15801561152357600080fd5b505af1158015611537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155b91906140fb565b151560011461156957600080fd5b600160148190555081601560006101000a8154816001600160a01b0302191690836001600160a01b031602179055508760168190555084601781905550602954601a81905550602a6040518060a00160405280602954815260200187815260200160018152602001846001600160a01b031681526020018a815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550608082015181600401555050816001600160a01b03167faffd7eb38f11b70f6657a98f30dc78203c499888d35801fbce07a6d5c944f94c8960405161169f91815260200190565b60405180910390a26027546040518881526001600160a01b03909116907f2dbf449051f38d992cd6ff2d5750cbbaf97180c5c9fcd9556cec6adeb6e9c2319060200160405180910390a26028546040518781526001600160a01b03909116907f2a6a96d7419fd0b4ce7f9aa79483240989a0bd228af7d45e9bc8ec4ddf1dc7199060200160405180910390a260295460408051918252602082018790528101899052600160608201526001600160a01b038316907f0ea40012165a20f800adbe7d44e3d2d460cf9048a7a2b7b6cf86980fc6513b229060800160405180910390a26118f3565b600260148190556040805160a08101825260298054825260208083018a8152838501868152600060608087018281526080808901848152602a805460018101825590865299517fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d26005909b029a8b015595517fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d38a015593517fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d4890155517fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d5880180546001600160a01b0319166001600160a01b0390921691909117905592517fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d690960195909555925485519081529182018b905293810183905292830193909352917f0ea40012165a20f800adbe7d44e3d2d460cf9048a7a2b7b6cf86980fc6513b22910160405180910390a25b505050505b5050426011555050600f805460ff1916905550506001600055565b60008060195460185460105461192991906140b7565b61193391906140b7565b6002546040516335ea6a7560e01b81526001600160a01b03918216600482015291925060009182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101406040518083038186803b1580156119a057600080fd5b505afa1580156119b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d89190613fc5565b5050600f549798505050505060ff909316151560011492505081159050611a0c57506000600e5443611a0a91906140a0565b115b8015611a1a57506000601254115b8015611a265750828110155b15611a345760019150611a39565b600291505b5092915050565b604080516017808252610300820190925260609160009190602082016102e080368337019050506002546040516335ea6a7560e01b81526001600160a01b0391821660048201529192506000917f0000000000000000000000000000000000000000000000000000000000000000909116906335ea6a75906024016101406040518083038186803b158015611ad457600080fd5b505afa158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0c9190613fc5565b5050505050505050509050601b54602054611b2791906140b7565b82600081518110611b3a57611b3a6140cf565b6020026020010181815250508082600181518110611b5a57611b5a6140cf565b602002602001018181525050611b6e613a10565b82600281518110611b8157611b816140cf565b602002602001018181525050611b95612c74565b82600381518110611ba857611ba86140cf565b602002602001018181525050611bbc611913565b82600481518110611bcf57611bcf6140cf565b60200260200101818152505060075482600581518110611bf157611bf16140cf565b60200260200101818152505060085482600681518110611c1357611c136140cf565b602002602001018181525050601d5482600781518110611c3557611c356140cf565b602002602001018181525050601b5482600881518110611c5757611c576140cf565b602002602001018181525050601c5482600981518110611c7957611c796140cf565b60200260200101818152505060105482600a81518110611c9b57611c9b6140cf565b60200260200101818152505060135482600b81518110611cbd57611cbd6140cf565b60200260200101818152505060165482600c81518110611cdf57611cdf6140cf565b60200260200101818152505060095482600d81518110611d0157611d016140cf565b60200260200101818152505060125482600e81518110611d2357611d236140cf565b60200260200101818152505060145482600f81518110611d4557611d456140cf565b60200260200101818152505060175482601081518110611d6757611d676140cf565b602002602001018181525050601a5482601181518110611d8957611d896140cf565b6020026020010181815250507f000000000000000000000000000000000000000000000000000000000000000082601281518110611dc957611dc96140cf565b6020026020010181815250507f000000000000000000000000000000000000000000000000000000000000000082601381518110611e0957611e096140cf565b6020026020010181815250507f000000000000000000000000000000000000000000000000000000000000000082601481518110611e4957611e496140cf565b60200260200101818152505060215482601581518110611e6b57611e6b6140cf565b60200260200101818152505060205482601681518110611e8d57611e8d6140cf565b602090810291909101015250919050565b60606001600160a01b038216611eb357600080fd5b60408051600680825260e082019092526000916020820160c0803683375050506001600160a01b0384166000908152601f6020526040812054825192935091839190611f0157611f016140cf565b60209081029190910101526002546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a082319060240160206040518083038186803b158015611f5157600080fd5b505afa158015611f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f899190614071565b81600181518110611f9c57611f9c6140cf565b6020908102919091010152600254604051636eb1769f60e11b81526001600160a01b0385811660048301523060248301529091169063dd62ed3e9060440160206040518083038186803b158015611ff257600080fd5b505afa158015612006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202a9190614071565b8160028151811061203d5761203d6140cf565b602002602001018181525050600a548160038151811061205f5761205f6140cf565b602002602001018181525050601e6000846001600160a01b03166001600160a01b0316815260200190815260200160002054816004815181106120a4576120a46140cf565b6020026020010181815250506120b983612589565b816005815181106120cc576120cc6140cf565b602090810291909101015292915050565b6001600160a01b038116158015906120ff57506027546001600160a01b031633145b61210857600080fd5b602780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f869504a2007ee0aecc33d77ea774c0e0aee67a4fe83cc90155a5fab7c6a87dbc90600090a35050565b6060602a805480602002602001604051908101604052809291908181526020016000905b828210156121e55760008481526020908190206040805160a08101825260058602909201805483526001808201548486015260028201549284019290925260038101546001600160a01b03166060840152600401546080830152908352909201910161217e565b50505050905090565b600260005414156122115760405162461bcd60e51b815260040161093090613f8e565b60026000556026546001600160a01b0316331461222d57600080fd5b600082118015612247575080600114806122475750806002145b61225057600080fd5b612258613ad3565b806001141561227057600c5482111561227057600080fd5b80600214156122885760065482111561228857600080fd5b6002546040516335ea6a7560e01b81526001600160a01b0391821660048201526000917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101406040518083038186803b1580156122f057600080fd5b505afa158015612304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123289190613fc5565b50505050505050505090508281101561234057600080fd5b82600183141561236257836007600082825461235c91906140b7565b90915550505b826002141561238357836008600082825461237d91906140b7565b90915550505b600154600254604051631a4ca37b60e21b81526001600160a01b03928316926369328dec926123bb929116908590309060040161404e565b602060405180830381600087803b1580156123d557600080fd5b505af11580156123e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240d9190614071565b50826001141561242f5783600c600082825461242991906140a0565b90915550505b826002141561245057836006600082825461244a91906140a0565b90915550505b60025460265460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb90604401602060405180830381600087803b1580156124a057600080fd5b505af11580156124b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d891906140fb565b15156001146124e657600080fd5b8260011415612532576026546040518281526001600160a01b03909116907f0ea642e516217541a1e2dc773348c8478ff8a42b293518739a126c10215b36a69060200160405180910390a25b826002141561257e576026546040518281526001600160a01b03909116907fe8ba20a8ed6b554b0883b861bead01a8cc072b1e5eef3cf125536dad835481f19060200160405180910390a25b505060016000555050565b6026546000906001600160a01b03838116911614156125aa57506001919050565b506002919050565b919050565b600260005414156125da5760405162461bcd60e51b815260040161093090613f8e565b60026000556026546001600160a01b031633146125f657600080fd5b6000811161260357600080fd5b80601b54101561261257600080fd5b6002546040516335ea6a7560e01b81526001600160a01b0391821660048201526000917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101406040518083038186803b15801561267a57600080fd5b505afa15801561268e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b29190613fc5565b5050505050505050509050818110156126ca57600080fd5b600154600254604051631a4ca37b60e21b81526001600160a01b03928316926369328dec92612702929116908690309060040161404e565b602060405180830381600087803b15801561271c57600080fd5b505af1158015612730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127549190614071565b5081601b600082825461276791906140a0565b9250508190555081601d600082825461278091906140b7565b909155505060025460265460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb90604401602060405180830381600087803b1580156127d557600080fd5b505af11580156127e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280d91906140fb565b151560011461281b57600080fd5b6026546040518381526001600160a01b03909116907f916d90440c92dba9d7754ff7631fe1ad9cced57d553043148a9f755803888449906020015b60405180910390a250506001600055565b6002600054141561288a5760405162461bcd60e51b815260040161093090613f8e565b6002600055600a5415801561289e57503315155b6128a757600080fd5b60008111801561293057506002546040516370a0823160e01b815233600482015282916001600160a01b0316906370a082319060240160206040518083038186803b1580156128f557600080fd5b505afa158015612909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292d9190614071565b10155b61293957600080fd5b600254604051636eb1769f60e11b815233600482015230602482015282916001600160a01b03169063dd62ed3e9060440160206040518083038186803b15801561298257600080fd5b505afa158015612996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ba9190614071565b10156129c557600080fd5b6002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015612a1757600080fd5b505af1158015612a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4f91906140fb565b1515600114612a5d57600080fd5b60025460015460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b390604401602060405180830381600087803b158015612aad57600080fd5b505af1158015612ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae591906140fb565b1515600114612af357600080fd5b80601b6000828254612b0591906140b7565b909155505060015460025460405163e8eda9df60e01b81526001600160a01b039182166004820152602481018490523060448201526000606482015291169063e8eda9df90608401600060405180830381600087803b158015612b6757600080fd5b505af1158015612b7b573d6000803e3d6000fd5b5050505080601c6000828254612b9191906140b7565b9091555050336000908152601e602052604081208054839290612bb59084906140b7565b909155505060405181815233907fcb5e406a2abc0d032ba33712dd7369bd632cbc91ff68b8e896acf029b44e2a949060200160405180910390a2506001600055565b6001600160a01b03811615801590612c1957506028546001600160a01b031633145b612c2257600080fd5b602880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907ff59aa6ab5fb95b0390dedb0bd38890d17da90c749dad873393463a52b51765c090600090a35050565b60115460009042908290612c8890836140a0565b600f5490915060ff16158015612ca057506000601254115b8015612cae57506000601154115b8015612cc757506000600e5443612cc591906140a0565b115b8015612cf357507f00000000000000000000000000000000000000000000000000000000000000008110155b15612d015760019250505090565b60029250505090565b6026546001600160a01b03163314612d2157600080fd5b8060011480612d2e575080155b612d3757600080fd5b600a80549082905560265460408051838152602081018590526001600160a01b03909216917f44046e7be7d848149abebac2b643d261ef302311c3928a58ace78cba0a0c3fd7910160405180910390a25050565b60026000541415612dae5760405162461bcd60e51b815260040161093090613f8e565b6002600055600f5460ff16158015612dc65750600a54155b8015612dd157503315155b612dda57600080fd5b600081118015612e6357506002546040516370a0823160e01b815233600482015282916001600160a01b0316906370a082319060240160206040518083038186803b158015612e2857600080fd5b505afa158015612e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e609190614071565b10155b612e6c57600080fd5b600254604051636eb1769f60e11b815233600482015230602482015282916001600160a01b03169063dd62ed3e9060440160206040518083038186803b158015612eb557600080fd5b505afa158015612ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eed9190614071565b1015612ef857600080fd5b6002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015612f4a57600080fd5b505af1158015612f5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8291906140fb565b1515600114612f9057600080fd5b336000908152601f60205260409020548061306b57600160096000828254612fb891906140b7565b90915550507f0000000000000000000000000000000000000000000000000000000000000000821061306b57600160126000828254612ff791906140b7565b9091555050602380546001818101835560008390527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f423090910180546001600160a01b03191633179055905461304c91906140a0565b3360009081526025602090815260408083209390935560249052204290555b8015613155577f0000000000000000000000000000000000000000000000000000000000000000811080156130c957507f00000000000000000000000000000000000000000000000000000000000000006130c683836140b7565b10155b15613155576001601260008282546130e191906140b7565b9091555050602380546001818101835560008390527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f423090910180546001600160a01b03191633179055905461313691906140a0565b3360009081526025602090815260408083209390935560249052204290555b60006012541180156131675750601154155b80156131765750600f5460ff16155b1561318057426011555b60025460015460405163095ea7b360e01b81526001600160a01b0391821660048201526024810185905291169063095ea7b390604401602060405180830381600087803b1580156131d057600080fd5b505af11580156131e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320891906140fb565b151560011461321657600080fd5b336000908152601f6020526040812080548492906132359084906140b7565b92505081905550816020600082825461324e91906140b7565b909155505060015460025460405163e8eda9df60e01b81526001600160a01b039182166004820152602481018590523060448201526000606482015291169063e8eda9df90608401600060405180830381600087803b1580156132b057600080fd5b505af11580156132c4573d6000803e3d6000fd5b50506040518481523392507fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9150602001612856565b600080600080613308613cc7565b905060006064602154600a61331d919061421c565b613328906032614228565b613332919061425d565b61333c9083614228565b9050602154600a61334d919061421c565b613357908261425d565b905060006064602154600a61336c919061421c565b613377906019614228565b613381919061425d565b61338b9084614228565b9050602154600a61339c919061421c565b6133a6908261425d565b90506000816133b584866140a0565b6133bf91906140a0565b9050600c54836133cf91906140b7565b9250600654826133df91906140b7565b9150601954601854601054600b54846133f891906140b7565b61340291906140a0565b61340c91906140a0565b61341691906140a0565b90506064602154600a613429919061421c565b61343490604b614228565b61343e919061425d565b6134489082614228565b9050602154600a613459919061421c565b613463908261425d565b929791965091945092505050565b600260005414156134945760405162461bcd60e51b815260040161093090613f8e565b6002600055600f5460ff161580156134ae57506000601254115b80156134bc57506000601154115b80156134d557506000600e54436134d391906140a0565b115b6134de57600080fd5b60115442906000906134f090836140a0565b90507f000000000000000000000000000000000000000000000000000000000000000081101561351f57600080fd5b600f805460ff19166001179055600060115543600e5561353d613ad3565b6000600b541161354c57600080fd5b600b54601081905560215460649061356590600a61421c565b613570906014614228565b61357a919061425d565b6135849082614228565b60185560215461359590600a61421c565b6018546135a2919061425d565b6018556021546064906135b690600a61421c565b6135c1906005614228565b6135cb919061425d565b6135d59082614228565b6019556021546135e690600a61421c565b6019546135f3919061425d565b601981905560185460105461360891906140a0565b61361291906140a0565b6010819055601954601854909161362991906140b7565b61363391906140b7565b811461364157613641614271565b6001600d600082825461365491906140b7565b9091555050600f805461ff0019166101001790555050600160005550565b60006001600160a01b0383161580159061368c5750600085115b80156136985750600082115b6136a157600080fd5b6002546040516335ea6a7560e01b81526001600160a01b0391821660048201526000917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101406040518083038186803b15801561370957600080fd5b505afa15801561371d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137419190613fc5565b50505050505050505090506000600a54600114801561376a5750836001148061376a5750836002145b15613777575060016139b9565b600f5460ff1615156001148015613798575083600114806137985750836003145b156137a5575060026139b9565b6002546040516370a0823160e01b81526001600160a01b038781166004830152909116906370a082319060240160206040518083038186803b1580156137ea57600080fd5b505afa1580156137fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138229190614071565b8711801561383a5750836001148061383a5750836002145b15613847575060036139b9565b600254604051636eb1769f60e11b81526001600160a01b0387811660048301523060248301529091169063dd62ed3e9060440160206040518083038186803b15801561389257600080fd5b505afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190614071565b871180156138e2575083600114806138e25750836002145b156138ef575060046139b9565b6001600160a01b0385166000908152601f6020526040902054871180156139165750836003145b15613923575060056139b9565b61392c85612589565b6002148015613945575083600414806139455750836005145b15613952575060066139b9565b601b54871180156139635750836004145b15613970575060076139b9565b858711801561397f5750836005145b1561398c575060086139b9565b81871180156139b0575083600314806139a55750836004145b806139b05750836005145b156139b9575060095b9695505050505050565b602a81815481106139d357600080fd5b600091825260209091206005909102018054600182015460028301546003840154600490940154929450909290916001600160a01b039091169085565b60115460009042908290613a2490836140a0565b90507f0000000000000000000000000000000000000000000000000000000000000000811015613a82576000613a7a827f00000000000000000000000000000000000000000000000000000000000000006140a0565b949350505050565b60009250505090565b602354600e54600d54604080519240602084015282015260009182916060016040516020818303038152906040528051906020012060001c613acd9190614287565b92915050565b6000613add613cc7565b905060006064602154600a613af2919061421c565b613afd906032614228565b613b07919061425d565b613b119083614228565b9050602154600a613b22919061421c565b613b2c908261425d565b905080600c6000828254613b4091906140b7565b9091555050602154600090606490613b5990600a61421c565b613b64906019614228565b613b6e919061425d565b613b789084614228565b9050602154600a613b89919061421c565b613b93908261425d565b905080600b6000828254613ba791906140b7565b909155506000905081613bba84866140a0565b613bc491906140a0565b90508060066000828254613bd891906140b7565b90915550819050613be983856140b7565b613bf391906140b7565b8414613c0157613c01614271565b601b54602054600654600b54600c54613c1a91906140b7565b613c2491906140b7565b613c2e91906140b7565b613c3891906140b7565b6003546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015613c7b57600080fd5b505afa158015613c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cb39190614071565b1015613cc157613cc1614271565b50505050565b600c54600b54600654601b546020546003546040516370a0823160e01b81523060048201526000968796909590949093909290916001600160a01b03909116906370a082319060240160206040518083038186803b158015613d2857600080fd5b505afa158015613d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d609190614071565b613d6a91906140a0565b613d7491906140a0565b613d7e91906140a0565b613d8891906140a0565b613acd91906140a0565b600060208083528351808285015260005b81811015613dbf57858101830151858201604001528201613da3565b81811115613dd1576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613df957600080fd5b5035919050565b80356001600160a01b03811681146125b257600080fd5b600060208284031215613e2957600080fd5b613e3282613e00565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015613e7157835183529284019291840191600101613e55565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b82811015613ee757815180518552868101518786015285810151868601526060808201516001600160a01b0316908601526080908101519085015260a09093019290850190600101613e9a565b5091979650505050505050565b60008060408385031215613f0757600080fd5b50508035926020909101359150565b60008060008060808587031215613f2c57600080fd5b8435935060208501359250613f4360408601613e00565b9396929550929360600135925050565b600181811c90821680613f6757607f821691505b60208210811415613f8857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000806000806000806000806000806101408b8d031215613fe557600080fd5b8a51995060208b0151985060408b0151975060608b0151965060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b015164ffffffffff8116811461403b57600080fd5b809150509295989b9194979a5092959850565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60006020828403121561408357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156140b2576140b261408a565b500390565b600082198211156140ca576140ca61408a565b500190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561410d57600080fd5b81518015158114613e3257600080fd5b60006000198214156141315761413161408a565b5060010190565b600181815b808511156141735781600019048211156141595761415961408a565b8085161561416657918102915b93841c939080029061413d565b509250929050565b60008261418a57506001613acd565b8161419757506000613acd565b81600181146141ad57600281146141b7576141d3565b6001915050613acd565b60ff8411156141c8576141c861408a565b50506001821b613acd565b5060208310610133831016604e8410600b84101617156141f6575081810a613acd565b6142008383614138565b80600019048211156142145761421461408a565b029392505050565b6000613e32838361417b565b60008160001904831182151516156142425761424261408a565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261426c5761426c614247565b500490565b634e487b7160e01b600052600160045260246000fd5b60008261429657614296614247565b50069056fea264697066735822122043f8b6d145f8670550e5b6b887b9f3d650fc435ebeaeca9b86748be113fec9c364736f6c63430008090033a2646970667358221220259361888694eac631fa2123ee23311b3ad7c44cd9d05a9a8163d37081f1eeae64736f6c6343000809003300000000000000000000000034eed477bf8287e79659711799a1e3057ec1a03f00000000000000000000000034eed477bf8287e79659711799a1e3057ec1a03f

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000034eed477bf8287e79659711799a1e3057ec1a03f00000000000000000000000034eed477bf8287e79659711799a1e3057ec1a03f

-----Decoded View---------------
Arg [0] : _developer (address): 0x34eed477bf8287e79659711799a1e3057ec1a03f
Arg [1] : _seeker (address): 0x34eed477bf8287e79659711799a1e3057ec1a03f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000034eed477bf8287e79659711799a1e3057ec1a03f
Arg [1] : 00000000000000000000000034eed477bf8287e79659711799a1e3057ec1a03f


Deployed ByteCode Sourcemap

97:4530:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1985:290;;;;;;:::i;:::-;;:::i;:::-;;2343:280;;;;;;:::i;:::-;;:::i;430:44::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;3088:1130;;;;;;:::i;:::-;;:::i;602:27::-;;;;;-1:-1:-1;;;;;602:27:0;;;;;;-1:-1:-1;;;;;2396:32:3;;;2378:51;;2366:2;2351:18;602:27:0;2232:203:3;136:58:0;;192:1;136:58;;674:28;;;;;-1:-1:-1;;;;;674:28:0;;;201:62;;;;;2736:291;;;;;;:::i;:::-;;:::i;4317:123::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;711:23::-;;;;;-1:-1:-1;;;711:23:0;;;;;;;;;4378:14:3;;4371:22;4353:41;;4341:2;4326:18;711:23:0;4213:187:3;4523:99:0;;;:::i;481:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;4825:25:3;;;4813:2;4798:18;481:46:0;4679:177:3;636:31:0;;;;;-1:-1:-1;;;;;636:31:0;;;1596:320;;;;;;:::i;:::-;;:::i;534:26::-;;;;;;:::i;:::-;;:::i;569:24::-;;;;;;1985:290;-1:-1:-1;;;;;2053:35:0;;;;;;:65;;-1:-1:-1;2106:12:0;;-1:-1:-1;;;;;2106:12:0;2092:10;:26;2053:65;2045:74;;;;;;2150:13;;;-1:-1:-1;;;;;2174:26:0;;;-1:-1:-1;;;;;;2174:26:0;;;;;;;2222:45;;2150:13;;;2174:26;2150:13;;2222:45;;2130:17;;2222:45;2034:241;1985:290;:::o;2343:280::-;-1:-1:-1;;;;;2409:34:0;;;;;;:64;;-1:-1:-1;2461:12:0;;-1:-1:-1;;;;;2461:12:0;2447:10;:26;2409:64;2401:73;;;;;;2504:12;;;-1:-1:-1;;;;;2527:24:0;;;-1:-1:-1;;;;;;2527:24:0;;;;;;;2573:42;;2504:12;;;2527:24;2504:12;;2573:42;;2485:16;;2573:42;2390:233;2343:280;:::o;430:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;430:44:0;;;;-1:-1:-1;430:44:0;;;;-1:-1:-1;430:44:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3088:1130::-;3212:11;;-1:-1:-1;;;3212:11:0;;;;:20;3204:29;;;;;;3252:10;:35;;;;:75;;-1:-1:-1;;;;;;3291:36:0;;;;3252:75;3244:84;;;;;;3360:1;3347:10;:14;:32;;;;;3378:1;3365:10;:14;3347:32;:50;;;;;3396:1;3383:10;:14;3347:50;3339:60;;;;;;3420:12;:14;;;:12;:14;;;:::i;:::-;;;;-1:-1:-1;;3518:16:0;;3536:13;;3475:111;;3451:21;;3493:10;;3505:11;;-1:-1:-1;;;;;3518:16:0;;;;3536:13;;;;3551:10;;3563;;3575;;3475:111;;;:::i;:::-;-1:-1:-1;;;;;6039:15:3;;;6021:34;;6091:15;;;6086:2;6071:18;;6064:43;6143:15;;;6138:2;6123:18;;6116:43;6195:15;;;;6190:2;6175:18;;6168:43;6242:3;6227:19;;6220:35;6001:3;6271:19;;6264:35;;;;6330:3;6315:19;;6308:35;;;;5970:3;5955:19;3475:111:0;;;;;;;;;;;;;;;;;;;;;;;3451:135;;3603:25;3631:22;-1:-1:-1;;;;;3631:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3603:67;;3691:23;3723:11;3691:44;;3747:30;3780:17;-1:-1:-1;;;;;3780:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3780:26:0;;;;;;;;;;;;:::i;:::-;3838:10;3827;:22;;;;;;;;;;;3855:78;;;;;;;-1:-1:-1;;;;;3855:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3827:107;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3827:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3855:78;;-1:-1:-1;3855:78:0;;3827:107;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;3945:17:0;;;;;;;3965:1;3945:17;;;;;;;;:21;;;3995:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3977:12;:97;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3977:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3995:78;;3977:97;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4100:110:0;;;-1:-1:-1;;;;;7880:32:3;;;7862:51;;7944:2;7929:18;;7922:34;;;7972:18;;;7965:34;;;8030:2;8015:18;;8008:34;;;4163:10:0;;-1:-1:-1;4100:110:0;;;;;;;;;7849:3:3;7834:19;4100:110:0;;;;;;;3193:1025;;;;3088:1130;;;;:::o;2736:291::-;2816:4;2804:16;;;;;:37;;-1:-1:-1;2824:17:0;;2804:37;2796:46;;;;;;2875:12;;-1:-1:-1;;;;;2875:12:0;2861:10;:26;2853:35;;;;;;2914:11;;;2936:22;;;-1:-1:-1;;;2936:22:0;;;-1:-1:-1;;;;2936:22:0;;;;;;;2980:39;;2914:11;;;;;;;;2980:39;;;;2914:11;;3007;;;;8240:14:3;;8233:22;8215:41;;8299:14;8292:22;8287:2;8272:18;;8265:50;8203:2;8188:18;;8053:268;2980:39:0;;;;;;;;2785:242;2736:291;:::o;4317:123::-;-1:-1:-1;;;;;4412:20:0;;:10;:20;;;;;;;;;;;4405:27;;;;;;;;;;;;;;;;;4381:13;;4405:27;;4412:20;;4405:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4405:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4317:123;;;:::o;4523:99::-;4571:13;4602:12;4595:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4595:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4523:99;:::o;1596:320::-;-1:-1:-1;;;;;1670:38:0;;;;;;:68;;-1:-1:-1;1726:12:0;;-1:-1:-1;;;;;1726:12:0;1712:10;:26;1670:68;1662:77;;;;;;1773:16;;;-1:-1:-1;;;;;1800:32:0;;;-1:-1:-1;;;;;;1800:32:0;;;;;;;1854:54;;1773:16;;;1800:32;1773:16;;1854:54;;1750:20;;1854:54;1651:265;1596:320;:::o;534:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;534:26:0;;;;-1:-1:-1;534:26:0;;;;;;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:3;-1:-1:-1;;;;;89:31:3;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:3:o;402:315::-;470:6;478;531:2;519:9;510:7;506:23;502:32;499:52;;;547:1;544;537:12;499:52;586:9;573:23;605:31;630:5;605:31;:::i;:::-;655:5;707:2;692:18;;;;679:32;;-1:-1:-1;;;402:315:3:o;722:258::-;794:1;804:113;818:6;815:1;812:13;804:113;;;894:11;;;888:18;875:11;;;868:39;840:2;833:10;804:113;;;935:6;932:1;929:13;926:48;;;970:1;961:6;956:3;952:16;945:27;926:48;;722:258;;;:::o;985:::-;1027:3;1065:5;1059:12;1092:6;1087:3;1080:19;1108:63;1164:6;1157:4;1152:3;1148:14;1141:4;1134:5;1130:16;1108:63;:::i;:::-;1225:2;1204:15;-1:-1:-1;;1200:29:3;1191:39;;;;1232:4;1187:50;;985:258;-1:-1:-1;;985:258:3:o;1248:522::-;-1:-1:-1;;;;;1541:15:3;;;1523:34;;1593:15;;;1588:2;1573:18;;1566:43;1645:15;;1640:2;1625:18;;1618:43;1697:3;1692:2;1677:18;;1670:31;;;1466:4;;1718:46;;1744:19;;1736:6;1718:46;:::i;:::-;1710:54;1248:522;-1:-1:-1;;;;;;1248:522:3:o;1775:452::-;1861:6;1869;1877;1885;1938:3;1926:9;1917:7;1913:23;1909:33;1906:53;;;1955:1;1952;1945:12;1906:53;1994:9;1981:23;2013:31;2038:5;2013:31;:::i;:::-;2063:5;2115:2;2100:18;;2087:32;;-1:-1:-1;2166:2:3;2151:18;;2138:32;;2217:2;2202:18;2189:32;;-1:-1:-1;1775:452:3;-1:-1:-1;;;1775:452:3:o;2678:273::-;2734:6;2787:2;2775:9;2766:7;2762:23;2758:32;2755:52;;;2803:1;2800;2793:12;2755:52;2842:9;2829:23;2895:5;2888:13;2881:21;2874:5;2871:32;2861:60;;2917:1;2914;2907:12;2956:1252;3138:4;3167:2;3207;3196:9;3192:18;3237:2;3226:9;3219:21;3260:6;3295;3289:13;3326:6;3318;3311:22;3352:2;3342:12;;3385:2;3374:9;3370:18;3363:25;;3447:2;3437:6;3434:1;3430:14;3419:9;3415:30;3411:39;3485:2;3477:6;3473:15;3506:1;3516:663;3530:6;3527:1;3524:13;3516:663;;;3595:22;;;-1:-1:-1;;3591:36:3;3579:49;;3651:13;;3765:9;;-1:-1:-1;;;;;3761:18:3;;;3746:34;;3827:11;;;3821:18;3817:27;;3800:15;;;3793:52;3892:11;;;3886:18;3882:27;3865:15;;;3858:52;3933:4;3976:11;;;3970:18;3687:4;4008:15;;;4001:27;;;3970:18;4051:48;4083:15;;;3970:18;4051:48;:::i;:::-;4157:12;;;;4041:58;-1:-1:-1;;;4122:15:3;;;;3552:1;3545:9;3516:663;;;-1:-1:-1;4196:6:3;;2956:1252;-1:-1:-1;;;;;;;;2956:1252:3:o;4861:180::-;4920:6;4973:2;4961:9;4952:7;4948:23;4944:32;4941:52;;;4989:1;4986;4979:12;4941:52;-1:-1:-1;5012:23:3;;4861:180;-1:-1:-1;4861:180:3:o;5046:380::-;5125:1;5121:12;;;;5168;;;5189:61;;5243:4;5235:6;5231:17;5221:27;;5189:61;5296:2;5288:6;5285:14;5265:18;5262:38;5259:161;;;5342:10;5337:3;5333:20;5330:1;5323:31;5377:4;5374:1;5367:15;5405:4;5402:1;5395:15;5259:161;;5046:380;;;:::o;5431:232::-;5470:3;-1:-1:-1;;5491:17:3;;5488:140;;;5550:10;5545:3;5541:20;5538:1;5531:31;5585:4;5582:1;5575:15;5613:4;5610:1;5603:15;5488:140;-1:-1:-1;5655:1:3;5644:13;;5431:232::o;6354:251::-;6424:6;6477:2;6465:9;6456:7;6452:23;6448:32;6445:52;;;6493:1;6490;6483:12;6445:52;6525:9;6519:16;6544:31;6569:5;6544:31;:::i;6610:127::-;6671:10;6666:3;6662:20;6659:1;6652:31;6702:4;6699:1;6692:15;6726:4;6723:1;6716:15;6742:884;6822:6;6875:2;6863:9;6854:7;6850:23;6846:32;6843:52;;;6891:1;6888;6881:12;6843:52;6924:9;6918:16;6953:18;6994:2;6986:6;6983:14;6980:34;;;7010:1;7007;7000:12;6980:34;7048:6;7037:9;7033:22;7023:32;;7093:7;7086:4;7082:2;7078:13;7074:27;7064:55;;7115:1;7112;7105:12;7064:55;7144:2;7138:9;7166:2;7162;7159:10;7156:36;;;7172:18;;:::i;:::-;7247:2;7241:9;7215:2;7301:13;;-1:-1:-1;;7297:22:3;;;7321:2;7293:31;7289:40;7277:53;;;7345:18;;;7365:22;;;7342:46;7339:72;;;7391:18;;:::i;:::-;7431:10;7427:2;7420:22;7466:2;7458:6;7451:18;7506:7;7501:2;7496;7492;7488:11;7484:20;7481:33;7478:53;;;7527:1;7524;7517:12;7478:53;7540:55;7592:2;7587;7579:6;7575:15;7570:2;7566;7562:11;7540:55;:::i;:::-;7614:6;6742:884;-1:-1:-1;;;;;;;6742:884:3:o

Swarm Source

ipfs://259361888694eac631fa2123ee23311b3ad7c44cd9d05a9a8163d37081f1eeae
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.