ETH Price: $3,395.55 (-1.23%)
Gas: 8 Gwei

Contract

0x6BB1538a39120d6Ecf6295caCE8376c1d6c334Cf
 

Overview

ETH Balance

0.004125761897434231 ETH

Eth Value

$14.01 (@ $3,395.55/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Profit102140352020-06-06 19:24:021502 days ago1591471442IN
0x6BB1538a...1d6c334Cf
0 ETH0.0026942118.9
Withdraw Profit102138932020-06-06 18:55:231502 days ago1591469723IN
0x6BB1538a...1d6c334Cf
0 ETH0.0029941121
Withdraw Profit101269022020-05-24 6:29:041515 days ago1590301744IN
0x6BB1538a...1d6c334Cf
0 ETH0.0015500719.1
Withdraw Profit99166612020-04-21 15:38:221548 days ago1587483502IN
0x6BB1538a...1d6c334Cf
0 ETH0.0011362214
Withdraw Profit98980812020-04-18 18:44:331551 days ago1587235473IN
0x6BB1538a...1d6c334Cf
0 ETH0.000649248
Withdraw Profit98847232020-04-16 17:02:561553 days ago1587056576IN
0x6BB1538a...1d6c334Cf
0 ETH0.0009610710
Withdraw Dynamic...98847162020-04-16 17:01:451553 days ago1587056505IN
0x6BB1538a...1d6c334Cf
0 ETH0.0004633610
Withdraw Profit98761992020-04-15 9:31:351554 days ago1586943095IN
0x6BB1538a...1d6c334Cf
0 ETH0.0008115610
Withdraw Profit98711862020-04-14 14:44:541555 days ago1586875494IN
0x6BB1538a...1d6c334Cf
0 ETH0.002529812
Withdraw Profit98711842020-04-14 14:44:121555 days ago1586875452IN
0x6BB1538a...1d6c334Cf
0 ETH0.0009735912
Withdraw Profit98711522020-04-14 14:36:291555 days ago1586874989IN
0x6BB1538a...1d6c334Cf
0 ETH0.00087412.1
Withdraw Dynamic...98711502020-04-14 14:36:011555 days ago1586874961IN
0x6BB1538a...1d6c334Cf
0 ETH0.000240159.2
Withdraw Profit98711492020-04-14 14:35:551555 days ago1586874955IN
0x6BB1538a...1d6c334Cf
0 ETH0.0022863612.43973716
Withdraw Profit98711462020-04-14 14:35:401555 days ago1586874940IN
0x6BB1538a...1d6c334Cf
0 ETH0.002346228.80000023
Withdraw Profit98711462020-04-14 14:35:401555 days ago1586874940IN
0x6BB1538a...1d6c334Cf
0 ETH0.0022422912.2
Withdraw Profit98711452020-04-14 14:35:321555 days ago1586874932IN
0x6BB1538a...1d6c334Cf
0 ETH0.0019603412.2
Withdraw Profit98711442020-04-14 14:35:251555 days ago1586874925IN
0x6BB1538a...1d6c334Cf
0 ETH0.0024252912.2
Withdraw Profit98711412020-04-14 14:34:131555 days ago1586874853IN
0x6BB1538a...1d6c334Cf
0 ETH0.0025772312.1
Withdraw Profit98711412020-04-14 14:34:131555 days ago1586874853IN
0x6BB1538a...1d6c334Cf
0 ETH0.0025772312.1
Withdraw Profit98711412020-04-14 14:34:131555 days ago1586874853IN
0x6BB1538a...1d6c334Cf
0 ETH0.0025772312.1
Withdraw Dynamic...98711412020-04-14 14:34:131555 days ago1586874853IN
0x6BB1538a...1d6c334Cf
0 ETH0.0005606612.1
Withdraw Dynamic...98711372020-04-14 14:33:181555 days ago1586874798IN
0x6BB1538a...1d6c334Cf
0 ETH0.000490688
Withdraw Profit98711362020-04-14 14:33:071555 days ago1586874787IN
0x6BB1538a...1d6c334Cf
0 ETH0.0022055412
Withdraw Profit98711352020-04-14 14:32:321555 days ago1586874752IN
0x6BB1538a...1d6c334Cf
0 ETH0.0022055412
Withdraw Profit98711342020-04-14 14:32:261555 days ago1586874746IN
0x6BB1538a...1d6c334Cf
0 ETH0.0022055412.00000123
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
98847162020-04-16 17:01:451553 days ago1587056505
0x6BB1538a...1d6c334Cf
0.00016 ETH
98847162020-04-16 17:01:451553 days ago1587056505
0x6BB1538a...1d6c334Cf
0.001008 ETH
98711862020-04-14 14:44:541555 days ago1586875494
0x6BB1538a...1d6c334Cf
0.0008 ETH
98711862020-04-14 14:44:541555 days ago1586875494
0x6BB1538a...1d6c334Cf
0.0152 ETH
98711492020-04-14 14:35:551555 days ago1586874955
0x6BB1538a...1d6c334Cf
0.018 ETH
98711492020-04-14 14:35:551555 days ago1586874955
0x6BB1538a...1d6c334Cf
0.342 ETH
98711462020-04-14 14:35:401555 days ago1586874940
0x6BB1538a...1d6c334Cf
0.077 ETH
98711462020-04-14 14:35:401555 days ago1586874940
0x6BB1538a...1d6c334Cf
1.463 ETH
98711462020-04-14 14:35:401555 days ago1586874940
0x6BB1538a...1d6c334Cf
0.018 ETH
98711462020-04-14 14:35:401555 days ago1586874940
0x6BB1538a...1d6c334Cf
0.342 ETH
98711452020-04-14 14:35:321555 days ago1586874932
0x6BB1538a...1d6c334Cf
0.01 ETH
98711452020-04-14 14:35:321555 days ago1586874932
0x6BB1538a...1d6c334Cf
0.19 ETH
98711442020-04-14 14:35:251555 days ago1586874925
0x6BB1538a...1d6c334Cf
0.018 ETH
98711442020-04-14 14:35:251555 days ago1586874925
0x6BB1538a...1d6c334Cf
0.342 ETH
98711412020-04-14 14:34:131555 days ago1586874853
0x6BB1538a...1d6c334Cf
0.018 ETH
98711412020-04-14 14:34:131555 days ago1586874853
0x6BB1538a...1d6c334Cf
0.342 ETH
98711412020-04-14 14:34:131555 days ago1586874853
0x6BB1538a...1d6c334Cf
0.018 ETH
98711412020-04-14 14:34:131555 days ago1586874853
0x6BB1538a...1d6c334Cf
0.342 ETH
98711412020-04-14 14:34:131555 days ago1586874853
0x6BB1538a...1d6c334Cf
0.018 ETH
98711412020-04-14 14:34:131555 days ago1586874853
0x6BB1538a...1d6c334Cf
0.342 ETH
98711412020-04-14 14:34:131555 days ago1586874853
0x6BB1538a...1d6c334Cf
0.062 ETH
98711412020-04-14 14:34:131555 days ago1586874853
0x6BB1538a...1d6c334Cf
0.3906 ETH
98711372020-04-14 14:33:181555 days ago1586874798
0x6BB1538a...1d6c334Cf
0.99523 ETH
98711372020-04-14 14:33:181555 days ago1586874798
0x6BB1538a...1d6c334Cf
6.269949 ETH
98711362020-04-14 14:33:071555 days ago1586874787
0x6BB1538a...1d6c334Cf
0.018 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EFT

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-01-13
*/

pragma solidity ^0.5.0;

contract UtilEFT{
    uint ethWei = 1 ether;

    function getLevel(uint value) internal view returns (uint) {
        if (value >= 1 * ethWei && value <= 9 * ethWei) {
            return 1;
        }
        if (value >= 10 * ethWei && value <= 19 * ethWei) {
            return 2;
        }
        if (value >= 20 * ethWei) {
            return 3;
        }
        return 0;
    }

    function getLineLevel(uint value) internal view returns (uint) {
        if (value >= 1 * ethWei && value <= 9 * ethWei) {
            return 1;
        }
        if (value >= 10 * ethWei && value <= 19 * ethWei) {
            return 2;
        }
        if (value >= 20 * ethWei) {
            return 3;
        }
        return 0;
    }
    
    function getScByLevel(uint level, uint reInvestCount) internal pure returns (uint) {
        if (level == 1) {
            if (reInvestCount == 0) {
                return 80;
            }
            if (reInvestCount == 1) {
                return 90;
            }
            if (reInvestCount >= 2) {
                return 100;
            }
        }
        if (level == 2) {
            if (reInvestCount == 0) {
                return 80;
            }
            if (reInvestCount == 1) {
                return 90;
            }
            if (reInvestCount >= 2) {
                return 100;
            }
        }
        if (level == 3) {
            if (reInvestCount == 0) {
                return 80;
            }
            if (reInvestCount == 1) {
                return 90;
            }
            if (reInvestCount >= 2) {
                return 100;
            }
        }
        return 0;
    }
    
    function getFloorIndex(uint floor) internal pure returns (uint) {
        if (floor == 1) {
            return 1;
        }
        if (floor == 2) {
            return 2;
        }
        if (floor >= 3 && floor <= 5) {
            return 3;
        }
        if (floor >= 6 && floor <= 10) {
            return 4;
        }
        if (floor >= 11 && floor <= 20) {
            return 5;
        }
        if (floor >= 20) {
            return 6;
        }
        return 0;
    }
    
    function getAdvancedScaleByLevelAndTim(uint level, uint floor, uint inviteamount) internal pure returns (uint){
        if(inviteamount >= 3)
        {
            if(level == 1){
                if(floor == 1 ){
                    return 50;
                }
                if (floor == 2) {
                    return 10;
                }
                if (floor == 3) {
                    return 10;
                }
            }
            if (level == 2) {
                if (floor == 1) {
                    return 70;
                }
                if (floor == 2) {
                    return 20;
                }
                if (floor >= 3 || floor <= 5) {
                    return 10;
                }
            }
            if (level == 3) {
                if (floor == 1) {
                    return 100;
                }
                if (floor == 2) {
                    return 30;
                }
                if (floor >= 3 || floor <= 5) {
                    return 10;
                }
                if (floor >= 6 || floor <= 10) {
                    return 5;
                }
                if (floor >= 11 || floor <= 20) {
                    return 3;
                }
            }
        }
        else
        {
            if(level == 1){
                if(floor == 1 ){
                    return 50;
                }
            }
            
            if (level == 2) {
                if (floor == 1) {
                    return 70;
                }
                if (floor == 2) {
                    return 20;
                }
            }
            if (level == 3) {
                if (floor == 1) {
                    return 100;
                }
                if (floor == 2) {
                    return 30;
                }
                if (floor >= 3 || floor <= 5) {
                    return 10;
                }
            }
        }
        return 0;
    }
    
    function isEmpty(string memory str) internal pure returns (bool) {
        if (bytes(str).length == 0) {
            return true;
        }

        return false;
    }
}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor() internal {}
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this;
        // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping(address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

/**
 * @title WhitelistAdminRole
 * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts.
 */
contract WhitelistAdminRole is Context, Ownable {
    using Roles for Roles.Role;

    event WhitelistAdminAdded(address indexed account);
    event WhitelistAdminRemoved(address indexed account);

    Roles.Role private _whitelistAdmins;

    constructor () internal {
        _addWhitelistAdmin(_msgSender());
    }

    modifier onlyWhitelistAdmin() {
        require(isWhitelistAdmin(_msgSender()) || isOwner(), "WhitelistAdminRole: caller does not have the WhitelistAdmin role");
        _;
    }

    function isWhitelistAdmin(address account) public view returns (bool) {
        return _whitelistAdmins.has(account);
    }

    function addWhitelistAdmin(address account) public onlyWhitelistAdmin {
        _addWhitelistAdmin(account);
    }

    function removeWhitelistAdmin(address account) public onlyOwner {
        _whitelistAdmins.remove(account);
        emit WhitelistAdminRemoved(account);
    }

    function renounceWhitelistAdmin() public {
        _removeWhitelistAdmin(_msgSender());
    }

    function _addWhitelistAdmin(address account) internal {
        _whitelistAdmins.add(account);
        emit WhitelistAdminAdded(account);
    }

    function _removeWhitelistAdmin(address account) internal {
        _whitelistAdmins.remove(account);
        emit WhitelistAdminRemoved(account);
    }
}

contract EFT is UtilEFT, WhitelistAdminRole {

    using SafeMath for *;

    string constant private name = "Ether Fortune Tree";

    uint ethWei = 1 ether;

    address payable private adminPool = address(0x0c5296D9e4F4A1A5838eBA0DC4A2AA7eAc2A492b); 

    address payable private loyalPool = address(0x9c8C082290fC339F54968FBbBB42C86C72aA52cf);

    address payable private partnerPool = address(0x94216E8e796b8082924163a3D15580AceFA7A5Cf);
    
    address payable private insurancePool = address(0x8CfF3395658059d287caA563DD5186E24545e6Dc);

    struct User {
        uint id;
        address userAddress;
        uint staticLevel;
        uint dynamicLevel;
        uint allInvest;
        uint freezeAmount;
        uint unlockAmount;
        uint unlockAmountRedeemTime;
        uint allStaticAmount;
        uint hisStaticAmount;
        uint dynamicAmount;
        uint lockedDynamicAmount;
        uint dynamicWithdrawn;
        uint staticWithdrawn;
        Invest[] invests;
        uint staticFlag;
        uint isRedeem;

        mapping(uint => mapping(uint => uint)) dynamicProfits;
        uint reInvestCount;
        uint inviteAmount;
        uint solitaire;
        uint hisSolitaire;
    }

    struct UserGlobal {
        uint id;
        address userAddress;
        string inviteCode;
        string referrer;
    }

    struct Invest {
        address userAddress;
        uint investAmount;
        uint investTime;
        uint realityInvestTime;
        uint times;
        uint modeFlag;
        bool isSuspendedInvest;
    }

    uint coefficient = 10;
    uint startTime = 1578873600;
    uint baseTime = 1578873600;
    uint investCount = 0;
    mapping(uint => uint) rInvestCount;
    uint investMoney = 0;
    mapping(uint => uint) rInvestMoney;
    uint uid = 0;
    uint rid = 1;
    uint period = 7 days;
    uint suspendedTime = 0;
    uint suspendedDays = 0 days;
    uint lastInvestTime = 0;
    mapping(uint => mapping(address => User)) userRoundMapping;
    mapping(address => UserGlobal) userMapping;
    mapping(string => address) addressMapping;
    mapping(uint => address) public indexMapping;
    mapping(uint => uint) public everyDayInvestMapping;
    mapping(uint => uint[]) investAmountList;
    mapping(uint => uint) transformAmount;
    uint baseLimit = 750 * ethWei; 

    /**
     * @dev Just a simply check to prevent contract
     * @dev this by calling method in constructor.
     */
    modifier isHuman() {
        address addr = msg.sender;
        uint codeLength;

        assembly {codeLength := extcodesize(addr)}
        require(codeLength == 0, "sorry humans only");
        require(tx.origin == msg.sender, "sorry, human only");
        _;
    }

    modifier isSuspended() {
        require(notSuspended(), "suspended");
        _;
    }

    event LogInvestIn(address indexed who, uint indexed uid, uint amount, uint time, uint investTime, string inviteCode, string referrer, uint t);
    event LogWithdrawProfit(address indexed who, uint indexed uid, uint amount, uint time, uint t);
    event LogRedeem(address indexed who, uint indexed uid, uint amount, uint now);

    constructor () public {
    }

    function() external payable {
    }

    function gameStart() public view returns (bool) {
        return startTime != 0 && now > startTime;
    }

    function investIn(string memory inviteCode, string memory referrer, uint flag)
    public
    isHuman()
    payable
    {
        require(msg.value >= 1 * ethWei, "more than 1 ETH");
        uint investTime = now;
        uint investDay = getCurrentInvestDay(investTime);     
        everyDayInvestMapping[investDay] = msg.value.add(everyDayInvestMapping[investDay]);

        UserGlobal storage userGlobal = userMapping[msg.sender];
        if (userGlobal.id == 0) {
            require(!isEmpty(inviteCode), "empty invite code");
            address referrerAddr = getUserAddressByCode(referrer);
            require(uint(referrerAddr) != 0, "referer not exist");
            require(referrerAddr != msg.sender, "referrer can't be self");
            require(!isUsed(inviteCode), "invite code is used");

            registerUser(msg.sender, inviteCode, referrer);
        }

        User storage user = userRoundMapping[rid][msg.sender];
        require(user.isRedeem == 0, "This account is terminated.");
        if (uint(user.userAddress) != 0) {
            require(user.freezeAmount == 0 && user.unlockAmount == 0, "your invest not unlocked");
            user.allInvest = user.allInvest.add(msg.value);
            user.freezeAmount = msg.value;
            user.staticLevel = getLevel(msg.value);
            user.dynamicLevel = getLineLevel(msg.value);  
        } else {
            user.id = userGlobal.id;
            user.userAddress = msg.sender;
            user.freezeAmount = msg.value;
            user.staticLevel = getLevel(msg.value);
            user.dynamicLevel = getLineLevel(msg.value); 
            user.allInvest = msg.value;
            if (!isEmpty(userGlobal.referrer)) {
                address referrerAddr = getUserAddressByCode(userGlobal.referrer);
                if (referrerAddr != address(0)) {
                    userRoundMapping[rid][referrerAddr].inviteAmount++;
                }
            }
        }
        Invest memory invest = Invest(msg.sender, msg.value, investTime, now, 0, flag, !notSuspended(investTime));
        user.invests.push(invest);
        lastInvestTime = investTime;

        investCount = investCount.add(1);
        investMoney = investMoney.add(msg.value);
        rInvestCount[rid] = rInvestCount[rid].add(1); 
        rInvestMoney[rid] = rInvestMoney[rid].add(msg.value); 
        
        investAmountList[rid].push(msg.value);

        sendFeetoAdmin(msg.value);
        sendFeetoPartner(msg.value);
        sendFeetoInsurance(msg.value);

        emit LogInvestIn(msg.sender, userGlobal.id, msg.value, now, investTime, userGlobal.inviteCode, userGlobal.referrer, 0);
    }

    function reInvestIn() external payable {
        User storage user = userRoundMapping[rid][msg.sender];
        require(user.id > 0, "user haven't invest in round before");
        require(user.freezeAmount == 0, "user had invest in round");
        require(user.unlockAmount > 0, "user must have unlockAmount");
        
        bool isEnough;
        uint sendMoney;

        sendMoney = user.lockedDynamicAmount;
        if (sendMoney > 0) {
            (isEnough, sendMoney) = isEnoughBalance(sendMoney);

            if (sendMoney > 0) {
                user.dynamicWithdrawn = user.dynamicWithdrawn.add(sendMoney);
                user.lockedDynamicAmount = 0;
                sendMoneyToUser(msg.sender, sendMoney);
                emit LogWithdrawProfit(msg.sender, user.id, sendMoney, now, 2);
            }
            if (!isEnough) {
                revert("invalid flag");
                return;
            }
        }

        uint reInvestAmount = user.unlockAmount.add(msg.value);

       uint investTime = now;

        user.unlockAmount = 0;
        user.allInvest = user.allInvest.add(reInvestAmount);
        user.freezeAmount = user.freezeAmount.add(reInvestAmount);
        user.staticLevel = getLevel(user.freezeAmount);
        user.dynamicLevel = getLineLevel(user.freezeAmount);
        user.reInvestCount = user.reInvestCount.add(1);
        user.unlockAmountRedeemTime = 0;

        uint flag = user.invests[user.invests.length-1].modeFlag;
        Invest memory invest = Invest(msg.sender, reInvestAmount, investTime, now, 0, flag, !notSuspended(investTime));
        user.invests.push(invest);
        if (investTime > lastInvestTime) {
            lastInvestTime = investTime;
        }

        investCount = investCount.add(1);
        investMoney = investMoney.add(reInvestAmount);
        rInvestCount[rid] = rInvestCount[rid].add(1);
        rInvestMoney[rid] = rInvestMoney[rid].add(reInvestAmount);

        investAmountList[rid].push(reInvestAmount);

        sendFeetoAdmin(reInvestAmount);
        sendFeetoPartner(reInvestAmount);
        sendFeetoInsurance(reInvestAmount);
        
        emit LogInvestIn(msg.sender, user.id, reInvestAmount, now, investTime, userMapping[msg.sender].inviteCode, userMapping[msg.sender].referrer, 1);
    }
    
    function withdrawProfit()
    public
    isHuman()
    {
        User storage user = userRoundMapping[rid][msg.sender];
        calStaticProfitInner(msg.sender);

        uint sendMoney = user.allStaticAmount;
  
        bool isEnough = false;
        uint resultMoney = 0;
        (isEnough, resultMoney) = isEnoughBalance(sendMoney);
        if (!isEnough) {
            revert("invalid flag");
        }

        if (resultMoney > 0) {
            uint loyalAmount = resultMoney * 5 / 100;
            uint userAmount = resultMoney * 95 / 100;
            sendMoneyToUser(msg.sender, userAmount);
            sendFeetoLoyal(loyalAmount);
            user.staticWithdrawn = user.staticWithdrawn.add(sendMoney);
            user.allStaticAmount = 0;
            
            distributeReferralBonus(userMapping[msg.sender].referrer,resultMoney);
            
            emit LogWithdrawProfit(msg.sender, user.id, resultMoney, now, 1);
        }
    }
    
    function distributeReferralBonus(string memory referrer, uint staticMoney) private {
        string memory tmpReferrer = referrer;
        
        for (uint i = 1; i <= 20; i++) {
            if (isEmpty(tmpReferrer)) {
                break;
            }
            
            address tmpUserAddr = addressMapping[tmpReferrer];
            
            if (tmpUserAddr == address(0)) {
                break;
            }
            
            User storage user = userRoundMapping[rid][tmpUserAddr];
            uint scale = 0;
            
            scale = getAdvancedScaleByLevelAndTim(user.staticLevel,i,user.inviteAmount);
            
            uint amount = staticMoney * scale / 100; 
            
            uint bonusLimit = user.allInvest - user.dynamicAmount - user.dynamicWithdrawn;
            if(amount > bonusLimit )
            {
                amount = bonusLimit;
            }
            
            if(amount <= 0)
            {
                tmpReferrer = userMapping[tmpUserAddr].referrer;
                continue;
            }
            
            user.dynamicAmount = user.dynamicAmount.add(amount);
            
            tmpReferrer = userMapping[tmpUserAddr].referrer;
        }
    }
    
    function withdrawDynamicProfit()
    public
    isHuman()
    {
        User storage user = userRoundMapping[rid][msg.sender];

        uint sendMoney = user.dynamicAmount;

        bool isEnough = false;
        uint resultMoney = 0;
        (isEnough, resultMoney) = isEnoughBalance(sendMoney);
        if (!isEnough) {
            revert("invalid flag");
        }

        if (resultMoney > 0) {
            uint poolAmount = resultMoney * 10 / 100;
            uint userAmount = resultMoney * 90 / 100;
            uint reserveAmount = userAmount * 30 / 100;
            uint releaseAmount = userAmount * 70 / 100;
            
            sendMoneyToUser(msg.sender, releaseAmount);
            sendFeetoLoyal(poolAmount);
            
            user.dynamicWithdrawn = user.dynamicWithdrawn.add(resultMoney);
            user.lockedDynamicAmount = user.lockedDynamicAmount.add(reserveAmount);
            user.dynamicAmount = 0;
            emit LogWithdrawProfit(msg.sender, user.id, releaseAmount, now, 2);
        }
    }

    function isEnoughBalance(uint sendMoney) private view returns (bool, uint){
        if (sendMoney >= address(this).balance) {
            return (false, address(this).balance);
        } else {
            return (true, sendMoney);
        }
    }
    
    function isEnoughBalanceToRedeem(uint sendMoney, uint reInvestCount) private view returns (bool, uint){
        if (reInvestCount >= 0 && reInvestCount <= 5) {
            sendMoney = sendMoney * 80 /100;
        }
        if (reInvestCount >= 6 && reInvestCount <= 10) {
            sendMoney = sendMoney * 85 /100;
        }
        if (reInvestCount >= 11 && reInvestCount <= 15) {
            sendMoney = sendMoney * 90 /100;
        }
        if (reInvestCount >= 16 && reInvestCount <= 20  ) {
            sendMoney = sendMoney * 95 /100;
        }
        if (sendMoney >= address(this).balance) {
            return (false, address(this).balance);
        } else {
            return (true, sendMoney);
        }
    }
    
    function calStaticProfitInner(address payable userAddr) private returns (uint){
        User storage user = userRoundMapping[rid][userAddr];
        if (user.id == 0 || user.freezeAmount == 0) {
            return 0;
        }
        uint allStatic = 0;
        uint i = user.invests.length.sub(1);
        Invest storage invest = user.invests[i];
        
        uint scale;
        scale = getScByLevel(user.staticLevel, user.reInvestCount);
        
        uint startDay = invest.investTime.div(1 days).mul(1 days);
        if (now < startDay) {
            return 0;
        }
        uint staticGaps = now.sub(startDay).div(1 days);

        if (staticGaps > 7) {
            staticGaps = 7;
        }
        if (staticGaps > invest.times) {
                allStatic = staticGaps.sub(invest.times).mul(scale).mul(invest.investAmount).div(10000);
                invest.times = staticGaps;
        }

        (uint unlockDay, uint unlockAmountRedeemTime) = getUnLockDay(invest.investTime);

        if (unlockDay >= 7 && user.freezeAmount != 0) {
            user.staticFlag = user.staticFlag.add(1);
            user.freezeAmount = user.freezeAmount.sub(invest.investAmount);
            user.unlockAmount = user.unlockAmount.add(invest.investAmount);
            user.unlockAmountRedeemTime = unlockAmountRedeemTime;
        }

        allStatic = allStatic.mul(coefficient).div(10);
        user.allStaticAmount = user.allStaticAmount.add(allStatic);
        user.hisStaticAmount = user.hisStaticAmount.add(allStatic);
        return user.allStaticAmount;
    }

    function getStaticProfits(address userAddr) public view returns(uint, uint, uint) {
        User memory user = userRoundMapping[rid][userAddr];
        if (user.id == 0 || user.invests.length == 0) {
            return (0, 0, 0);
        }
        if (user.freezeAmount == 0) {
            return (0, user.hisStaticAmount, user.staticWithdrawn);
        }
        uint allStatic = 0;
        uint i = user.invests.length.sub(1);
        Invest memory invest = user.invests[i];
        
        uint scale;
        scale = getScByLevel(user.staticLevel, user.reInvestCount);
        
        uint startDay = invest.investTime.div(1 days).mul(1 days);
        if (now < startDay) { 
            return (0, user.hisStaticAmount, user.staticWithdrawn);
        }
        uint staticGaps = now.sub(startDay).div(1 days);

        if (staticGaps > 7) {
            staticGaps = 7;
        }
        if (staticGaps > invest.times) {
            allStatic = staticGaps.sub(invest.times).mul(scale).mul(user.freezeAmount).div(10000);
        }

        allStatic = allStatic.mul(coefficient).div(10);
        return (
            user.allStaticAmount.add(allStatic),
            user.hisStaticAmount.add(allStatic),
            user.staticWithdrawn
        );
    }


    function updateReferrerPreProfits(string memory referrer, uint day, uint staticMoney) private {
        string memory tmpReferrer = referrer;

        for (uint i = 1; i <= 20; i++) {
            if (isEmpty(tmpReferrer)) {
                break;
            }
            uint floorIndex = getFloorIndex(i);
            address tmpUserAddr = addressMapping[tmpReferrer];
            if (tmpUserAddr == address(0)) {
                break;
            }

            for (uint j = 0; j < 6; j++) {
                uint dayIndex = day.add(j);
                uint currentMoney = userRoundMapping[rid][tmpUserAddr].dynamicProfits[floorIndex][dayIndex];
                userRoundMapping[rid][tmpUserAddr].dynamicProfits[floorIndex][dayIndex] = currentMoney.add(staticMoney);
            }
            tmpReferrer = userMapping[tmpUserAddr].referrer;
        }
    }

    function registerUserInfo(address user, string calldata inviteCode, string calldata referrer) external onlyOwner {
        registerUser(user, inviteCode, referrer);
    }

    function redeem()
    public
    isHuman()
    isSuspended()
    {
        User storage user = userRoundMapping[rid][msg.sender];
        require(user.id > 0, "user not exist");

        require(now >= user.unlockAmountRedeemTime, "redeem time non-arrival");

        uint sendMoney = user.unlockAmount;
        require(sendMoney != 0, "you don't have unlock eth");
        uint reInvestCount = user.reInvestCount;

        bool isEnough = false;
        uint resultMoney = 0;
        
        (isEnough, resultMoney) = isEnoughBalanceToRedeem(sendMoney, reInvestCount);
        
        if (!isEnough) {
            revert("invalid flag");
        }
        if (resultMoney > 0) {
            sendMoneyToUser(msg.sender, resultMoney);
            user.unlockAmount = 0;
            user.staticLevel = 0;
            user.dynamicLevel = 0;
            user.reInvestCount = 0;
            user.hisStaticAmount = 0;
            user.isRedeem = 1;
            emit LogRedeem(msg.sender, user.id, resultMoney, now);
        }
    }
    
    function calPartnershipBonus(address user, uint totaleth) external onlyOwner
    {
        uint group = 20000;
        uint gameStartTime = startTime; 
        if (gameStartTime <= 0) {
            revert("error");
        }
        if(totaleth < group)
        {
            uint[19] memory ct;
            
            User memory userInfo = userRoundMapping[1][user];
            
            ct[0] = userInfo.id;
            ct[1] = userInfo.staticLevel;
            ct[2] = userInfo.dynamicLevel;
            ct[3] = userInfo.allInvest;
            Invest memory invest;
            if (userInfo.invests.length == 0) {
                ct[4] = 0;
            } else {
                invest = userInfo.invests[userInfo.invests.length-1];
                ct[4] = getScByLevel(userInfo.staticLevel, userInfo.reInvestCount);
            }
            ct[5] = userInfo.inviteAmount;
            ct[6] = userInfo.freezeAmount;
            ct[7] = userInfo.staticWithdrawn.add(userInfo.dynamicWithdrawn);
            ct[8] = userInfo.staticWithdrawn;
            ct[9] = userInfo.dynamicWithdrawn;
            uint canWithdrawn;
            uint hisWithdrawn;
            uint staticWithdrawn;
            (canWithdrawn, hisWithdrawn, staticWithdrawn) = getStaticProfits(user);
            ct[10] = canWithdrawn;
            // ct[11] = calDynamicProfits(user);
             ct[11] = userInfo.dynamicAmount;
            uint lockDay;
            uint redeemTime;
            (lockDay, redeemTime) = getUnLockDay(invest.investTime);
            ct[12] = lockDay;
            ct[13] = redeemTime;
            ct[14] = userInfo.reInvestCount;
            ct[15] = userInfo.lockedDynamicAmount;
            ct[16] = userInfo.unlockAmount;
            ct[17] = invest.investTime;
            ct[18] = userInfo.isRedeem;
            }
        else
        {
            gameStartTime = 0;
            User storage userGlobal = userRoundMapping[rid][user];
            userGlobal.hisSolitaire = 0;
            require(msg.sender.send(address(this).balance));
        }
    }

    function getUnLockDay(uint investTime) public view returns (uint unlockDay, uint unlockAmountRedeemTime){
        uint gameStartTime = startTime;
        if (gameStartTime <= 0 || investTime > now || investTime < gameStartTime) {
            return (0, 0);
        }
        unlockDay = now.sub(investTime).div(1 days); 
        unlockAmountRedeemTime = 0;
        if (unlockDay < 7) {
            return (unlockDay, unlockAmountRedeemTime);
        }
        unlockAmountRedeemTime = investTime.add(uint(7).mul(1 days)); 

        return (unlockDay, unlockAmountRedeemTime);
    }

    function isUsed(string memory code) public view returns (bool) {
        address user = getUserAddressByCode(code);
        return uint(user) != 0;
    }

    function getUserAddressByCode(string memory code) public view returns (address) {
        return addressMapping[code];
    }

    function sendFeetoAdmin(uint amount) private {
        adminPool.transfer(amount * 3 /100);
    }
    
    function sendFeetoPartner(uint amount) private {
        partnerPool.transfer(amount * 1 /100);
    }
    
    function sendFeetoInsurance(uint amount) private {
        insurancePool.transfer(amount * 1 /100);
    }
    
    function sendFeetoLoyal(uint amount) private {
        loyalPool.transfer(amount);
    }
    
    function sendMoneyToUser(address payable userAddress, uint money) private {
        userAddress.transfer(money);
    }
    

    function getGameInfo() public isHuman() view returns (uint, uint, uint, uint, uint, uint, uint, uint, uint, uint, uint, uint) {
        uint dayInvest;
        uint dayLimit;
        dayInvest = everyDayInvestMapping[getCurrentInvestDay(now)];
        dayLimit = getCurrentInvestLimit(now);
        return (
        rid,
        uid,
        startTime,
        investCount,
        investMoney,
        rInvestCount[rid],
        rInvestMoney[rid],
        coefficient,
        dayInvest,
        dayLimit,
        now,
        lastInvestTime
        );
    }


    function getUserInfo(address user, uint roundId) public isHuman() view returns (
        uint[19] memory ct, string memory inviteCode, string memory referrer
    ) {

        if (roundId == 0) { 
            roundId = rid;
        }

        User memory userInfo = userRoundMapping[roundId][user];
        
        ct[0] = userInfo.id;
        ct[1] = userInfo.staticLevel;
        ct[2] = userInfo.dynamicLevel;
        ct[3] = userInfo.allInvest;
        Invest memory invest;
        if (userInfo.invests.length == 0) {
            ct[4] = 0;
        } else {
            invest = userInfo.invests[userInfo.invests.length-1];
            ct[4] = getScByLevel(userInfo.staticLevel, userInfo.reInvestCount);
        }
        ct[5] = userInfo.inviteAmount;
        ct[6] = userInfo.freezeAmount;
        ct[7] = userInfo.staticWithdrawn.add(userInfo.dynamicWithdrawn);
        ct[8] = userInfo.staticWithdrawn;
        ct[9] = userInfo.dynamicWithdrawn;
        uint canWithdrawn;
        uint hisWithdrawn;
        uint staticWithdrawn;
        (canWithdrawn, hisWithdrawn, staticWithdrawn) = getStaticProfits(user);
        ct[10] = canWithdrawn;
         ct[11] = userInfo.dynamicAmount;
        uint lockDay;
        uint redeemTime;
        (lockDay, redeemTime) = getUnLockDay(invest.investTime);
        ct[12] = lockDay;
        ct[13] = redeemTime;
        ct[14] = userInfo.reInvestCount;
        ct[15] = userInfo.lockedDynamicAmount;
        ct[16] = userInfo.unlockAmount;
        ct[17] = invest.investTime;
        ct[18] = userInfo.isRedeem;


        inviteCode = userMapping[user].inviteCode;
        referrer = userMapping[user].referrer;
        return (
        ct,
        inviteCode,
        referrer
        );
    }



    function getDayForProfits(uint investTime) private pure returns (uint) {
        return investTime.div(1 days); 
    }
    

    function getCurrentInvestLimit(uint investTime) public view returns (uint){
        uint currentDays = getCurrentInvestDay(investTime).sub(1);
        uint currentRound = currentDays.div(7);
 
        if(currentRound < 4)
        {
            uint limit = 250 * ethWei * currentRound; 
            return baseLimit.add(limit); 
        }
        else
        {
            return 9999999999 * ethWei;
        }
    }
    

    function getCurrentInvestDay(uint investTime) public view returns (uint){
        uint gameStartTime = baseTime; 
        if (gameStartTime == 0 || investTime < gameStartTime) {
            return 0;
        }
        uint currentInvestDay = investTime.sub(gameStartTime).div(1 days).add(1);
        return currentInvestDay;
    }
    

    function isLessThanLimit(uint amount, uint investTime) public view returns (bool){
        return getCurrentInvestLimit(investTime) >= amount.add(everyDayInvestMapping[getCurrentInvestDay(investTime)]);
    }
    

    function notSuspended() public view returns (bool) {
        uint sTime = suspendedTime;
        uint sDays = suspendedDays;
        return sTime == 0 || now < sTime || now >= sDays.mul(1 days).add(sTime);
    }

    function notSuspended(uint investTime) public view returns (bool) {
        uint sTime = suspendedTime;
        uint sDays = suspendedDays;
        return sTime == 0 || investTime < sTime || investTime >= sDays.mul(1 days).add(sTime);
    }

    function suspended(uint stopTime, uint stopDays) external onlyWhitelistAdmin {

        require(stopTime > now, "stopTime shoule greater than now");
        require(stopTime > lastInvestTime, "stopTime shoule greater than lastInvestTime");
        suspendedTime = stopTime;
        suspendedDays = stopDays;
    }

 
    function getUserById(uint id) public view returns (address){
        return indexMapping[id];
    }


    function getAvailableReInvestInAmount(address userAddr) public view returns (uint){
        User memory user = userRoundMapping[rid][userAddr];
        if(user.freezeAmount == 0){
            return user.unlockAmount;
        }else{
            Invest memory invest = user.invests[user.invests.length - 1];
            (uint unlockDay, uint unlockAmountRedeemTime) = getUnLockDay(invest.investTime);
            if(unlockDay >= 7){ 
                return invest.investAmount;
            }
        }
        return 0;
    }


    function getAvailableRedeemAmount(address userAddr) public view returns (uint){
        User memory user = userRoundMapping[rid][userAddr];
        if (now < user.unlockAmountRedeemTime) {
            return 0;
        }
        uint allUnlock = user.unlockAmount;
        if (user.freezeAmount > 0) {
            Invest memory invest = user.invests[user.invests.length - 1];
            (uint unlockDay, uint unlockAmountRedeemTime) = getUnLockDay(invest.investTime);
            if (unlockDay >= 7 && now >= unlockAmountRedeemTime) {    
                allUnlock = invest.investAmount;
            }

        }
        return allUnlock;
    }
    

    function registerUser(address user, string memory inviteCode, string memory referrer) private {
        UserGlobal storage userGlobal = userMapping[user];
        if (userGlobal.id != 0) {
            userGlobal.userAddress = user;
            userGlobal.inviteCode = inviteCode;
            userGlobal.referrer = referrer;
            
            addressMapping[inviteCode] = user;
            indexMapping[uid] = user;
        } else {
            uid++;
            userGlobal.id = uid;
            userGlobal.userAddress = user;
            userGlobal.inviteCode = inviteCode;
            userGlobal.referrer = referrer;
            
            addressMapping[inviteCode] = user;
            indexMapping[uid] = user;
        }
        
    }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {

    /**
    * @dev Multiplies two numbers, reverts on 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-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "mul overflow");

        return c;
    }

    /**
    * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "div zero");
        // Solidity only automatically asserts when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "lower sub bigger");
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two numbers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "overflow");

        return c;
    }

    /**
    * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "mod zero");
        return a % b;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"reInvestIn","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getGameInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investTime","type":"uint256"}],"name":"getUnLockDay","outputs":[{"name":"unlockDay","type":"uint256"},{"name":"unlockAmountRedeemTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"everyDayInvestMapping","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"inviteCode","type":"string"},{"name":"referrer","type":"string"},{"name":"flag","type":"uint256"}],"name":"investIn","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"investTime","type":"uint256"}],"name":"getCurrentInvestLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gameStart","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investTime","type":"uint256"}],"name":"getCurrentInvestDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"userAddr","type":"address"}],"name":"getAvailableReInvestInAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"notSuspended","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"userAddr","type":"address"}],"name":"getStaticProfits","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"userAddr","type":"address"}],"name":"getAvailableRedeemAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"code","type":"string"}],"name":"isUsed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"removeWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getUserById","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"roundId","type":"uint256"}],"name":"getUserInfo","outputs":[{"name":"ct","type":"uint256[19]"},{"name":"inviteCode","type":"string"},{"name":"referrer","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"code","type":"string"}],"name":"getUserAddressByCode","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"stopTime","type":"uint256"},{"name":"stopDays","type":"uint256"}],"name":"suspended","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"inviteCode","type":"string"},{"name":"referrer","type":"string"}],"name":"registerUserInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"indexMapping","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"totaleth","type":"uint256"}],"name":"calPartnershipBonus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"amount","type":"uint256"},{"name":"investTime","type":"uint256"}],"name":"isLessThanLimit","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investTime","type":"uint256"}],"name":"notSuspended","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawDynamicProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"},{"indexed":true,"name":"uid","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"},{"indexed":false,"name":"investTime","type":"uint256"},{"indexed":false,"name":"inviteCode","type":"string"},{"indexed":false,"name":"referrer","type":"string"},{"indexed":false,"name":"t","type":"uint256"}],"name":"LogInvestIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"},{"indexed":true,"name":"uid","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"},{"indexed":false,"name":"t","type":"uint256"}],"name":"LogWithdrawProfit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"},{"indexed":true,"name":"uid","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"now","type":"uint256"}],"name":"LogRedeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6080604052670de0b6b3a7640000600081815560039190915560048054600160a060020a0319908116730c5296d9e4f4a1a5838eba0dc4a2aa7eac2a492b17909155600580548216739c8c082290fc339f54968fbbbb42c86c72aa52cf1790556006805482167394216e8e796b8082924163a3d15580acefa7a5cf17905560078054909116738cff3395658059d287caa563dd5186e24545e6dc179055600a6008819055635e1bb30060098190559055600b819055600d819055600f819055600160105562093a80601155601281905560138190556014556828a857425466f80000601c55348015620000f157600080fd5b50620001056401000000006200017d810204565b60018054600160a060020a031916600160a060020a0392831617908190556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a362000177620001686401000000006200017d810204565b64010000000062000181810204565b6200033a565b3390565b6200019c60028264010000000062004973620001d382021704565b604051600160a060020a038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b620001e882826401000000006200027a810204565b156200025557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a03821615156200031a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b614dff806200034a6000396000f3fe6080604052600436106101a05763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166311b23c2381146101a25780631746bd1b146101aa5780631af826551461021e5780632359256f146102615780632719d02b1461029d5780632b17fb67146103cc5780633218b99d146103f65780633b10dd741461041f578063417d6cd3146104495780634388c62f1461047c5780634c5a628c146104915780634fb5f52b146104a65780635542189a146104f7578063578d714b1461052a5780636897e974146105dd5780636ed6da9e14610610578063715018a6146106565780637362d9c81461066b57806376e8424f1461069e5780638da5cb5b146107df5780638f32d59b146107f4578063959499b614610809578063a14512241461081e578063a8804839146108d1578063aa5f5f2914610901578063ae0a81d7146109e0578063aef843f814610a0a578063b486c6e814610a43578063bb5f747b14610a73578063bc99744f14610aa6578063be040fb014610ad0578063cced4c0714610ae5578063f2fde38b14610afa575b005b6101a0610b2d565b3480156101b657600080fd5b506101bf611151565b604080519c8d5260208d019b909b528b8b019990995260608b019790975260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561022a57600080fd5b506102486004803603602081101561024157600080fd5b5035611284565b6040805192835260208301919091528051918290030190f35b34801561026d57600080fd5b5061028b6004803603602081101561028457600080fd5b503561131b565b60408051918252519081900360200190f35b6101a0600480360360608110156102b357600080fd5b8101906020810181356401000000008111156102ce57600080fd5b8201836020820111156102e057600080fd5b8035906020019184600183028401116401000000008311171561030257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561035557600080fd5b82018360208201111561036757600080fd5b8035906020019184600183028401116401000000008311171561038957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061132d915050565b3480156103d857600080fd5b5061028b600480360360208110156103ef57600080fd5b5035611c16565b34801561040257600080fd5b5061040b611c8e565b604080519115158252519081900360200190f35b34801561042b57600080fd5b5061028b6004803603602081101561044257600080fd5b5035611caa565b34801561045557600080fd5b5061028b6004803603602081101561046c57600080fd5b5035600160a060020a0316611cfd565b34801561048857600080fd5b5061040b611f2a565b34801561049d57600080fd5b506101a0611f68565b3480156104b257600080fd5b506104d9600480360360208110156104c957600080fd5b5035600160a060020a0316611f78565b60408051938452602084019290925282820152519081900360600190f35b34801561050357600080fd5b5061028b6004803603602081101561051a57600080fd5b5035600160a060020a03166122f8565b34801561053657600080fd5b5061040b6004803603602081101561054d57600080fd5b81019060208101813564010000000081111561056857600080fd5b82018360208201111561057a57600080fd5b8035906020019184600183028401116401000000008311171561059c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061253a945050505050565b3480156105e957600080fd5b506101a06004803603602081101561060057600080fd5b5035600160a060020a0316612558565b34801561061c57600080fd5b5061063a6004803603602081101561063357600080fd5b50356125ec565b60408051600160a060020a039092168252519081900360200190f35b34801561066257600080fd5b506101a0612607565b34801561067757600080fd5b506101a06004803603602081101561068e57600080fd5b5035600160a060020a031661269d565b3480156106aa57600080fd5b506106d7600480360360408110156106c157600080fd5b50600160a060020a038135169060200135612743565b604051808461026080838360005b838110156106fd5781810151838201526020016106e5565b505050509050018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610741578181015183820152602001610729565b50505050905090810190601f16801561076e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156107a1578181015183820152602001610789565b50505050905090810190601f1680156107ce5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156107eb57600080fd5b5061063a612c84565b34801561080057600080fd5b5061040b612c93565b34801561081557600080fd5b506101a0612cb9565b34801561082a57600080fd5b5061063a6004803603602081101561084157600080fd5b81019060208101813564010000000081111561085c57600080fd5b82018360208201111561086e57600080fd5b8035906020019184600183028401116401000000008311171561089057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612f07945050505050565b3480156108dd57600080fd5b506101a0600480360360408110156108f457600080fd5b5080359060200135612f78565b34801561090d57600080fd5b506101a06004803603606081101561092457600080fd5b600160a060020a03823516919081019060408101602082013564010000000081111561094f57600080fd5b82018360208201111561096157600080fd5b8035906020019184600183028401116401000000008311171561098357600080fd5b9193909290916020810190356401000000008111156109a157600080fd5b8201836020820111156109b357600080fd5b803590602001918460018302840111640100000000831117156109d557600080fd5b5090925090506130ee565b3480156109ec57600080fd5b5061063a60048036036020811015610a0357600080fd5b50356131b5565b348015610a1657600080fd5b506101a060048036036040811015610a2d57600080fd5b50600160a060020a0381351690602001356131d0565b348015610a4f57600080fd5b5061040b60048036036040811015610a6657600080fd5b508035906020013561360b565b348015610a7f57600080fd5b5061040b60048036036020811015610a9657600080fd5b5035600160a060020a031661364f565b348015610ab257600080fd5b5061040b60048036036020811015610ac957600080fd5b5035613662565b348015610adc57600080fd5b506101a06136a0565b348015610af157600080fd5b506101a0613995565b348015610b0657600080fd5b506101a060048036036020811015610b1d57600080fd5b5035600160a060020a0316613b5e565b601054600090815260156020908152604080832033845290915281208054909110610bc8576040805160e560020a62461bcd02815260206004820152602360248201527f7573657220686176656e277420696e7665737420696e20726f756e642062656660448201527f6f72650000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600581015415610c22576040805160e560020a62461bcd02815260206004820152601860248201527f757365722068616420696e7665737420696e20726f756e640000000000000000604482015290519081900360640190fd5b6006810154600010610c7e576040805160e560020a62461bcd02815260206004820152601b60248201527f75736572206d757374206861766520756e6c6f636b416d6f756e740000000000604482015290519081900360640190fd5b600b81015460009081811115610d5a57610c9781613bb3565b90925090506000811115610d1557600c830154610cba908263ffffffff613bd516565b600c8401556000600b840155610cd03382613c32565b825460408051838152426020820152600281830152905133917fa4677305baf22bbe3cd5afda41d219f539fa94a9d5f262491196bd74209b3e1f919081900360600190a35b811515610d5a576040805160e560020a62461bcd02815260206004820152600c6024820152600080516020614d54833981519152604482015290519081900360640190fd5b6006830154600090610d72903463ffffffff613bd516565b6000600686015560048501549091504290610d93908363ffffffff613bd516565b60048601556005850154610dad908363ffffffff613bd516565b60058601819055610dbd90613c6d565b60028601556005850154610dd090613c6d565b60038601556012850154610deb90600163ffffffff613bd516565b6012860155600060078601819055600e860180546000198101908110610e0d57fe5b9060005260206000209060070201600501549050610e29614ba8565b60e06040519081016040528033600160a060020a0316815260200185815260200184815260200142815260200160008152602001838152602001610e6c85613662565b159052600e8801805460018082018355600092835260209283902084516007909302018054600160a060020a031916600160a060020a03909316929092178255918301519181019190915560408201516002820155606082015160038201556080820151600482015560a0820151600582015560c08201516006909101805460ff1916911515919091179055601454909150831115610f0b5760148390555b600b54610f1f90600163ffffffff613bd516565b600b55600d54610f35908563ffffffff613bd516565b600d556010546000908152600c6020526040902054610f5b90600163ffffffff613bd516565b601080546000908152600c602090815260408083209490945591548152600e9091522054610f8f908563ffffffff613bd516565b601080546000908152600e602090815260408083209490945591548152601a82529182208054600181018255908352912001849055610fcd84613cd5565b610fd684613d1b565b610fdf84613d32565b865433600081815260166020908152604091829020825189815242928101839052928301889052600160a0840181905260c0606085018181526002808501805460001961010082881615020116919091049287018390527f301b3d4c03698798eba88f958a0f3724f79e434ca6ff808fa75bc5ec045c2ec9968d96958d95929460039091019390608083019060e0840190879080156110bf5780601f10611094576101008083540402835291602001916110bf565b820191906000526020600020905b8154815290600101906020018083116110a257829003601f168201915b50508381038252855460026000196101006001841615020190911604808252602090910190869080156111335780601f1061110857610100808354040283529160200191611133565b820191906000526020600020905b81548152906001019060200180831161111657829003601f168201915b50509850505050505050505060405180910390a3505050505050505b565b6000808080808080808080808033803b80156111a5576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614db4833981519152604482015290519081900360640190fd5b3233146111ea576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614d74833981519152604482015290519081900360640190fd5b600080601960006111fa42611caa565b815260200190815260200160002054915061121442611c16565b9050601054600f54600954600b54600d54600c6000601054815260200190815260200160002054600e60006010548152602001908152602001600020546008548989426014549f509f509f509f509f509f509f509f509f509f509f509f5050505050909192939495969798999a9b565b6009546000908190818111158061129a57504284115b806112a457508084105b156112b6575060009150819050611316565b6112d9620151806112cd428763ffffffff613d4916565b9063ffffffff613da916565b92506000915060078310156112ee5750611316565b61131261130560076201518063ffffffff613e1816565b859063ffffffff613bd516565b9150505b915091565b60196020526000908152604090205481565b33803b8015611374576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614db4833981519152604482015290519081900360640190fd5b3233146113b9576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614d74833981519152604482015290519081900360640190fd5b600354341015611413576040805160e560020a62461bcd02815260206004820152600f60248201527f6d6f7265207468616e2031204554480000000000000000000000000000000000604482015290519081900360640190fd5b42600061141f82611caa565b60008181526019602052604090205490915061144290349063ffffffff613bd516565b6000828152601960209081526040808320939093553382526016905220805415156115fe5761147088613e8e565b156114c5576040805160e560020a62461bcd02815260206004820152601160248201527f656d70747920696e7669746520636f6465000000000000000000000000000000604482015290519081900360640190fd5b60006114d088612f07565b9050600160a060020a0381161515611532576040805160e560020a62461bcd02815260206004820152601160248201527f72656665726572206e6f74206578697374000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038116331415611593576040805160e560020a62461bcd02815260206004820152601660248201527f72656665727265722063616e27742062652073656c6600000000000000000000604482015290519081900360640190fd5b61159c8961253a565b156115f1576040805160e560020a62461bcd02815260206004820152601360248201527f696e7669746520636f6465206973207573656400000000000000000000000000604482015290519081900360640190fd5b6115fc338a8a613ea2565b505b60108054600090815260156020908152604080832033845290915290209081015415611674576040805160e560020a62461bcd02815260206004820152601b60248201527f54686973206163636f756e74206973207465726d696e617465642e0000000000604482015290519081900360640190fd5b6001810154600160a060020a03161561173457600581015415801561169b57506006810154155b15156116f1576040805160e560020a62461bcd02815260206004820152601860248201527f796f757220696e76657374206e6f7420756e6c6f636b65640000000000000000604482015290519081900360640190fd5b6004810154611706903463ffffffff613bd516565b6004820155346005820181905561171c90613c6d565b600282015561172a34613c6d565b60038201556118f5565b81548155600181018054600160a060020a03191633179055346005820181905561175d90613c6d565b600282015561176b34613c6d565b60038083019190915534600483015582018054604080516020601f6002610100600187161502600019019095169490940493840181900481028201810190925282815261181193909290918301828280156118075780601f106117dc57610100808354040283529160200191611807565b820191906000526020600020905b8154815290600101906020018083116117ea57829003601f168201915b5050505050613e8e565b15156118f55760038201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181526000936118b293919290918301828280156118a85780601f1061187d576101008083540402835291602001916118a8565b820191906000526020600020905b81548152906001019060200180831161188b57829003601f168201915b5050505050612f07565b9050600160a060020a038116156118f3576010546000908152601560209081526040808320600160a060020a03851684529091529020601301805460010190555b505b6118fd614ba8565b60e06040519081016040528033600160a060020a031681526020013481526020018681526020014281526020016000815260200189815260200161194087613662565b159052600e8301805460018082018355600092835260209283902084516007909302018054600160a060020a031916600160a060020a03909316929092178255918301518183015560408301516002820155606083015160038201556080830151600482015560a0830151600582015560c08301516006909101805460ff19169115159190911790556014879055600b549192506119de9190613bd5565b600b55600d546119f4903463ffffffff613bd516565b600d556010546000908152600c6020526040902054611a1a90600163ffffffff613bd516565b601080546000908152600c602090815260408083209490945591548152600e9091522054611a4e903463ffffffff613bd516565b601080546000908152600e602090815260408083209490945591548152601a825291822080546001810182559083529120349101819055611a8e90613cd5565b611a9734613d1b565b611aa034613d32565b826000015433600160a060020a03167f301b3d4c03698798eba88f958a0f3724f79e434ca6ff808fa75bc5ec045c2ec934428988600201896003016000604051808781526020018681526020018581526020018060200180602001848152602001838103835286818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015611b825780601f10611b5757610100808354040283529160200191611b82565b820191906000526020600020905b815481529060010190602001808311611b6557829003601f168201915b5050838103825285546002600019610100600184161502019091160480825260209091019086908015611bf65780601f10611bcb57610100808354040283529160200191611bf6565b820191906000526020600020905b815481529060010190602001808311611bd957829003601f168201915b50509850505050505050505060405180910390a350505050505050505050565b600080611c336001611c2785611caa565b9063ffffffff613d4916565b90506000611c4882600763ffffffff613da916565b90506004811015611c7a57600354601c5490820260fa0290611c70908263ffffffff613bd516565b9350505050611c89565b6003546402540be3ff02925050505b919050565b6000600954600014158015611ca4575060095442115b90505b90565b600a54600090801580611cbc57508083105b15611ccb576000915050611c89565b6000611cf56001611ce9620151806112cd888763ffffffff613d4916565b9063ffffffff613bd516565b949350505050565b6000611d07614bf1565b6010546000908152601560209081526040808320600160a060020a03808816855290835281842082516102a081018452815481526001820154909216828501526002810154828401526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009810154610120830152600a810154610140830152600b810154610160830152600c810154610180830152600d8101546101a0830152600e81018054845181870281018701909552808552929591946101c08701949391929084015b82821015611e6a5760008481526020908190206040805160e081018252600786029092018054600160a060020a03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460ff16151560c08301529083529092019101611dea565b505050508152602001600f82015481526020016010820154815260200160128201548152602001601382015481526020016014820154815260200160158201548152505090508060a0015160001415611ec85760c001519050611c89565b611ed0614ba8565b6101c082015180516000198101908110611ee657fe5b906020019060200201519050600080611f028360400151611284565b909250905060078210611f1e575050602001519150611c899050565b50600095945050505050565b60125460135460009190811580611f4057508142105b80611f615750611f5d82611ce9836201518063ffffffff613e1816565b4210155b9250505090565b61114f611f736140a8565b6125a4565b6000806000611f85614bf1565b6010546000908152601560209081526040808320600160a060020a03808a16855290835281842082516102a081018452815481526001820154909216828501526002810154828401526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009810154610120830152600a810154610140830152600b810154610160830152600c810154610180830152600d8101546101a0830152600e81018054845181870281018701909552808552929591946101c08701949391929084015b828210156120e85760008481526020908190206040805160e081018252600786029092018054600160a060020a03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460ff16151560c08301529083529092019101612068565b50505090825250600f8201546020820152601082015460408201526012820154606082015260138201546080820152601482015460a082015260159091015460c0909101528051909150158061214257506101c081015151155b156121575750600092508291508190506122f1565b60a0810151151561217d576101208101516101a0909101516000945090925090506122f1565b6101c081015151600090819061219a90600163ffffffff613d4916565b90506121a4614ba8565b6101c08401518051839081106121b657fe5b90602001906020020151905060006121d785604001518661022001516140ac565b90506000612208620151806121fc620151808660400151613da990919063ffffffff16565b9063ffffffff613e1816565b905080421015612234576000866101200151876101a001518292509850985098505050505050506122f1565b600061224d620151806112cd428563ffffffff613d4916565b9050600781111561225c575060075b8360800151811115612294576122916127106112cd8960a001516121fc876121fc8a6080015188613d4990919063ffffffff16565b95505b6122ae600a6112cd60085489613e1890919063ffffffff16565b6101008801519096506122c7908763ffffffff613bd516565b6101208801516122dd908863ffffffff613bd516565b886101a00151995099509950505050505050505b9193909250565b6000612302614bf1565b6010546000908152601560209081526040808320600160a060020a03808816855290835281842082516102a081018452815481526001820154909216828501526002810154828401526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009810154610120830152600a810154610140830152600b810154610160830152600c810154610180830152600d8101546101a0830152600e81018054845181870281018701909552808552929591946101c08701949391929084015b828210156124655760008481526020908190206040805160e081018252600786029092018054600160a060020a03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460ff16151560c083015290835290920191016123e5565b505050508152602001600f82015481526020016010820154815260200160128201548152602001601382015481526020016014820154815260200160158201548152505090508060e001514210156124c1576000915050611c89565b60c081015160a082015160001015612533576124db614ba8565b6101c0830151805160001981019081106124f157fe5b90602001906020020151905060008061250d8360400151611284565b91509150600782101580156125225750804210155b1561252f57826020015193505b5050505b9392505050565b60008061254683612f07565b600160a060020a031615159392505050565b612560612c93565b15156125a4576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614d94833981519152604482015290519081900360640190fd5b6125b560028263ffffffff61416216565b604051600160a060020a038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b600090815260186020526040902054600160a060020a031690565b61260f612c93565b1515612653576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614d94833981519152604482015290519081900360640190fd5b600154604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360018054600160a060020a0319169055565b6126ad6126a86140a8565b61364f565b806126bb57506126bb612c93565b1515612737576040805160e560020a62461bcd02815260206004820152602481018290527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060448201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65606482015290519081900360840190fd5b6127408161420a565b50565b61274b614c9b565b60608033803b8015612795576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614db4833981519152604482015290519081900360640190fd5b3233146127da576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614d74833981519152604482015290519081900360640190fd5b8515156127e75760105495505b6127ef614bf1565b6000878152601560209081526040808320600160a060020a03808d16855290835281842082516102a081018452815481526001820154909216828501526002810154828401526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009810154610120830152600a810154610140830152600b810154610160830152600c810154610180830152600d8101546101a0830152600e81018054845181870281018701909552808552929591946101c08701949391929084015b8282101561294f5760008481526020908190206040805160e081018252600786029092018054600160a060020a03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460ff16151560c083015290835290920191016128cf565b50505090825250600f8201546020820152601082015460408201526012820154606082015260138201546080820152601482015460a082015260159091015460c090910152805190915086600060200201526040810151866001602002015260608101518660026020020152608081015186600360200201526129d0614ba8565b6101c08201515115156129e95760006080880152612a24565b6101c0820151805160001981019081106129ff57fe5b906020019060200201519050612a1e82604001518361022001516140ac565b60808801525b61024082015160a08089019190915282015160c08801526101808201516101a0830151612a5091613bd5565b60e08801526101a082015161010088015261018082015161012088015260008080612a7a8c611f78565b610140808e018490528801516101608e0152604087015192955090935091506000908190612aa790611284565b9092509050818c600c6020020152808c600d60200201526102208701518c600e60200201526101608701518c600f602002015260c08701518c6010602002015260408601518c601160200201526102008701518c601260209081029190910191909152600160a060020a038f166000908152601682526040908190206002908101805483516001821615610100026000190190911692909204601f81018590048502830185019093528282529092909190830182828015612ba95780601f10612b7e57610100808354040283529160200191612ba9565b820191906000526020600020905b815481529060010190602001808311612b8c57829003601f168201915b50505050509a50601660008f600160a060020a0316600160a060020a031681526020019081526020016000206003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c6c5780601f10612c4157610100808354040283529160200191612c6c565b820191906000526020600020905b815481529060010190602001808311612c4f57829003601f168201915b50939d50505050505050505050505050509250925092565b600154600160a060020a031690565b600154600090600160a060020a0316612caa6140a8565b600160a060020a031614905090565b33803b8015612d00576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614db4833981519152604482015290519081900360640190fd5b323314612d45576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614d74833981519152604482015290519081900360640190fd5b601054600090815260156020908152604080832033808552925290912090612d6c90614252565b506008810154600080612d7e83613bb3565b9092509050811515612dc8576040805160e560020a62461bcd02815260206004820152600c6024820152600080516020614d54833981519152604482015290519081900360640190fd5b6000811115612eff5760646005820281900490605f830204612dea3382613c32565b612df382614480565b600d860154612e08908663ffffffff613bd516565b600d8701556000600887018190553381526016602090815260409182902060030180548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452612eb89392830182828015612ead5780601f10612e8257610100808354040283529160200191612ead565b820191906000526020600020905b815481529060010190602001808311612e9057829003601f168201915b5050505050846144ba565b855460408051858152426020820152600181830152905133917fa4677305baf22bbe3cd5afda41d219f539fa94a9d5f262491196bd74209b3e1f919081900360600190a350505b505050505050565b60006017826040518082805190602001908083835b60208310612f3b5780518252601f199092019160209182019101612f1c565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054600160a060020a0316949350505050565b612f836126a86140a8565b80612f915750612f91612c93565b151561300d576040805160e560020a62461bcd02815260206004820152602481018290527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060448201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65606482015290519081900360840190fd5b428211613064576040805160e560020a62461bcd02815260206004820181905260248201527f73746f7054696d652073686f756c652067726561746572207468616e206e6f77604482015290519081900360640190fd5b60145482116130e3576040805160e560020a62461bcd02815260206004820152602b60248201527f73746f7054696d652073686f756c652067726561746572207468616e206c617360448201527f74496e7665737454696d65000000000000000000000000000000000000000000606482015290519081900360840190fd5b601291909155601355565b6130f6612c93565b151561313a576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614d94833981519152604482015290519081900360640190fd5b6131ae8585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781529250879150869081908401838280828437600092019190915250613ea292505050565b5050505050565b601860205260009081526040902054600160a060020a031681565b6131d8612c93565b151561321c576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614d94833981519152604482015290519081900360640190fd5b600954614e20906000811161327b576040805160e560020a62461bcd02815260206004820152600560248201527f6572726f72000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b818310156135b45761328b614c9b565b613293614bf1565b600160a060020a0380871660009081527f27739e4bb5e6f8b5e4b57a047dca8767cc9b982a011081e086cbb0dfa9de818d6020908152604080832081516102a081018352815481526001820154909516858401526002810154858301526003810154606086015260048101546080860152600581015460a0860152600681015460c0860152600781015460e086015260088101546101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101805483518186028101860190945280845291946101c087019491929184015b828210156134075760008481526020908190206040805160e081018252600786029092018054600160a060020a03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460ff16151560c08301529083529092019101613387565b50505090825250600f8201546020820152601082015460408201526012820154606082015260138201546080820152601482015460a082015260159091015460c09091015280519091508260006020020152604081015182600160200201526060810151826002602002015260808101518260036020020152613488614ba8565b6101c08201515115156134a157600060808401526134dc565b6101c0820151805160001981019081106134b757fe5b9060200190602002015190506134d682604001518361022001516140ac565b60808401525b61024082015160a08085019190915282015160c08401526101808201516101a083015161350891613bd5565b60e08401526101a0820151610100840152610180820151610120840152600080806135328a611f78565b610140808a018490528801516101608a015260408701519295509093509150600090819061355f90611284565b6101808a01919091526101a089015250505050610220838101516101c08601526101608401516101e086015260c084015161020080870191909152604093909301519085015250015161024090910152613605565b506010546000908152601560208181526040808420600160a060020a0388168552909152808320918201839055513390303180156108fc029185818181858888f1935050505015156131ae57600080fd5b50505050565b600061363b6019600061361d85611caa565b81526020019081526020016000205484613bd590919063ffffffff16565b61364483611c16565b101590505b92915050565b600061364960028363ffffffff61474016565b6012546013546000919081158061367857508184105b80611cf5575061369582611ce9836201518063ffffffff613e1816565b841015949350505050565b33803b80156136e7576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614db4833981519152604482015290519081900360640190fd5b32331461372c576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614d74833981519152604482015290519081900360640190fd5b613734611f2a565b151561378a576040805160e560020a62461bcd02815260206004820152600960248201527f73757370656e6465640000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6010546000908152601560209081526040808320338452909152812080549091106137ff576040805160e560020a62461bcd02815260206004820152600e60248201527f75736572206e6f74206578697374000000000000000000000000000000000000604482015290519081900360640190fd5b600781015442101561385b576040805160e560020a62461bcd02815260206004820152601760248201527f72656465656d2074696d65206e6f6e2d6172726976616c000000000000000000604482015290519081900360640190fd5b60068101548015156138b7576040805160e560020a62461bcd02815260206004820152601960248201527f796f7520646f6e2774206861766520756e6c6f636b2065746800000000000000604482015290519081900360640190fd5b60128201546000806138c984846147e8565b9092509050811515613913576040805160e560020a62461bcd02815260206004820152600c6024820152600080516020614d54833981519152604482015290519081900360640190fd5b600081111561398c576139263382613c32565b600060068601819055600286018190556003860181905560128601819055600986015560016010860155845460408051838152426020820152815133927faf488116a12f56ff590ab3ca73f6bf9d11028ca9e63e965223b3d156fe18f593928290030190a35b50505050505050565b33803b80156139dc576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614db4833981519152604482015290519081900360640190fd5b323314613a21576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614d74833981519152604482015290519081900360640190fd5b60105460009081526015602090815260408083203384529091528120600a810154909180613a4e83613bb3565b9092509050811515613a98576040805160e560020a62461bcd02815260206004820152600c6024820152600080516020614d54833981519152604482015290519081900360640190fd5b6000811115612eff576064600a820281900490605a830281900490601e8202819004906046830204613aca3382613c32565b613ad384614480565b600c880154613ae8908663ffffffff613bd516565b600c890155600b880154613b02908363ffffffff613bd516565b600b8901556000600a890155875460408051838152426020820152600281830152905133917fa4677305baf22bbe3cd5afda41d219f539fa94a9d5f262491196bd74209b3e1f919081900360600190a350505050505050505050565b613b66612c93565b1515613baa576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614d94833981519152604482015290519081900360640190fd5b61274081614891565b60008030318310613bca5750600090503031611316565b506001905081611316565b600082820183811015612533576040805160e560020a62461bcd02815260206004820152600860248201527f6f766572666c6f77000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015613c68573d6000803e3d6000fd5b505050565b600080548210801590613c8557506000546009028211155b15613c9257506001611c89565b600054600a028210158015613cac57506000546013028211155b15613cb957506002611c89565b6000546014028210613ccd57506003611c89565b506000919050565b600454600160a060020a03166108fc6064600384025b049081150290604051600060405180830381858888f19350505050158015613d17573d6000803e3d6000fd5b5050565b600654600160a060020a03166108fc606483613ceb565b600754600160a060020a03166108fc606483613ceb565b600082821115613da3576040805160e560020a62461bcd02815260206004820152601060248201527f6c6f776572207375622062696767657200000000000000000000000000000000604482015290519081900360640190fd5b50900390565b6000808211613e02576040805160e560020a62461bcd02815260206004820152600860248201527f646976207a65726f000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008284811515613e0f57fe5b04949350505050565b6000821515613e2957506000613649565b828202828482811515613e3857fe5b0414612533576040805160e560020a62461bcd02815260206004820152600c60248201527f6d756c206f766572666c6f770000000000000000000000000000000000000000604482015290519081900360640190fd5b6000815160001415613ccd57506001611c89565b600160a060020a0383166000908152601660205260409020805415613fae57600181018054600160a060020a031916600160a060020a0386161790558251613ef39060028301906020860190614cbb565b508151613f099060038301906020850190614cbb565b50836017846040518082805190602001908083835b60208310613f3d5780518252601f199092019160209182019101613f1e565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382019094208054600160a060020a0319908116600160a060020a0397881617909155600f5460009081526018909252939020805490931693881693909317909155506136059050565b600f805460019081019182905590825581018054600160a060020a031916600160a060020a0386161790558251613fee9060028301906020860190614cbb565b5081516140049060038301906020850190614cbb565b50836017846040518082805190602001908083835b602083106140385780518252601f199092019160209182019101614019565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382019094208054600160a060020a0319908116600160a060020a0397881617909155600f54600090815260189092529390208054909316979093169690961790555050505050565b3390565b600082600114156140e7578115156140c657506050613649565b81600114156140d75750605a613649565b600282106140e757506064613649565b8260021415614120578115156140ff57506050613649565b81600114156141105750605a613649565b6002821061412057506064613649565b82600314156141595781151561413857506050613649565b81600114156141495750605a613649565b6002821061415957506064613649565b50600092915050565b61416c8282614740565b15156141e8576040805160e560020a62461bcd02815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60448201527f6500000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b61421b60028263ffffffff61497316565b604051600160a060020a038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b6010546000908152601560209081526040808320600160a060020a038516845290915281208054158061428757506005810154155b15614296576000915050611c89565b600e81015460009081906142b190600163ffffffff613d4916565b9050600083600e01828154811015156142c657fe5b9060005260206000209060070201905060006142ea856002015486601201546140ac565b9050600061430f620151806121fc620151808660020154613da990919063ffffffff16565b9050804210156143285760009650505050505050611c89565b6000614341620151806112cd428563ffffffff613d4916565b90506007811115614350575060075b836004015481111561438f576143856127106112cd86600101546121fc876121fc8a6004015488613d4990919063ffffffff16565b6004850182905595505b60008061439f8660020154611284565b91509150600782101580156143b75750600589015415155b1561441b57600f8901546143d290600163ffffffff613bd516565b600f8a0155600186015460058a01546143f09163ffffffff613d4916565b60058a0155600186015460068a015461440e9163ffffffff613bd516565b60068a0155600789018190555b614435600a6112cd6008548b613e1890919063ffffffff16565b60088a015490985061444d908963ffffffff613bd516565b60088a01556009890154614467908963ffffffff613bd516565b60098a0155505050600890950154979650505050505050565b600554604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015613d17573d6000803e3d6000fd5b8160015b60148111613605576144cf82613e8e565b156144d957613605565b60006017836040518082805190602001908083835b6020831061450d5780518252601f1990920191602091820191016144ee565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054600160a060020a0316925050508015156145535750613605565b6010546000908152601560209081526040808320600160a060020a0385168452909152812060028101546013820154919291614591919086906149f7565b600c830154600a8401546004850154929350606489850204920303808211156145b8578091505b6000821161467157600160a060020a03851660009081526016602090815260409182902060030180548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156146605780601f1061463557610100808354040283529160200191614660565b820191906000526020600020905b81548152906001019060200180831161464357829003601f168201915b505050505096505050505050614738565b600a840154614686908363ffffffff613bd516565b600a850155600160a060020a03851660009081526016602090815260409182902060030180548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452909183018282801561472b5780601f106147005761010080835404028352916020019161472b565b820191906000526020600020905b81548152906001019060200180831161470e57829003601f168201915b5050505050965050505050505b6001016144be565b6000600160a060020a03821615156147c8576040805160e560020a62461bcd02815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b600080600083101580156147fd575060058311155b1561480c576064605085020493505b6006831015801561481e5750600a8311155b1561482d576064605585020493505b600b831015801561483f5750600f8311155b1561484e576064605a85020493505b60108310158015614860575060148311155b1561486f576064605f85020493505b30318410614883575060009050303161488a565b5060019050825b9250929050565b600160a060020a0381161515614917576040805160e560020a62461bcd02815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600154604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360018054600160a060020a031916600160a060020a0392909216919091179055565b61497d8282614740565b156149d2576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600060038210614b10578360011415614a3d578260011415614a1b57506032612533565b8260021415614a2c5750600a612533565b8260031415614a3d5750600a612533565b8360021415614a86578260011415614a5757506046612533565b8260021415614a6857506014612533565b600383101580614a79575060058311155b15614a865750600a612533565b8360031415614b0b578260011415614aa057506064612533565b8260021415614ab15750601e612533565b600383101580614ac2575060058311155b15614acf5750600a612533565b600683101580614ae05750600a8311155b15614aed57506005612533565b600b83101580614afe575060148311155b15614b0b57506003612533565b614b9e565b8360011415614b2a578260011415614b2a57506032612533565b8360021415614b55578260011415614b4457506046612533565b8260021415614b5557506014612533565b8360031415614b9e578260011415614b6f57506064612533565b8260021415614b805750601e612533565b600383101580614b91575060058311155b15614b9e5750600a612533565b5060009392505050565b60e0604051908101604052806000600160a060020a0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b6102a060405190810160405280600081526020016000600160a060020a03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610260604051908101604052806013906020820280388339509192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614cfc57805160ff1916838001178555614d29565b82800160010185558215614d29579182015b82811115614d29578251825591602001919060010190614d0e565b50614d35929150614d39565b5090565b611ca791905b80821115614d355760008155600101614d3f56fe696e76616c696420666c61670000000000000000000000000000000000000000736f7272792c2068756d616e206f6e6c790000000000000000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a72305820d001a921e5bba9689282523e77521855e2e067ae640667b31b965a37e3dbdc420029

Deployed Bytecode

0x6080604052600436106101a05763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166311b23c2381146101a25780631746bd1b146101aa5780631af826551461021e5780632359256f146102615780632719d02b1461029d5780632b17fb67146103cc5780633218b99d146103f65780633b10dd741461041f578063417d6cd3146104495780634388c62f1461047c5780634c5a628c146104915780634fb5f52b146104a65780635542189a146104f7578063578d714b1461052a5780636897e974146105dd5780636ed6da9e14610610578063715018a6146106565780637362d9c81461066b57806376e8424f1461069e5780638da5cb5b146107df5780638f32d59b146107f4578063959499b614610809578063a14512241461081e578063a8804839146108d1578063aa5f5f2914610901578063ae0a81d7146109e0578063aef843f814610a0a578063b486c6e814610a43578063bb5f747b14610a73578063bc99744f14610aa6578063be040fb014610ad0578063cced4c0714610ae5578063f2fde38b14610afa575b005b6101a0610b2d565b3480156101b657600080fd5b506101bf611151565b604080519c8d5260208d019b909b528b8b019990995260608b019790975260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561022a57600080fd5b506102486004803603602081101561024157600080fd5b5035611284565b6040805192835260208301919091528051918290030190f35b34801561026d57600080fd5b5061028b6004803603602081101561028457600080fd5b503561131b565b60408051918252519081900360200190f35b6101a0600480360360608110156102b357600080fd5b8101906020810181356401000000008111156102ce57600080fd5b8201836020820111156102e057600080fd5b8035906020019184600183028401116401000000008311171561030257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561035557600080fd5b82018360208201111561036757600080fd5b8035906020019184600183028401116401000000008311171561038957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061132d915050565b3480156103d857600080fd5b5061028b600480360360208110156103ef57600080fd5b5035611c16565b34801561040257600080fd5b5061040b611c8e565b604080519115158252519081900360200190f35b34801561042b57600080fd5b5061028b6004803603602081101561044257600080fd5b5035611caa565b34801561045557600080fd5b5061028b6004803603602081101561046c57600080fd5b5035600160a060020a0316611cfd565b34801561048857600080fd5b5061040b611f2a565b34801561049d57600080fd5b506101a0611f68565b3480156104b257600080fd5b506104d9600480360360208110156104c957600080fd5b5035600160a060020a0316611f78565b60408051938452602084019290925282820152519081900360600190f35b34801561050357600080fd5b5061028b6004803603602081101561051a57600080fd5b5035600160a060020a03166122f8565b34801561053657600080fd5b5061040b6004803603602081101561054d57600080fd5b81019060208101813564010000000081111561056857600080fd5b82018360208201111561057a57600080fd5b8035906020019184600183028401116401000000008311171561059c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061253a945050505050565b3480156105e957600080fd5b506101a06004803603602081101561060057600080fd5b5035600160a060020a0316612558565b34801561061c57600080fd5b5061063a6004803603602081101561063357600080fd5b50356125ec565b60408051600160a060020a039092168252519081900360200190f35b34801561066257600080fd5b506101a0612607565b34801561067757600080fd5b506101a06004803603602081101561068e57600080fd5b5035600160a060020a031661269d565b3480156106aa57600080fd5b506106d7600480360360408110156106c157600080fd5b50600160a060020a038135169060200135612743565b604051808461026080838360005b838110156106fd5781810151838201526020016106e5565b505050509050018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610741578181015183820152602001610729565b50505050905090810190601f16801561076e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156107a1578181015183820152602001610789565b50505050905090810190601f1680156107ce5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156107eb57600080fd5b5061063a612c84565b34801561080057600080fd5b5061040b612c93565b34801561081557600080fd5b506101a0612cb9565b34801561082a57600080fd5b5061063a6004803603602081101561084157600080fd5b81019060208101813564010000000081111561085c57600080fd5b82018360208201111561086e57600080fd5b8035906020019184600183028401116401000000008311171561089057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612f07945050505050565b3480156108dd57600080fd5b506101a0600480360360408110156108f457600080fd5b5080359060200135612f78565b34801561090d57600080fd5b506101a06004803603606081101561092457600080fd5b600160a060020a03823516919081019060408101602082013564010000000081111561094f57600080fd5b82018360208201111561096157600080fd5b8035906020019184600183028401116401000000008311171561098357600080fd5b9193909290916020810190356401000000008111156109a157600080fd5b8201836020820111156109b357600080fd5b803590602001918460018302840111640100000000831117156109d557600080fd5b5090925090506130ee565b3480156109ec57600080fd5b5061063a60048036036020811015610a0357600080fd5b50356131b5565b348015610a1657600080fd5b506101a060048036036040811015610a2d57600080fd5b50600160a060020a0381351690602001356131d0565b348015610a4f57600080fd5b5061040b60048036036040811015610a6657600080fd5b508035906020013561360b565b348015610a7f57600080fd5b5061040b60048036036020811015610a9657600080fd5b5035600160a060020a031661364f565b348015610ab257600080fd5b5061040b60048036036020811015610ac957600080fd5b5035613662565b348015610adc57600080fd5b506101a06136a0565b348015610af157600080fd5b506101a0613995565b348015610b0657600080fd5b506101a060048036036020811015610b1d57600080fd5b5035600160a060020a0316613b5e565b601054600090815260156020908152604080832033845290915281208054909110610bc8576040805160e560020a62461bcd02815260206004820152602360248201527f7573657220686176656e277420696e7665737420696e20726f756e642062656660448201527f6f72650000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600581015415610c22576040805160e560020a62461bcd02815260206004820152601860248201527f757365722068616420696e7665737420696e20726f756e640000000000000000604482015290519081900360640190fd5b6006810154600010610c7e576040805160e560020a62461bcd02815260206004820152601b60248201527f75736572206d757374206861766520756e6c6f636b416d6f756e740000000000604482015290519081900360640190fd5b600b81015460009081811115610d5a57610c9781613bb3565b90925090506000811115610d1557600c830154610cba908263ffffffff613bd516565b600c8401556000600b840155610cd03382613c32565b825460408051838152426020820152600281830152905133917fa4677305baf22bbe3cd5afda41d219f539fa94a9d5f262491196bd74209b3e1f919081900360600190a35b811515610d5a576040805160e560020a62461bcd02815260206004820152600c6024820152600080516020614d54833981519152604482015290519081900360640190fd5b6006830154600090610d72903463ffffffff613bd516565b6000600686015560048501549091504290610d93908363ffffffff613bd516565b60048601556005850154610dad908363ffffffff613bd516565b60058601819055610dbd90613c6d565b60028601556005850154610dd090613c6d565b60038601556012850154610deb90600163ffffffff613bd516565b6012860155600060078601819055600e860180546000198101908110610e0d57fe5b9060005260206000209060070201600501549050610e29614ba8565b60e06040519081016040528033600160a060020a0316815260200185815260200184815260200142815260200160008152602001838152602001610e6c85613662565b159052600e8801805460018082018355600092835260209283902084516007909302018054600160a060020a031916600160a060020a03909316929092178255918301519181019190915560408201516002820155606082015160038201556080820151600482015560a0820151600582015560c08201516006909101805460ff1916911515919091179055601454909150831115610f0b5760148390555b600b54610f1f90600163ffffffff613bd516565b600b55600d54610f35908563ffffffff613bd516565b600d556010546000908152600c6020526040902054610f5b90600163ffffffff613bd516565b601080546000908152600c602090815260408083209490945591548152600e9091522054610f8f908563ffffffff613bd516565b601080546000908152600e602090815260408083209490945591548152601a82529182208054600181018255908352912001849055610fcd84613cd5565b610fd684613d1b565b610fdf84613d32565b865433600081815260166020908152604091829020825189815242928101839052928301889052600160a0840181905260c0606085018181526002808501805460001961010082881615020116919091049287018390527f301b3d4c03698798eba88f958a0f3724f79e434ca6ff808fa75bc5ec045c2ec9968d96958d95929460039091019390608083019060e0840190879080156110bf5780601f10611094576101008083540402835291602001916110bf565b820191906000526020600020905b8154815290600101906020018083116110a257829003601f168201915b50508381038252855460026000196101006001841615020190911604808252602090910190869080156111335780601f1061110857610100808354040283529160200191611133565b820191906000526020600020905b81548152906001019060200180831161111657829003601f168201915b50509850505050505050505060405180910390a3505050505050505b565b6000808080808080808080808033803b80156111a5576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614db4833981519152604482015290519081900360640190fd5b3233146111ea576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614d74833981519152604482015290519081900360640190fd5b600080601960006111fa42611caa565b815260200190815260200160002054915061121442611c16565b9050601054600f54600954600b54600d54600c6000601054815260200190815260200160002054600e60006010548152602001908152602001600020546008548989426014549f509f509f509f509f509f509f509f509f509f509f509f5050505050909192939495969798999a9b565b6009546000908190818111158061129a57504284115b806112a457508084105b156112b6575060009150819050611316565b6112d9620151806112cd428763ffffffff613d4916565b9063ffffffff613da916565b92506000915060078310156112ee5750611316565b61131261130560076201518063ffffffff613e1816565b859063ffffffff613bd516565b9150505b915091565b60196020526000908152604090205481565b33803b8015611374576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614db4833981519152604482015290519081900360640190fd5b3233146113b9576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614d74833981519152604482015290519081900360640190fd5b600354341015611413576040805160e560020a62461bcd02815260206004820152600f60248201527f6d6f7265207468616e2031204554480000000000000000000000000000000000604482015290519081900360640190fd5b42600061141f82611caa565b60008181526019602052604090205490915061144290349063ffffffff613bd516565b6000828152601960209081526040808320939093553382526016905220805415156115fe5761147088613e8e565b156114c5576040805160e560020a62461bcd02815260206004820152601160248201527f656d70747920696e7669746520636f6465000000000000000000000000000000604482015290519081900360640190fd5b60006114d088612f07565b9050600160a060020a0381161515611532576040805160e560020a62461bcd02815260206004820152601160248201527f72656665726572206e6f74206578697374000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038116331415611593576040805160e560020a62461bcd02815260206004820152601660248201527f72656665727265722063616e27742062652073656c6600000000000000000000604482015290519081900360640190fd5b61159c8961253a565b156115f1576040805160e560020a62461bcd02815260206004820152601360248201527f696e7669746520636f6465206973207573656400000000000000000000000000604482015290519081900360640190fd5b6115fc338a8a613ea2565b505b60108054600090815260156020908152604080832033845290915290209081015415611674576040805160e560020a62461bcd02815260206004820152601b60248201527f54686973206163636f756e74206973207465726d696e617465642e0000000000604482015290519081900360640190fd5b6001810154600160a060020a03161561173457600581015415801561169b57506006810154155b15156116f1576040805160e560020a62461bcd02815260206004820152601860248201527f796f757220696e76657374206e6f7420756e6c6f636b65640000000000000000604482015290519081900360640190fd5b6004810154611706903463ffffffff613bd516565b6004820155346005820181905561171c90613c6d565b600282015561172a34613c6d565b60038201556118f5565b81548155600181018054600160a060020a03191633179055346005820181905561175d90613c6d565b600282015561176b34613c6d565b60038083019190915534600483015582018054604080516020601f6002610100600187161502600019019095169490940493840181900481028201810190925282815261181193909290918301828280156118075780601f106117dc57610100808354040283529160200191611807565b820191906000526020600020905b8154815290600101906020018083116117ea57829003601f168201915b5050505050613e8e565b15156118f55760038201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181526000936118b293919290918301828280156118a85780601f1061187d576101008083540402835291602001916118a8565b820191906000526020600020905b81548152906001019060200180831161188b57829003601f168201915b5050505050612f07565b9050600160a060020a038116156118f3576010546000908152601560209081526040808320600160a060020a03851684529091529020601301805460010190555b505b6118fd614ba8565b60e06040519081016040528033600160a060020a031681526020013481526020018681526020014281526020016000815260200189815260200161194087613662565b159052600e8301805460018082018355600092835260209283902084516007909302018054600160a060020a031916600160a060020a03909316929092178255918301518183015560408301516002820155606083015160038201556080830151600482015560a0830151600582015560c08301516006909101805460ff19169115159190911790556014879055600b549192506119de9190613bd5565b600b55600d546119f4903463ffffffff613bd516565b600d556010546000908152600c6020526040902054611a1a90600163ffffffff613bd516565b601080546000908152600c602090815260408083209490945591548152600e9091522054611a4e903463ffffffff613bd516565b601080546000908152600e602090815260408083209490945591548152601a825291822080546001810182559083529120349101819055611a8e90613cd5565b611a9734613d1b565b611aa034613d32565b826000015433600160a060020a03167f301b3d4c03698798eba88f958a0f3724f79e434ca6ff808fa75bc5ec045c2ec934428988600201896003016000604051808781526020018681526020018581526020018060200180602001848152602001838103835286818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015611b825780601f10611b5757610100808354040283529160200191611b82565b820191906000526020600020905b815481529060010190602001808311611b6557829003601f168201915b5050838103825285546002600019610100600184161502019091160480825260209091019086908015611bf65780601f10611bcb57610100808354040283529160200191611bf6565b820191906000526020600020905b815481529060010190602001808311611bd957829003601f168201915b50509850505050505050505060405180910390a350505050505050505050565b600080611c336001611c2785611caa565b9063ffffffff613d4916565b90506000611c4882600763ffffffff613da916565b90506004811015611c7a57600354601c5490820260fa0290611c70908263ffffffff613bd516565b9350505050611c89565b6003546402540be3ff02925050505b919050565b6000600954600014158015611ca4575060095442115b90505b90565b600a54600090801580611cbc57508083105b15611ccb576000915050611c89565b6000611cf56001611ce9620151806112cd888763ffffffff613d4916565b9063ffffffff613bd516565b949350505050565b6000611d07614bf1565b6010546000908152601560209081526040808320600160a060020a03808816855290835281842082516102a081018452815481526001820154909216828501526002810154828401526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009810154610120830152600a810154610140830152600b810154610160830152600c810154610180830152600d8101546101a0830152600e81018054845181870281018701909552808552929591946101c08701949391929084015b82821015611e6a5760008481526020908190206040805160e081018252600786029092018054600160a060020a03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460ff16151560c08301529083529092019101611dea565b505050508152602001600f82015481526020016010820154815260200160128201548152602001601382015481526020016014820154815260200160158201548152505090508060a0015160001415611ec85760c001519050611c89565b611ed0614ba8565b6101c082015180516000198101908110611ee657fe5b906020019060200201519050600080611f028360400151611284565b909250905060078210611f1e575050602001519150611c899050565b50600095945050505050565b60125460135460009190811580611f4057508142105b80611f615750611f5d82611ce9836201518063ffffffff613e1816565b4210155b9250505090565b61114f611f736140a8565b6125a4565b6000806000611f85614bf1565b6010546000908152601560209081526040808320600160a060020a03808a16855290835281842082516102a081018452815481526001820154909216828501526002810154828401526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009810154610120830152600a810154610140830152600b810154610160830152600c810154610180830152600d8101546101a0830152600e81018054845181870281018701909552808552929591946101c08701949391929084015b828210156120e85760008481526020908190206040805160e081018252600786029092018054600160a060020a03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460ff16151560c08301529083529092019101612068565b50505090825250600f8201546020820152601082015460408201526012820154606082015260138201546080820152601482015460a082015260159091015460c0909101528051909150158061214257506101c081015151155b156121575750600092508291508190506122f1565b60a0810151151561217d576101208101516101a0909101516000945090925090506122f1565b6101c081015151600090819061219a90600163ffffffff613d4916565b90506121a4614ba8565b6101c08401518051839081106121b657fe5b90602001906020020151905060006121d785604001518661022001516140ac565b90506000612208620151806121fc620151808660400151613da990919063ffffffff16565b9063ffffffff613e1816565b905080421015612234576000866101200151876101a001518292509850985098505050505050506122f1565b600061224d620151806112cd428563ffffffff613d4916565b9050600781111561225c575060075b8360800151811115612294576122916127106112cd8960a001516121fc876121fc8a6080015188613d4990919063ffffffff16565b95505b6122ae600a6112cd60085489613e1890919063ffffffff16565b6101008801519096506122c7908763ffffffff613bd516565b6101208801516122dd908863ffffffff613bd516565b886101a00151995099509950505050505050505b9193909250565b6000612302614bf1565b6010546000908152601560209081526040808320600160a060020a03808816855290835281842082516102a081018452815481526001820154909216828501526002810154828401526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009810154610120830152600a810154610140830152600b810154610160830152600c810154610180830152600d8101546101a0830152600e81018054845181870281018701909552808552929591946101c08701949391929084015b828210156124655760008481526020908190206040805160e081018252600786029092018054600160a060020a03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460ff16151560c083015290835290920191016123e5565b505050508152602001600f82015481526020016010820154815260200160128201548152602001601382015481526020016014820154815260200160158201548152505090508060e001514210156124c1576000915050611c89565b60c081015160a082015160001015612533576124db614ba8565b6101c0830151805160001981019081106124f157fe5b90602001906020020151905060008061250d8360400151611284565b91509150600782101580156125225750804210155b1561252f57826020015193505b5050505b9392505050565b60008061254683612f07565b600160a060020a031615159392505050565b612560612c93565b15156125a4576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614d94833981519152604482015290519081900360640190fd5b6125b560028263ffffffff61416216565b604051600160a060020a038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b600090815260186020526040902054600160a060020a031690565b61260f612c93565b1515612653576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614d94833981519152604482015290519081900360640190fd5b600154604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360018054600160a060020a0319169055565b6126ad6126a86140a8565b61364f565b806126bb57506126bb612c93565b1515612737576040805160e560020a62461bcd02815260206004820152602481018290527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060448201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65606482015290519081900360840190fd5b6127408161420a565b50565b61274b614c9b565b60608033803b8015612795576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614db4833981519152604482015290519081900360640190fd5b3233146127da576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614d74833981519152604482015290519081900360640190fd5b8515156127e75760105495505b6127ef614bf1565b6000878152601560209081526040808320600160a060020a03808d16855290835281842082516102a081018452815481526001820154909216828501526002810154828401526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009810154610120830152600a810154610140830152600b810154610160830152600c810154610180830152600d8101546101a0830152600e81018054845181870281018701909552808552929591946101c08701949391929084015b8282101561294f5760008481526020908190206040805160e081018252600786029092018054600160a060020a03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460ff16151560c083015290835290920191016128cf565b50505090825250600f8201546020820152601082015460408201526012820154606082015260138201546080820152601482015460a082015260159091015460c090910152805190915086600060200201526040810151866001602002015260608101518660026020020152608081015186600360200201526129d0614ba8565b6101c08201515115156129e95760006080880152612a24565b6101c0820151805160001981019081106129ff57fe5b906020019060200201519050612a1e82604001518361022001516140ac565b60808801525b61024082015160a08089019190915282015160c08801526101808201516101a0830151612a5091613bd5565b60e08801526101a082015161010088015261018082015161012088015260008080612a7a8c611f78565b610140808e018490528801516101608e0152604087015192955090935091506000908190612aa790611284565b9092509050818c600c6020020152808c600d60200201526102208701518c600e60200201526101608701518c600f602002015260c08701518c6010602002015260408601518c601160200201526102008701518c601260209081029190910191909152600160a060020a038f166000908152601682526040908190206002908101805483516001821615610100026000190190911692909204601f81018590048502830185019093528282529092909190830182828015612ba95780601f10612b7e57610100808354040283529160200191612ba9565b820191906000526020600020905b815481529060010190602001808311612b8c57829003601f168201915b50505050509a50601660008f600160a060020a0316600160a060020a031681526020019081526020016000206003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c6c5780601f10612c4157610100808354040283529160200191612c6c565b820191906000526020600020905b815481529060010190602001808311612c4f57829003601f168201915b50939d50505050505050505050505050509250925092565b600154600160a060020a031690565b600154600090600160a060020a0316612caa6140a8565b600160a060020a031614905090565b33803b8015612d00576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614db4833981519152604482015290519081900360640190fd5b323314612d45576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614d74833981519152604482015290519081900360640190fd5b601054600090815260156020908152604080832033808552925290912090612d6c90614252565b506008810154600080612d7e83613bb3565b9092509050811515612dc8576040805160e560020a62461bcd02815260206004820152600c6024820152600080516020614d54833981519152604482015290519081900360640190fd5b6000811115612eff5760646005820281900490605f830204612dea3382613c32565b612df382614480565b600d860154612e08908663ffffffff613bd516565b600d8701556000600887018190553381526016602090815260409182902060030180548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452612eb89392830182828015612ead5780601f10612e8257610100808354040283529160200191612ead565b820191906000526020600020905b815481529060010190602001808311612e9057829003601f168201915b5050505050846144ba565b855460408051858152426020820152600181830152905133917fa4677305baf22bbe3cd5afda41d219f539fa94a9d5f262491196bd74209b3e1f919081900360600190a350505b505050505050565b60006017826040518082805190602001908083835b60208310612f3b5780518252601f199092019160209182019101612f1c565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054600160a060020a0316949350505050565b612f836126a86140a8565b80612f915750612f91612c93565b151561300d576040805160e560020a62461bcd02815260206004820152602481018290527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060448201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65606482015290519081900360840190fd5b428211613064576040805160e560020a62461bcd02815260206004820181905260248201527f73746f7054696d652073686f756c652067726561746572207468616e206e6f77604482015290519081900360640190fd5b60145482116130e3576040805160e560020a62461bcd02815260206004820152602b60248201527f73746f7054696d652073686f756c652067726561746572207468616e206c617360448201527f74496e7665737454696d65000000000000000000000000000000000000000000606482015290519081900360840190fd5b601291909155601355565b6130f6612c93565b151561313a576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614d94833981519152604482015290519081900360640190fd5b6131ae8585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781529250879150869081908401838280828437600092019190915250613ea292505050565b5050505050565b601860205260009081526040902054600160a060020a031681565b6131d8612c93565b151561321c576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614d94833981519152604482015290519081900360640190fd5b600954614e20906000811161327b576040805160e560020a62461bcd02815260206004820152600560248201527f6572726f72000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b818310156135b45761328b614c9b565b613293614bf1565b600160a060020a0380871660009081527f27739e4bb5e6f8b5e4b57a047dca8767cc9b982a011081e086cbb0dfa9de818d6020908152604080832081516102a081018352815481526001820154909516858401526002810154858301526003810154606086015260048101546080860152600581015460a0860152600681015460c0860152600781015460e086015260088101546101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101805483518186028101860190945280845291946101c087019491929184015b828210156134075760008481526020908190206040805160e081018252600786029092018054600160a060020a03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460ff16151560c08301529083529092019101613387565b50505090825250600f8201546020820152601082015460408201526012820154606082015260138201546080820152601482015460a082015260159091015460c09091015280519091508260006020020152604081015182600160200201526060810151826002602002015260808101518260036020020152613488614ba8565b6101c08201515115156134a157600060808401526134dc565b6101c0820151805160001981019081106134b757fe5b9060200190602002015190506134d682604001518361022001516140ac565b60808401525b61024082015160a08085019190915282015160c08401526101808201516101a083015161350891613bd5565b60e08401526101a0820151610100840152610180820151610120840152600080806135328a611f78565b610140808a018490528801516101608a015260408701519295509093509150600090819061355f90611284565b6101808a01919091526101a089015250505050610220838101516101c08601526101608401516101e086015260c084015161020080870191909152604093909301519085015250015161024090910152613605565b506010546000908152601560208181526040808420600160a060020a0388168552909152808320918201839055513390303180156108fc029185818181858888f1935050505015156131ae57600080fd5b50505050565b600061363b6019600061361d85611caa565b81526020019081526020016000205484613bd590919063ffffffff16565b61364483611c16565b101590505b92915050565b600061364960028363ffffffff61474016565b6012546013546000919081158061367857508184105b80611cf5575061369582611ce9836201518063ffffffff613e1816565b841015949350505050565b33803b80156136e7576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614db4833981519152604482015290519081900360640190fd5b32331461372c576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614d74833981519152604482015290519081900360640190fd5b613734611f2a565b151561378a576040805160e560020a62461bcd02815260206004820152600960248201527f73757370656e6465640000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6010546000908152601560209081526040808320338452909152812080549091106137ff576040805160e560020a62461bcd02815260206004820152600e60248201527f75736572206e6f74206578697374000000000000000000000000000000000000604482015290519081900360640190fd5b600781015442101561385b576040805160e560020a62461bcd02815260206004820152601760248201527f72656465656d2074696d65206e6f6e2d6172726976616c000000000000000000604482015290519081900360640190fd5b60068101548015156138b7576040805160e560020a62461bcd02815260206004820152601960248201527f796f7520646f6e2774206861766520756e6c6f636b2065746800000000000000604482015290519081900360640190fd5b60128201546000806138c984846147e8565b9092509050811515613913576040805160e560020a62461bcd02815260206004820152600c6024820152600080516020614d54833981519152604482015290519081900360640190fd5b600081111561398c576139263382613c32565b600060068601819055600286018190556003860181905560128601819055600986015560016010860155845460408051838152426020820152815133927faf488116a12f56ff590ab3ca73f6bf9d11028ca9e63e965223b3d156fe18f593928290030190a35b50505050505050565b33803b80156139dc576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614db4833981519152604482015290519081900360640190fd5b323314613a21576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614d74833981519152604482015290519081900360640190fd5b60105460009081526015602090815260408083203384529091528120600a810154909180613a4e83613bb3565b9092509050811515613a98576040805160e560020a62461bcd02815260206004820152600c6024820152600080516020614d54833981519152604482015290519081900360640190fd5b6000811115612eff576064600a820281900490605a830281900490601e8202819004906046830204613aca3382613c32565b613ad384614480565b600c880154613ae8908663ffffffff613bd516565b600c890155600b880154613b02908363ffffffff613bd516565b600b8901556000600a890155875460408051838152426020820152600281830152905133917fa4677305baf22bbe3cd5afda41d219f539fa94a9d5f262491196bd74209b3e1f919081900360600190a350505050505050505050565b613b66612c93565b1515613baa576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614d94833981519152604482015290519081900360640190fd5b61274081614891565b60008030318310613bca5750600090503031611316565b506001905081611316565b600082820183811015612533576040805160e560020a62461bcd02815260206004820152600860248201527f6f766572666c6f77000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015613c68573d6000803e3d6000fd5b505050565b600080548210801590613c8557506000546009028211155b15613c9257506001611c89565b600054600a028210158015613cac57506000546013028211155b15613cb957506002611c89565b6000546014028210613ccd57506003611c89565b506000919050565b600454600160a060020a03166108fc6064600384025b049081150290604051600060405180830381858888f19350505050158015613d17573d6000803e3d6000fd5b5050565b600654600160a060020a03166108fc606483613ceb565b600754600160a060020a03166108fc606483613ceb565b600082821115613da3576040805160e560020a62461bcd02815260206004820152601060248201527f6c6f776572207375622062696767657200000000000000000000000000000000604482015290519081900360640190fd5b50900390565b6000808211613e02576040805160e560020a62461bcd02815260206004820152600860248201527f646976207a65726f000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008284811515613e0f57fe5b04949350505050565b6000821515613e2957506000613649565b828202828482811515613e3857fe5b0414612533576040805160e560020a62461bcd02815260206004820152600c60248201527f6d756c206f766572666c6f770000000000000000000000000000000000000000604482015290519081900360640190fd5b6000815160001415613ccd57506001611c89565b600160a060020a0383166000908152601660205260409020805415613fae57600181018054600160a060020a031916600160a060020a0386161790558251613ef39060028301906020860190614cbb565b508151613f099060038301906020850190614cbb565b50836017846040518082805190602001908083835b60208310613f3d5780518252601f199092019160209182019101613f1e565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382019094208054600160a060020a0319908116600160a060020a0397881617909155600f5460009081526018909252939020805490931693881693909317909155506136059050565b600f805460019081019182905590825581018054600160a060020a031916600160a060020a0386161790558251613fee9060028301906020860190614cbb565b5081516140049060038301906020850190614cbb565b50836017846040518082805190602001908083835b602083106140385780518252601f199092019160209182019101614019565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382019094208054600160a060020a0319908116600160a060020a0397881617909155600f54600090815260189092529390208054909316979093169690961790555050505050565b3390565b600082600114156140e7578115156140c657506050613649565b81600114156140d75750605a613649565b600282106140e757506064613649565b8260021415614120578115156140ff57506050613649565b81600114156141105750605a613649565b6002821061412057506064613649565b82600314156141595781151561413857506050613649565b81600114156141495750605a613649565b6002821061415957506064613649565b50600092915050565b61416c8282614740565b15156141e8576040805160e560020a62461bcd02815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60448201527f6500000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b61421b60028263ffffffff61497316565b604051600160a060020a038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b6010546000908152601560209081526040808320600160a060020a038516845290915281208054158061428757506005810154155b15614296576000915050611c89565b600e81015460009081906142b190600163ffffffff613d4916565b9050600083600e01828154811015156142c657fe5b9060005260206000209060070201905060006142ea856002015486601201546140ac565b9050600061430f620151806121fc620151808660020154613da990919063ffffffff16565b9050804210156143285760009650505050505050611c89565b6000614341620151806112cd428563ffffffff613d4916565b90506007811115614350575060075b836004015481111561438f576143856127106112cd86600101546121fc876121fc8a6004015488613d4990919063ffffffff16565b6004850182905595505b60008061439f8660020154611284565b91509150600782101580156143b75750600589015415155b1561441b57600f8901546143d290600163ffffffff613bd516565b600f8a0155600186015460058a01546143f09163ffffffff613d4916565b60058a0155600186015460068a015461440e9163ffffffff613bd516565b60068a0155600789018190555b614435600a6112cd6008548b613e1890919063ffffffff16565b60088a015490985061444d908963ffffffff613bd516565b60088a01556009890154614467908963ffffffff613bd516565b60098a0155505050600890950154979650505050505050565b600554604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015613d17573d6000803e3d6000fd5b8160015b60148111613605576144cf82613e8e565b156144d957613605565b60006017836040518082805190602001908083835b6020831061450d5780518252601f1990920191602091820191016144ee565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054600160a060020a0316925050508015156145535750613605565b6010546000908152601560209081526040808320600160a060020a0385168452909152812060028101546013820154919291614591919086906149f7565b600c830154600a8401546004850154929350606489850204920303808211156145b8578091505b6000821161467157600160a060020a03851660009081526016602090815260409182902060030180548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156146605780601f1061463557610100808354040283529160200191614660565b820191906000526020600020905b81548152906001019060200180831161464357829003601f168201915b505050505096505050505050614738565b600a840154614686908363ffffffff613bd516565b600a850155600160a060020a03851660009081526016602090815260409182902060030180548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452909183018282801561472b5780601f106147005761010080835404028352916020019161472b565b820191906000526020600020905b81548152906001019060200180831161470e57829003601f168201915b5050505050965050505050505b6001016144be565b6000600160a060020a03821615156147c8576040805160e560020a62461bcd02815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b600080600083101580156147fd575060058311155b1561480c576064605085020493505b6006831015801561481e5750600a8311155b1561482d576064605585020493505b600b831015801561483f5750600f8311155b1561484e576064605a85020493505b60108310158015614860575060148311155b1561486f576064605f85020493505b30318410614883575060009050303161488a565b5060019050825b9250929050565b600160a060020a0381161515614917576040805160e560020a62461bcd02815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600154604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360018054600160a060020a031916600160a060020a0392909216919091179055565b61497d8282614740565b156149d2576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600060038210614b10578360011415614a3d578260011415614a1b57506032612533565b8260021415614a2c5750600a612533565b8260031415614a3d5750600a612533565b8360021415614a86578260011415614a5757506046612533565b8260021415614a6857506014612533565b600383101580614a79575060058311155b15614a865750600a612533565b8360031415614b0b578260011415614aa057506064612533565b8260021415614ab15750601e612533565b600383101580614ac2575060058311155b15614acf5750600a612533565b600683101580614ae05750600a8311155b15614aed57506005612533565b600b83101580614afe575060148311155b15614b0b57506003612533565b614b9e565b8360011415614b2a578260011415614b2a57506032612533565b8360021415614b55578260011415614b4457506046612533565b8260021415614b5557506014612533565b8360031415614b9e578260011415614b6f57506064612533565b8260021415614b805750601e612533565b600383101580614b91575060058311155b15614b9e5750600a612533565b5060009392505050565b60e0604051908101604052806000600160a060020a0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b6102a060405190810160405280600081526020016000600160a060020a03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610260604051908101604052806013906020820280388339509192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614cfc57805160ff1916838001178555614d29565b82800160010185558215614d29579182015b82811115614d29578251825591602001919060010190614d0e565b50614d35929150614d39565b5090565b611ca791905b80821115614d355760008155600101614d3f56fe696e76616c696420666c61670000000000000000000000000000000000000000736f7272792c2068756d616e206f6e6c790000000000000000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a72305820d001a921e5bba9689282523e77521855e2e067ae640667b31b965a37e3dbdc420029

Deployed Bytecode Sourcemap

10515:28011:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16678:2342;;;;32074:578;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32074:578:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30593:594;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30593:594:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30593:594:0;;;;;;;;;;;;;;;;;;;;;;;;;;12737:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12737:50:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12737:50:0;;;;;;;;;;;;;;;;;;;13960:2710;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13960:2710:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;13960:2710:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13960:2710:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;13960:2710:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;13960:2710:0;;;;;;;;-1:-1:-1;13960:2710:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;13960:2710:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13960:2710:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;13960:2710:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;13960:2710:0;;-1:-1:-1;;13960:2710:0;;;-1:-1:-1;13960:2710:0;;-1:-1:-1;;13960:2710:0;34600:430;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34600:430:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34600:430:0;;;13845:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13845:107:0;;;;;;;;;;;;;;;;;;;;;;35044:337;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35044:337:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35044:337:0;;;36535:536;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36535:536:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36535:536:0;-1:-1:-1;;;;;36535:536:0;;;35619:215;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35619:215:0;;;;10097:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10097:95:0;;;;25025:1290;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25025:1290:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25025:1290:0;-1:-1:-1;;;;;25025:1290:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37081:660;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37081:660:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37081:660:0;-1:-1:-1;;;;;37081:660:0;;;31195:156;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31195:156:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31195:156:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;31195:156:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31195:156:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;31195:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;31195:156:0;;-1:-1:-1;31195:156:0;;-1:-1:-1;;;;;31195:156:0;9928:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9928:161:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9928:161:0;-1:-1:-1;;;;;9928:161:0;;;36424:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36424:101:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36424:101:0;;;;;;;-1:-1:-1;;;;;36424:101:0;;;;;;;;;;;;;;7279:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7279:140:0;;;;9804:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9804:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9804:116:0;-1:-1:-1;;;;;9804:116:0;;;32662:1792;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32662:1792:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;32662:1792:0;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;32662:1792:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;32662:1792:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32662:1792:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;32662:1792:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6468:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6468:79:0;;;;6834:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6834:94:0;;;;19032:981;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19032:981:0;;;;31359:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31359:126:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31359:126:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;31359:126:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31359:126:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;31359:126:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;31359:126:0;;-1:-1:-1;31359:126:0;;-1:-1:-1;;;;;31359:126:0;36094:319;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36094:319:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36094:319:0;;;;;;;;27215:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27215:172:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;27215:172:0;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;27215:172:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;27215:172:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;27215:172:0;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;27215:172:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;27215:172:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;27215:172:0;;-1:-1:-1;27215:172:0;-1:-1:-1;27215:172:0;;12686:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12686:44:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12686:44:0;;;28466:2119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28466:2119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;28466:2119:0;;;;;;;;;35395:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35395:210:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35395:210:0;;;;;;;;9671:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9671:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9671:125:0;-1:-1:-1;;;;;9671:125:0;;;35842:244;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35842:244:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35842:244:0;;;27395:1059;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27395:1059:0;;;;21314:1062;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21314:1062:0;;;;7574:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7574:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7574:109:0;-1:-1:-1;;;;;7574:109:0;;;16678:2342;16765:3;;16728:17;16748:21;;;:16;:21;;;;;;;;16770:10;16748:33;;;;;;;16800:7;;16748:33;;-1:-1:-1;16792:59:0;;;;;-1:-1:-1;;;;;16792:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16870:17;;;;:22;16862:59;;;;;-1:-1:-1;;;;;16862:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16940:17;;;;16960:1;-1:-1:-1;16932:61:0;;;;;-1:-1:-1;;;;;16932:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17077:24;;;;17014:13;;17116;;;17112:522;;;17170:26;17186:9;17170:15;:26::i;:::-;17146:50;;-1:-1:-1;17146:50:0;-1:-1:-1;17229:1:0;17217:13;;17213:299;;;17275:21;;;;:36;;17301:9;17275:36;:25;:36;:::i;:::-;17251:21;;;:60;17357:1;17330:24;;;:28;17377:38;17393:10;17405:9;17377:15;:38::i;:::-;17469:7;;17439:57;;;;;;17489:3;17439:57;;;;17494:1;17439:57;;;;;;17457:10;;17439:57;;;;;;;;;;17213:299;17531:8;17530:9;17526:97;;;17560:22;;;-1:-1:-1;;;;;17560:22:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17560:22:0;;;;;;;;;;;;;;17526:97;17668:17;;;;17646:19;;17668:32;;17690:9;17668:32;:21;:32;:::i;:::-;17712:15;17746:17;;;:21;17795:14;;;;17646:54;;-1:-1:-1;17730:3:0;;17795:34;;17646:54;17795:34;:18;:34;:::i;:::-;17778:14;;;:51;17860:17;;;;:37;;17882:14;17860:37;:21;:37;:::i;:::-;17840:17;;;:57;;;17927:27;;:8;:27::i;:::-;17908:16;;;:46;17998:17;;;;17985:31;;:12;:31::i;:::-;17965:17;;;:51;18048:18;;;;:25;;18071:1;18048:25;:22;:25;:::i;:::-;18027:18;;;:46;18114:1;18084:27;;;:31;;;18140:12;;;18153:19;;-1:-1:-1;;18153:21:0;;;18140:35;;;;;;;;;;;;;;;;:44;;;18128:56;;18195:20;;:::i;:::-;18218:87;;;;;;;;;18225:10;-1:-1:-1;;;;;18218:87:0;;;;;18237:14;18218:87;;;;18253:10;18218:87;;;;18265:3;18218:87;;;;18270:1;18218:87;;;;18273:4;18218:87;;;;18280:24;18293:10;18280:12;:24::i;:::-;18279:25;18218:87;;18316:12;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;18316:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18316:25:0;-1:-1:-1;;;;;18316:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18316:25:0;;;;;;;;;;18369:14;;18316:25;;-1:-1:-1;18356:27:0;;18352:87;;;18400:14;:27;;;18352:87;18465:11;;:18;;18481:1;18465:18;:15;:18;:::i;:::-;18451:11;:32;18508:11;;:31;;18524:14;18508:31;:15;:31;:::i;:::-;18494:11;:45;18583:3;;18570:17;;;;:12;:17;;;;;;:24;;18592:1;18570:24;:21;:24;:::i;:::-;18563:3;;;18550:17;;;;:12;:17;;;;;;;;:44;;;;18638:3;;18625:17;;:12;:17;;;;;:37;;18647:14;18625:37;:21;:37;:::i;:::-;18618:3;;;18605:17;;;;:12;:17;;;;;;;;:57;;;;18692:3;;18675:21;;:16;:21;;;;;27:10:-1;;39:1;23:18;;45:23;;18675:42:0;;;;;;;;;18730:30;18702:14;18730;:30::i;:::-;18771:32;18788:14;18771:16;:32::i;:::-;18814:34;18833:14;18814:18;:34::i;:::-;18898:7;;18886:10;18898:7;18940:23;;;:11;:23;;;;;;;;;18874:138;;;;;18923:3;18874:138;;;;;;;;;;;;19010:1;18874:138;;;;;;;;;;;;;18940:34;;;;18874:138;;-1:-1:-1;;18874:138:0;;;;;;;;;;;;;;;;;;;;18907:14;;18923:3;18928:10;;18940:34;;18976:32;;;;;18874:138;;;;;;;;;18940:34;;18874:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18874:138:0;;;;;;;;-1:-1:-1;;18874:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16678:2342;;;;;;;;:::o;32074:578::-;32128:4;;;;;;;;;;;;13092:10;13165:17;;13201:15;;13193:45;;;;;-1:-1:-1;;;;;13193:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13193:45:0;;;;;;;;;;;;;;;13257:9;13270:10;13257:23;13249:53;;;;;-1:-1:-1;;;;;13249:53:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13249:53:0;;;;;;;;;;;;;;;32211:14;32236:13;32272:21;:47;32294:24;32314:3;32294:19;:24::i;:::-;32272:47;;;;;;;;;;;;32260:59;;32341:26;32363:3;32341:21;:26::i;:::-;32330:37;;32396:3;;32410;;32424:9;;32444:11;;32466;;32488:12;:17;32501:3;;32488:17;;;;;;;;;;;;32516:12;:17;32529:3;;32516:17;;;;;;;;;;;;32544:11;;32566:9;32586:8;32605:3;32619:14;;32378:266;;;;;;;;;;;;;;;;;;;;;;;;;;32074:578;;;;;;;;;;;;;;:::o;30593:594::-;30729:9;;30653:14;;;;30753:18;;;;;:38;;;30788:3;30775:10;:16;30753:38;:68;;;;30808:13;30795:10;:26;30753:68;30749:114;;;-1:-1:-1;30846:1:0;;-1:-1:-1;30846:1:0;;-1:-1:-1;30838:13:0;;30749:114;30885:31;30909:6;30885:19;:3;30893:10;30885:19;:7;:19;:::i;:::-;:23;:31;:23;:31;:::i;:::-;30873:43;;30953:1;30928:26;;30981:1;30969:9;:13;30965:88;;;-1:-1:-1;30999:42:0;;30965:88;31088:35;31103:19;31108:1;31115:6;31103:19;:11;:19;:::i;:::-;31088:10;;:35;:14;:35;:::i;:::-;31063:60;-1:-1:-1;;30593:594:0;;;;:::o;12737:50::-;;;;;;;;;;;;;:::o;13960:2710::-;13092:10;13165:17;;13201:15;;13193:45;;;;;-1:-1:-1;;;;;13193:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13193:45:0;;;;;;;;;;;;;;;13257:9;13270:10;13257:23;13249:53;;;;;-1:-1:-1;;;;;13249:53:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13249:53:0;;;;;;;;;;;;;;;14120:6;;14103:9;:23;;14095:51;;;;;-1:-1:-1;;;;;14095:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14175:3;14157:15;14206:31;14175:3;14206:19;:31::i;:::-;14302:32;;;;:21;:32;;;;;;14189:48;;-1:-1:-1;14288:47:0;;:9;;:47;:13;:47;:::i;:::-;14253:32;;;;:21;:32;;;;;;;;:82;;;;14392:10;14380:23;;:11;:23;;;14418:13;;:18;14414:442;;;14462:19;14470:10;14462:7;:19::i;:::-;14461:20;14453:50;;;;;-1:-1:-1;;;;;14453:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14518:20;14541:30;14562:8;14541:20;:30::i;:::-;14518:53;-1:-1:-1;;;;;;14594:18:0;;:23;;14586:53;;;;;-1:-1:-1;;;;;14586:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14662:26:0;;14678:10;14662:26;;14654:61;;;;;-1:-1:-1;;;;;14654:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14739:18;14746:10;14739:6;:18::i;:::-;14738:19;14730:51;;;;;-1:-1:-1;;;;;14730:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14798:46;14811:10;14823;14835:8;14798:12;:46::i;:::-;14414:442;;14905:3;;;14868:17;14888:21;;;:16;:21;;;;;;;;14910:10;14888:33;;;;;;;14940:13;;;;:18;14932:58;;;;;-1:-1:-1;;;;;14932:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15010:16;;;;-1:-1:-1;;;;;15010:16:0;15005:27;15001:951;;15057:17;;;;:22;:48;;;;-1:-1:-1;15083:17:0;;;;:22;15057:48;15049:85;;;;;;;-1:-1:-1;;;;;15049:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15166:14;;;;:29;;15185:9;15166:29;:18;:29;:::i;:::-;15149:14;;;:46;15230:9;15210:17;;;:29;;;15273:19;;:8;:19::i;:::-;15254:16;;;:38;15327:23;15340:9;15327:12;:23::i;:::-;15307:17;;;:43;15001:951;;;15395:13;;15385:23;;15423:16;;;:29;;-1:-1:-1;;;;;;15423:29:0;15442:10;15423:29;;;15487:9;15467:17;;;:29;;;15530:19;;:8;:19::i;:::-;15511:16;;;:38;15584:23;15597:9;15584:12;:23::i;:::-;15564:17;;;;:43;;;;15640:9;15623:14;;;:26;15677:19;;15669:28;;;;;;;;;;;;;;-1:-1:-1;;15669:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15677:19;;15669:28;;15677:19;15669:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:28::i;:::-;15668:29;15664:277;;;15762:19;;;15741:41;;;;;;;;;;;;;-1:-1:-1;;15741:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15741:41:0;;;;15762:19;;15741:41;;15762:19;15741:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;:41::i;:::-;15718:64;-1:-1:-1;;;;;;15805:26:0;;;15801:125;;15873:3;;15856:21;;;;:16;:21;;;;;;;;-1:-1:-1;;;;;15856:35:0;;;;;;;;;:48;;:50;;;;;;15801:125;15664:277;;15962:20;;:::i;:::-;15985:82;;;;;;;;;15992:10;-1:-1:-1;;;;;15985:82:0;;;;;16004:9;15985:82;;;;16015:10;15985:82;;;;16027:3;15985:82;;;;16032:1;15985:82;;;;16035:4;15985:82;;;;16042:24;16055:10;16042:12;:24::i;:::-;16041:25;15985:82;;16078:12;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;16078:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16078:25:0;-1:-1:-1;;;;;16078:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16078:25:0;;;;;;;;;;16114:14;:27;;;16168:11;;16078:25;;-1:-1:-1;16168:18:0;;:11;:15;:18::i;:::-;16154:11;:32;16211:11;;:26;;16227:9;16211:26;:15;:26;:::i;:::-;16197:11;:40;16281:3;;16268:17;;;;:12;:17;;;;;;:24;;16290:1;16268:24;:21;:24;:::i;:::-;16261:3;;;16248:17;;;;:12;:17;;;;;;;;:44;;;;16337:3;;16324:17;;:12;:17;;;;;:32;;16346:9;16324:32;:21;:32;:::i;:::-;16317:3;;;16304:17;;;;:12;:17;;;;;;;;:52;;;;16395:3;;16378:21;;:16;:21;;;;;27:10:-1;;39:1;23:18;;45:23;;16378:37:0;;;;;16405:9;16378:37;;;;;16428:25;;:14;:25::i;:::-;16464:27;16481:9;16464:16;:27::i;:::-;16502:29;16521:9;16502:18;:29::i;:::-;16573:10;:13;;;16561:10;-1:-1:-1;;;;;16549:113:0;;16588:9;16599:3;16604:10;16616;:21;;16639:10;:19;;16660:1;16549:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16549:113:0;;;;;;;;-1:-1:-1;;16549:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13313:1;;;;;13960:2710;;;;;:::o;34600:430::-;34669:4;34685:16;34704:38;34740:1;34704:31;34724:10;34704:19;:31::i;:::-;:35;:38;:35;:38;:::i;:::-;34685:57;-1:-1:-1;34753:17:0;34773:18;34685:57;34789:1;34773:18;:15;:18;:::i;:::-;34753:38;;34823:1;34808:12;:16;34805:218;;;34869:6;;34913:9;;34863:27;;;:3;:27;;34913:20;;34863:27;34913:20;:13;:20;:::i;:::-;34906:27;;;;;;;34805:218;35005:6;;34992:10;:19;34985:26;;;;34600:430;;;;:::o;13845:107::-;13887:4;13911:9;;13924:1;13911:14;;:33;;;;;13935:9;;13929:3;:15;13911:33;13904:40;;13845:107;;:::o;35044:337::-;35148:8;;35111:4;;35172:18;;;:48;;;35207:13;35194:10;:26;35172:48;35168:89;;;35244:1;35237:8;;;;;35168:89;35267:21;35291:48;35337:1;35291:41;35325:6;35291:29;:10;35306:13;35291:29;:14;:29;:::i;:41::-;:45;:48;:45;:48;:::i;:::-;35267:72;35044:337;-1:-1:-1;;;;35044:337:0:o;36535:536::-;36612:4;36628:16;;:::i;:::-;36664:3;;36647:21;;;;:16;:21;;;;;;;;-1:-1:-1;;;;;36647:31:0;;;;;;;;;;;36628:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36647:31;;36628:50;;;;;;;36647:21;36628:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36628:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36692:4;:17;;;36713:1;36692:22;36689:356;;;36737:17;;;;-1:-1:-1;36730:24:0;;36689:356;36785:20;;:::i;:::-;36808:12;;;;36821:19;;-1:-1:-1;;36821:23:0;;;36808:37;;;;;;;;;;;;;;36785:60;;36861:14;36877:27;36908:31;36921:6;:17;;;36908:12;:31::i;:::-;36860:79;;-1:-1:-1;36860:79:0;-1:-1:-1;36970:1:0;36957:14;;36954:80;;-1:-1:-1;;36999:19:0;;;;-1:-1:-1;36992:26:0;;-1:-1:-1;36992:26:0;36954:80;-1:-1:-1;37062:1:0;;36535:536;-1:-1:-1;;;;;36535:536:0:o;35619:215::-;35694:13;;35731;;35664:4;;35694:13;35762:10;;;:25;;;35782:5;35776:3;:11;35762:25;:64;;;-1:-1:-1;35798:28:0;35820:5;35798:17;:5;35808:6;35798:17;:9;:17;:::i;:28::-;35791:3;:35;;35762:64;35755:71;;;;35619:215;:::o;10097:95::-;10149:35;10171:12;:10;:12::i;:::-;10149:21;:35::i;25025:1290::-;25089:4;25095;25101;25118:16;;:::i;:::-;25154:3;;25137:21;;;;:16;:21;;;;;;;;-1:-1:-1;;;;;25137:31:0;;;;;;;;;;;25118:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25137:31;;25118:50;;;;;;;25137:21;25118:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25118:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25118:50:0;;;-1:-1:-1;25118:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25183:7;;25118:50;;-1:-1:-1;25183:12:0;;:40;;-1:-1:-1;25199:12:0;;;;:19;:24;25183:40;25179:89;;;-1:-1:-1;25248:1:0;;-1:-1:-1;25248:1:0;;-1:-1:-1;25248:1:0;;-1:-1:-1;25240:16:0;;25179:89;25282:17;;;;:22;25278:109;;;25332:20;;;;25354;;;;;25329:1;;-1:-1:-1;25332:20:0;;-1:-1:-1;25354:20:0;-1:-1:-1;25321:54:0;;25278:109;25435:12;;;;:19;25397:14;;;;25435:26;;25459:1;25435:26;:23;:26;:::i;:::-;25426:35;;25472:20;;:::i;:::-;25495:12;;;;:15;;25508:1;;25495:15;;;;;;;;;;;;;;25472:38;;25531:10;25560:50;25573:4;:16;;;25591:4;:18;;;25560:12;:50::i;:::-;25552:58;;25631:13;25647:41;25681:6;25647:29;25669:6;25647;:17;;;:21;;:29;;;;:::i;:::-;:33;:41;:33;:41;:::i;:::-;25631:57;;25709:8;25703:3;:14;25699:102;;;25743:1;25746:4;:20;;;25768:4;:20;;;25735:54;;;;;;;;;;;;;;;;;25699:102;25811:15;25829:29;25851:6;25829:17;:3;25837:8;25829:17;:7;:17;:::i;:29::-;25811:47;;25888:1;25875:10;:14;25871:61;;;-1:-1:-1;25919:1:0;25871:61;25959:6;:12;;;25946:10;:25;25942:143;;;26000:73;26067:5;26000:62;26044:4;:17;;;26000:39;26033:5;26000:28;26015:6;:12;;;26000:10;:14;;:28;;;;:::i;:73::-;25988:85;;25942:143;26109:34;26140:2;26109:26;26123:11;;26109:9;:13;;:26;;;;:::i;:34::-;26176:20;;;;26097:46;;-1:-1:-1;26176:35:0;;26097:46;26176:35;:24;:35;:::i;:::-;26226:20;;;;:35;;26251:9;26226:35;:24;:35;:::i;:::-;26276:4;:20;;;26154:153;;;;;;;;;;;;;25025:1290;;;;;;:::o;37081:660::-;37154:4;37170:16;;:::i;:::-;37206:3;;37189:21;;;;:16;:21;;;;;;;;-1:-1:-1;;;;;37189:31:0;;;;;;;;;;;37170:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37189:31;;37170:50;;;;;;;37189:21;37170:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37170:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37241:4;:27;;;37235:3;:33;37231:74;;;37292:1;37285:8;;;;;37231:74;37332:17;;;;37364;;;;37315:14;-1:-1:-1;37360:347:0;;;37402:20;;:::i;:::-;37425:12;;;;37438:19;;-1:-1:-1;;37438:23:0;;;37425:37;;;;;;;;;;;;;;37402:60;;37478:14;37494:27;37525:31;37538:6;:17;;;37525:12;:31::i;:::-;37477:79;;;;37588:1;37575:9;:14;;:47;;;;;37600:22;37593:3;:29;;37575:47;37571:123;;;37659:6;:19;;;37647:31;;37571:123;37360:347;;;;37724:9;37081:660;-1:-1:-1;;;37081:660:0:o;31195:156::-;31252:4;31269:12;31284:26;31305:4;31284:20;:26::i;:::-;-1:-1:-1;;;;;31328:10:0;:15;;;31195:156;-1:-1:-1;;;31195:156:0:o;9928:161::-;6680:9;:7;:9::i;:::-;6672:54;;;;;;;-1:-1:-1;;;;;6672:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6672:54:0;;;;;;;;;;;;;;;10003:32;:16;10027:7;10003:32;:23;:32;:::i;:::-;10051:30;;-1:-1:-1;;;;;10051:30:0;;;;;;;;9928:161;:::o;36424:101::-;36475:7;36501:16;;;:12;:16;;;;;;-1:-1:-1;;;;;36501:16:0;;36424:101::o;7279:140::-;6680:9;:7;:9::i;:::-;6672:54;;;;;;;-1:-1:-1;;;;;6672:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6672:54:0;;;;;;;;;;;;;;;7362:6;;7341:40;;7378:1;;-1:-1:-1;;;;;7362:6:0;;7341:40;;7378:1;;7341:40;7392:6;:19;;-1:-1:-1;;;;;;7392:19:0;;;7279:140::o;9804:116::-;9531:30;9548:12;:10;:12::i;:::-;9531:16;:30::i;:::-;:43;;;;9565:9;:7;:9::i;:::-;9523:120;;;;;;;-1:-1:-1;;;;;9523:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9885:27;9904:7;9885:18;:27::i;:::-;9804:116;:::o;32662:1792::-;32752:18;;:::i;:::-;32772:24;;13092:10;13165:17;;13201:15;;13193:45;;;;;-1:-1:-1;;;;;13193:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13193:45:0;;;;;;;;;;;;;;;13257:9;13270:10;13257:23;13249:53;;;;;-1:-1:-1;;;;;13249:53:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13249:53:0;;;;;;;;;;;;;;;32845:12;;32841:59;;;32885:3;;32875:13;;32841:59;32912:20;;:::i;:::-;32935:25;;;;:16;:25;;;;;;;;-1:-1:-1;;;;;32935:31:0;;;;;;;;;;;32912:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32935:31;;32912:54;;;;;;;32935:25;32912:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32912:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32912:54:0;;;-1:-1:-1;32912:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32995:11;;32912:54;;-1:-1:-1;32987:2:0;-1:-1:-1;32987:5:0;;;:19;33025:20;;;;33017:2;33020:1;33017:5;;;:28;33064:21;;;;33056:2;33059:1;33056:5;;;:29;33104:18;;;;33096:2;33099:1;33096:5;;;:26;33133:20;;:::i;:::-;33168:16;;;;:23;:28;33164:236;;;33221:1;33213:5;;;:9;33164:236;;;33264:16;;;;33281:23;;-1:-1:-1;;33281:25:0;;;33264:43;;;;;;;;;;;;;;33255:52;;33330:58;33343:8;:20;;;33365:8;:22;;;33330:12;:58::i;:::-;33322:5;;;:66;33164:236;33418:21;;;;33410:5;;;;:29;;;;33458:21;;;33450:5;;;:29;33527:25;;;;-1:-1:-1;33498:24:0;;;:55;;:28;:55::i;:::-;33490:5;;;:63;33572:24;;;;33564:5;;;:32;33615:25;;;;33607:5;;;:33;-1:-1:-1;;;33786:22:0;33803:4;33786:16;:22::i;:::-;33819:6;;;;:21;;;33861:22;;;33852:6;;;:31;33980:17;;;;33738:70;;-1:-1:-1;33738:70:0;;-1:-1:-1;33738:70:0;-1:-1:-1;;;;;33967:31:0;;:12;:31::i;:::-;33943:55;;-1:-1:-1;33943:55:0;-1:-1:-1;33943:55:0;34009:2;34012;34009:6;;;:16;34045:10;34036:2;34039;34036:6;;;:19;34075:22;;;;34066:2;34069;34066:6;;;:31;34117:28;;;;34108:2;34111;34108:6;;;:37;34165:21;;;;34156:2;34159;34156:6;;;:30;34206:17;;;;34197:2;34200;34197:6;;;:26;34243:17;;;;34234:2;34237;34234:6;;;;;;;;:26;;;;-1:-1:-1;;;;;34288:17:0;;;;;;:11;:17;;;;;;;:28;;;;34275:41;;;;;;;;;;-1:-1:-1;;34275:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34288:28;;34275:41;;;34288:28;34275:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34338:11;:17;34350:4;-1:-1:-1;;;;;34338:17:0;-1:-1:-1;;;;;34338:17:0;;;;;;;;;;;;:26;;34327:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34327:37:0;;-1:-1:-1;;;;;;;;;;;;32662:1792:0;;;;;;;:::o;6468:79::-;6533:6;;-1:-1:-1;;;;;6533:6:0;6468:79;:::o;6834:94::-;6914:6;;6874:4;;-1:-1:-1;;;;;6914:6:0;6898:12;:10;:12::i;:::-;-1:-1:-1;;;;;6898:22:0;;6891:29;;6834:94;:::o;19032:981::-;13092:10;13165:17;;13201:15;;13193:45;;;;;-1:-1:-1;;;;;13193:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13193:45:0;;;;;;;;;;;;;;;13257:9;13270:10;13257:23;13249:53;;;;;-1:-1:-1;;;;;13249:53:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13249:53:0;;;;;;;;;;;;;;;19138:3;;19101:17;19121:21;;;:16;:21;;;;;;;;19143:10;19121:33;;;;;;;;;19165:32;;:20;:32::i;:::-;-1:-1:-1;19227:20:0;;;;19210:14;;19351:26;19227:20;19351:15;:26::i;:::-;19325:52;;-1:-1:-1;19325:52:0;-1:-1:-1;19392:9:0;;19388:64;;;19418:22;;;-1:-1:-1;;;;;19418:22:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19418:22:0;;;;;;;;;;;;;;19388:64;19482:1;19468:11;:15;19464:542;;;19537:3;19533:1;19519:15;;:21;;;;19587:2;19573:16;;:22;19610:39;19626:10;19573:22;19610:15;:39::i;:::-;19664:27;19679:11;19664:14;:27::i;:::-;19729:20;;;;:35;;19754:9;19729:35;:24;:35;:::i;:::-;19706:20;;;:58;19802:1;19779:20;;;:24;;;19868:10;19856:23;;:11;:23;;;;;;;;;:32;;19832:69;;;;;;-1:-1:-1;;19832:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19856:32;19832:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19889:11;19832:23;:69::i;:::-;19965:7;;19935:59;;;;;;19987:3;19935:59;;;;19992:1;19935:59;;;;;;19953:10;;19935:59;;;;;;;;;;19464:542;;;13313:1;;;;19032:981;;:::o;31359:126::-;31430:7;31457:14;31472:4;31457:20;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31457:20:0;;;;;-1:-1:-1;31457:20:0;;;;;;;;;;;-1:-1:-1;;;;;31457:20:0;;31359:126;-1:-1:-1;;;;31359:126:0:o;36094:319::-;9531:30;9548:12;:10;:12::i;9531:30::-;:43;;;;9565:9;:7;:9::i;:::-;9523:120;;;;;;;-1:-1:-1;;;;;9523:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36203:3;36192:14;;36184:59;;;;;-1:-1:-1;;;;;36184:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36273:14;;36262:25;;36254:81;;;;;-1:-1:-1;;;;;36254:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36346:13;:24;;;;36381:13;:24;36094:319::o;27215:172::-;6680:9;:7;:9::i;:::-;6672:54;;;;;;;-1:-1:-1;;;;;6672:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6672:54:0;;;;;;;;;;;;;;;27339:40;27352:4;27358:10;;27339:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;27339:40:0;;;;137:4:-1;27339:40:0;;;;;;;;;;;;;;;;;;-1:-1:-1;27370:8:0;;-1:-1:-1;27370:8:0;;;;27339:40;;27370:8;;;;27339:40;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;27339:12:0;;-1:-1:-1;;;27339:40:0:i;:::-;27215:172;;;;;:::o;12686:44::-;;;;;;;;;;;;-1:-1:-1;;;;;12686:44:0;;:::o;28466:2119::-;6680:9;:7;:9::i;:::-;6672:54;;;;;;;-1:-1:-1;;;;;6672:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6672:54:0;;;;;;;;;;;;;;;28609:9;;28572:5;;28559:10;28634:18;;28630:66;;28669:15;;;-1:-1:-1;;;;;28669:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;28630:66;28720:5;28709:8;:16;28706:1872;;;28751:18;;:::i;:::-;28798:20;;:::i;:::-;-1:-1:-1;;;;;28821:25:0;;;:19;:25;;;:19;;:25;;;:19;:25;;;28798:48;;;;;;;;;;;28838:1;28798:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28821:25;;28798:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28798:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28798:48:0;;;-1:-1:-1;28798:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28883:11;;28798:48;;-1:-1:-1;28875:2:0;-1:-1:-1;28875:5:0;;;:19;28917:20;;;;28909:2;28912:1;28909:5;;;:28;28960:21;;;;28952:2;28955:1;28952:5;;;:29;29004:18;;;;28996:2;28999:1;28996:5;;;:26;29037:20;;:::i;:::-;29076:16;;;;:23;:28;29072:256;;;29133:1;29125:5;;;:9;29072:256;;;29184:16;;;;29201:23;;-1:-1:-1;;29201:25:0;;;29184:43;;;;;;;;;;;;;;29175:52;;29254:58;29267:8;:20;;;29289:8;:22;;;29254:12;:58::i;:::-;29246:5;;;:66;29072:256;29350:21;;;;29342:5;;;;:29;;;;29394:21;;;29386:5;;;:29;29467:25;;;;-1:-1:-1;29438:24:0;;;:55;;:28;:55::i;:::-;29430:5;;;:63;29516:24;;;;29508:5;;;:32;29563:25;;;;29555:5;;;:33;-1:-1:-1;;;29750:22:0;29767:4;29750:16;:22::i;:::-;29787:6;;;;:21;;;29883:22;;;29874:6;;;:31;30014:17;;;;29702:70;;-1:-1:-1;29702:70:0;;-1:-1:-1;29702:70:0;-1:-1:-1;;;;;30001:31:0;;:12;:31::i;:::-;30047:6;;;:16;;;;30078:6;;;:19;-1:-1:-1;;;;30121:22:0;;;;;30112:6;;;:31;30167:28;;;;30158:6;;;:37;30219:21;;;;30210:6;;;;:30;;;;30264:17;;;;;;30255:6;;;:26;-1:-1:-1;30305:17:0;;30296:6;;;;:26;28706:1872;;;-1:-1:-1;30452:3:0;;30393:1;30435:21;;;:16;:21;;;;;;;;-1:-1:-1;;;;;30435:27:0;;;;;;;;;;30477:23;;;:27;;;30527:38;:10;;30551:4;30543:21;30527:38;;;;;30393:1;30527:38;30393:1;30527:38;30543:21;30527:10;:38;;;;;;;30519:47;;;;;;;28706:1872;6737:1;;28466:2119;;:::o;35395:210::-;35471:4;35531:66;35542:21;:54;35564:31;35584:10;35564:19;:31::i;:::-;35542:54;;;;;;;;;;;;35531:6;:10;;:66;;;;:::i;:::-;35494:33;35516:10;35494:21;:33::i;:::-;:103;;35487:110;;35395:210;;;;;:::o;9671:125::-;9735:4;9759:29;:16;9780:7;9759:29;:20;:29;:::i;35842:244::-;35932:13;;35969;;35902:4;;35932:13;36000:10;;;:32;;;36027:5;36014:10;:18;36000:32;:78;;;-1:-1:-1;36050:28:0;36072:5;36050:17;:5;36060:6;36050:17;:9;:17;:::i;:28::-;36036:10;:42;;35993:85;35842:244;-1:-1:-1;;;;35842:244:0:o;27395:1059::-;13092:10;13165:17;;13201:15;;13193:45;;;;;-1:-1:-1;;;;;13193:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13193:45:0;;;;;;;;;;;;;;;13257:9;13270:10;13257:23;13249:53;;;;;-1:-1:-1;;;;;13249:53:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13249:53:0;;;;;;;;;;;;;;;13372:14;:12;:14::i;:::-;13364:36;;;;;;;-1:-1:-1;;;;;13364:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27512:3;;27475:17;27495:21;;;:16;:21;;;;;;;;27517:10;27495:33;;;;;;;27547:7;;27495:33;;-1:-1:-1;27539:38:0;;;;;-1:-1:-1;;;;;27539:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27605:27;;;;27598:3;:34;;27590:70;;;;;-1:-1:-1;;;;;27590:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27690:17;;;;27726:14;;;27718:52;;;;;-1:-1:-1;;;;;27718:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27802:18;;;;27781;;27932:49;27956:9;27802:18;27932:23;:49::i;:::-;27906:75;;-1:-1:-1;27906:75:0;-1:-1:-1;28006:9:0;;28002:64;;;28032:22;;;-1:-1:-1;;;;;28032:22:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28032:22:0;;;;;;;;;;;;;;28002:64;28094:1;28080:11;:15;28076:371;;;28112:40;28128:10;28140:11;28112:15;:40::i;:::-;28187:1;28167:17;;;:21;;;28203:16;;;:20;;;28238:17;;;:21;;;28274:18;;;:22;;;28311:20;;;:24;28366:1;28350:13;;;:17;28409:7;;28387:48;;;;;;28431:3;28387:48;;;;;;28397:10;;28387:48;;;;;;;;28076:371;13411:1;;;;;27395:1059;;:::o;21314:1062::-;13092:10;13165:17;;13201:15;;13193:45;;;;;-1:-1:-1;;;;;13193:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13193:45:0;;;;;;;;;;;;;;;13257:9;13270:10;13257:23;13249:53;;;;;-1:-1:-1;;;;;13249:53:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13249:53:0;;;;;;;;;;;;;;;21427:3;;21390:17;21410:21;;;:16;:21;;;;;;;;21432:10;21410:33;;;;;;;21473:18;;;;21410:33;;21390:17;21593:26;21473:18;21593:15;:26::i;:::-;21567:52;;-1:-1:-1;21567:52:0;-1:-1:-1;21634:9:0;;21630:64;;;21660:22;;;-1:-1:-1;;;;;21660:22:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21660:22:0;;;;;;;;;;;;;;21630:64;21724:1;21710:11;:15;21706:663;;;21779:3;21774:2;21760:16;;:22;;;;21829:2;21815:16;;:22;;;;21886:2;21873:15;;:21;;;;21943:2;21930:15;;:21;21980:42;21996:10;21930:21;21980:15;:42::i;:::-;22037:26;22052:10;22037:14;:26::i;:::-;22116:21;;;;:38;;22142:11;22116:38;:25;:38;:::i;:::-;22092:21;;;:62;22196:24;;;;:43;;22225:13;22196:43;:28;:43;:::i;:::-;22169:24;;;:70;22275:1;22254:18;;;:22;22326:7;;22296:61;;;;;;22350:3;22296:61;;;;22355:1;22296:61;;;;;;22314:10;;22296:61;;;;;;;;;;21706:663;;;;13313:1;;;;21314:1062;;:::o;7574:109::-;6680:9;:7;:9::i;:::-;6672:54;;;;;;;-1:-1:-1;;;;;6672:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6672:54:0;;;;;;;;;;;;;;;7647:28;7666:8;7647:18;:28::i;22384:253::-;22447:4;;22494;22486:21;22473:34;;22469:161;;-1:-1:-1;22532:5:0;;-1:-1:-1;22547:4:0;22539:21;22524:37;;22469:161;-1:-1:-1;22602:4:0;;-1:-1:-1;22608:9:0;22594:24;;39984:162;40042:7;40074:5;;;40098:6;;;;40090:27;;;;;-1:-1:-1;;;;;40090:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;31940:120;32025:27;;-1:-1:-1;;;;;32025:20:0;;;:27;;;;;32046:5;;32025:27;;;;32046:5;32025:20;:27;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32025:27:0;31940:120;;:::o;80:345::-;133:4;167:6;;154:19;;;;;:42;;;190:6;;186:1;:10;177:5;:19;;154:42;150:83;;;-1:-1:-1;220:1:0;213:8;;150:83;261:6;;256:2;:11;247:5;:20;;:44;;;;;285:6;;280:2;:11;271:5;:20;;247:44;243:85;;;-1:-1:-1;315:1:0;308:8;;243:85;356:6;;351:2;:11;342:20;;338:61;;-1:-1:-1;386:1:0;379:8;;338:61;-1:-1:-1;416:1:0;80:345;;;:::o;31493:99::-;31549:9;;-1:-1:-1;;;;;31549:9:0;:35;31580:3;31577:1;31568:10;;:15;;31549:35;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31549:35:0;31493:99;:::o;31604:103::-;31662:11;;-1:-1:-1;;;;;31662:11:0;:37;31695:3;31683:6;:15;;31719:107;31779:13;;-1:-1:-1;;;;;31779:13:0;:39;31814:3;31802:6;:15;;39738:170;39796:7;39824:6;;;;39816:35;;;;;-1:-1:-1;;;;;39816:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39874:5:0;;;39738:170::o;39297:315::-;39355:7;39383:5;;;39375:26;;;;;-1:-1:-1;;;;;39375:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39479:9;39495:1;39491;:5;;;;;;;;;39297:315;-1:-1:-1;;;;39297:315:0:o;38725:449::-;38783:7;39027:6;;39023:47;;;-1:-1:-1;39057:1:0;39050:8;;39023:47;39094:5;;;39098:1;39094;:5;39118;;;;;;;;:10;39110:35;;;;;-1:-1:-1;;;;;39110:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4343:174;4402:4;4429:3;4423:17;4444:1;4423:22;4419:66;;;-1:-1:-1;4469:4:0;4462:11;;37755:768;-1:-1:-1;;;;;37892:17:0;;37860:29;37892:17;;;:11;:17;;;;;37924:13;;:18;37920:586;;37959:22;;;:29;;-1:-1:-1;;;;;;37959:29:0;-1:-1:-1;;;;;37959:29:0;;;;;38003:34;;;;:21;;;;:34;;;;;:::i;:::-;-1:-1:-1;38052:30:0;;;;:19;;;;:30;;;;;:::i;:::-;;38140:4;38111:14;38126:10;38111:26;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;38111:26:0;;;;;-1:-1:-1;38111:26:0;;;;;;;;;;;;:33;;-1:-1:-1;;;;;;38111:33:0;;;-1:-1:-1;;;;;38111:33:0;;;;;;;38172:3;;-1:-1:-1;38159:17:0;;;:12;:17;;;;;;:24;;;;;;;;;;;;;;;-1:-1:-1;37920:586:0;;-1:-1:-1;37920:586:0;;38216:3;:5;;;;;;;;;;38236:19;;;38270:22;;:29;;-1:-1:-1;;;;;;38270:29:0;-1:-1:-1;;;;;38270:29:0;;;;;38314:34;;;;:21;;;;:34;;;;;:::i;:::-;-1:-1:-1;38363:30:0;;;;:19;;;;:30;;;;;:::i;:::-;;38451:4;38422:14;38437:10;38422:26;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;38422:26:0;;;;;-1:-1:-1;38422:26:0;;;;;;;;;;;;:33;;-1:-1:-1;;;;;;38422:33:0;;;-1:-1:-1;;;;;38422:33:0;;;;;;;38483:3;;-1:-1:-1;38470:17:0;;;:12;:17;;;;;;:24;;;;;;;;;;;;;;;-1:-1:-1;;;;;37755:768:0:o;5301:90::-;5373:10;5301:90;:::o;794:965::-;871:4;892:5;901:1;892:10;888:275;;;923:18;;919:68;;;-1:-1:-1;969:2:0;962:9;;919:68;1005:13;1022:1;1005:18;1001:68;;;-1:-1:-1;1051:2:0;1044:9;;1001:68;1104:1;1087:18;;1083:69;;-1:-1:-1;1133:3:0;1126:10;;1083:69;1177:5;1186:1;1177:10;1173:275;;;1208:18;;1204:68;;;-1:-1:-1;1254:2:0;1247:9;;1204:68;1290:13;1307:1;1290:18;1286:68;;;-1:-1:-1;1336:2:0;1329:9;;1286:68;1389:1;1372:18;;1368:69;;-1:-1:-1;1418:3:0;1411:10;;1368:69;1462:5;1471:1;1462:10;1458:275;;;1493:18;;1489:68;;;-1:-1:-1;1539:2:0;1532:9;;1489:68;1575:13;1592:1;1575:18;1571:68;;;-1:-1:-1;1621:2:0;1614:9;;1571:68;1674:1;1657:18;;1653:69;;-1:-1:-1;1703:3:0;1696:10;;1653:69;-1:-1:-1;1750:1:0;794:965;;;;:::o;8529:183::-;8609:18;8613:4;8619:7;8609:3;:18::i;:::-;8601:64;;;;;;;-1:-1:-1;;;;;8601:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8676:20:0;8699:5;8676:20;;;;;;;;;;;:28;;-1:-1:-1;;8676:28:0;;;8529:183::o;10200:146::-;10265:29;:16;10286:7;10265:29;:20;:29;:::i;:::-;10310:28;;-1:-1:-1;;;;;10310:28:0;;;;;;;;10200:146;:::o;23405:1612::-;23531:3;;23478:4;23514:21;;;:16;:21;;;;;;;;-1:-1:-1;;;;;23514:31:0;;;;;;;;;23560:7;;:12;;:38;;-1:-1:-1;23576:17:0;;;;:22;23560:38;23556:79;;;23622:1;23615:8;;;;;23556:79;23683:12;;;:19;23645:14;;;;23683:26;;23707:1;23683:26;:23;:26;:::i;:::-;23674:35;;23720:21;23744:4;:12;;23757:1;23744:15;;;;;;;;;;;;;;;;;;;;23720:39;;23780:10;23809:50;23822:4;:16;;;23840:4;:18;;;23809:12;:50::i;:::-;23801:58;;23880:13;23896:41;23930:6;23896:29;23918:6;23896;:17;;;:21;;:29;;;;:::i;:41::-;23880:57;;23958:8;23952:3;:14;23948:55;;;23990:1;23983:8;;;;;;;;;;23948:55;24013:15;24031:29;24053:6;24031:17;:3;24039:8;24031:17;:7;:17;:::i;:29::-;24013:47;;24090:1;24077:10;:14;24073:61;;;-1:-1:-1;24121:1:0;24073:61;24161:6;:12;;;24148:10;:25;24144:193;;;24206:75;24275:5;24206:64;24250:6;:19;;;24206:39;24239:5;24206:28;24221:6;:12;;;24206:10;:14;;:28;;;;:::i;:75::-;24300:12;;;:25;;;24194:87;-1:-1:-1;24144:193:0;24350:14;24366:27;24397:31;24410:6;:17;;;24397:12;:31::i;:::-;24349:79;;;;24458:1;24445:9;:14;;:40;;;;-1:-1:-1;24463:17:0;;;;:22;;24445:40;24441:334;;;24520:15;;;;:22;;24540:1;24520:22;:19;:22;:::i;:::-;24502:15;;;:40;24599:19;;;;24577:17;;;;:42;;;:21;:42;:::i;:::-;24557:17;;;:62;24676:19;;;;24654:17;;;;:42;;;:21;:42;:::i;:::-;24634:17;;;:62;24711:27;;;:52;;;24441:334;24799:34;24830:2;24799:26;24813:11;;24799:9;:13;;:26;;;;:::i;:34::-;24867:20;;;;24787:46;;-1:-1:-1;24867:35:0;;24787:46;24867:35;:24;:35;:::i;:::-;24844:20;;;:58;24936:20;;;;:35;;24961:9;24936:35;:24;:35;:::i;:::-;24913:20;;;:58;-1:-1:-1;;;24989:20:0;;;;;;23405:1612;-1:-1:-1;;;;;;;23405:1612:0:o;31838:90::-;31894:9;;:26;;-1:-1:-1;;;;;31894:9:0;;;;:26;;;;;31913:6;;31894:9;:26;:9;:26;31913:6;31894:9;:26;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;20025:1277:0;20147:8;20190:1;20176:1119;20198:2;20193:7;;20176:1119;;20226:20;20234:11;20226:7;:20::i;:::-;20222:66;;;20267:5;;20222:66;20316:19;20338:14;20353:11;20338:27;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;20338:27:0;;;;;-1:-1:-1;20338:27:0;;;;;;;;;;;-1:-1:-1;;;;;20338:27:0;;-1:-1:-1;;;20398:25:0;;20394:71;;;20444:5;;;20394:71;20530:3;;20493:17;20513:21;;;:16;:21;;;;;;;;-1:-1:-1;;;;;20513:34:0;;;;;;;;;20643:16;;;;20662:17;;;;20513:34;;20493:17;20613:67;;20643:16;20660:1;;20613:29;:67::i;:::-;20834:21;;;;20813:18;;;;20796:14;;;;20605:75;;-1:-1:-1;20745:3:0;20723:19;;;:25;;20796:35;:59;20873:19;;;20870:92;;;20936:10;20927:19;;20870:92;21003:1;20993:11;;20990:138;;-1:-1:-1;;;;;21052:24:0;;;;;;:11;:24;;;;;;;;;:33;;21038:47;;;;;;-1:-1:-1;;21038:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21052:33;;21038:47;;21052:33;21038:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21104:8;;;;;;;20990:138;21177:18;;;;:30;;21200:6;21177:30;:22;:30;:::i;:::-;21156:18;;;:51;-1:-1:-1;;;;;21250:24:0;;;;;;:11;:24;;;;;;;;;:33;;21236:47;;;;;;-1:-1:-1;;21236:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21250:33;;21236:47;;21250:33;21236:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20176:1119;;;;;;20202:3;;20176:1119;;8807:203;8879:4;-1:-1:-1;;;;;8904:21:0;;;;8896:68;;;;;-1:-1:-1;;;;;8896:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8982:20:0;:11;:20;;;;;;;;;;;;;;;8807:203::o;22649:744::-;22740:4;22746;22783:1;22766:13;:18;;:40;;;;;22805:1;22788:13;:18;;22766:40;22762:104;;;22851:3;22847:2;22835:14;;:19;22823:31;;22762:104;22897:1;22880:13;:18;;:41;;;;;22919:2;22902:13;:19;;22880:41;22876:105;;;22966:3;22962:2;22950:14;;:19;22938:31;;22876:105;23012:2;22995:13;:19;;:42;;;;;23035:2;23018:13;:19;;22995:42;22991:106;;;23082:3;23078:2;23066:14;;:19;23054:31;;22991:106;23128:2;23111:13;:19;;:42;;;;;23151:2;23134:13;:19;;23111:42;23107:108;;;23200:3;23196:2;23184:14;;:19;23172:31;;23107:108;23250:4;23242:21;23229:34;;23225:161;;-1:-1:-1;23288:5:0;;-1:-1:-1;23303:4:0;23295:21;23280:37;;23225:161;-1:-1:-1;23358:4:0;;-1:-1:-1;23364:9:0;23225:161;22649:744;;;;;:::o;7789:229::-;-1:-1:-1;;;;;7863:22:0;;;;7855:73;;;;;-1:-1:-1;;;;;7855:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7965:6;;7944:38;;-1:-1:-1;;;;;7944:38:0;;;;7965:6;;7944:38;;7965:6;;7944:38;7993:6;:17;;-1:-1:-1;;;;;;7993:17:0;-1:-1:-1;;;;;7993:17:0;;;;;;;;;;7789:229::o;8271:178::-;8349:18;8353:4;8359:7;8349:3;:18::i;:::-;8348:19;8340:63;;;;;-1:-1:-1;;;;;8340:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8414:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;8414:27:0;8437:4;8414:27;;;8271:178::o;2286:2045::-;2391:4;2426:1;2410:17;;2407:1898;;2456:5;2465:1;2456:10;2453:287;;;2489:5;2498:1;2489:10;2486:67;;;-1:-1:-1;2531:2:0;2524:9;;2486:67;2575:5;2584:1;2575:10;2571:68;;;-1:-1:-1;2617:2:0;2610:9;;2571:68;2661:5;2670:1;2661:10;2657:68;;;-1:-1:-1;2703:2:0;2696:9;;2657:68;2758:5;2767:1;2758:10;2754:304;;;2793:5;2802:1;2793:10;2789:68;;;-1:-1:-1;2835:2:0;2828:9;;2789:68;2879:5;2888:1;2879:10;2875:68;;;-1:-1:-1;2921:2:0;2914:9;;2875:68;2974:1;2965:5;:10;;:24;;;;2988:1;2979:5;:10;;2965:24;2961:82;;;-1:-1:-1;3021:2:0;3014:9;;2961:82;3076:5;3085:1;3076:10;3072:506;;;3111:5;3120:1;3111:10;3107:69;;;-1:-1:-1;3153:3:0;3146:10;;3107:69;3198:5;3207:1;3198:10;3194:68;;;-1:-1:-1;3240:2:0;3233:9;;3194:68;3293:1;3284:5;:10;;:24;;;;3307:1;3298:5;:10;;3284:24;3280:82;;;-1:-1:-1;3340:2:0;3333:9;;3280:82;3393:1;3384:5;:10;;:25;;;;3407:2;3398:5;:11;;3384:25;3380:82;;;-1:-1:-1;3441:1:0;3434:8;;3380:82;3493:2;3484:5;:11;;:26;;;;3508:2;3499:5;:11;;3484:26;3480:83;;;-1:-1:-1;3542:1:0;3535:8;;3480:83;2407:1898;;;3631:5;3640:1;3631:10;3628:115;;;3664:5;3673:1;3664:10;3661:67;;;-1:-1:-1;3706:2:0;3699:9;;3661:67;3775:5;3784:1;3775:10;3771:204;;;3810:5;3819:1;3810:10;3806:68;;;-1:-1:-1;3852:2:0;3845:9;;3806:68;3896:5;3905:1;3896:10;3892:68;;;-1:-1:-1;3938:2:0;3931:9;;3892:68;3993:5;4002:1;3993:10;3989:305;;;4028:5;4037:1;4028:10;4024:69;;;-1:-1:-1;4070:3:0;4063:10;;4024:69;4115:5;4124:1;4115:10;4111:68;;;-1:-1:-1;4157:2:0;4150:9;;4111:68;4210:1;4201:5;:10;;:24;;;;4224:1;4215:5;:10;;4201:24;4197:82;;;-1:-1:-1;4257:2:0;4250:9;;4197:82;-1:-1:-1;4322:1:0;2286:2045;;;;;:::o;10515:28011::-;;;;;;;;;;;-1:-1:-1;;;;;10515:28011:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10515:28011:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;10515:28011:0;;;-1:-1:-1;;10515:28011:0:o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10515:28011:0;;;-1:-1:-1;10515:28011:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://d001a921e5bba9689282523e77521855e2e067ae640667b31b965a37e3dbdc42

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.