Contract Address Details

0x699241396d0e54240A510C861186fA583F76fc37

Contract Name
SexyDogeMiner
Creator
0x84d220–79e70d at 0x4e0fe3–ed2a8b
Balance
1,324.116329255759366397 Doge
Tokens
Fetching tokens...
Transactions
113 Transactions
Transfers
0 Transfers
Gas Used
13,460,781
Last Balance Update
26288656
Contract name:
SexyDogeMiner




Optimization enabled
false
Compiler version
v0.8.9+commit.e5eed63a




EVM Version
default




Verified at
2022-09-20T00:24:28.176778Z

Contract source code

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

library SafeMath {

  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a / b;
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }

  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}

/**

  Sexy Doge Miner Farm
  Mine, Earn, Compound and Sell. 
  5% daily daily Rate
  8% Referral Bonus, will go directly to referrer wallet.
  2% stacking compound bonus every 12 hrs, max of 12 times(6days , 24% total bonus)
  48 hours cut off time. Earnings will stop when cut off time hits 0.
  50 WDOGE minimum investment.
  5,000,000 max deposits per wallet.
  60% feedback for withdrawals that will be done not after 5 consecutive compounds.(2.5 days)
  Withdrawals will reset daily compound count back to 0.
  *Feedback Tax will stay in the contract.

*/

