xDAI Price: $1.00 (+0.01%)
Gas: 1 GWei

Contract

0xCDe24F566AEa0DeD222aa1B86B044948a1C5501c

Overview

xDAI Balance

Gnosis Chain LogoGnosis Chain LogoGnosis Chain Logo29.917519957 xDAI

xDAI Value

$29.92 (@ $1.00/xDAI)

Token Holdings

Transaction Hash
Method
Block
From
To
Register397043322025-04-23 7:41:504 hrs ago1745394110IN
0xCDe24F56...8a1C5501c
0.1 xDAI0.00000140.01492353
Claim397042772025-04-23 7:37:154 hrs ago1745393835IN
0xCDe24F56...8a1C5501c
0 xDAI0.000000960.01492353
Claim Bounty397042612025-04-23 7:35:554 hrs ago1745393755IN
0xCDe24F56...8a1C5501c
0 xDAI0.000002040.01492353
Register396757742025-04-21 15:10:2545 hrs ago1745248225IN
0xCDe24F56...8a1C5501c
0.1 xDAI0.000131822
Register396733772025-04-21 11:46:502 days ago1745236010IN
0xCDe24F56...8a1C5501c
0.1 xDAI0.000091610.97
Claim396733422025-04-21 11:43:502 days ago1745235830IN
0xCDe24F56...8a1C5501c
0 xDAI0.000062940.97
Claim Bounty396733402025-04-21 11:43:402 days ago1745235820IN
0xCDe24F56...8a1C5501c
0 xDAI0.00013810.97
Register396477182025-04-19 23:25:303 days ago1745105130IN
0xCDe24F56...8a1C5501c
0.1 xDAI0.000091550.97
Claim396476982025-04-19 23:23:453 days ago1745105025IN
0xCDe24F56...8a1C5501c
0 xDAI0.000062960.97
Claim Bounty396476952025-04-19 23:23:303 days ago1745105010IN
0xCDe24F56...8a1C5501c
0 xDAI0.00013260.97
Register396278652025-04-18 19:15:254 days ago1745003725IN
0xCDe24F56...8a1C5501c
0.1 xDAI0.000092560.98
Claim396277572025-04-18 19:06:104 days ago1745003170IN
0xCDe24F56...8a1C5501c
0 xDAI0.000062940.97
Claim Bounty396277402025-04-18 19:04:404 days ago1745003080IN
0xCDe24F56...8a1C5501c
0 xDAI0.00013810.97
Register396103902025-04-17 18:31:005 days ago1744914660IN
0xCDe24F56...8a1C5501c
0.1 xDAI0.000091550.97
Claim396103702025-04-17 18:29:155 days ago1744914555IN
0xCDe24F56...8a1C5501c
0 xDAI0.000062960.97
Claim Bounty396103662025-04-17 18:28:455 days ago1744914525IN
0xCDe24F56...8a1C5501c
0 xDAI0.00013260.97
Register395932312025-04-16 18:13:206 days ago1744827200IN
0xCDe24F56...8a1C5501c
0.1 xDAI0.000091610.97
Claim395931812025-04-16 18:09:106 days ago1744826950IN
0xCDe24F56...8a1C5501c
0 xDAI0.000062940.97
Claim Bounty395931772025-04-16 18:08:506 days ago1744826930IN
0xCDe24F56...8a1C5501c
0 xDAI0.00013810.97
Register395731602025-04-15 13:50:557 days ago1744725055IN
0xCDe24F56...8a1C5501c
0.1 xDAI0.000091550.97
Claim395731132025-04-15 13:46:507 days ago1744724810IN
0xCDe24F56...8a1C5501c
0 xDAI0.000062960.97
Claim Bounty395731072025-04-15 13:46:207 days ago1744724780IN
0xCDe24F56...8a1C5501c
0 xDAI0.00013260.97
Register395522442025-04-14 8:17:309 days ago1744618650IN
0xCDe24F56...8a1C5501c
0.1 xDAI0.000137421.455
Claim395522202025-04-14 8:15:259 days ago1744618525IN
0xCDe24F56...8a1C5501c
0 xDAI0.000094421.455
Claim Bounty395522182025-04-14 8:15:159 days ago1744618515IN
0xCDe24F56...8a1C5501c
0 xDAI0.000207151.455
VIEW ADVANCED FILTER

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
397043322025-04-23 7:41:504 hrs ago1745394110
0xCDe24F56...8a1C5501c
0.099 xDAI
397042612025-04-23 7:35:554 hrs ago1745393755
0xCDe24F56...8a1C5501c
0.00016319 xDAI
396757742025-04-21 15:10:2545 hrs ago1745248225
0xCDe24F56...8a1C5501c
0.099 xDAI
396733772025-04-21 11:46:502 days ago1745236010
0xCDe24F56...8a1C5501c
0.099 xDAI
396733402025-04-21 11:43:402 days ago1745235820
0xCDe24F56...8a1C5501c
0.00016886 xDAI
396477182025-04-19 23:25:303 days ago1745105130
0xCDe24F56...8a1C5501c
0.099 xDAI
396476952025-04-19 23:23:303 days ago1745105010
0xCDe24F56...8a1C5501c
0.00016319 xDAI
396278652025-04-18 19:15:254 days ago1745003725
0xCDe24F56...8a1C5501c
0.099 xDAI
396277402025-04-18 19:04:404 days ago1745003080
0xCDe24F56...8a1C5501c
0.00016886 xDAI
396103902025-04-17 18:31:005 days ago1744914660
0xCDe24F56...8a1C5501c
0.099 xDAI
396103662025-04-17 18:28:455 days ago1744914525
0xCDe24F56...8a1C5501c
0.00016319 xDAI
395932312025-04-16 18:13:206 days ago1744827200
0xCDe24F56...8a1C5501c
0.099 xDAI
395931772025-04-16 18:08:506 days ago1744826930
0xCDe24F56...8a1C5501c
0.00016886 xDAI
395731602025-04-15 13:50:557 days ago1744725055
0xCDe24F56...8a1C5501c
0.099 xDAI
395731072025-04-15 13:46:207 days ago1744724780
0xCDe24F56...8a1C5501c
0.00016319 xDAI
395522442025-04-14 8:17:309 days ago1744618650
0xCDe24F56...8a1C5501c
0.099 xDAI
395522182025-04-14 8:15:159 days ago1744618515
0xCDe24F56...8a1C5501c
0.00016886 xDAI
395348342025-04-13 7:41:0010 days ago1744530060
0xCDe24F56...8a1C5501c
0.099 xDAI
395348152025-04-13 7:39:2510 days ago1744529965
0xCDe24F56...8a1C5501c
0.00016319 xDAI
395168462025-04-12 6:18:1511 days ago1744438695
0xCDe24F56...8a1C5501c
0.099 xDAI
395168182025-04-12 6:15:4511 days ago1744438545
0xCDe24F56...8a1C5501c
0.00016886 xDAI
394945692025-04-10 22:47:5012 days ago1744325270
0xCDe24F56...8a1C5501c
0.099 xDAI
394944982025-04-10 22:41:4512 days ago1744324905
0xCDe24F56...8a1C5501c
0.00016319 xDAI
394770662025-04-09 22:01:0013 days ago1744236060
0xCDe24F56...8a1C5501c
0.099 xDAI
394770452025-04-09 21:59:1513 days ago1744235955
0xCDe24F56...8a1C5501c
0.00016886 xDAI
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Fountain

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at gnosisscan.io on 2022-08-04
*/

