Contract 0x4991425351fE7C0239B57959275Cd04928ccd8A2

Contract Overview

Balance:
0 CRO

CRO Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x55c3cada7dc25d452603f3d23d2586019f8a0e66f6abbda45397b2575d31eefdWithdraw49018362022-10-02 10:32:113 days 18 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO0.771477258838 4,906.430117646
0x140e876b472bdc7974499e578ee1dbc61a6e7a64e2b82661ecccbd11d2567a0eDeposit49018322022-10-02 10:31:483 days 18 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO0.726087894385 4,906.430256615
0x0c3df8a131209ec5f12d4da5c0ce9933375d404e42caf5dbe408beec8e05320eWithdraw49018292022-10-02 10:31:313 days 18 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO0.770500922737 4,906.430394601
0x0f6aa2d230b5285cf8e02e3bc22596ed6de00b90e3c05404020e82555b3bcb47Deposit49018272022-10-02 10:31:193 days 18 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO1.041080775056 4,906.430530885
0x1044e94a8582d00a16a9c3f5172c0bf603886e09c07c7c983a11e7f33f90aa4fDeposit49018152022-10-02 10:30:113 days 18 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO0.508325904234 4,906.43125974
0x50ffa6b78327b33f32b0b30a52e6901e60683c170de4fccb17c7c7e19bf1276dAdd49012732022-10-02 9:38:513 days 19 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO1.483813418593 4,907.455768121
0x52051da2fb8974a7b0f73bd7f96a9317c662b8185994a9964bcfa55e4c9370bbAdd49012702022-10-02 9:38:343 days 19 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO1.393820534219 4,907.455907201
0xab31f66fc519a91284f048db2f7661376fcdb2f37e9b86454e8dc71215972a39Add49012622022-10-02 9:37:483 days 19 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO1.209629082181 4,907.456274471
0xe7f98cdd916b964932655db6ae05910d8262e19df2648b084d43fe7f5af33942Add49011542022-10-02 9:27:373 days 19 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO1.214473980655 4,907.461281564
0x0d444b85e2172adffaa953a1a2acb9bc8484d005d0181cabe100787ee15f6feeAdd49011512022-10-02 9:27:203 days 19 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO1.125035530692 4,907.461420685
0x49c1a558e92c8cf8ffc01fcbe8ad4f7514bb1f07c2c56e82fcd2089a87f451cbAdd49011492022-10-02 9:27:083 days 19 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO1.035597065959 4,907.461513847
0x7e9d54133b976054dca7bdffe2929453b6738c7f2e3d3a89aaf4296cee7506d9Add49009402022-10-02 9:07:223 days 19 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO0.851878122071 4,907.471265707
0x8db83658456facad188ccb41747efda056dd7abe4e48b96cb6afd3b83ccc945bAdd49009342022-10-02 9:06:483 days 19 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO0.762439501231 4,907.471542335
0x198b88b906f3820df3b282eb2445f5cce93bbb200c7d520e0e0acbdf2d885e3aAdd49008962022-10-02 9:03:123 days 19 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  0x4991425351fe7c0239b57959275cd04928ccd8a20 CRO0.820225271631 4,907.473295312
0x9720a7262e6e5ef1098d8d25b0ef580b7e14c308f63103b45f9066f0ac5b98cc0x6080604047493312022-09-22 9:42:4913 days 19 hrs ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  Create: MasterChef0 CRO14.239821799123 4,915.89427903
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MasterChef

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-09-22
*/

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

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }

    function safeSub(uint a, uint b) internal pure returns (uint) {
        if (b > a) {return 0;} else {return a - b;}
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);

    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface ITokensRecoverable {
    function recoverTokens(IERC20 token) external;
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal pure virtual returns (bytes calldata) {
        return msg.data;
    }
}

contract Ownable {
    address public owner;

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

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

    constructor() public {
        owner = msg.sender;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}

contract Whitelist is Ownable {
    mapping(address => bool) public whitelist;

    event WhitelistedAddressAdded(address addr);
    event WhitelistedAddressRemoved(address addr);

    modifier onlyWhitelisted() {
        require(whitelist[msg.sender], 'no whitelist');
        _;
    }

    function addAddressToWhitelist(address addr) onlyOwner public returns(bool success) {
        if (!whitelist[addr]) {
            whitelist[addr] = true;
            emit WhitelistedAddressAdded(addr);
            success = true;
        }
    }

    function addAddressesToWhitelist(address[] memory addrs) onlyOwner public returns(bool success) {
        for (uint256 i = 0; i < addrs.length; i++) {
            if (addAddressToWhitelist(addrs[i])) {
                success = true;
            }
        }
        return success;
    }

    function removeAddressFromWhitelist(address addr) onlyOwner public returns(bool success) {
        if (whitelist[addr]) {
            whitelist[addr] = false;
            emit WhitelistedAddressRemoved(addr);
            success = true;
        }
        return success;
    }

    function removeAddressesFromWhitelist(address[] memory addrs) onlyOwner public returns(bool success) {
        for (uint256 i = 0; i < addrs.length; i++) {
            if (removeAddressFromWhitelist(addrs[i])) {
                success = true;
            }
        }
        return success;
    }
}

abstract contract Pausable is Context {

    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;

    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    constructor () public {
        _paused = false;
    }

    function paused() public view virtual returns (bool) {
        return _paused;
    }

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() public {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

abstract contract TokensRecoverable is Ownable, ITokensRecoverable {
    using SafeERC20 for IERC20;

    function recoverTokens(IERC20 token) public override onlyOwner {
        token.safeTransfer(msg.sender, token.balanceOf(address(this)));
    }
}

contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

    function name() public override view returns (string memory) {
        return _name;
    }

    function symbol() public override view returns (string memory) {
        return _symbol;
    }

    function decimals() public override view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public override view returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public override view returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public override view returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom (address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount exceeds allowance')
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, 'ERC20: decreased allowance below zero'));
        return true;
    }

    function _transfer (address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), 'ERC20: transfer from the zero address');
        require(recipient != address(0), 'ERC20: transfer to the zero address');

        _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount exceeds balance');
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal {
        require(account != address(0), 'ERC20: mint to the zero address');

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal {
        require(account != address(0), 'ERC20: burn from the zero address');

        _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount exceeds balance');
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve (address owner, address spender, uint256 amount) internal {
        require(owner != address(0), 'ERC20: approve from the zero address');
        require(spender != address(0), 'ERC20: approve to the zero address');

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, 'ERC20: burn amount exceeds allowance'));
    }
}