contract SexyDogeMiner {
    using SafeMath for uint256;
        
    uint256 public EGGS_TO_HIRE_1MINERS = 1728000;
    uint256 public PERCENTS_DIVIDER = 1000;
    uint256 public REFERRAL = 80;
    uint256 private DEV = 15;
    uint256 private MKT = 5; 
    uint256 public MARKET_EGGS_DIVISOR = 2;
    uint256 public MARKET_EGGS_DIVISOR_SELL = 1;

    uint256 public MIN_INVEST_LIMIT = 1 ether;
    uint256 public WALLET_DEPOSIT_LIMIT = 5000000 ether; 

	uint256 public COMPOUND_BONUS = 20; 
	uint256 public COMPOUND_BONUS_MAX_TIMES = 6; 
    uint256 public COMPOUND_STEP = 12 * 60 * 60; 

    uint256 public WITHDRAWAL_TAX = 600;
    uint256 public COMPOUND_FOR_NO_TAX_WITHDRAWAL = 5; // compound times, for no tax withdrawal. 

    uint256 public totalStaked;
    uint256 public totalDeposits;
    uint256 public totalCompound;
    uint256 public totalRefBonus;
    uint256 public totalWithdrawn;

    uint256 private marketEggs;
    uint256 PSN = 10000;
    uint256 PSNH = 5000;
    bool public contractStarted;

	uint256 public CUTOFF_STEP = 48 * 60 * 60;
	uint256 public WITHDRAW_COOLDOWN = 4 * 60 * 60;

    address payable private owner;
    address payable private dev1;
    address payable private dev2;
    address payable private mkt;

    struct User {
        uint256 initialDeposit;
        uint256 userDeposit;
        uint256 miners;
        uint256 claimedEggs;
        uint256 lastHatch;
        address referrer;
        uint256 referralsCount;
        uint256 referralEggRewards;
        uint256 totalWithdrawn;
        uint256 dailyCompoundBonus;
        uint256 lastWithdrawTime;
    }

    mapping(address => User) public users;

    constructor() {
        owner = payable(msg.sender);
        dev1 = payable(0x84D2201BfB7d32643d25cFfED59DC3efe579E70D);
        dev2 = payable(0x40A72DeFC72ca775CB759296476E3141EeC57290);
        mkt = payable(0x7Ee01525bEdaa4CCf2758663E0DE7f3e6C6D5b0b);
    }

	function isContract(address addr) internal view returns (bool) {
        uint size;
        assembly { size := extcodesize(addr) }
        return size > 0;
    }

    function hatchEggs(bool isCompound) public {
        User storage user = users[msg.sender];
        require(contractStarted, "Contract not yet Started.");

        uint256 eggsUsed = getMyEggs();
        uint256 eggsForCompound = eggsUsed;

        if(isCompound) {
            uint256 dailyCompoundBonus = getDailyCompoundBonus(msg.sender, eggsForCompound);
            eggsForCompound = eggsForCompound.add(dailyCompoundBonus);
            uint256 eggsUsedValue = calculateEggSell(eggsForCompound);
            user.userDeposit = user.userDeposit.add(eggsUsedValue);
            totalCompound = totalCompound.add(eggsUsedValue);
        } 

        if(block.timestamp.sub(user.lastHatch) >= COMPOUND_STEP) {
            if(user.dailyCompoundBonus < COMPOUND_BONUS_MAX_TIMES) {
                user.dailyCompoundBonus = user.dailyCompoundBonus.add(1);
            }
        }
        
        user.miners = user.miners.add(eggsForCompound.div(EGGS_TO_HIRE_1MINERS));
        user.claimedEggs = 0;
        user.lastHatch = block.timestamp;

        marketEggs = marketEggs.add(eggsUsed.div(MARKET_EGGS_DIVISOR));
    }

    function seedMarket() public payable{
        if (!contractStarted) {
    		if (msg.sender == owner) {
    		    require(marketEggs == 0);
    			contractStarted = true;
                marketEggs = 86400000000;
                buyEggs(msg.sender);
    		} else revert("Contract not yet started.");
    	}
    }

    function sellEggs() public{
        require(contractStarted);
        User storage user = users[msg.sender];
        uint256 hasEggs = getMyEggs();
        uint256 eggValue = calculateEggSell(hasEggs);
        
        /** if user compound < to mandatory compound days**/
        if(user.dailyCompoundBonus < COMPOUND_FOR_NO_TAX_WITHDRAWAL){
            //daily compound bonus count will not reset and eggValue will be deducted with 60% feedback tax.
            eggValue = eggValue.sub(eggValue.mul(WITHDRAWAL_TAX).div(PERCENTS_DIVIDER));
        }else{
            //set daily compound bonus count to 0 and eggValue will remain without deductions
             user.dailyCompoundBonus = 0;   
        }
        
        user.lastWithdrawTime = block.timestamp;
        user.claimedEggs = 0; 
        user.lastHatch = block.timestamp;
        marketEggs = marketEggs.add(hasEggs.div(MARKET_EGGS_DIVISOR_SELL));
        
        if(getBalance() < eggValue) {
            eggValue = getBalance();
        }

        uint256 eggsPayout = eggValue.sub(payFees(eggValue));
        payable(address(msg.sender)).transfer(eggsPayout);
        user.totalWithdrawn = user.totalWithdrawn.add(eggsPayout);
        totalWithdrawn = totalWithdrawn.add(eggsPayout);
    }

    function buyEggs(address ref) public payable{
        require(contractStarted);
        User storage user = users[msg.sender];
        require(msg.value >= MIN_INVEST_LIMIT, "Mininum investment not met.");
        require(user.initialDeposit.add(msg.value) <= WALLET_DEPOSIT_LIMIT, "Max deposit limit reached.");
        uint256 eggsBought = calculateEggBuy(msg.value, address(this).balance.sub(msg.value));
        user.userDeposit = user.userDeposit.add(msg.value);
        user.initialDeposit = user.initialDeposit.add(msg.value);
        user.claimedEggs = user.claimedEggs.add(eggsBought);

        if (user.referrer == address(0)) {
            if (ref != msg.sender) {
                user.referrer = ref;
            }

            address upline1 = user.referrer;
            if (upline1 != address(0)) {
                users[upline1].referralsCount = users[upline1].referralsCount.add(1);
            }
        }
                
        if (user.referrer != address(0)) {
            address upline = user.referrer;
            if (upline != address(0)) {
                uint256 refRewards = msg.value.mul(REFERRAL).div(PERCENTS_DIVIDER);
                payable(address(upline)).transfer(refRewards);
                users[upline].referralEggRewards = users[upline].referralEggRewards.add(refRewards);
                totalRefBonus = totalRefBonus.add(refRewards);
            }
        }

        uint256 eggsPayout = payFees(msg.value);
        totalStaked = totalStaked.add(msg.value.sub(eggsPayout));
        totalDeposits = totalDeposits.add(1);
        hatchEggs(false);
    }

    function payFees(uint256 eggValue) internal returns(uint256){
        uint256 development = eggValue.mul(DEV).div(PERCENTS_DIVIDER);
        uint256 marketing = eggValue.mul(MKT).div(PERCENTS_DIVIDER);
        owner.transfer(development);
        dev1.transfer(development);
        dev2.transfer(development);
        mkt.transfer(marketing);
        return marketing.add(development.mul(3));
    }

    function getDailyCompoundBonus(address _adr, uint256 amount) public view returns(uint256){
        if(users[_adr].dailyCompoundBonus == 0) {
            return 0;
        } else {
            uint256 totalBonus = users[_adr].dailyCompoundBonus.mul(COMPOUND_BONUS); 
            uint256 result = amount.mul(totalBonus).div(PERCENTS_DIVIDER);
            return result;
        }
    }

    function getUserInfo(address _adr) public view returns(uint256 _initialDeposit, uint256 _userDeposit, uint256 _miners,
     uint256 _claimedEggs, uint256 _lastHatch, address _referrer, uint256 _referrals,
	 uint256 _totalWithdrawn, uint256 _referralEggRewards, uint256 _dailyCompoundBonus, uint256 _lastWithdrawTime) {
         _initialDeposit = users[_adr].initialDeposit;
         _userDeposit = users[_adr].userDeposit;
         _miners = users[_adr].miners;
         _claimedEggs = users[_adr].claimedEggs;
         _lastHatch = users[_adr].lastHatch;
         _referrer = users[_adr].referrer;
         _referrals = users[_adr].referralsCount;
         _totalWithdrawn = users[_adr].totalWithdrawn;
         _referralEggRewards = users[_adr].referralEggRewards;
         _dailyCompoundBonus = users[_adr].dailyCompoundBonus;
         _lastWithdrawTime = users[_adr].lastWithdrawTime;
	}

    function getBalance() public view returns (uint256) {
        return address(this).balance;
	}

    function getTimeStamp() public view returns (uint256) {
        return block.timestamp;
    }

    function getAvailableEarnings(address _adr) public view returns(uint256) {
        uint256 userEggs = users[_adr].claimedEggs.add(getEggsSinceLastHatch(_adr));
        return calculateEggSell(userEggs);
    }

    function calculateTrade(uint256 rt,uint256 rs, uint256 bs) public view returns(uint256){
        return SafeMath.div(SafeMath.mul(PSN, bs), SafeMath.add(PSNH, SafeMath.div(SafeMath.add(SafeMath.mul(PSN, rs), SafeMath.mul(PSNH, rt)), rt)));
    }

    function calculateEggSell(uint256 eggs) public view returns(uint256){
        return calculateTrade(eggs, marketEggs, getBalance());
    }

    function calculateEggBuy(uint256 eth,uint256 contractBalance) public view returns(uint256){
        return calculateTrade(eth, contractBalance, marketEggs);
    }

    function calculateEggBuySimple(uint256 eth) public view returns(uint256){
        return calculateEggBuy(eth, getBalance());
    }

    function getEggsYield(uint256 amount) public view returns(uint256,uint256) {
        uint256 eggsAmount = calculateEggBuy(amount , getBalance().add(amount).sub(amount));
        uint256 miners = eggsAmount.div(EGGS_TO_HIRE_1MINERS);
        uint256 day = 1 days;
        uint256 eggsPerDay = day.mul(miners);
        uint256 earningsPerDay = calculateEggSellForYield(eggsPerDay, amount);
        return(miners, earningsPerDay);
    }

    function calculateEggSellForYield(uint256 eggs,uint256 amount) public view returns(uint256){
        return calculateTrade(eggs,marketEggs, getBalance().add(amount));
    }

    function getSiteInfo() public view returns (uint256 _totalStaked, uint256 _totalDeposits, uint256 _totalCompound, uint256 _totalRefBonus) {
        return (totalStaked, totalDeposits, totalCompound, totalRefBonus);
    }

    function getMyMiners() public view returns(uint256){
        return users[msg.sender].miners;
    }

    function getMyEggs() public view returns(uint256){
        return users[msg.sender].claimedEggs.add(getEggsSinceLastHatch(msg.sender));
    }

    function getEggsSinceLastHatch(address adr) public view returns(uint256){
        uint256 secondsSinceLastHatch = block.timestamp.sub(users[adr].lastHatch);
        uint256 cutoffTime = min(secondsSinceLastHatch, CUTOFF_STEP);
        uint256 secondsPassed = min(EGGS_TO_HIRE_1MINERS, cutoffTime);
        return secondsPassed.mul(users[adr].miners);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return a < b ? a : b;
    }

    function CHANGE_OWNERSHIP(address value) external {
        require(msg.sender == owner, "Admin use only.");
        owner = payable(value);
    }

    function CHANGE_DEV1(address value) external {
        require(msg.sender == dev1, "Admin use only.");
        dev1 = payable(value);
    }

    function CHANGE_DEV2(address value) external {
        require(msg.sender == dev2, "Admin use only.");
        dev2 = payable(value);
    }

    function CHANGE_MKT(address value) external {
        require(msg.sender == mkt, "Admin use only.");
        mkt = payable(value);
    }

    
    
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"CHANGE_DEV1","inputs":[{"type":"address","name":"value","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"CHANGE_DEV2","inputs":[{"type":"address","name":"value","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"CHANGE_MKT","inputs":[{"type":"address","name":"value","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"CHANGE_OWNERSHIP","inputs":[{"type":"address","name":"value","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"COMPOUND_BONUS","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"COMPOUND_BONUS_MAX_TIMES","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"COMPOUND_FOR_NO_TAX_WITHDRAWAL","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"COMPOUND_STEP","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"CUTOFF_STEP","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"EGGS_TO_HIRE_1MINERS","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MARKET_EGGS_DIVISOR","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MARKET_EGGS_DIVISOR_SELL","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MIN_INVEST_LIMIT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"PERCENTS_DIVIDER","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"REFERRAL","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"WALLET_DEPOSIT_LIMIT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"WITHDRAWAL_TAX","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"WITHDRAW_COOLDOWN","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"buyEggs","inputs":[{"type":"address","name":"ref","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"calculateEggBuy","inputs":[{"type":"uint256","name":"eth","internalType":"uint256"},{"type":"uint256","name":"contractBalance","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"calculateEggBuySimple","inputs":[{"type":"uint256","name":"eth","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"calculateEggSell","inputs":[{"type":"uint256","name":"eggs","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"calculateEggSellForYield","inputs":[{"type":"uint256","name":"eggs","internalType":"uint256"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"calculateTrade","inputs":[{"type":"uint256","name":"rt","internalType":"uint256"},{"type":"uint256","name":"rs","internalType":"uint256"},{"type":"uint256","name":"bs","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"contractStarted","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getAvailableEarnings","inputs":[{"type":"address","name":"_adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getBalance","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getDailyCompoundBonus","inputs":[{"type":"address","name":"_adr","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getEggsSinceLastHatch","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"","internalType":"uint256"}],"name":"getEggsYield","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getMyEggs","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getMyMiners","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"_totalStaked","internalType":"uint256"},{"type":"uint256","name":"_totalDeposits","internalType":"uint256"},{"type":"uint256","name":"_totalCompound","internalType":"uint256"},{"type":"uint256","name":"_totalRefBonus","internalType":"uint256"}],"name":"getSiteInfo","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getTimeStamp","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"_initialDeposit","internalType":"uint256"},{"type":"uint256","name":"_userDeposit","internalType":"uint256"},{"type":"uint256","name":"_miners","internalType":"uint256"},{"type":"uint256","name":"_claimedEggs","internalType":"uint256"},{"type":"uint256","name":"_lastHatch","internalType":"uint256"},{"type":"address","name":"_referrer","internalType":"address"},{"type":"uint256","name":"_referrals","internalType":"uint256"},{"type":"uint256","name":"_totalWithdrawn","internalType":"uint256"},{"type":"uint256","name":"_referralEggRewards","internalType":"uint256"},{"type":"uint256","name":"_dailyCompoundBonus","internalType":"uint256"},{"type":"uint256","name":"_lastWithdrawTime","internalType":"uint256"}],"name":"getUserInfo","inputs":[{"type":"address","name":"_adr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"hatchEggs","inputs":[{"type":"bool","name":"isCompound","internalType":"bool"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"seedMarket","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"sellEggs","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalCompound","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalDeposits","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalRefBonus","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalStaked","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalWithdrawn","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"initialDeposit","internalType":"uint256"},{"type":"uint256","name":"userDeposit","internalType":"uint256"},{"type":"uint256","name":"miners","internalType":"uint256"},{"type":"uint256","name":"claimedEggs","internalType":"uint256"},{"type":"uint256","name":"lastHatch","internalType":"uint256"},{"type":"address","name":"referrer","internalType":"address"},{"type":"uint256","name":"referralsCount","internalType":"uint256"},{"type":"uint256","name":"referralEggRewards","internalType":"uint256"},{"type":"uint256","name":"totalWithdrawn","internalType":"uint256"},{"type":"uint256","name":"dailyCompoundBonus","internalType":"uint256"},{"type":"uint256","name":"lastWithdrawTime","internalType":"uint256"}],"name":"users","inputs":[{"type":"address","name":"","internalType":"address"}]}]
            

Contract Creation Code

0x6080604052621a5e006000556103e86001556050600255600f600355600560045560026005556001600655670de0b6b3a76400006007556a0422ca8b0a00a42500000060085560146009556006600a5561a8c0600b55610258600c556005600d556127106014556113886015556202a30060175561384060185534801561008557600080fd5b5033601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507384d2201bfb7d32643d25cffed59dc3efe579e70d601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507340a72defc72ca775cb759296476e3141eec57290601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737ee01525bedaa4ccf2758663e0de7f3e6c6d5b0b601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612b39806101d56000396000f3fe6080604052600436106102675760003560e01c806366b0154c11610144578063a87430ba116100b6578063cd329fc31161007a578063cd329fc31461095b578063d7206d5d14610986578063d7c8843b146109b1578063da235b22146109ee578063db66386514610a19578063f6f6288614610a3557610267565b8063a87430ba14610843578063bdd1ca271461088a578063c63568c7146108c8578063c688f0fb146108f3578063cc3e9c781461091e57610267565b80637db07c9d116101085780637db07c9d1461071f5780637e2150c41461074a5780637e56fde514610773578063817b1cd2146107b05780638e316327146107db578063950d91e91461081857610267565b806366b0154c1461064c57806369b11dd5146106755780636ed2be1a146106a0578063752a2628146106c95780637d882097146106f457610267565b80633578584f116101dd5780634b319713116101a15780634b319713146105075780634ce870531461053257806350637dbd1461056057806359eec8951461059d5780636386c1c7146105c857806364c03a5e1461060f57610267565b80633578584f146104655780633955f0fe146104905780633a6cac7f146104a75780633c5f07cb146104d257806343ce7422146104dc57610267565b8063195a73391161022f578063195a733914610343578063229824c41461036e57806326fd8422146103ab5780632b039d0e146103e85780632fe3491514610411578063333f57b31461043a57610267565b806301c234a81461026c5780630420c98e146102975780630a76e5ed146102c257806312065fe0146102ed5780631848b8dc14610318575b600080fd5b34801561027857600080fd5b50610281610a60565b60405161028e91906123a6565b60405180910390f35b3480156102a357600080fd5b506102ac610a66565b6040516102b991906123a6565b60405180910390f35b3480156102ce57600080fd5b506102d7610a6c565b6040516102e491906123a6565b60405180910390f35b3480156102f957600080fd5b50610302610ab6565b60405161030f91906123a6565b60405180910390f35b34801561032457600080fd5b5061032d610abe565b60405161033a91906123a6565b60405180910390f35b34801561034f57600080fd5b50610358610ac4565b60405161036591906123a6565b60405180910390f35b34801561037a57600080fd5b50610395600480360381019061039091906123f2565b610aca565b6040516103a291906123a6565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd9190612445565b610b1d565b6040516103df91906123a6565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906124e3565b610b34565b005b34801561041d57600080fd5b50610438600480360381019061043391906124e3565b610c08565b005b34801561044657600080fd5b5061044f610cdc565b60405161045c919061252b565b60405180910390f35b34801561047157600080fd5b5061047a610cef565b60405161048791906123a6565b60405180910390f35b34801561049c57600080fd5b506104a5610cf5565b005b3480156104b357600080fd5b506104bc610ed0565b6040516104c991906123a6565b60405180910390f35b6104da610ed6565b005b3480156104e857600080fd5b506104f1610fc2565b6040516104fe91906123a6565b60405180910390f35b34801561051357600080fd5b5061051c611026565b60405161052991906123a6565b60405180910390f35b34801561053e57600080fd5b5061054761102c565b6040516105579493929190612546565b60405180910390f35b34801561056c57600080fd5b506105876004803603810190610582919061258b565b61104c565b60405161059491906123a6565b60405180910390f35b3480156105a957600080fd5b506105b2611133565b6040516105bf91906123a6565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea91906124e3565b611139565b6040516106069b9a999897969594939291906125da565b60405180910390f35b34801561061b57600080fd5b50610636600480360381019061063191906124e3565b611470565b60405161064391906123a6565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e91906124e3565b6114e3565b005b34801561068157600080fd5b5061068a6115b7565b60405161069791906123a6565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c291906126b1565b6115bd565b005b3480156106d557600080fd5b506106de61179d565b6040516106eb91906123a6565b60405180910390f35b34801561070057600080fd5b506107096117a3565b60405161071691906123a6565b60405180910390f35b34801561072b57600080fd5b506107346117a9565b60405161074191906123a6565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c91906124e3565b6117af565b005b34801561077f57600080fd5b5061079a600480360381019061079591906126de565b611883565b6040516107a791906123a6565b60405180910390f35b3480156107bc57600080fd5b506107c561189d565b6040516107d291906123a6565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd91906126de565b6118a3565b60405161080f91906123a6565b60405180910390f35b34801561082457600080fd5b5061082d6118c0565b60405161083a91906123a6565b60405180910390f35b34801561084f57600080fd5b5061086a600480360381019061086591906124e3565b6118c6565b6040516108819b9a999897969594939291906125da565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac91906126de565b611940565b6040516108bf92919061270b565b60405180910390f35b3480156108d457600080fd5b506108dd6119d2565b6040516108ea91906123a6565b60405180910390f35b3480156108ff57600080fd5b506109086119d8565b60405161091591906123a6565b60405180910390f35b34801561092a57600080fd5b5061094560048036038101906109409190612445565b6119de565b60405161095291906123a6565b60405180910390f35b34801561096757600080fd5b50610970611a0e565b60405161097d91906123a6565b60405180910390f35b34801561099257600080fd5b5061099b611a14565b6040516109a891906123a6565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d391906124e3565b611a1a565b6040516109e591906123a6565b60405180910390f35b3480156109fa57600080fd5b50610a03611af3565b604051610a1091906123a6565b60405180910390f35b610a336004803603810190610a2e91906124e3565b611afb565b005b348015610a4157600080fd5b50610a4a612089565b604051610a5791906123a6565b60405180910390f35b60015481565b600c5481565b6000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905090565b600047905090565b60085481565b60005481565b6000610b14610adb6014548461208f565b610b0f601554610b0a610b04610af36014548a61208f565b610aff6015548c61208f565b6120d8565b89612104565b6120d8565b612104565b90509392505050565b6000610b2c8383601354610aca565b905092915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90612791565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90612791565b60405180910390fd5b80601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601660009054906101000a900460ff1681565b60175481565b601660009054906101000a900460ff16610d0e57600080fd5b6000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000610d5b610fc2565b90506000610d68826118a3565b9050600d5483600901541015610dba57610db3610da4600154610d96600c548561208f90919063ffffffff16565b61210490919063ffffffff16565b8261211f90919063ffffffff16565b9050610dc5565b600083600901819055505b4283600a018190555060008360030181905550428360040181905550610e0a610df96006548461210490919063ffffffff16565b6013546120d890919063ffffffff16565b60138190555080610e19610ab6565b1015610e2a57610e27610ab6565b90505b6000610e47610e3883612146565b8361211f90919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e8f573d6000803e3d6000fd5b50610ea78185600801546120d890919063ffffffff16565b8460080181905550610ec4816012546120d890919063ffffffff16565b60128190555050505050565b60065481565b601660009054906101000a900460ff16610fc057601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610f8457600060135414610f4f57600080fd5b6001601660006101000a81548160ff02191690831515021790555064141dd76000601381905550610f7f33611afb565b610fbf565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb6906127fd565b60405180910390fd5b5b565b6000611021610fd033611a1a565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546120d890919063ffffffff16565b905090565b60125481565b600080600080600e54600f54601054601154935093509350935090919293565b600080601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206009015414156110a1576000905061112d565b60006110fa600954601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206009015461208f90919063ffffffff16565b90506000611125600154611117848761208f90919063ffffffff16565b61210490919063ffffffff16565b905080925050505b92915050565b60055481565b6000806000806000806000806000806000601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549a50601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549950601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549850601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549750601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549650601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169550601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601549450601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801549350601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701549250601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600901549150601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a0154905091939597999b90929496989a50565b6000806114d061147f84611a1a565b601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546120d890919063ffffffff16565b90506114db816118a3565b915050919050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a90612791565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b6000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050601660009054906101000a900460ff1661164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690612869565b60405180910390fd5b6000611659610fc2565b9050600081905083156116d3576000611672338361104c565b905061168781836120d890919063ffffffff16565b91506000611694836118a3565b90506116ad8186600101546120d890919063ffffffff16565b85600101819055506116ca816010546120d890919063ffffffff16565b60108190555050505b600b546116ed84600401544261211f90919063ffffffff16565b1061172257600a548360090154101561172157611718600184600901546120d890919063ffffffff16565b83600901819055505b5b61174d61173a6000548361210490919063ffffffff16565b84600201546120d890919063ffffffff16565b8360020181905550600083600301819055504283600401819055506117916117806005548461210490919063ffffffff16565b6013546120d890919063ffffffff16565b60138190555050505050565b600b5481565b600f5481565b60105481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183690612791565b60405180910390fd5b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061189682611891610ab6565b610b1d565b9050919050565b600e5481565b60006118b9826013546118b4610ab6565b610aca565b9050919050565b60185481565b601d6020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600601549080600701549080600801549080600901549080600a015490508b565b600080600061197a846119758661196788611959610ab6565b6120d890919063ffffffff16565b61211f90919063ffffffff16565b610b1d565b905060006119936000548361210490919063ffffffff16565b9050600062015180905060006119b2838361208f90919063ffffffff16565b905060006119c082896119de565b90508381965096505050505050915091565b60025481565b600a5481565b6000611a0683601354611a01856119f3610ab6565b6120d890919063ffffffff16565b610aca565b905092915050565b60075481565b60095481565b600080611a72601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401544261211f90919063ffffffff16565b90506000611a8282601754612374565b90506000611a9260005483612374565b9050611ae9601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201548261208f90919063ffffffff16565b9350505050919050565b600042905090565b601660009054906101000a900460ff16611b1457600080fd5b6000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600754341015611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b93906128d5565b60405180910390fd5b600854611bb63483600001546120d890919063ffffffff16565b1115611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee90612941565b60405180910390fd5b6000611c1534611c10344761211f90919063ffffffff16565b610b1d565b9050611c2e3483600101546120d890919063ffffffff16565b8260010181905550611c4d3483600001546120d890919063ffffffff16565b8260000181905550611c6c8183600301546120d890919063ffffffff16565b8260030181905550600073ffffffffffffffffffffffffffffffffffffffff168260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e40573373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d4457828260050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60008260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e3e57611df76001601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601546120d890919063ffffffff16565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055505b505b600073ffffffffffffffffffffffffffffffffffffffff168260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120235760008260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612021576000611f20600154611f126002543461208f90919063ffffffff16565b61210490919063ffffffff16565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611f68573d6000803e3d6000fd5b50611fbe81601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701546120d890919063ffffffff16565b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070181905550612019816011546120d890919063ffffffff16565b601181905550505b505b600061202e34612146565b9050612057612046823461211f90919063ffffffff16565b600e546120d890919063ffffffff16565b600e819055506120736001600f546120d890919063ffffffff16565b600f8190555061208360006115bd565b50505050565b600d5481565b6000808314156120a257600090506120d2565b600082846120b09190612990565b90508284826120bf9190612a19565b146120cd576120cc612a4a565b5b809150505b92915050565b60008082846120e79190612a79565b9050838110156120fa576120f9612a4a565b5b8091505092915050565b60008082846121139190612a19565b90508091505092915050565b60008282111561213257612131612a4a565b5b818361213e9190612acf565b905092915050565b6000806121726001546121646003548661208f90919063ffffffff16565b61210490919063ffffffff16565b9050600061219f6001546121916004548761208f90919063ffffffff16565b61210490919063ffffffff16565b9050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612209573d6000803e3d6000fd5b50601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612272573d6000803e3d6000fd5b50601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156122db573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612344573d6000803e3d6000fd5b5061236b61235c60038461208f90919063ffffffff16565b826120d890919063ffffffff16565b92505050919050565b60008183106123835781612385565b825b905092915050565b6000819050919050565b6123a08161238d565b82525050565b60006020820190506123bb6000830184612397565b92915050565b600080fd5b6123cf8161238d565b81146123da57600080fd5b50565b6000813590506123ec816123c6565b92915050565b60008060006060848603121561240b5761240a6123c1565b5b6000612419868287016123dd565b935050602061242a868287016123dd565b925050604061243b868287016123dd565b9150509250925092565b6000806040838503121561245c5761245b6123c1565b5b600061246a858286016123dd565b925050602061247b858286016123dd565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124b082612485565b9050919050565b6124c0816124a5565b81146124cb57600080fd5b50565b6000813590506124dd816124b7565b92915050565b6000602082840312156124f9576124f86123c1565b5b6000612507848285016124ce565b91505092915050565b60008115159050919050565b61252581612510565b82525050565b6000602082019050612540600083018461251c565b92915050565b600060808201905061255b6000830187612397565b6125686020830186612397565b6125756040830185612397565b6125826060830184612397565b95945050505050565b600080604083850312156125a2576125a16123c1565b5b60006125b0858286016124ce565b92505060206125c1858286016123dd565b9150509250929050565b6125d4816124a5565b82525050565b6000610160820190506125f0600083018e612397565b6125fd602083018d612397565b61260a604083018c612397565b612617606083018b612397565b612624608083018a612397565b61263160a08301896125cb565b61263e60c0830188612397565b61264b60e0830187612397565b612659610100830186612397565b612667610120830185612397565b612675610140830184612397565b9c9b505050505050505050505050565b61268e81612510565b811461269957600080fd5b50565b6000813590506126ab81612685565b92915050565b6000602082840312156126c7576126c66123c1565b5b60006126d58482850161269c565b91505092915050565b6000602082840312156126f4576126f36123c1565b5b6000612702848285016123dd565b91505092915050565b60006040820190506127206000830185612397565b61272d6020830184612397565b9392505050565b600082825260208201905092915050565b7f41646d696e20757365206f6e6c792e0000000000000000000000000000000000600082015250565b600061277b600f83612734565b915061278682612745565b602082019050919050565b600060208201905081810360008301526127aa8161276e565b9050919050565b7f436f6e7472616374206e6f742079657420737461727465642e00000000000000600082015250565b60006127e7601983612734565b91506127f2826127b1565b602082019050919050565b60006020820190508181036000830152612816816127da565b9050919050565b7f436f6e7472616374206e6f742079657420537461727465642e00000000000000600082015250565b6000612853601983612734565b915061285e8261281d565b602082019050919050565b6000602082019050818103600083015261288281612846565b9050919050565b7f4d696e696e756d20696e766573746d656e74206e6f74206d65742e0000000000600082015250565b60006128bf601b83612734565b91506128ca82612889565b602082019050919050565b600060208201905081810360008301526128ee816128b2565b9050919050565b7f4d6178206465706f736974206c696d697420726561636865642e000000000000600082015250565b600061292b601a83612734565b9150612936826128f5565b602082019050919050565b6000602082019050818103600083015261295a8161291e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061299b8261238d565b91506129a68361238d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129df576129de612961565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a248261238d565b9150612a2f8361238d565b925082612a3f57612a3e6129ea565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000612a848261238d565b9150612a8f8361238d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ac457612ac3612961565b5b828201905092915050565b6000612ada8261238d565b9150612ae58361238d565b925082821015612af857612af7612961565b5b82820390509291505056fea264697066735822122050c89130859cd82f81682ad75885730160952e170f93b6fb901074ddf2346f2564736f6c63430008090033

Deployed ByteCode

0x6080604052600436106102675760003560e01c806366b0154c11610144578063a87430ba116100b6578063cd329fc31161007a578063cd329fc31461095b578063d7206d5d14610986578063d7c8843b146109b1578063da235b22146109ee578063db66386514610a19578063f6f6288614610a3557610267565b8063a87430ba14610843578063bdd1ca271461088a578063c63568c7146108c8578063c688f0fb146108f3578063cc3e9c781461091e57610267565b80637db07c9d116101085780637db07c9d1461071f5780637e2150c41461074a5780637e56fde514610773578063817b1cd2146107b05780638e316327146107db578063950d91e91461081857610267565b806366b0154c1461064c57806369b11dd5146106755780636ed2be1a146106a0578063752a2628146106c95780637d882097146106f457610267565b80633578584f116101dd5780634b319713116101a15780634b319713146105075780634ce870531461053257806350637dbd1461056057806359eec8951461059d5780636386c1c7146105c857806364c03a5e1461060f57610267565b80633578584f146104655780633955f0fe146104905780633a6cac7f146104a75780633c5f07cb146104d257806343ce7422146104dc57610267565b8063195a73391161022f578063195a733914610343578063229824c41461036e57806326fd8422146103ab5780632b039d0e146103e85780632fe3491514610411578063333f57b31461043a57610267565b806301c234a81461026c5780630420c98e146102975780630a76e5ed146102c257806312065fe0146102ed5780631848b8dc14610318575b600080fd5b34801561027857600080fd5b50610281610a60565b60405161028e91906123a6565b60405180910390f35b3480156102a357600080fd5b506102ac610a66565b6040516102b991906123a6565b60405180910390f35b3480156102ce57600080fd5b506102d7610a6c565b6040516102e491906123a6565b60405180910390f35b3480156102f957600080fd5b50610302610ab6565b60405161030f91906123a6565b60405180910390f35b34801561032457600080fd5b5061032d610abe565b60405161033a91906123a6565b60405180910390f35b34801561034f57600080fd5b50610358610ac4565b60405161036591906123a6565b60405180910390f35b34801561037a57600080fd5b50610395600480360381019061039091906123f2565b610aca565b6040516103a291906123a6565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd9190612445565b610b1d565b6040516103df91906123a6565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906124e3565b610b34565b005b34801561041d57600080fd5b50610438600480360381019061043391906124e3565b610c08565b005b34801561044657600080fd5b5061044f610cdc565b60405161045c919061252b565b60405180910390f35b34801561047157600080fd5b5061047a610cef565b60405161048791906123a6565b60405180910390f35b34801561049c57600080fd5b506104a5610cf5565b005b3480156104b357600080fd5b506104bc610ed0565b6040516104c991906123a6565b60405180910390f35b6104da610ed6565b005b3480156104e857600080fd5b506104f1610fc2565b6040516104fe91906123a6565b60405180910390f35b34801561051357600080fd5b5061051c611026565b60405161052991906123a6565b60405180910390f35b34801561053e57600080fd5b5061054761102c565b6040516105579493929190612546565b60405180910390f35b34801561056c57600080fd5b506105876004803603810190610582919061258b565b61104c565b60405161059491906123a6565b60405180910390f35b3480156105a957600080fd5b506105b2611133565b6040516105bf91906123a6565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea91906124e3565b611139565b6040516106069b9a999897969594939291906125da565b60405180910390f35b34801561061b57600080fd5b50610636600480360381019061063191906124e3565b611470565b60405161064391906123a6565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e91906124e3565b6114e3565b005b34801561068157600080fd5b5061068a6115b7565b60405161069791906123a6565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c291906126b1565b6115bd565b005b3480156106d557600080fd5b506106de61179d565b6040516106eb91906123a6565b60405180910390f35b34801561070057600080fd5b506107096117a3565b60405161071691906123a6565b60405180910390f35b34801561072b57600080fd5b506107346117a9565b60405161074191906123a6565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c91906124e3565b6117af565b005b34801561077f57600080fd5b5061079a600480360381019061079591906126de565b611883565b6040516107a791906123a6565b60405180910390f35b3480156107bc57600080fd5b506107c561189d565b6040516107d291906123a6565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd91906126de565b6118a3565b60405161080f91906123a6565b60405180910390f35b34801561082457600080fd5b5061082d6118c0565b60405161083a91906123a6565b60405180910390f35b34801561084f57600080fd5b5061086a600480360381019061086591906124e3565b6118c6565b6040516108819b9a999897969594939291906125da565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac91906126de565b611940565b6040516108bf92919061270b565b60405180910390f35b3480156108d457600080fd5b506108dd6119d2565b6040516108ea91906123a6565b60405180910390f35b3480156108ff57600080fd5b506109086119d8565b60405161091591906123a6565b60405180910390f35b34801561092a57600080fd5b5061094560048036038101906109409190612445565b6119de565b60405161095291906123a6565b60405180910390f35b34801561096757600080fd5b50610970611a0e565b60405161097d91906123a6565b60405180910390f35b34801561099257600080fd5b5061099b611a14565b6040516109a891906123a6565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d391906124e3565b611a1a565b6040516109e591906123a6565b60405180910390f35b3480156109fa57600080fd5b50610a03611af3565b604051610a1091906123a6565b60405180910390f35b610a336004803603810190610a2e91906124e3565b611afb565b005b348015610a4157600080fd5b50610a4a612089565b604051610a5791906123a6565b60405180910390f35b60015481565b600c5481565b6000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905090565b600047905090565b60085481565b60005481565b6000610b14610adb6014548461208f565b610b0f601554610b0a610b04610af36014548a61208f565b610aff6015548c61208f565b6120d8565b89612104565b6120d8565b612104565b90509392505050565b6000610b2c8383601354610aca565b905092915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90612791565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90612791565b60405180910390fd5b80601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601660009054906101000a900460ff1681565b60175481565b601660009054906101000a900460ff16610d0e57600080fd5b6000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000610d5b610fc2565b90506000610d68826118a3565b9050600d5483600901541015610dba57610db3610da4600154610d96600c548561208f90919063ffffffff16565b61210490919063ffffffff16565b8261211f90919063ffffffff16565b9050610dc5565b600083600901819055505b4283600a018190555060008360030181905550428360040181905550610e0a610df96006548461210490919063ffffffff16565b6013546120d890919063ffffffff16565b60138190555080610e19610ab6565b1015610e2a57610e27610ab6565b90505b6000610e47610e3883612146565b8361211f90919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e8f573d6000803e3d6000fd5b50610ea78185600801546120d890919063ffffffff16565b8460080181905550610ec4816012546120d890919063ffffffff16565b60128190555050505050565b60065481565b601660009054906101000a900460ff16610fc057601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610f8457600060135414610f4f57600080fd5b6001601660006101000a81548160ff02191690831515021790555064141dd76000601381905550610f7f33611afb565b610fbf565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb6906127fd565b60405180910390fd5b5b565b6000611021610fd033611a1a565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546120d890919063ffffffff16565b905090565b60125481565b600080600080600e54600f54601054601154935093509350935090919293565b600080601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206009015414156110a1576000905061112d565b60006110fa600954601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206009015461208f90919063ffffffff16565b90506000611125600154611117848761208f90919063ffffffff16565b61210490919063ffffffff16565b905080925050505b92915050565b60055481565b6000806000806000806000806000806000601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549a50601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549950601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549850601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549750601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549650601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169550601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601549450601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801549350601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701549250601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600901549150601d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a0154905091939597999b90929496989a50565b6000806114d061147f84611a1a565b601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546120d890919063ffffffff16565b90506114db816118a3565b915050919050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a90612791565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b6000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050601660009054906101000a900460ff1661164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690612869565b60405180910390fd5b6000611659610fc2565b9050600081905083156116d3576000611672338361104c565b905061168781836120d890919063ffffffff16565b91506000611694836118a3565b90506116ad8186600101546120d890919063ffffffff16565b85600101819055506116ca816010546120d890919063ffffffff16565b60108190555050505b600b546116ed84600401544261211f90919063ffffffff16565b1061172257600a548360090154101561172157611718600184600901546120d890919063ffffffff16565b83600901819055505b5b61174d61173a6000548361210490919063ffffffff16565b84600201546120d890919063ffffffff16565b8360020181905550600083600301819055504283600401819055506117916117806005548461210490919063ffffffff16565b6013546120d890919063ffffffff16565b60138190555050505050565b600b5481565b600f5481565b60105481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183690612791565b60405180910390fd5b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061189682611891610ab6565b610b1d565b9050919050565b600e5481565b60006118b9826013546118b4610ab6565b610aca565b9050919050565b60185481565b601d6020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600601549080600701549080600801549080600901549080600a015490508b565b600080600061197a846119758661196788611959610ab6565b6120d890919063ffffffff16565b61211f90919063ffffffff16565b610b1d565b905060006119936000548361210490919063ffffffff16565b9050600062015180905060006119b2838361208f90919063ffffffff16565b905060006119c082896119de565b90508381965096505050505050915091565b60025481565b600a5481565b6000611a0683601354611a01856119f3610ab6565b6120d890919063ffffffff16565b610aca565b905092915050565b60075481565b60095481565b600080611a72601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401544261211f90919063ffffffff16565b90506000611a8282601754612374565b90506000611a9260005483612374565b9050611ae9601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201548261208f90919063ffffffff16565b9350505050919050565b600042905090565b601660009054906101000a900460ff16611b1457600080fd5b6000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600754341015611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b93906128d5565b60405180910390fd5b600854611bb63483600001546120d890919063ffffffff16565b1115611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee90612941565b60405180910390fd5b6000611c1534611c10344761211f90919063ffffffff16565b610b1d565b9050611c2e3483600101546120d890919063ffffffff16565b8260010181905550611c4d3483600001546120d890919063ffffffff16565b8260000181905550611c6c8183600301546120d890919063ffffffff16565b8260030181905550600073ffffffffffffffffffffffffffffffffffffffff168260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e40573373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d4457828260050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60008260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e3e57611df76001601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601546120d890919063ffffffff16565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055505b505b600073ffffffffffffffffffffffffffffffffffffffff168260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120235760008260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612021576000611f20600154611f126002543461208f90919063ffffffff16565b61210490919063ffffffff16565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611f68573d6000803e3d6000fd5b50611fbe81601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701546120d890919063ffffffff16565b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070181905550612019816011546120d890919063ffffffff16565b601181905550505b505b600061202e34612146565b9050612057612046823461211f90919063ffffffff16565b600e546120d890919063ffffffff16565b600e819055506120736001600f546120d890919063ffffffff16565b600f8190555061208360006115bd565b50505050565b600d5481565b6000808314156120a257600090506120d2565b600082846120b09190612990565b90508284826120bf9190612a19565b146120cd576120cc612a4a565b5b809150505b92915050565b60008082846120e79190612a79565b9050838110156120fa576120f9612a4a565b5b8091505092915050565b60008082846121139190612a19565b90508091505092915050565b60008282111561213257612131612a4a565b5b818361213e9190612acf565b905092915050565b6000806121726001546121646003548661208f90919063ffffffff16565b61210490919063ffffffff16565b9050600061219f6001546121916004548761208f90919063ffffffff16565b61210490919063ffffffff16565b9050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612209573d6000803e3d6000fd5b50601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612272573d6000803e3d6000fd5b50601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156122db573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612344573d6000803e3d6000fd5b5061236b61235c60038461208f90919063ffffffff16565b826120d890919063ffffffff16565b92505050919050565b60008183106123835781612385565b825b905092915050565b6000819050919050565b6123a08161238d565b82525050565b60006020820190506123bb6000830184612397565b92915050565b600080fd5b6123cf8161238d565b81146123da57600080fd5b50565b6000813590506123ec816123c6565b92915050565b60008060006060848603121561240b5761240a6123c1565b5b6000612419868287016123dd565b935050602061242a868287016123dd565b925050604061243b868287016123dd565b9150509250925092565b6000806040838503121561245c5761245b6123c1565b5b600061246a858286016123dd565b925050602061247b858286016123dd565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124b082612485565b9050919050565b6124c0816124a5565b81146124cb57600080fd5b50565b6000813590506124dd816124b7565b92915050565b6000602082840312156124f9576124f86123c1565b5b6000612507848285016124ce565b91505092915050565b60008115159050919050565b61252581612510565b82525050565b6000602082019050612540600083018461251c565b92915050565b600060808201905061255b6000830187612397565b6125686020830186612397565b6125756040830185612397565b6125826060830184612397565b95945050505050565b600080604083850312156125a2576125a16123c1565b5b60006125b0858286016124ce565b92505060206125c1858286016123dd565b9150509250929050565b6125d4816124a5565b82525050565b6000610160820190506125f0600083018e612397565b6125fd602083018d612397565b61260a604083018c612397565b612617606083018b612397565b612624608083018a612397565b61263160a08301896125cb565b61263e60c0830188612397565b61264b60e0830187612397565b612659610100830186612397565b612667610120830185612397565b612675610140830184612397565b9c9b505050505050505050505050565b61268e81612510565b811461269957600080fd5b50565b6000813590506126ab81612685565b92915050565b6000602082840312156126c7576126c66123c1565b5b60006126d58482850161269c565b91505092915050565b6000602082840312156126f4576126f36123c1565b5b6000612702848285016123dd565b91505092915050565b60006040820190506127206000830185612397565b61272d6020830184612397565b9392505050565b600082825260208201905092915050565b7f41646d696e20757365206f6e6c792e0000000000000000000000000000000000600082015250565b600061277b600f83612734565b915061278682612745565b602082019050919050565b600060208201905081810360008301526127aa8161276e565b9050919050565b7f436f6e7472616374206e6f742079657420737461727465642e00000000000000600082015250565b60006127e7601983612734565b91506127f2826127b1565b602082019050919050565b60006020820190508181036000830152612816816127da565b9050919050565b7f436f6e7472616374206e6f742079657420537461727465642e00000000000000600082015250565b6000612853601983612734565b915061285e8261281d565b602082019050919050565b6000602082019050818103600083015261288281612846565b9050919050565b7f4d696e696e756d20696e766573746d656e74206e6f74206d65742e0000000000600082015250565b60006128bf601b83612734565b91506128ca82612889565b602082019050919050565b600060208201905081810360008301526128ee816128b2565b9050919050565b7f4d6178206465706f736974206c696d697420726561636865642e000000000000600082015250565b600061292b601a83612734565b9150612936826128f5565b602082019050919050565b6000602082019050818103600083015261295a8161291e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061299b8261238d565b91506129a68361238d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129df576129de612961565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a248261238d565b9150612a2f8361238d565b925082612a3f57612a3e6129ea565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000612a848261238d565b9150612a8f8361238d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ac457612ac3612961565b5b828201905092915050565b6000612ada8261238d565b9150612ae58361238d565b925082821015612af857612af7612961565b5b82820390509291505056fea264697066735822122050c89130859cd82f81682ad75885730160952e170f93b6fb901074ddf2346f2564736f6c63430008090033