// SPDX-License-Identifier: MIT
// File: contracts\tool-safemath.sol


pragma solidity >=0.6.0 <0.8.0;



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: contracts\trans-erc20.sol

pragma solidity >=0.6.0 <0.8.0;

contract Terc20 {
   //-------------------Mappings---------------------------    
    mapping(address => uint) public balanceOf;
   
   //-------------------Events-----------------------------      
    event Transfer(address indexed _from, address indexed _to, uint _value); 
 
  
   //-------------------Public Functions-------------------  
   
   // transfer fuction 
    function transfer(address _to, uint _value) public returns (bool){
         // makes sure that user is not sending more then they have, if they try it fails 
        require(balanceOf[msg.sender] >= _value, "Not enough tokens in account");
         // makes sure amout being sent is greater then recipients starting balance
        assert(balanceOf[_to] + _value >= balanceOf[_to]);
         // makes sure amout being deducted is less then senders starting balance
        assert(balanceOf[msg.sender] - _value <= balanceOf[msg.sender]);
         // removes balance from sender
        balanceOf[msg.sender] -= _value;
         // incresses balance of recipient 
        balanceOf[_to] += _value;
         // creates a transfer event, returns arguments as an event 
        emit Transfer(msg.sender, _to, _value);
         // returns true if succesful 
        return true; 
    }
    
//-- end of contract --
}

// File: contracts\rf.sol

pragma solidity >=0.6.0 <0.8.0;
// 



interface IBrightID {
    function isVerified(address addr) external view returns (bool);
}