contract YieldToken is ERC20('Stronghands Farm', 'SFARM'), Whitelist, TokensRecoverable {

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint256 votes;
    }

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;
    mapping (address => address) internal _delegates;
    mapping (address => uint32) public numCheckpoints;
    mapping (address => uint) public nonces;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");
    
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

    ////////////////////////////
    // PUBLIC WRITE FUNCTIONS //
    ////////////////////////////

    function delegate(address delegatee) external {
        return _delegate(msg.sender, delegatee);
    }

    function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name())), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));

        address signatory = ecrecover(digest, v, r, s);

        require(signatory != address(0), "GOV::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "GOV::delegateBySig: invalid nonce");
        require(now <= expiry, "GOV::delegateBySig: signature expired");

        return _delegate(signatory, delegatee);
    }

    ///////////////////////////
    // PUBLIC VIEW FUNCTIONS //
    ///////////////////////////

    function getChainId() public pure returns (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }

    function delegates(address delegator) external view returns (address) {
        return _delegates[delegator];
    }

    function getCurrentVotes(address account) external view returns (uint256) {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    function getPriorVotes(address account, uint blockNumber) external view returns (uint256) {
        require(blockNumber < block.number, "GOV::getPriorVotes: not yet determined");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    //////////////////////////
    // RESTRICTED FUNCTIONS //
    //////////////////////////

    function mint(address _to, uint256 _amount) public onlyWhitelisted {
        _mint(_to, _amount);
        _moveDelegates(address(0), _delegates[_to], _amount);
    }

    ////////////////////////
    // INTERNAL FUNCTIONS //
    ////////////////////////

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = _delegates[delegator];
        uint256 delegatorBalance = balanceOf(delegator); // balance of underlying tokens (not scaled);
        _delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                // decrease old representative
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint256 srcRepNew = srcRepOld.sub(amount);
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                // increase new representative
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint256 dstRepNew = dstRepOld.add(amount);
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes) internal {
        uint32 blockNumber = safe32(block.number, "GOV::_writeCheckpoint: block number exceeds 32 bits");

        if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else {
            checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }
}

contract MasterChef is Whitelist, Pausable, ReentrancyGuard, TokensRecoverable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    modifier nonDuplicated(IERC20 _lpToken) {
        require(poolExistence[_lpToken] == false, "nonDuplicated: duplicated");
        _;
    }

    // Info of each user.
    struct UserInfo {
        uint256 amount;
        uint256 rewardDebt;
    }

    // Info of each pool.
    struct PoolInfo {
        IERC20 lpToken;           // Address of LP token contract.
        uint256 allocPoint;       // How many allocation points assigned to this pool. Yield to distribute per block.
        uint256 lastRewardBlock;  // Last block number that yield distribution occurs.
        uint256 accYieldPerShare;   // Accumulated yield per share, times 1e12. See below.
        uint16 depositFeeBP;      // Deposit fee in basis points
    }

    YieldToken public yield; // Yield Token

    address public feeAddress; // Deposit Fee address

    uint256 public yieldPerBlock; // Yield tokens created per block.
    uint256 public totalAllocPoint = 0; // Total allocation points.
    uint256 public startBlock; // The block number when token mining starts.

    uint256 public constant BONUS_MULTIPLIER = 1; // Bonus muliplier for early yield makers.
    
    PoolInfo[] public poolInfo; // Info of each pool.

    // Info of each user that stakes LP tokens.
    mapping(uint256 => mapping(address => UserInfo)) public userInfo;
    mapping(IERC20 => bool) public poolExistence;

    event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
    event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
    event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);
    event SetFeeAddress(address indexed user, address indexed newAddress);
    event UpdateEmissionRate(address indexed user, uint256 yieldPerBlock);

    constructor(YieldToken _yield, address _feeAddress, uint256 _yieldPerBlock, uint256 _startBlock) public {
        yield = _yield;
        feeAddress = _feeAddress;
        yieldPerBlock = _yieldPerBlock;
        startBlock = _startBlock;
    }

    ////////////////////////////
    // PUBLIC WRITE FUNCTIONS //
    ////////////////////////////

    // Update reward variables for all pools. Be careful of gas spending!
    function massUpdatePools() public {
        uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            updatePool(pid);
        }
    }

    // Update reward variables of the given pool to be up-to-date.
    function updatePool(uint256 _pid) public {
        PoolInfo storage pool = poolInfo[_pid];
        if (block.number <= pool.lastRewardBlock) {
            return;
        }
        uint256 lpSupply = pool.lpToken.balanceOf(address(this));
        if (lpSupply == 0 || pool.allocPoint == 0) {
            pool.lastRewardBlock = block.number;
            return;
        }
        uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
        uint256 yieldReward = multiplier.mul(yieldPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
        
        yield.mint(feeAddress, yieldReward.div(10));
        yield.mint(address(this), yieldReward);

        pool.accYieldPerShare = pool.accYieldPerShare.add(yieldReward.mul(1e12).div(lpSupply));
        pool.lastRewardBlock = block.number;
    }

    // Deposit LP tokens to MasterChef for yield allocation.
    function deposit(uint256 _pid, uint256 _amount) public nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        updatePool(_pid);
        if (user.amount > 0) {
            uint256 pending = user.amount.mul(pool.accYieldPerShare).div(1e12).sub(user.rewardDebt);
            if (pending > 0) {
                safeYieldTransfer(msg.sender, pending);
            }
        }
        if (_amount > 0) {
            pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount);
            if (pool.depositFeeBP > 0) {
                uint256 depositFee = _amount.mul(pool.depositFeeBP).div(10000);
                pool.lpToken.safeTransfer(feeAddress, depositFee);
                user.amount = user.amount.add(_amount).sub(depositFee);
            } else {
                user.amount = user.amount.add(_amount);
            }
        }
        user.rewardDebt = user.amount.mul(pool.accYieldPerShare).div(1e12);
        emit Deposit(msg.sender, _pid, _amount);
    }

    // Withdraw LP tokens from MasterChef.
    function withdraw(uint256 _pid, uint256 _amount) public nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        require(user.amount >= _amount, "withdraw: not good");
        updatePool(_pid);
        uint256 pending = user.amount.mul(pool.accYieldPerShare).div(1e12).sub(user.rewardDebt);
        if (pending > 0) {
            safeYieldTransfer(msg.sender, pending);
        }
        if (_amount > 0) {
            user.amount = user.amount.sub(_amount);
            pool.lpToken.safeTransfer(address(msg.sender), _amount);
        }
        user.rewardDebt = user.amount.mul(pool.accYieldPerShare).div(1e12);
        emit Withdraw(msg.sender, _pid, _amount);
    }

    // Withdraw without caring about rewards. EMERGENCY ONLY.
    function emergencyWithdraw(uint256 _pid) public nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        uint256 amount = user.amount;
        user.amount = 0;
        user.rewardDebt = 0;
        pool.lpToken.safeTransfer(address(msg.sender), amount);
        emit EmergencyWithdraw(msg.sender, _pid, amount);
    }

    ///////////////////////////
    // PUBLIC VIEW FUNCTIONS //
    ///////////////////////////

    function poolLength() external view returns (uint256) {
        return poolInfo.length;
    }

    // Return reward multiplier over the given _from to _to block.
    function getMultiplier(uint256 _from, uint256 _to) public pure returns (uint256) {
        return _to.sub(_from).mul(BONUS_MULTIPLIER);
    }

    // View function to see pending yield on frontend.
    function pendingYield(uint256 _pid, address _user) external view returns (uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 accYieldPerShare = pool.accYieldPerShare;
        uint256 lpSupply = pool.lpToken.balanceOf(address(this));
        if (block.number > pool.lastRewardBlock && lpSupply != 0) {
            uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
            uint256 yieldReward = multiplier.mul(yieldPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
            accYieldPerShare = accYieldPerShare.add(yieldReward.mul(1e12).div(lpSupply));
        }
        return user.amount.mul(accYieldPerShare).div(1e12).sub(user.rewardDebt);
    }

    //////////////////////////
    // RESTRICTED FUNCTIONS //
    //////////////////////////

    function setFeeAddress(address _feeAddress) public onlyOwner {
        feeAddress = _feeAddress;
        emit SetFeeAddress(msg.sender, _feeAddress);
    }

    function updateEmissionRate(uint256 _yieldPerBlock) public onlyOwner {
        massUpdatePools();
        yieldPerBlock = _yieldPerBlock;
        emit UpdateEmissionRate(msg.sender, _yieldPerBlock);
    }

    // Add a new lp to the pool. Can only be called by the owner.
    function add(uint256 _allocPoint, IERC20 _lpToken, uint16 _depositFeeBP, bool _withUpdate) public onlyOwner nonDuplicated(_lpToken) {
        require(_depositFeeBP <= 10000, "add: invalid deposit fee basis points");
        if (_withUpdate) {
            massUpdatePools();
        }
        uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolExistence[_lpToken] = true;
        poolInfo.push(PoolInfo({
        lpToken : _lpToken,
        allocPoint : _allocPoint,
        lastRewardBlock : lastRewardBlock,
        accYieldPerShare : 0,
        depositFeeBP : _depositFeeBP
        }));
    }

    // Update the given pool's yield allocation point and deposit fee. Can only be called by the owner.
    function set(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, bool _withUpdate) public onlyOwner {
        require(_depositFeeBP <= 10000, "set: invalid deposit fee basis points");
        if (_withUpdate) {
            massUpdatePools();
        }
        totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
        poolInfo[_pid].allocPoint = _allocPoint;
        poolInfo[_pid].depositFeeBP = _depositFeeBP;
    }

    ////////////////////////
    // INTERNAL FUNCTIONS //
    ////////////////////////

    // Safe yield transfer function, just in case if rounding error causes pool to not have enough yield.
    function safeYieldTransfer(address _to, uint256 _amount) internal {
        uint256 yieldBal = yield.balanceOf(address(this));
        bool transferSuccess = false;
        if (_amount > yieldBal) {
            transferSuccess = yield.transfer(_to, yieldBal);
        } else {
            transferSuccess = yield.transfer(_to, _amount);
        }
        require(transferSuccess, "safeYieldTransfer: transfer failed");
    }
}