contract Fountain   {
    //-------------------Libraries---------------------------
    using SafeMath for uint; 
    using SafeMath for uint16;
    using SafeMath for uint32;
    using SafeMath for uint64;
    //-------------------Storage-----------------------------    
    address payable private manager; // must keep for payment & contract setting
    address payable private stakeContract; // the address to the stakers pool 
    address payable private lotteryContract; // the address to the lottery pool
    IBrightID private brightID; // address of brightID node  
    Terc20 private rare; // declares an contract instance type, named rare
    uint private gasUsed; 
    uint8 public bountyRewardMultiplier;      
    uint64 private fee;
    uint64 public poolBalance;
    
    bool internal regPeriod; // false = period 1, true = period 2  
    uint internal claimerAmt;
    uint internal claimerAmt2;    
    uint internal regInc; 
    uint internal regInc2;     
    
    //-------------------timer-----------------------------   
    uint16 public blocksPerDay; // 17000 is one day real @ avg block per day, 17280 is one day @ 5, 720 is one hour @ 5 , 60 is @ 5 
    uint public blockTarget; 
    uint16 public cycleCount; 
    
    struct Cycle {
        uint16 reg1; 
        uint16 reg2;
    }
     
     
    //-------------------Mappings---------------------------
    // A) creates a bool pair for adress sender 
    mapping(address => uint) public timesClaimed;
    mapping(address => uint) public rareClaimed;
    mapping(address => bool) public whiteListed;
    mapping(address => bool) private checkReg;
    mapping(address => bool) private checkReg2;
    mapping(address => Cycle) private cycleChk; 

    
    //-------------------Events-----------------------------      
    event NewReg(address indexed _adr,  bool indexed _period, bool indexed _regSuccess);  
    event RegClaim(address indexed _adr,  bool  _period, uint indexed _amt);      
    event DailyBounty(address indexed _bountyAdr, uint indexed _day, bool indexed _bountySuccess); 
    event LastDay(uint indexed _day, uint indexed _finalBalance, bool indexed _lastday); 
    event OwnershipTransferred(address indexed _newManager);

    //-------------------Contructor-------------------------
    constructor(Terc20 _rareAddress, IBrightID _brightIDcontract, address payable _stakeAddress, address payable _lotteryContract) {
        rare = _rareAddress;
        brightID = _brightIDcontract;
        stakeContract = _stakeAddress;
        lotteryContract = _lotteryContract; 
        
        manager = msg.sender;
        whiteListed[msg.sender] = true;
        
        poolBalance = 1 ether; 
        blocksPerDay = 17000; 
        cycleCount = 72; 
        fee = 0.099 ether;
        bountyRewardMultiplier = 1;        
        blockTarget = block.number.add(blocksPerDay);
    }
    
    
    //-------------------Payable Functions-----------------     
    // #regester for distrobution  
    function register() public alw payable  {
        // Require verification
        require(whiteListed[msg.sender] == true || brightID.isVerified(msg.sender) == true, "You verify your account with brightID before you can register"); 
        // Require Fee
        require(msg.value >= fee.add(0.001 ether), "You must cover the xDai transaction fee"); 
        // pays fee to manager
        manager.transfer(fee);
        // regesters user for appropertate period 
        if (regPeriod) { // do if in period 2
        require(!checkRegNext() || cycleChk[msg.sender].reg2 <= cycleCount.sub(2), "You already registered today");        
        // Marks Player Registerd
        checkReg2[msg.sender] = true;
        // set cyclechk 
        cycleChk[msg.sender].reg2 = cycleCount;
        // incresses reg number 
        regInc2 = regInc2.add(1); 
        } else { // do if in period 1
        require(!checkRegNext() || cycleChk[msg.sender].reg1 <= cycleCount.sub(2), "You already registered today");
        // Marks Player Registerd
        checkReg[msg.sender] = true;
        // set cyclechk 
        cycleChk[msg.sender].reg1 = cycleCount;        
        // incresses reg number 
        regInc = regInc.add(1); 
        }
        
    // sends a regestration notification 
    emit NewReg(msg.sender,regPeriod,true);
    }
    
    function claim() public alw  { 
        // Pay Rare 
        if (regPeriod) { // do if in period 2
           // open claim for prior period            
           require(checkReg[msg.sender] == true && cycleChk[msg.sender].reg1 == cycleCount.sub(1), "You did not register for yesterday's period Or already claimed");
           checkReg[msg.sender] = false; 
        //   regInc = regInc.sub(1);           
           rare.transfer(payable(msg.sender), claimerAmt);  
           } else { // do if in period 1 
           // open claim for prior period            
           require(checkReg2[msg.sender] == true && cycleChk[msg.sender].reg2 == cycleCount.sub(1), "You did not register for yesterday's period Or already claimed");
           checkReg2[msg.sender] = false; 
        //   regInc2 = regInc2.sub(1);           
           rare.transfer(payable(msg.sender), claimerAmt2);             
        } 
        
        // Set Stats 
        timesClaimed[msg.sender] = timesClaimed[msg.sender].add(1);
        rareClaimed[msg.sender] = rareClaimed[msg.sender].add(chkClaimerAmt());
                
        // emit event
        emit RegClaim(msg.sender,regPeriod,chkClaimerAmt()); 
    }
    
    // triggers the next reg event and pays out contracts and rewards bounty hunter    
    function claimBounty() public blk {
        
        // sets gas price for latter refund
        uint gasStart = gasleft();
        uint poolRemainder = 0; 
        uint regNum = getPoolNum(); 
        
        // resets the timer 
        blockTarget = block.number.add(blocksPerDay);
        cycleCount = uint16(cycleCount.add(1)); 
 
        // Increase Reward for bounty hunter 
        regNum = regNum.add(bountyRewardMultiplier); 
        
 
        // Calcs Based on current period 
        if (regPeriod) { // do if in period 2 still 
            // sets the final claim amount for current period 
            claimerAmt2 = poolBalance.div(regNum);
            // calcs unclaimed amount from last pool, sets value as lottery payout 
            poolRemainder = regInc.mul(claimerAmt);
        } else { // do if in period 1 still 
            // sets the final claim amount for current period 
            claimerAmt = poolBalance.div(regNum);
            // calcs unclaimed amount from last pool, sets value as lottery payout 
            poolRemainder = regInc2.mul(claimerAmt2); 
        }


        // as long as coins exsist, fountain can countinue
        require(getRareBalance() >= 2 ether, 'there is no more rare coin!'); 
        // Loads pools balances, distrubutes 2 rare coins 
        poolBalance = 1 ether;
        rare.transfer(stakeContract, 1 ether);
        rare.transfer(lotteryContract, poolRemainder); 


        
        // starts a new period, emits events & pays bounty hunter 
        if (regPeriod) { // do if in period 2 still 
            // reset counter
            regInc = 0; 
            // reset last amt 
            claimerAmt = 0; 
            // reset period 
            regPeriod = false; // if in period 2, switch to 1 
            //emits events 
            if (getRareBalance() < 2 ether) {
                emit LastDay(cycleCount,getRareBalance(),true);
                } else {
                emit DailyBounty(msg.sender,cycleCount,true);
            }   
            // pays bounty hunter 
            rare.transfer(payable(msg.sender), claimerAmt2.mul(bountyRewardMultiplier));             
        } else { // do if in period 1 still 
            // reset counter
            regInc2 = 0; 
            // reset last amt 
            claimerAmt2 = 0; 
            // reset period 
            regPeriod = true; // if in period 1, switch to 2 
            //emits events 
            if (getRareBalance() < 2 ether) {
                emit LastDay(cycleCount,getRareBalance(),true);
                } else {
                emit DailyBounty(msg.sender,cycleCount,true);
            }  
            // pays bounty hunter 
            rareClaimed[msg.sender] = rareClaimed[msg.sender].add(claimerAmt.mul(bountyRewardMultiplier));
            rare.transfer(payable(msg.sender), claimerAmt.mul(bountyRewardMultiplier));             
        }
        
        // sets used gas for refund 
        gasUsed = gasStart.sub(gasleft()); // calc cumpute cost 
        gasUsed = gasUsed.add(53000); // add transaction cost 
        uint gasWei = gasUsed.mul(1000000000); // convert qwei to wei
        // refunds gas for bounty hunter claim
        msg.sender.transfer(gasWei);
    }
    
    //-------------------Manager Functions----------------------
    // sets a new manager of the contract 
    function setManager(address payable _newManager) public restricted {
        manager = _newManager;
        emit OwnershipTransferred(_newManager);
    }
    
    
    // #sets the erc20 address, only manager
    function setContracts(Terc20 _rareAddress, IBrightID _brightIDcontract, address payable _stakeAddress, address payable _lotteryContract) public restricted {
        rare = _rareAddress;
        brightID = _brightIDcontract;
        stakeContract = _stakeAddress;
        lotteryContract = _lotteryContract; 
    }
    
    // #sets number of blocks per day, only manager
    function setBlocksPerDay(uint16 _blks) public restricted {
        blocksPerDay = _blks;
    }
    
    // #sets the price of the fee, cant be over 1 doller, only manager  
    function setFee(uint64 _fee) public restricted {
        require(_fee <= 1 ether, "Cant set the fee higher then 1 xDai");
        fee = _fee; 
    }
    
    // #sets blounty hunter reward multiplyer 
    function setBtnRewards(uint8 _setMultiplyer) public restricted {
        bountyRewardMultiplier = _setMultiplyer; 
    }

    // #gets how much gas was used on the last distrobution
    function getGasUsed() public restricted view returns (uint) { 
        return gasUsed; 
    }    
    
    
    // #Manager can pull funds to re-propergate 
    function withdrawExcessXDAI() public restricted {
        require(address(this).balance >= 101 ether, "Must have more then 101 xdai in contrat to safely remove 100 xdai");
        // pays fee to manager
        manager.transfer(100 ether);
    }
    
    // #Manager whitelist selected adresss
    function whitelistAdr(address _adr) public restricted {
        whiteListed[_adr] = true; 
    }   
    
    // #Manager blackList selected adresss
    function blacklistAdr(address _adr) public restricted {
        whiteListed[_adr] = false; 
    }  
    
    // cheaks what period it is 
    function checkPeriod() public restricted view returns (string memory) {
        if(regPeriod){
          return "in period two";  
        } else {
          return "in period One";   
        }
    }
    
    //-------------------Public View Functions-----------------------    
    // #cheaks balance of total unceculating tokens this contract adress has left to distrobute
    function getRareBalance() public view returns (uint) {
        return uint(rare.balanceOf(address(this)));
    }
    
    // #gets balance of xdai contract address has
    function getXdaiBalance() public view returns (uint) {
        return uint(address(this).balance);
    }  

    // #gets current estimate of payout this period in rare coin inc btn multiplyer // 
    function calcDistAmt() view public returns (uint) {
        require(getPoolNum() >= 1, "Can't calculate balance because no one is in the pool"); 
        uint temp;
        temp = getPoolNum(); 
        temp = temp.add(bountyRewardMultiplier);
        return uint(poolBalance.div(temp)); 
    }    
    
    // #gets the daily claim amt                           
    function chkClaimerAmt() public view returns (uint) {
        if (regPeriod) { // gets users number for period 2 
            return  claimerAmt;          
        } else { // gets users number for period 1
            return  claimerAmt2;
        }
        
    }  
    
    
    // #gets number of players in pool                           
    function getPoolNum() public view returns (uint32) {
        uint32 regNum; 
        if (regPeriod) { // gets users number for period 2 
            regNum = uint32(regInc2);           
        } else { // gets users number for period 1
            regNum = uint32(regInc);
        }
        return uint32(regNum);
    }   
    
    // #gets a true or false if user is regested for the this period claim
    function checkRegThis() public view returns (bool) { 
        bool isRegisterd; 
        if (regPeriod) { // gets users number for period 2 
            if (checkReg[msg.sender] == true && cycleChk[msg.sender].reg1 == cycleCount.sub(1)){
                isRegisterd = true; 
            } else {
                isRegisterd = false;
            }
        } else { // gets users number for period 1
            if (checkReg2[msg.sender] == true && cycleChk[msg.sender].reg2 == cycleCount.sub(1)){
                isRegisterd = true; 
            } else {
                isRegisterd = false;
            }     
        }        
        return isRegisterd; 
    }    
    
    // #gets a true or false if user is verified or whiteListed
    function checkRegNext() public view returns (bool) { 
        
        bool isRegisterd; 
        if (regPeriod) { // gets users number for period 2 
            if (checkReg2[msg.sender] == true && cycleChk[msg.sender].reg2 == cycleCount){
                isRegisterd = true; 
            } else {
                isRegisterd = false;
            }
        } else { // gets users number for period 1
            if (checkReg[msg.sender] == true && cycleChk[msg.sender].reg1 == cycleCount){
                isRegisterd = true; 
            } else {
                isRegisterd = false;
            }     
        }        
        return isRegisterd; 
    }
    
    // #gets a true or false if user has been whiteListed or isVerified by brightID
    function isVerified() public view returns (bool) { 
        if(whiteListed[msg.sender] == true || brightID.isVerified(msg.sender) == true){
            return true;     
        } else {
            return false; 
        }        
    }   
    
    // #gets a true or false if spesified address has been whiteListed or isVerified by brightID
    function checkVerified(address adr) public view returns (bool) { 
        if(whiteListed[adr] == true || brightID.isVerified(adr) == true) {
            return true;     
        } else {
            return false; 
        }        
    }   
    
    //-------------------timr Functions---------------------  
    
    
    function blocksLeft() public alw view returns (uint) {  
        return blockTarget.sub(blockNow());
    }
     
    function blockNow() public view returns (uint) { 
        return block.number;  
    }      
    
    
    //-------------------Modifiers Call Functions--------------------------- 
    //   while (blockTarget >= currentBlock) = true, unlocked 
    //   while (blockTarget <= currentBlock) = untrue, locked
    
    modifier alw() {
        require(blockTarget >= block.number, "Target Reached, No Blocks Left"); // allow before target reached
        _;
    }     


    modifier blk() {
        require(blockTarget <= block.number, "Locked until block target is achieved"); // allow after target reached
        _;
    }      


    // *creates a restricted fuction unless you are the manager
    modifier restricted() {
        require(msg.sender == manager, "Only the manager can perfom this fuction");
        _;
    }

    // function selfDestruct() public restricted { // TODO Test Code 
    //     rare.transfer(manager, getRareBalance());
    //     selfdestruct(manager);  
    // }
    
    //-------------------Special Functions--------------------------- 
    
    
    //fallback function 
    receive () external payable {
        register();
    }
    
    
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"contract Terc20","name":"_rareAddress","type":"address"},{"internalType":"contract IBrightID","name":"_brightIDcontract","type":"address"},{"internalType":"address payable","name":"_stakeAddress","type":"address"},{"internalType":"address payable","name":"_lotteryContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_bountyAdr","type":"address"},{"indexed":true,"internalType":"uint256","name":"_day","type":"uint256"},{"indexed":true,"internalType":"bool","name":"_bountySuccess","type":"bool"}],"name":"DailyBounty","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_day","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_finalBalance","type":"uint256"},{"indexed":true,"internalType":"bool","name":"_lastday","type":"bool"}],"name":"LastDay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_adr","type":"address"},{"indexed":true,"internalType":"bool","name":"_period","type":"bool"},{"indexed":true,"internalType":"bool","name":"_regSuccess","type":"bool"}],"name":"NewReg","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newManager","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_adr","type":"address"},{"indexed":false,"internalType":"bool","name":"_period","type":"bool"},{"indexed":true,"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"RegClaim","type":"event"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"}],"name":"blacklistAdr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blockNow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksPerDay","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bountyRewardMultiplier","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calcDistAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkPeriod","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkRegNext","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkRegThis","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"checkVerified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chkClaimerAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimBounty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cycleCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasUsed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolNum","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRareBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getXdaiBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVerified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolBalance","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rareClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"register","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_blks","type":"uint16"}],"name":"setBlocksPerDay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_setMultiplyer","type":"uint8"}],"name":"setBtnRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Terc20","name":"_rareAddress","type":"address"},{"internalType":"contract IBrightID","name":"_brightIDcontract","type":"address"},{"internalType":"address payable","name":"_stakeAddress","type":"address"},{"internalType":"address payable","name":"_lotteryContract","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_fee","type":"uint64"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newManager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"timesClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"}],"name":"whitelistAdr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawExcessXDAI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162003eb138038062003eb1833981810160405260808110156200003757600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505083600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550670de0b6b3a7640000600660096101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550614268600b60006101000a81548161ffff021916908361ffff1602179055506048600d60006101000a81548161ffff021916908361ffff16021790555067015fb7f9b8c38000600660016101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660006101000a81548160ff021916908360ff160217905550620002eb600b60009054906101000a900461ffff1661ffff1643620002fb60201b620036161790919060201c565b600c819055505050505062000384565b6000808284019050838110156200037a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b613b1d80620003946000396000f3fe6080604052600436106101e75760003560e01c80636cc8c59011610102578063bf989b6e11610095578063ee4be28811610064578063ee4be288146108d5578063f14a4213146108ec578063fa0fca8414610917578063ffd824ac1461097e576101f6565b8063bf989b6e1461071d578063cb1bc723146107ce578063d0ebdbe714610833578063e289451914610884576101f6565b80639854f32f116100d15780639854f32f14610623578063a308fb641461064e578063a3a526511461068d578063ad6e2148146106b8576101f6565b80636cc8c5901461052f578063710535461461059657806380007e83146105c157806396365d44146105ee576101f6565b80634cfea68a1161017a57806359ec0a8b1161014957806359ec0a8b146104685780635a32a262146104955780635a630d7a146104d357806365c7bf4114610518576101f6565b80634cfea68a146103a65780634e71d92d146103d5578063534cfb60146103ec5780635475487114610417576101f6565b8063316fda0f116101b6578063316fda0f1461028e5780633668984a146102bd578063380f1b36146102eb5780633887abb714610316576101f6565b8063037165f4146101fb5780631aa3a008146102265780631b4d87a514610230578063212af18d1461025d576101f6565b366101f6576101f46109a9565b005b600080fd5b34801561020757600080fd5b506102106110ef565b6040518082815260200191505060405180910390f35b61022e6109a9565b005b34801561023c57600080fd5b506102456110f5565b60405180821515815260200191505060405180910390f35b34801561026957600080fd5b506102726112ce565b604051808263ffffffff16815260200191505060405180910390f35b34801561029a57600080fd5b506102a36112fd565b604051808261ffff16815260200191505060405180910390f35b3480156102c957600080fd5b506102d2611311565b604051808260ff16815260200191505060405180910390f35b3480156102f757600080fd5b50610300611324565b6040518082815260200191505060405180910390f35b34801561032257600080fd5b5061032b6113ef565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561036b578082015181840152602081019050610350565b50505050905090810190601f1680156103985780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103b257600080fd5b506103bb611523565b604051808261ffff16815260200191505060405180910390f35b3480156103e157600080fd5b506103ea611537565b005b3480156103f857600080fd5b50610401611c15565b6040518082815260200191505060405180910390f35b34801561042357600080fd5b506104666004803603602081101561043a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c1d565b005b34801561047457600080fd5b5061047d611d1c565b60405180821515815260200191505060405180910390f35b3480156104a157600080fd5b506104d1600480360360208110156104b857600080fd5b81019080803560ff169060200190929190505050611f1b565b005b3480156104df57600080fd5b50610516600480360360208110156104f657600080fd5b81019080803567ffffffffffffffff169060200190929190505050611fdd565b005b34801561052457600080fd5b5061052d612118565b005b34801561053b57600080fd5b5061057e6004803603602081101561055257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612290565b60405180821515815260200191505060405180910390f35b3480156105a257600080fd5b506105ab6123d0565b6040518082815260200191505060405180910390f35b3480156105cd57600080fd5b506105d661247f565b60405180821515815260200191505060405180910390f35b3480156105fa57600080fd5b506106036125bd565b604051808267ffffffffffffffff16815260200191505060405180910390f35b34801561062f57600080fd5b506106386125d7565b6040518082815260200191505060405180910390f35b34801561065a57600080fd5b5061068b6004803603602081101561067157600080fd5b81019080803561ffff169060200190929190505050612601565b005b34801561069957600080fd5b506106a26126c5565b6040518082815260200191505060405180910390f35b3480156106c457600080fd5b50610707600480360360208110156106db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126cd565b6040518082815260200191505060405180910390f35b34801561072957600080fd5b506107cc6004803603608081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126e5565b005b3480156107da57600080fd5b5061081d600480360360208110156107f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612893565b6040518082815260200191505060405180910390f35b34801561083f57600080fd5b506108826004803603602081101561085657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ab565b005b34801561089057600080fd5b506108d3600480360360208110156108a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129d5565b005b3480156108e157600080fd5b506108ea612ad4565b005b3480156108f857600080fd5b50610901613480565b6040518082815260200191505060405180910390f35b34801561092357600080fd5b506109666004803603602081101561093a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061351b565b60405180821515815260200191505060405180910390f35b34801561098a57600080fd5b5061099361353b565b6040518082815260200191505060405180910390f35b43600c541015610a21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54617267657420526561636865642c204e6f20426c6f636b73204c656674000081525060200191505060405180910390fd5b60011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480610b47575060011515600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9209e33336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b0857600080fd5b505afa158015610b1c573d6000803e3d6000fd5b505050506040513d6020811015610b3257600080fd5b81019080805190602001909291905050501515145b610b9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613a88603d913960400191505060405180910390fd5b610bd666038d7ea4c68000600660019054906101000a900467ffffffffffffffff1667ffffffffffffffff1661361690919063ffffffff16565b341015610c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061398c6027913960400191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600660019054906101000a900467ffffffffffffffff1667ffffffffffffffff169081150290604051600060405180830381858888f19350505050158015610cb4573d6000803e3d6000fd5b50600660119054906101000a900460ff1615610eb157610cd26110f5565b1580610d595750610d016002600d60009054906101000a900461ffff1661ffff1661369e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900461ffff1661ffff1611155b610dcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f596f7520616c7265616479207265676973746572656420746f6461790000000081525060200191505060405180910390fd5b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d60009054906101000a900461ffff16601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160026101000a81548161ffff021916908361ffff160217905550610ea66001600a5461361690919063ffffffff16565b600a81905550611094565b610eb96110f5565b1580610f405750610ee86002600d60009054906101000a900461ffff1661ffff1661369e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900461ffff1661ffff1611155b610fb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f596f7520616c7265616479207265676973746572656420746f6461790000000081525060200191505060405180910390fd5b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d60009054906101000a900461ffff16601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548161ffff021916908361ffff16021790555061108d600160095461361690919063ffffffff16565b6009819055505b60011515600660119054906101000a900460ff1615153373ffffffffffffffffffffffffffffffffffffffff167fd8bd92c8611e98aac59ade24b21b2170d1be16a13b09e922cb7f54289096168d60405160405180910390a4565b600c5481565b600080600660119054906101000a900460ff16156111ec5760011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480156111d45750600d60009054906101000a900461ffff1661ffff16601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900461ffff1661ffff16145b156111e257600190506111e7565b600090505b6112c7565b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480156112b35750600d60009054906101000a900461ffff1661ffff16601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900461ffff1661ffff16145b156112c157600190506112c6565b600090505b5b8091505090565b600080600660119054906101000a900460ff16156112f057600a5490506112f6565b60095490505b8091505090565b600d60009054906101000a900461ffff1681565b600660009054906101000a900460ff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156113af57600080fd5b505afa1580156113c3573d6000803e3d6000fd5b505050506040513d60208110156113d957600080fd5b8101908080519060200190929190505050905090565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b600660119054906101000a900460ff16156114e7576040518060400160405280600d81526020017f696e20706572696f642074776f000000000000000000000000000000000000008152509050611520565b6040518060400160405280600d81526020017f696e20706572696f64204f6e650000000000000000000000000000000000000081525090505b90565b600b60009054906101000a900461ffff1681565b43600c5410156115af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54617267657420526561636865642c204e6f20426c6f636b73204c656674000081525060200191505060405180910390fd5b600660119054906101000a900460ff16156118215760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514801561169e57506116476001600d60009054906101000a900461ffff1661ffff1661369e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900461ffff1661ffff16145b6116f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180613a15603e913960400191505060405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336007546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156117e057600080fd5b505af11580156117f4573d6000803e3d6000fd5b505050506040513d602081101561180a57600080fd5b810190808051906020019092919050505050611a7a565b60011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480156118fb57506118a46001600d60009054906101000a900461ffff1661ffff1661369e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900461ffff1661ffff16145b611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180613a15603e913960400191505060405180910390fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336008546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b505050506040513d6020811015611a6757600080fd5b8101908080519060200190929190505050505b611acd6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361690919063ffffffff16565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b69611b1b6125d7565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361690919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611bb46125d7565b3373ffffffffffffffffffffffffffffffffffffffff167fe66ce38c12c41513487cbba3740437724ca622690e8372e6bee4d90227d7a6ba600660119054906101000a900460ff1660405180821515815260200191505060405180910390a3565b600043905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600660119054906101000a900460ff1615611e265760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015611e0e5750611db76001600d60009054906101000a900461ffff1661ffff1661369e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900461ffff1661ffff16145b15611e1c5760019050611e21565b600090505b611f14565b60011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015611f005750611ea96001600d60009054906101000a900461ffff1661ffff1661369e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900461ffff1661ffff16145b15611f0e5760019050611f13565b600090505b5b8091505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b80600660006101000a81548160ff021916908360ff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b670de0b6b3a76400008167ffffffffffffffff1611156120ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613ac56023913960400191505060405180910390fd5b80600660016101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b680579a814e10a74000047101561221e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806139d46041913960600191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc68056bc75e2d631000009081150290604051600060405180830381858888f1935050505015801561228d573d6000803e3d6000fd5b50565b600060011515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514806123b8575060011515600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9209e33846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561237957600080fd5b505afa15801561238d573d6000803e3d6000fd5b505050506040513d60208110156123a357600080fd5b81019080805190602001909291905050501515145b156123c657600190506123cb565b600090505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b600554905090565b600060011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514806125a7575060011515600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9209e33336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561256857600080fd5b505afa15801561257c573d6000803e3d6000fd5b505050506040513d602081101561259257600080fd5b81019080805190602001909291905050501515145b156125b557600190506125ba565b600090505b90565b600660099054906101000a900467ffffffffffffffff1681565b6000600660119054906101000a900460ff16156125f85760075490506125fe565b60085490505b90565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b80600b60006101000a81548161ffff021916908361ffff16021790555050565b600047905090565b600f6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b83600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600e6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461294f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616360405160405180910390a250565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b43600c541115612b2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806139676025913960400191505060405180910390fd5b60005a9050600080612b3f6112ce565b63ffffffff169050612b6e600b60009054906101000a900461ffff1661ffff164361361690919063ffffffff16565b600c81905550612b9c6001600d60009054906101000a900461ffff1661ffff1661361690919063ffffffff16565b600d60006101000a81548161ffff021916908361ffff160217905550612bdd600660009054906101000a900460ff1660ff168261361690919063ffffffff16565b9050600660119054906101000a900460ff1615612c4b57612c2781600660099054906101000a900467ffffffffffffffff1667ffffffffffffffff166136e890919063ffffffff16565b600881905550612c4460075460095461373290919063ffffffff16565b9150612c9e565b612c7e81600660099054906101000a900467ffffffffffffffff1667ffffffffffffffff166136e890919063ffffffff16565b600781905550612c9b600854600a5461373290919063ffffffff16565b91505b671bc16d674ec80000612caf611324565b1015612d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7468657265206973206e6f206d6f7265207261726520636f696e21000000000081525060200191505060405180910390fd5b670de0b6b3a7640000600660096101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670de0b6b3a76400006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612e1157600080fd5b505af1158015612e25573d6000803e3d6000fd5b505050506040513d6020811015612e3b57600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612f0257600080fd5b505af1158015612f16573d6000803e3d6000fd5b505050506040513d6020811015612f2c57600080fd5b810190808051906020019092919050505050600660119054906101000a900460ff161561313e57600060098190555060006007819055506000600660116101000a81548160ff021916908315150217905550671bc16d674ec80000612f8f611324565b1015612fe75760011515612fa1611324565b600d60009054906101000a900461ffff1661ffff167fda920588f9eeac6bbabf46a792d48e33793847314030a8a4a0da9ee33b85b79760405160405180910390a4613044565b60011515600d60009054906101000a900461ffff1661ffff163373ffffffffffffffffffffffffffffffffffffffff167f606e3779f37acec3a6068501ce145b03e0d5ec89c86d0fbf630d07587115784960405160405180910390a45b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336130aa600660009054906101000a900460ff1660ff1660085461373290919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156130fd57600080fd5b505af1158015613111573d6000803e3d6000fd5b505050506040513d602081101561312757600080fd5b8101908080519060200190929190505050506133e0565b6000600a8190555060006008819055506001600660116101000a81548160ff021916908315150217905550671bc16d674ec8000061317a611324565b10156131d2576001151561318c611324565b600d60009054906101000a900461ffff1661ffff167fda920588f9eeac6bbabf46a792d48e33793847314030a8a4a0da9ee33b85b79760405160405180910390a461322f565b60011515600d60009054906101000a900461ffff1661ffff163373ffffffffffffffffffffffffffffffffffffffff167f606e3779f37acec3a6068501ce145b03e0d5ec89c86d0fbf630d07587115784960405160405180910390a45b6132a7613259600660009054906101000a900460ff1660ff1660075461373290919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361690919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33613350600660009054906101000a900460ff1660ff1660075461373290919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156133a357600080fd5b505af11580156133b7573d6000803e3d6000fd5b505050506040513d60208110156133cd57600080fd5b8101908080519060200190929190505050505b6133f35a8461369e90919063ffffffff16565b60058190555061341061cf0860055461361690919063ffffffff16565b6005819055506000613431633b9aca0060055461373290919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613479573d6000803e3d6000fd5b5050505050565b600043600c5410156134fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54617267657420526561636865642c204e6f20426c6f636b73204c656674000081525060200191505060405180910390fd5b613516613505611c15565b600c5461369e90919063ffffffff16565b905090565b60106020528060005260406000206000915054906101000a900460ff1681565b600060016135476112ce565b63ffffffff1610156135a4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180613a536035913960400191505060405180910390fd5b60006135ae6112ce565b63ffffffff1690506135db600660009054906101000a900460ff1660ff168261361690919063ffffffff16565b905061361081600660099054906101000a900467ffffffffffffffff1667ffffffffffffffff166136e890919063ffffffff16565b91505090565b600080828401905083811015613694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006136e083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506137b8565b905092915050565b600061372a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613878565b905092915050565b60008083141561374557600090506137b2565b600082840290508284828161375657fe5b04146137ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139b36021913960400191505060405180910390fd5b809150505b92915050565b6000838311158290613865576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561382a57808201518184015260208101905061380f565b50505050905090810190601f1680156138575780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290613924576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138e95780820151818401526020810190506138ce565b50505050905090810190601f1680156139165780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161393057fe5b04905080915050939250505056fe4f6e6c7920746865206d616e616765722063616e20706572666f6d20746869732066756374696f6e4c6f636b656420756e74696c20626c6f636b20746172676574206973206163686965766564596f75206d75737420636f766572207468652078446169207472616e73616374696f6e20666565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774d7573742068617665206d6f7265207468656e20313031207864616920696e20636f6e7472617420746f20736166656c792072656d6f7665203130302078646169596f7520646964206e6f7420726567697374657220666f7220796573746572646179277320706572696f64204f7220616c726561647920636c61696d656443616e27742063616c63756c6174652062616c616e63652062656361757365206e6f206f6e6520697320696e2074686520706f6f6c596f752076657269667920796f7572206163636f756e742077697468206272696768744944206265666f726520796f752063616e20726567697374657243616e7420736574207468652066656520686967686572207468656e20312078446169a26469706673582212207c325252b525dfe2afd53ea2946429165e17506c259b611aa6ba680581d799ab64736f6c6343000706003300000000000000000000000057e93bb58268de818b42e3795c97bad58afcd3fe00000000000000000000000046c8ae2ff9f0262fe1303709106a6749076b70080000000000000000000000006fa0e9a561fc855735defb17b76d31a0ee8cca0b0000000000000000000000006fa0e9a561fc855735defb17b76d31a0ee8cca0b

Deployed Bytecode

0x6080604052600436106101e75760003560e01c80636cc8c59011610102578063bf989b6e11610095578063ee4be28811610064578063ee4be288146108d5578063f14a4213146108ec578063fa0fca8414610917578063ffd824ac1461097e576101f6565b8063bf989b6e1461071d578063cb1bc723146107ce578063d0ebdbe714610833578063e289451914610884576101f6565b80639854f32f116100d15780639854f32f14610623578063a308fb641461064e578063a3a526511461068d578063ad6e2148146106b8576101f6565b80636cc8c5901461052f578063710535461461059657806380007e83146105c157806396365d44146105ee576101f6565b80634cfea68a1161017a57806359ec0a8b1161014957806359ec0a8b146104685780635a32a262146104955780635a630d7a146104d357806365c7bf4114610518576101f6565b80634cfea68a146103a65780634e71d92d146103d5578063534cfb60146103ec5780635475487114610417576101f6565b8063316fda0f116101b6578063316fda0f1461028e5780633668984a146102bd578063380f1b36146102eb5780633887abb714610316576101f6565b8063037165f4146101fb5780631aa3a008146102265780631b4d87a514610230578063212af18d1461025d576101f6565b366101f6576101f46109a9565b005b600080fd5b34801561020757600080fd5b506102106110ef565b6040518082815260200191505060405180910390f35b61022e6109a9565b005b34801561023c57600080fd5b506102456110f5565b60405180821515815260200191505060405180910390f35b34801561026957600080fd5b506102726112ce565b604051808263ffffffff16815260200191505060405180910390f35b34801561029a57600080fd5b506102a36112fd565b604051808261ffff16815260200191505060405180910390f35b3480156102c957600080fd5b506102d2611311565b604051808260ff16815260200191505060405180910390f35b3480156102f757600080fd5b50610300611324565b6040518082815260200191505060405180910390f35b34801561032257600080fd5b5061032b6113ef565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561036b578082015181840152602081019050610350565b50505050905090810190601f1680156103985780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103b257600080fd5b506103bb611523565b604051808261ffff16815260200191505060405180910390f35b3480156103e157600080fd5b506103ea611537565b005b3480156103f857600080fd5b50610401611c15565b6040518082815260200191505060405180910390f35b34801561042357600080fd5b506104666004803603602081101561043a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c1d565b005b34801561047457600080fd5b5061047d611d1c565b60405180821515815260200191505060405180910390f35b3480156104a157600080fd5b506104d1600480360360208110156104b857600080fd5b81019080803560ff169060200190929190505050611f1b565b005b3480156104df57600080fd5b50610516600480360360208110156104f657600080fd5b81019080803567ffffffffffffffff169060200190929190505050611fdd565b005b34801561052457600080fd5b5061052d612118565b005b34801561053b57600080fd5b5061057e6004803603602081101561055257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612290565b60405180821515815260200191505060405180910390f35b3480156105a257600080fd5b506105ab6123d0565b6040518082815260200191505060405180910390f35b3480156105cd57600080fd5b506105d661247f565b60405180821515815260200191505060405180910390f35b3480156105fa57600080fd5b506106036125bd565b604051808267ffffffffffffffff16815260200191505060405180910390f35b34801561062f57600080fd5b506106386125d7565b6040518082815260200191505060405180910390f35b34801561065a57600080fd5b5061068b6004803603602081101561067157600080fd5b81019080803561ffff169060200190929190505050612601565b005b34801561069957600080fd5b506106a26126c5565b6040518082815260200191505060405180910390f35b3480156106c457600080fd5b50610707600480360360208110156106db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126cd565b6040518082815260200191505060405180910390f35b34801561072957600080fd5b506107cc6004803603608081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126e5565b005b3480156107da57600080fd5b5061081d600480360360208110156107f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612893565b6040518082815260200191505060405180910390f35b34801561083f57600080fd5b506108826004803603602081101561085657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ab565b005b34801561089057600080fd5b506108d3600480360360208110156108a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129d5565b005b3480156108e157600080fd5b506108ea612ad4565b005b3480156108f857600080fd5b50610901613480565b6040518082815260200191505060405180910390f35b34801561092357600080fd5b506109666004803603602081101561093a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061351b565b60405180821515815260200191505060405180910390f35b34801561098a57600080fd5b5061099361353b565b6040518082815260200191505060405180910390f35b43600c541015610a21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54617267657420526561636865642c204e6f20426c6f636b73204c656674000081525060200191505060405180910390fd5b60011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480610b47575060011515600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9209e33336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b0857600080fd5b505afa158015610b1c573d6000803e3d6000fd5b505050506040513d6020811015610b3257600080fd5b81019080805190602001909291905050501515145b610b9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613a88603d913960400191505060405180910390fd5b610bd666038d7ea4c68000600660019054906101000a900467ffffffffffffffff1667ffffffffffffffff1661361690919063ffffffff16565b341015610c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061398c6027913960400191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600660019054906101000a900467ffffffffffffffff1667ffffffffffffffff169081150290604051600060405180830381858888f19350505050158015610cb4573d6000803e3d6000fd5b50600660119054906101000a900460ff1615610eb157610cd26110f5565b1580610d595750610d016002600d60009054906101000a900461ffff1661ffff1661369e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900461ffff1661ffff1611155b610dcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f596f7520616c7265616479207265676973746572656420746f6461790000000081525060200191505060405180910390fd5b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d60009054906101000a900461ffff16601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160026101000a81548161ffff021916908361ffff160217905550610ea66001600a5461361690919063ffffffff16565b600a81905550611094565b610eb96110f5565b1580610f405750610ee86002600d60009054906101000a900461ffff1661ffff1661369e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900461ffff1661ffff1611155b610fb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f596f7520616c7265616479207265676973746572656420746f6461790000000081525060200191505060405180910390fd5b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d60009054906101000a900461ffff16601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548161ffff021916908361ffff16021790555061108d600160095461361690919063ffffffff16565b6009819055505b60011515600660119054906101000a900460ff1615153373ffffffffffffffffffffffffffffffffffffffff167fd8bd92c8611e98aac59ade24b21b2170d1be16a13b09e922cb7f54289096168d60405160405180910390a4565b600c5481565b600080600660119054906101000a900460ff16156111ec5760011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480156111d45750600d60009054906101000a900461ffff1661ffff16601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900461ffff1661ffff16145b156111e257600190506111e7565b600090505b6112c7565b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480156112b35750600d60009054906101000a900461ffff1661ffff16601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900461ffff1661ffff16145b156112c157600190506112c6565b600090505b5b8091505090565b600080600660119054906101000a900460ff16156112f057600a5490506112f6565b60095490505b8091505090565b600d60009054906101000a900461ffff1681565b600660009054906101000a900460ff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156113af57600080fd5b505afa1580156113c3573d6000803e3d6000fd5b505050506040513d60208110156113d957600080fd5b8101908080519060200190929190505050905090565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b600660119054906101000a900460ff16156114e7576040518060400160405280600d81526020017f696e20706572696f642074776f000000000000000000000000000000000000008152509050611520565b6040518060400160405280600d81526020017f696e20706572696f64204f6e650000000000000000000000000000000000000081525090505b90565b600b60009054906101000a900461ffff1681565b43600c5410156115af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54617267657420526561636865642c204e6f20426c6f636b73204c656674000081525060200191505060405180910390fd5b600660119054906101000a900460ff16156118215760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514801561169e57506116476001600d60009054906101000a900461ffff1661ffff1661369e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900461ffff1661ffff16145b6116f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180613a15603e913960400191505060405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336007546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156117e057600080fd5b505af11580156117f4573d6000803e3d6000fd5b505050506040513d602081101561180a57600080fd5b810190808051906020019092919050505050611a7a565b60011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480156118fb57506118a46001600d60009054906101000a900461ffff1661ffff1661369e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900461ffff1661ffff16145b611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180613a15603e913960400191505060405180910390fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336008546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b505050506040513d6020811015611a6757600080fd5b8101908080519060200190929190505050505b611acd6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361690919063ffffffff16565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b69611b1b6125d7565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361690919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611bb46125d7565b3373ffffffffffffffffffffffffffffffffffffffff167fe66ce38c12c41513487cbba3740437724ca622690e8372e6bee4d90227d7a6ba600660119054906101000a900460ff1660405180821515815260200191505060405180910390a3565b600043905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600660119054906101000a900460ff1615611e265760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015611e0e5750611db76001600d60009054906101000a900461ffff1661ffff1661369e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900461ffff1661ffff16145b15611e1c5760019050611e21565b600090505b611f14565b60011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015611f005750611ea96001600d60009054906101000a900461ffff1661ffff1661369e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900461ffff1661ffff16145b15611f0e5760019050611f13565b600090505b5b8091505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b80600660006101000a81548160ff021916908360ff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b670de0b6b3a76400008167ffffffffffffffff1611156120ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613ac56023913960400191505060405180910390fd5b80600660016101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b680579a814e10a74000047101561221e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806139d46041913960600191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc68056bc75e2d631000009081150290604051600060405180830381858888f1935050505015801561228d573d6000803e3d6000fd5b50565b600060011515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514806123b8575060011515600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9209e33846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561237957600080fd5b505afa15801561238d573d6000803e3d6000fd5b505050506040513d60208110156123a357600080fd5b81019080805190602001909291905050501515145b156123c657600190506123cb565b600090505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b600554905090565b600060011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514806125a7575060011515600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9209e33336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561256857600080fd5b505afa15801561257c573d6000803e3d6000fd5b505050506040513d602081101561259257600080fd5b81019080805190602001909291905050501515145b156125b557600190506125ba565b600090505b90565b600660099054906101000a900467ffffffffffffffff1681565b6000600660119054906101000a900460ff16156125f85760075490506125fe565b60085490505b90565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b80600b60006101000a81548161ffff021916908361ffff16021790555050565b600047905090565b600f6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b83600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600e6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461294f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616360405160405180910390a250565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061393f6028913960400191505060405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b43600c541115612b2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806139676025913960400191505060405180910390fd5b60005a9050600080612b3f6112ce565b63ffffffff169050612b6e600b60009054906101000a900461ffff1661ffff164361361690919063ffffffff16565b600c81905550612b9c6001600d60009054906101000a900461ffff1661ffff1661361690919063ffffffff16565b600d60006101000a81548161ffff021916908361ffff160217905550612bdd600660009054906101000a900460ff1660ff168261361690919063ffffffff16565b9050600660119054906101000a900460ff1615612c4b57612c2781600660099054906101000a900467ffffffffffffffff1667ffffffffffffffff166136e890919063ffffffff16565b600881905550612c4460075460095461373290919063ffffffff16565b9150612c9e565b612c7e81600660099054906101000a900467ffffffffffffffff1667ffffffffffffffff166136e890919063ffffffff16565b600781905550612c9b600854600a5461373290919063ffffffff16565b91505b671bc16d674ec80000612caf611324565b1015612d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7468657265206973206e6f206d6f7265207261726520636f696e21000000000081525060200191505060405180910390fd5b670de0b6b3a7640000600660096101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670de0b6b3a76400006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612e1157600080fd5b505af1158015612e25573d6000803e3d6000fd5b505050506040513d6020811015612e3b57600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612f0257600080fd5b505af1158015612f16573d6000803e3d6000fd5b505050506040513d6020811015612f2c57600080fd5b810190808051906020019092919050505050600660119054906101000a900460ff161561313e57600060098190555060006007819055506000600660116101000a81548160ff021916908315150217905550671bc16d674ec80000612f8f611324565b1015612fe75760011515612fa1611324565b600d60009054906101000a900461ffff1661ffff167fda920588f9eeac6bbabf46a792d48e33793847314030a8a4a0da9ee33b85b79760405160405180910390a4613044565b60011515600d60009054906101000a900461ffff1661ffff163373ffffffffffffffffffffffffffffffffffffffff167f606e3779f37acec3a6068501ce145b03e0d5ec89c86d0fbf630d07587115784960405160405180910390a45b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336130aa600660009054906101000a900460ff1660ff1660085461373290919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156130fd57600080fd5b505af1158015613111573d6000803e3d6000fd5b505050506040513d602081101561312757600080fd5b8101908080519060200190929190505050506133e0565b6000600a8190555060006008819055506001600660116101000a81548160ff021916908315150217905550671bc16d674ec8000061317a611324565b10156131d2576001151561318c611324565b600d60009054906101000a900461ffff1661ffff167fda920588f9eeac6bbabf46a792d48e33793847314030a8a4a0da9ee33b85b79760405160405180910390a461322f565b60011515600d60009054906101000a900461ffff1661ffff163373ffffffffffffffffffffffffffffffffffffffff167f606e3779f37acec3a6068501ce145b03e0d5ec89c86d0fbf630d07587115784960405160405180910390a45b6132a7613259600660009054906101000a900460ff1660ff1660075461373290919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361690919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33613350600660009054906101000a900460ff1660ff1660075461373290919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156133a357600080fd5b505af11580156133b7573d6000803e3d6000fd5b505050506040513d60208110156133cd57600080fd5b8101908080519060200190929190505050505b6133f35a8461369e90919063ffffffff16565b60058190555061341061cf0860055461361690919063ffffffff16565b6005819055506000613431633b9aca0060055461373290919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613479573d6000803e3d6000fd5b5050505050565b600043600c5410156134fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54617267657420526561636865642c204e6f20426c6f636b73204c656674000081525060200191505060405180910390fd5b613516613505611c15565b600c5461369e90919063ffffffff16565b905090565b60106020528060005260406000206000915054906101000a900460ff1681565b600060016135476112ce565b63ffffffff1610156135a4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180613a536035913960400191505060405180910390fd5b60006135ae6112ce565b63ffffffff1690506135db600660009054906101000a900460ff1660ff168261361690919063ffffffff16565b905061361081600660099054906101000a900467ffffffffffffffff1667ffffffffffffffff166136e890919063ffffffff16565b91505090565b600080828401905083811015613694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006136e083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506137b8565b905092915050565b600061372a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613878565b905092915050565b60008083141561374557600090506137b2565b600082840290508284828161375657fe5b04146137ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139b36021913960400191505060405180910390fd5b809150505b92915050565b6000838311158290613865576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561382a57808201518184015260208101905061380f565b50505050905090810190601f1680156138575780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290613924576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138e95780820151818401526020810190506138ce565b50505050905090810190601f1680156139165780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161393057fe5b04905080915050939250505056fe4f6e6c7920746865206d616e616765722063616e20706572666f6d20746869732066756374696f6e4c6f636b656420756e74696c20626c6f636b20746172676574206973206163686965766564596f75206d75737420636f766572207468652078446169207472616e73616374696f6e20666565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774d7573742068617665206d6f7265207468656e20313031207864616920696e20636f6e7472617420746f20736166656c792072656d6f7665203130302078646169596f7520646964206e6f7420726567697374657220666f7220796573746572646179277320706572696f64204f7220616c726561647920636c61696d656443616e27742063616c63756c6174652062616c616e63652062656361757365206e6f206f6e6520697320696e2074686520706f6f6c596f752076657269667920796f7572206163636f756e742077697468206272696768744944206265666f726520796f752063616e20726567697374657243616e7420736574207468652066656520686967686572207468656e20312078446169a26469706673582212207c325252b525dfe2afd53ea2946429165e17506c259b611aa6ba680581d799ab64736f6c63430007060033

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