Contract ABI

[{"inputs":[{"internalType":"contract YieldToken","name":"_yield","type":"address"},{"internalType":"address","name":"_feeAddress","type":"address"},{"internalType":"uint256","name":"_yieldPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetFeeAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldPerBlock","type":"uint256"}],"name":"UpdateEmissionRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"WhitelistedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"WhitelistedAddressRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BONUS_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAddressToWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"name":"poolExistence","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accYieldPerShare","type":"uint256"},{"internalType":"uint16","name":"depositFeeBP","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"removeAddressesFromWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_yieldPerBlock","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"yield","outputs":[{"internalType":"contract YieldToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yieldPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052600060075534801561001557600080fd5b506040516132713803806132718339818101604052608081101561003857600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548160ff021916908315150217905550600160038190555083600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160068190555080600881905550505050506131048061016d6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063630b5ba11161010457806393f1a40b116100a2578063e2bbb15811610071578063e2bbb158146108a2578063e2ec6ec3146108da578063f2fde38b146109a8578063fc2f3d82146109ec576101da565b806393f1a40b146107335780639b19251a1461079c578063cbd258b5146107f6578063d963842214610850576101da565b80638705fcd4116100de5780638705fcd4146106515780638aa28550146106955780638da5cb5b146106b35780638dbb1e3a146106e7576101da565b8063630b5ba1146105855780637b9417c81461058f57806384e82a33146105e9576101da565b8063285939841161017c57806348cd4cb11161014b57806348cd4cb1146104eb57806351eb05a6146105095780635312ea8e146105375780635c975abb14610565576101da565b806328593984146103f1578063286dd3f514610425578063412753581461047f578063441a3e70146104b3576101da565b80631526fe27116101b85780631526fe271461024957806316114acd146102c157806317caf6f11461030557806324953eaa14610323576101da565b8063081e3eda146101df5780630ba84cd2146101fd5780630bac6d5c1461022b575b600080fd5b6101e7610a4e565b6040518082815260200191505060405180910390f35b6102296004803603602081101561021357600080fd5b8101908080359060200190929190505050610a5b565b005b610233610b13565b6040518082815260200191505060405180910390f35b6102756004803603602081101561025f57600080fd5b8101908080359060200190929190505050610b19565b604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018261ffff1681526020019550505050505060405180910390f35b610303600480360360208110156102d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b8a565b005b61030d610cb1565b6040518082815260200191505060405180910390f35b6103d96004803603602081101561033957600080fd5b810190808035906020019064010000000081111561035657600080fd5b82018360208201111561036857600080fd5b8035906020019184602083028401116401000000008311171561038a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610cb7565b60405180821515815260200191505060405180910390f35b6103f9610d57565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104676004803603602081101561043b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d7d565b60405180821515815260200191505060405180910390f35b610487610ed9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e9600480360360408110156104c957600080fd5b810190808035906020019092919080359060200190929190505050610eff565b005b6104f36111e6565b6040518082815260200191505060405180910390f35b6105356004803603602081101561051f57600080fd5b81019080803590602001909291905050506111ec565b005b6105636004803603602081101561054d57600080fd5b8101908080359060200190929190505050611547565b005b61056d611704565b60405180821515815260200191505060405180910390f35b61058d61171b565b005b6105d1600480360360208110156105a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611748565b60405180821515815260200191505060405180910390f35b61064f600480360360808110156105ff57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff1690602001909291908035151590602001909291905050506118a2565b005b6106936004803603602081101561066757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bb8565b005b61069d611cae565b6040518082815260200191505060405180910390f35b6106bb611cb3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61071d600480360360408110156106fd57600080fd5b810190808035906020019092919080359060200190929190505050611cd7565b6040518082815260200191505060405180910390f35b61077f6004803603604081101561074957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d07565b604051808381526020018281526020019250505060405180910390f35b6107de600480360360208110156107b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d38565b60405180821515815260200191505060405180910390f35b6108386004803603602081101561080c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d58565b60405180821515815260200191505060405180910390f35b6108a06004803603608081101561086657600080fd5b810190808035906020019092919080359060200190929190803561ffff169060200190929190803515159060200190929190505050611d78565b005b6108d8600480360360408110156108b857600080fd5b810190808035906020019092919080359060200190929190505050611eeb565b005b610990600480360360208110156108f057600080fd5b810190808035906020019064010000000081111561090d57600080fd5b82018360208201111561091f57600080fd5b8035906020019184602083028401116401000000008311171561094157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612271565b60405180821515815260200191505060405180910390f35b6109ea600480360360208110156109be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612311565b005b610a3860048036036040811015610a0257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612460565b6040518082815260200191505060405180910390f35b6000600980549050905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ab357600080fd5b610abb61171b565b806006819055503373ffffffffffffffffffffffffffffffffffffffff167fe2492e003bbe8afa53088b406f0c1cb5d9e280370fc72a74cf116ffd343c4053826040518082815260200191505060405180910390a250565b60065481565b60098181548110610b2657fe5b90600052602060002090600502016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900461ffff16905085565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be257600080fd5b610cae338273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c4d57600080fd5b505afa158015610c61573d6000803e3d6000fd5b505050506040513d6020811015610c7757600080fd5b81019080805190602001909291905050508373ffffffffffffffffffffffffffffffffffffffff166126a69092919063ffffffff16565b50565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d1257600080fd5b60005b8251811015610d5157610d3a838281518110610d2d57fe5b6020026020010151610d7d565b15610d4457600191505b8080600101915050610d15565b50919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dd857600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ed4576000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026003541415610f78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600381905550600060098381548110610f8f57fe5b906000526020600020906005020190506000600a600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050828160000154101561106d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f77697468647261773a206e6f7420676f6f64000000000000000000000000000081525060200191505060405180910390fd5b611076846111ec565b60006110c082600101546110b264e8d4a510006110a48760030154876000015461274890919063ffffffff16565b6127ce90919063ffffffff16565b61285790919063ffffffff16565b905060008111156110d6576110d533826128da565b5b600084111561114e576110f684836000015461285790919063ffffffff16565b826000018190555061114d33858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166126a69092919063ffffffff16565b5b61118064e8d4a510006111728560030154856000015461274890919063ffffffff16565b6127ce90919063ffffffff16565b8260010181905550843373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568866040518082815260200191505060405180910390a350505060016003819055505050565b60085481565b6000600982815481106111fb57fe5b906000526020600020906005020190508060020154431161121c5750611544565b60008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156112a957600080fd5b505afa1580156112bd573d6000803e3d6000fd5b505050506040513d60208110156112d357600080fd5b8101908080519060200190929190505050905060008114806112f9575060008260010154145b1561130e574382600201819055505050611544565b600061131e836002015443611cd7565b9050600061136160075461135386600101546113456006548761274890919063ffffffff16565b61274890919063ffffffff16565b6127ce90919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166113d8600a856127ce90919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561142b57600080fd5b505af115801561143f573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156114d657600080fd5b505af11580156114ea573d6000803e3d6000fd5b5050505061152e61151b8461150d64e8d4a510008561274890919063ffffffff16565b6127ce90919063ffffffff16565b8560030154612bae90919063ffffffff16565b8460030181905550438460020181905550505050505b50565b600260035414156115c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026003819055506000600982815481106115d757fe5b906000526020600020906005020190506000600a600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154905060008260000181905550600082600101819055506116a733828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166126a69092919063ffffffff16565b833373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae0595836040518082815260200191505060405180910390a3505050600160038190555050565b6000600260009054906101000a900460ff16905090565b6000600980549050905060005b8181101561174457611739816111ec565b806001019050611728565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117a357600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661189d5760018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118fa57600080fd5b8260001515600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f6e4475706c6963617465643a206475706c6963617465640000000000000081525060200191505060405180910390fd5b6127108361ffff161115611a20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806130186025913960400191505060405180910390fd5b8115611a2f57611a2e61171b565b5b60006008544311611a4257600854611a44565b435b9050611a5b86600754612bae90919063ffffffff16565b6007819055506001600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060096040518060a001604052808773ffffffffffffffffffffffffffffffffffffffff168152602001888152602001838152602001600081526020018661ffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548161ffff021916908361ffff1602179055505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c1057600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd44190acf9d04bdb5d3a1aafff7e6dee8b40b93dfb8c5d3f0eea4b9f4539c3f760405160405180910390a350565b600181565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cff6001611cf1858561285790919063ffffffff16565b61274890919063ffffffff16565b905092915050565b600a602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b60016020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dd057600080fd5b6127108261ffff161115611e2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806130806025913960400191505060405180910390fd5b8015611e3e57611e3d61171b565b5b611e8383611e7560098781548110611e5257fe5b90600052602060002090600502016001015460075461285790919063ffffffff16565b612bae90919063ffffffff16565b6007819055508260098581548110611e9757fe5b9060005260206000209060050201600101819055508160098581548110611eba57fe5b906000526020600020906005020160040160006101000a81548161ffff021916908361ffff16021790555050505050565b60026003541415611f64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600381905550600060098381548110611f7b57fe5b906000526020600020906005020190506000600a600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611fe8846111ec565b60008160000154111561205757600061203f826001015461203164e8d4a510006120238760030154876000015461274890919063ffffffff16565b6127ce90919063ffffffff16565b61285790919063ffffffff16565b905060008111156120555761205433826128da565b5b505b60008311156121da576120b13330858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c36909392919063ffffffff16565b60008260040160009054906101000a900461ffff1661ffff1611156121b957600061210f6127106121018560040160009054906101000a900461ffff1661ffff168761274890919063ffffffff16565b6127ce90919063ffffffff16565b9050612182600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166126a69092919063ffffffff16565b6121ab8161219d868560000154612bae90919063ffffffff16565b61285790919063ffffffff16565b8260000181905550506121d9565b6121d0838260000154612bae90919063ffffffff16565b81600001819055505b5b61220c64e8d4a510006121fe8460030154846000015461274890919063ffffffff16565b6127ce90919063ffffffff16565b8160010181905550833373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15856040518082815260200191505060405180910390a3505060016003819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122cc57600080fd5b60005b825181101561230b576122f48382815181106122e757fe5b6020026020010151611748565b156122fe57600191505b80806001019150506122cf565b50919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461236957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123a357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806009848154811061247057fe5b906000526020600020906005020190506000600a600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260030154905060008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561256a57600080fd5b505afa15801561257e573d6000803e3d6000fd5b505050506040513d602081101561259457600080fd5b810190808051906020019092919050505090508360020154431180156125bb575060008114155b156126565760006125d0856002015443611cd7565b9050600061261360075461260588600101546125f76006548761274890919063ffffffff16565b61274890919063ffffffff16565b6127ce90919063ffffffff16565b90506126516126428461263464e8d4a510008561274890919063ffffffff16565b6127ce90919063ffffffff16565b85612bae90919063ffffffff16565b935050505b61269a836001015461268c64e8d4a5100061267e86886000015461274890919063ffffffff16565b6127ce90919063ffffffff16565b61285790919063ffffffff16565b94505050505092915050565b6127438363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612cf7565b505050565b60008083141561275b57600090506127c8565b600082840290508284828161276c57fe5b04146127c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061305f6021913960400191505060405180910390fd5b809150505b92915050565b6000808211612845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838161284e57fe5b04905092915050565b6000828211156128cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561296557600080fd5b505afa158015612979573d6000803e3d6000fd5b505050506040513d602081101561298f57600080fd5b81019080805190602001909291905050509050600081831115612a8157600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a3f57600080fd5b505af1158015612a53573d6000803e3d6000fd5b505050506040513d6020811015612a6957600080fd5b81019080805190602001909291905050509050612b52565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b1457600080fd5b505af1158015612b28573d6000803e3d6000fd5b505050506040513d6020811015612b3e57600080fd5b810190808051906020019092919050505090505b80612ba8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061303d6022913960400191505060405180910390fd5b50505050565b600080828401905083811015612c2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b612cf1846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612cf7565b50505050565b6060612d59826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612de69092919063ffffffff16565b9050600081511115612de157808060200190516020811015612d7a57600080fd5b8101908080519060200190929190505050612de0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806130a5602a913960400191505060405180910390fd5b5b505050565b6060612df58484600085612dfe565b90509392505050565b6060612e0985613004565b612e7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310612ecb5780518252602082019150602081019050602083039250612ea8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612f2d576040519150601f19603f3d011682016040523d82523d6000602084013e612f32565b606091505b50915091508115612f47578092505050612ffc565b600081511115612f5a5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612fc1578082015181840152602081019050612fa6565b50505050905090810190601f168015612fee5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe6164643a20696e76616c6964206465706f7369742066656520626173697320706f696e7473736166655969656c645472616e736665723a207472616e73666572206661696c6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777365743a20696e76616c6964206465706f7369742066656520626173697320706f696e74735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220ef936c7135e52ec92909ddefed6e77f99602710e3e16d8a5b4393e641f29000364736f6c634300060c00330000000000000000000000004b546457ca82574f86911022ecc15ce4569efb0b000000000000000000000000b7fd7c5a90387f5e7394d42e544365c3474eb6510000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000004878bc

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

0000000000000000000000004b546457ca82574f86911022ecc15ce4569efb0b000000000000000000000000b7fd7c5a90387f5e7394d42e544365c3474eb6510000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000004878bc

-----Decoded View---------------
Arg [0] : _yield (address): 0x4b546457ca82574f86911022ecc15ce4569efb0b
Arg [1] : _feeAddress (address): 0xb7fd7c5a90387f5e7394d42e544365c3474eb651
Arg [2] : _yieldPerBlock (uint256): 1000000000000000000
Arg [3] : _startBlock (uint256): 4749500

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000004b546457ca82574f86911022ecc15ce4569efb0b
Arg [1] : 000000000000000000000000b7fd7c5a90387f5e7394d42e544365c3474eb651
Arg [2] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [3] : 00000000000000000000000000000000000000000000000000000000004878bc


Deployed ByteCode Sourcemap

21942:9647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27958:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29376:208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22954:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23273:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11134:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23024:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9525:304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22850:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9234:283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22897:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26622:758;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23093:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24596:829;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27451:398;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10256:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24340:180;;;:::i;:::-;;8673:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29659:711;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29210:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23173:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7896:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28129:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23379:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;8407:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23450:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30483:463;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25495:1075;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8932:294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8171:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28336:768;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27958:95;28003:7;28030:8;:15;;;;28023:22;;27958:95;:::o;29376:208::-;7979:5;;;;;;;;;;7965:19;;:10;:19;;;7957:28;;;;;;29456:17:::1;:15;:17::i;:::-;29500:14;29484:13;:30;;;;29549:10;29530:46;;;29561:14;29530:46;;;;;;;;;;;;;;;;;;29376:208:::0;:::o;22954:28::-;;;;:::o;23273:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11134:144::-;7979:5;;;;;;;;;;7965:19;;:10;:19;;;7957:28;;;;;;11208:62:::1;11227:10;11239:5;:15;;;11263:4;11239:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;11208:5;:18;;;;:62;;;;;:::i;:::-;11134:144:::0;:::o;23024:34::-;;;;:::o;9525:304::-;9612:12;7979:5;;;;;;;;;;;7965:19;;:10;:19;;;7957:28;;;;;;9642:9:::1;9637:160;9661:5;:12;9657:1;:16;9637:160;;;9699:36;9726:5;9732:1;9726:8;;;;;;;;;;;;;;9699:26;:36::i;:::-;9695:91;;;9766:4;9756:14;;9695:91;9675:3;;;;;;;9637:160;;;;9525:304:::0;;;:::o;22850:23::-;;;;;;;;;;;;;:::o;9234:283::-;9309:12;7979:5;;;;;;;;;;;7965:19;;:10;:19;;;7957:28;;;;;;9338:9:::1;:15;9348:4;9338:15;;;;;;;;;;;;;;;;;;;;;;;;;9334:151;;;9388:5;9370:9;:15;9380:4;9370:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;9413:31;9439:4;9413:31;;;;;;;;;;;;;;;;;;;;9469:4;9459:14;;9334:151;9234:283:::0;;;:::o;22897:25::-;;;;;;;;;;;;;:::o;26622:758::-;10728:1;10881:7;;:19;;10873:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10728:1;10947:7;:18;;;;26702:21:::1;26726:8;26735:4;26726:14;;;;;;;;;;;;;;;;;;26702:38;;26751:21;26775:8;:14;26784:4;26775:14;;;;;;;;;;;:26;26790:10;26775:26;;;;;;;;;;;;;;;26751:50;;26835:7;26820:4;:11;;;:22;;26812:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;26876:16;26887:4;26876:10;:16::i;:::-;26903:15;26921:69;26974:4;:15;;;26921:48;26964:4;26921:38;26937:4;:21;;;26921:4;:11;;;:15;;:38;;;;:::i;:::-;:42;;:48;;;;:::i;:::-;:52;;:69;;;;:::i;:::-;26903:87;;27015:1;27005:7;:11;27001:82;;;27033:38;27051:10;27063:7;27033:17;:38::i;:::-;27001:82;27107:1;27097:7;:11;27093:152;;;27139:24;27155:7;27139:4;:11;;;:15;;:24;;;;:::i;:::-;27125:4;:11;;:38;;;;27178:55;27212:10;27225:7;27178:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;27093:152;27273:48;27316:4;27273:38;27289:4;:21;;;27273:4;:11;;;:15;;:38;;;;:::i;:::-;:42;;:48;;;;:::i;:::-;27255:4;:15;;:66;;;;27358:4;27346:10;27337:35;;;27364:7;27337:35;;;;;;;;;;;;;;;;;;10976:1;;;10684::::0;10988:7;:22;;;;26622:758;;:::o;23093:25::-;;;;:::o;24596:829::-;24648:21;24672:8;24681:4;24672:14;;;;;;;;;;;;;;;;;;24648:38;;24717:4;:20;;;24701:12;:36;24697:75;;24754:7;;;24697:75;24782:16;24801:4;:12;;;;;;;;;;;;:22;;;24832:4;24801:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24782:56;;24865:1;24853:8;:13;:37;;;;24889:1;24870:4;:15;;;:20;24853:37;24849:126;;;24930:12;24907:4;:20;;:35;;;;24957:7;;;;24849:126;24985:18;25006:49;25020:4;:20;;;25042:12;25006:13;:49::i;:::-;24985:70;;25066:19;25088:71;25143:15;;25088:50;25122:4;:15;;;25088:29;25103:13;;25088:10;:14;;:29;;;;:::i;:::-;:33;;:50;;;;:::i;:::-;:54;;:71;;;;:::i;:::-;25066:93;;25180:5;;;;;;;;;;;:10;;;25191;;;;;;;;;;;25203:19;25219:2;25203:11;:15;;:19;;;;:::i;:::-;25180:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25234:5;;;;;;;;;;;:10;;;25253:4;25260:11;25234:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25309:62;25335:35;25361:8;25335:21;25351:4;25335:11;:15;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;25309:4;:21;;;:25;;:62;;;;:::i;:::-;25285:4;:21;;:86;;;;25405:12;25382:4;:20;;:35;;;;24596:829;;;;;;:::o;27451:398::-;10728:1;10881:7;;:19;;10873:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10728:1;10947:7;:18;;;;27523:21:::1;27547:8;27556:4;27547:14;;;;;;;;;;;;;;;;;;27523:38;;27572:21;27596:8;:14;27605:4;27596:14;;;;;;;;;;;:26;27611:10;27596:26;;;;;;;;;;;;;;;27572:50;;27633:14;27650:4;:11;;;27633:28;;27686:1;27672:4;:11;;:15;;;;27716:1;27698:4;:15;;:19;;;;27728:54;27762:10;27775:6;27728:4;:12;;;;;;;;;;;;:25;;;;:54;;;;;:::i;:::-;27828:4;27816:10;27798:43;;;27834:6;27798:43;;;;;;;;;;;;;;;;;;10976:1;;;10684::::0;10988:7;:22;;;;27451:398;:::o;10256:86::-;10303:4;10327:7;;;;;;;;;;;10320:14;;10256:86;:::o;24340:180::-;24385:14;24402:8;:15;;;;24385:32;;24433:11;24428:85;24456:6;24450:3;:12;24428:85;;;24486:15;24497:3;24486:10;:15::i;:::-;24464:5;;;;;24428:85;;;;24340:180;:::o;8673:251::-;8743:12;7979:5;;;;;;;;;;;7965:19;;:10;:19;;;7957:28;;;;;;8773:9:::1;:15;8783:4;8773:15;;;;;;;;;;;;;;;;;;;;;;;;;8768:149;;8823:4;8805:9:::0;:15:::1;8815:4;8805:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;8847:29;8871:4;8847:29;;;;;;;;;;;;;;;;;;;;8901:4;8891:14;;8768:149;8673:251:::0;;;:::o;29659:711::-;7979:5;;;;;;;;;;7965:19;;:10;:19;;;7957:28;;;;;;29781:8:::1;22182:5;22155:32;;:13;:23;22169:8;22155:23;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;22147:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29827:5:::2;29810:13;:22;;;;29802:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29889:11;29885:61;;;29917:17;:15;:17::i;:::-;29885:61;29956:23;29997:10;;29982:12;:25;:53;;30025:10;;29982:53;;;30010:12;29982:53;29956:79;;30064:32;30084:11;30064:15;;:19;;:32;;;;:::i;:::-;30046:15;:50;;;;30133:4;30107:13;:23;30121:8;30107:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;30148:8;30162:199;;;;;;;;30192:8;30162:199;;;;;;30224:11;30162:199;;;;30264:15;30162:199;;;;30309:1;30162:199;;;;30336:13;30162:199;;;;::::0;30148:214:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22228:1;7996::::1;29659:711:::0;;;;:::o;29210:158::-;7979:5;;;;;;;;;;7965:19;;:10;:19;;;7957:28;;;;;;29295:11:::1;29282:10;;:24;;;;;;;;;;;;;;;;;;29348:11;29322:38;;29336:10;29322:38;;;;;;;;;;;;29210:158:::0;:::o;23173:44::-;23216:1;23173:44;:::o;7896:20::-;;;;;;;;;;;;:::o;28129:143::-;28201:7;28228:36;23216:1;28228:14;28236:5;28228:3;:7;;:14;;;;:::i;:::-;:18;;:36;;;;:::i;:::-;28221:43;;28129:143;;;;:::o;23379:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8407:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;23450:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;30483:463::-;7979:5;;;;;;;;;;7965:19;;:10;:19;;;7957:28;;;;;;30624:5:::1;30607:13;:22;;;;30599:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30686:11;30682:61;;;30714:17;:15;:17::i;:::-;30682:61;30771:63;30822:11;30771:46;30791:8;30800:4;30791:14;;;;;;;;;;;;;;;;;;:25;;;30771:15;;:19;;:46;;;;:::i;:::-;:50;;:63;;;;:::i;:::-;30753:15;:81;;;;30873:11;30845:8;30854:4;30845:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;30925:13;30895:8;30904:4;30895:14;;;;;;;;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;30483:463:::0;;;;:::o;25495:1075::-;10728:1;10881:7;;:19;;10873:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10728:1;10947:7;:18;;;;25574:21:::1;25598:8;25607:4;25598:14;;;;;;;;;;;;;;;;;;25574:38;;25623:21;25647:8;:14;25656:4;25647:14;;;;;;;;;;;:26;25662:10;25647:26;;;;;;;;;;;;;;;25623:50;;25684:16;25695:4;25684:10;:16::i;:::-;25729:1;25715:4;:11;;;:15;25711:239;;;25747:15;25765:69;25818:4;:15;;;25765:48;25808:4;25765:38;25781:4;:21;;;25765:4;:11;;;:15;;:38;;;;:::i;:::-;:42;;:48;;;;:::i;:::-;:52;;:69;;;;:::i;:::-;25747:87;;25863:1;25853:7;:11;25849:90;;;25885:38;25903:10;25915:7;25885:17;:38::i;:::-;25849:90;25711:239;;25974:1;25964:7;:11;25960:476;;;25992:74;26030:10;26051:4;26058:7;25992:4;:12;;;;;;;;;;;;:29;;;;:74;;;;;;:::i;:::-;26105:1;26085:4;:17;;;;;;;;;;;;:21;;;26081:344;;;26127:18;26148:41;26183:5;26148:30;26160:4;:17;;;;;;;;;;;;26148:30;;:7;:11;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;26127:62;;26208:49;26234:10;;;;;;;;;;;26246;26208:4;:12;;;;;;;;;;;;:25;;;;:49;;;;;:::i;:::-;26290:40;26319:10;26290:24;26306:7;26290:4;:11;;;:15;;:24;;;;:::i;:::-;:28;;:40;;;;:::i;:::-;26276:4;:11;;:54;;;;26081:344;;;;26385:24;26401:7;26385:4;:11;;;:15;;:24;;;;:::i;:::-;26371:4;:11;;:38;;;;26081:344;25960:476;26464:48;26507:4;26464:38;26480:4;:21;;;26464:4;:11;;;:15;;:38;;;;:::i;:::-;:42;;:48;;;;:::i;:::-;26446:4;:15;;:66;;;;26548:4;26536:10;26528:34;;;26554:7;26528:34;;;;;;;;;;;;;;;;;;10976:1;;10684::::0;10988:7;:22;;;;25495:1075;;:::o;8932:294::-;9014:12;7979:5;;;;;;;;;;;7965:19;;:10;:19;;;7957:28;;;;;;9044:9:::1;9039:155;9063:5;:12;9059:1;:16;9039:155;;;9101:31;9123:5;9129:1;9123:8;;;;;;;;;;;;;;9101:21;:31::i;:::-;9097:86;;;9163:4;9153:14;;9097:86;9077:3;;;;;;;9039:155;;;;8932:294:::0;;;:::o;8171:192::-;7979:5;;;;;;;;;;7965:19;;:10;:19;;;7957:28;;;;;;8272:1:::1;8252:22;;:8;:22;;;;8244:31;;;::::0;::::1;;8319:8;8291:37;;8312:5;::::0;::::1;;;;;;;;8291:37;;;;;;;;;;;;8347:8;8339:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;8171:192:::0;:::o;28336:768::-;28410:7;28430:21;28454:8;28463:4;28454:14;;;;;;;;;;;;;;;;;;28430:38;;28479:21;28503:8;:14;28512:4;28503:14;;;;;;;;;;;:21;28518:5;28503:21;;;;;;;;;;;;;;;28479:45;;28535:24;28562:4;:21;;;28535:48;;28594:16;28613:4;:12;;;;;;;;;;;;:22;;;28644:4;28613:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28594:56;;28680:4;:20;;;28665:12;:35;:52;;;;;28716:1;28704:8;:13;;28665:52;28661:354;;;28734:18;28755:49;28769:4;:20;;;28791:12;28755:13;:49::i;:::-;28734:70;;28819:19;28841:71;28896:15;;28841:50;28875:4;:15;;;28841:29;28856:13;;28841:10;:14;;:29;;;;:::i;:::-;:33;;:50;;;;:::i;:::-;:54;;:71;;;;:::i;:::-;28819:93;;28946:57;28967:35;28993:8;28967:21;28983:4;28967:11;:15;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;28946:16;:20;;:57;;;;:::i;:::-;28927:76;;28661:354;;;29032:64;29080:4;:15;;;29032:43;29070:4;29032:33;29048:16;29032:4;:11;;;:15;;:33;;;;:::i;:::-;:37;;:43;;;;:::i;:::-;:47;;:64;;;;:::i;:::-;29025:71;;;;;;28336:768;;;;:::o;4943:177::-;5026:86;5046:5;5076:23;;;5101:2;5105:5;5053:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5026:19;:86::i;:::-;4943:177;;;:::o;3653:220::-;3711:7;3740:1;3735;:6;3731:20;;;3750:1;3743:8;;;;3731:20;3762:9;3778:1;3774;:5;3762:17;;3807:1;3802;3798;:5;;;;;;:10;3790:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3864:1;3857:8;;;3653:220;;;;;:::o;3881:153::-;3939:7;3971:1;3967;:5;3959:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4025:1;4021;:5;;;;;;4014:12;;3881:153;;;;:::o;3487:158::-;3545:7;3578:1;3573;:6;;3565:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3636:1;3632;:5;3625:12;;3487:158;;;;:::o;31153:433::-;31230:16;31249:5;;;;;;;;;;;:15;;;31273:4;31249:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31230:49;;31290:20;31343:8;31333:7;:18;31329:177;;;31386:5;;;;;;;;;;;:14;;;31401:3;31406:8;31386:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31368:47;;31329:177;;;31466:5;;;;;;;;;;;:14;;;31481:3;31486:7;31466:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31448:46;;31329:177;31524:15;31516:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31153:433;;;;:::o;3300:179::-;3358:7;3378:9;3394:1;3390;:5;3378:17;;3419:1;3414;:6;;3406:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3470:1;3463:8;;;3300:179;;;;:::o;5128:205::-;5229:96;5249:5;5279:27;;;5308:4;5314:2;5318:5;5256:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5229:19;:96::i;:::-;5128:205;;;;:::o;6330:333::-;6411:23;6437:69;6465:4;6437:69;;;;;;;;;;;;;;;;;6445:5;6437:27;;;;:69;;;;;:::i;:::-;6411:95;;6541:1;6521:10;:17;:21;6517:139;;;6578:10;6567:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6559:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6517:139;6330:333;;;:::o;851:196::-;954:12;986:53;1009:6;1017:4;1023:1;1026:12;986:22;:53::i;:::-;979:60;;851:196;;;;;:::o;1613:752::-;1743:12;1776:18;1787:6;1776:10;:18::i;:::-;1768:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1902:12;1916:23;1943:6;:11;;1963:8;1974:4;1943:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1901:78;;;;1994:7;1990:368;;;2025:10;2018:17;;;;;;1990:368;2092:1;2072:10;:17;:21;2068:279;;;2175:10;2169:17;2236:15;2223:10;2219:2;2215:19;2208:44;2123:148;2318:12;2311:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1613:752;;;;;;;:::o;83:174::-;143:4;160:12;214:7;202:20;194:28;;248:1;241:4;:8;234:15;;;83:174;;;:::o

Swarm Source

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