00000000000000000000000057e93bb58268de818b42e3795c97bad58afcd3fe00000000000000000000000046c8ae2ff9f0262fe1303709106a6749076b70080000000000000000000000006fa0e9a561fc855735defb17b76d31a0ee8cca0b0000000000000000000000006fa0e9a561fc855735defb17b76d31a0ee8cca0b

-----Decoded View---------------
Arg [0] : _rareAddress (address): 0x57e93BB58268dE818B42E3795c97BAD58aFCD3Fe
Arg [1] : _brightIDcontract (address): 0x46C8AE2ff9f0262fE1303709106a6749076B7008
Arg [2] : _stakeAddress (address): 0x6fa0E9a561FC855735dEFb17B76d31A0eE8cca0B
Arg [3] : _lotteryContract (address): 0x6fa0E9a561FC855735dEFb17B76d31A0eE8cca0B

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000057e93bb58268de818b42e3795c97bad58afcd3fe
Arg [1] : 00000000000000000000000046c8ae2ff9f0262fe1303709106a6749076b7008
Arg [2] : 0000000000000000000000006fa0e9a561fc855735defb17b76d31a0ee8cca0b
Arg [3] : 0000000000000000000000006fa0e9a561fc855735defb17b76d31a0ee8cca0b


Block Transaction Gas Used Reward
view all blocks validated

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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