ETH Price: $3,357.93 (-0.72%)
Gas: 10 Gwei

Contract

0xE4584C42A69F92Ffaa92AF5E7D5ff5e942F3cb34
 
Transaction Hash
Method
Block
From
To
Value
Ship Milk201729252024-06-26 2:38:1114 hrs ago1719369491IN
0xE4584C42...942F3cb34
0 ETH0.000378134.56203275
Round Up Cows201681432024-06-25 10:36:5930 hrs ago1719311819IN
0xE4584C42...942F3cb34
0 ETH0.000141384.26069513
Ship Milk201681412024-06-25 10:36:3530 hrs ago1719311795IN
0xE4584C42...942F3cb34
0 ETH0.000345094.16337005
Sta Qe201651242024-06-25 0:29:4740 hrs ago1719275387IN
0xE4584C42...942F3cb34
0 ETH0.00105493.65412043
Ship Milk201645792024-06-24 22:39:2342 hrs ago1719268763IN
0xE4584C42...942F3cb34
0 ETH0.000351544.2412148
Qompound Lin Q201619762024-06-24 13:55:472 days ago1719237347IN
0xE4584C42...942F3cb34
0 ETH0.001917186.51682024
Qompound Lin Q201619222024-06-24 13:44:592 days ago1719236699IN
0xE4584C42...942F3cb34
0 ETH0.002001726.80418928
Qompound Lin Q201595732024-06-24 5:51:472 days ago1719208307IN
0xE4584C42...942F3cb34
0 ETH0.001083463.4774701
Ship Milk201564192024-06-23 19:16:592 days ago1719170219IN
0xE4584C42...942F3cb34
0 ETH0.000199482.34489912
Qompound Lin Q201546202024-06-23 13:14:593 days ago1719148499IN
0xE4584C42...942F3cb34
0 ETH0.000909433.09131964
Sta Qe201542402024-06-23 11:58:233 days ago1719143903IN
0xE4584C42...942F3cb34
0 ETH0.000770632.3631395
Round Up Cows201541832024-06-23 11:46:473 days ago1719143207IN
0xE4584C42...942F3cb34
0 ETH0.000089612.70041719
Ship Lin Qers Mi...201537382024-06-23 10:17:353 days ago1719137855IN
0xE4584C42...942F3cb34
0 ETH0.000248913.16308318
Ship Lin Qers Mi...201523652024-06-23 5:38:593 days ago1719121139IN
0xE4584C42...942F3cb34
0 ETH0.000158862.57932616
Ship Milk201517692024-06-23 3:38:593 days ago1719113939IN
0xE4584C42...942F3cb34
0 ETH0.000184652.22782286
Qompound Lin Q201459972024-06-22 8:17:114 days ago1719044231IN
0xE4584C42...942F3cb34
0 ETH0.000893733.03161794
Qompound Lin Q201447592024-06-22 4:07:354 days ago1719029255IN
0xE4584C42...942F3cb34
0 ETH0.000838222.84927742
Own Cows201447582024-06-22 4:07:234 days ago1719029243IN
0xE4584C42...942F3cb34
0 ETH0.000265222.82733818
Ship Milk201434562024-06-21 23:44:594 days ago1719013499IN
0xE4584C42...942F3cb34
0 ETH0.000268013.23346873
Ship Farm Mil Q201433442024-06-21 23:22:234 days ago1719012143IN
0xE4584C42...942F3cb34
0 ETH0.000546482.86789576
Transfer201433422024-06-21 23:21:594 days ago1719012119IN
0xE4584C42...942F3cb34
1 ETH0.000063763.02849713
Ship Milk201398842024-06-21 11:45:355 days ago1718970335IN
0xE4584C42...942F3cb34
0 ETH0.000302253.64656261
Qompound Lin Q201393572024-06-21 9:59:595 days ago1718963999IN
0xE4584C42...942F3cb34
0 ETH0.001530415.20214633
Ship Milk201359242024-06-20 22:29:475 days ago1718922587IN
0xE4584C42...942F3cb34
0 ETH0.00032723.94756218
Own Cows201359132024-06-20 22:27:355 days ago1718922455IN
0xE4584C42...942F3cb34
0 ETH0.000408494.3545878
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
201729252024-06-26 2:38:1114 hrs ago1719369491
0xE4584C42...942F3cb34
0.00913598 ETH
201681412024-06-25 10:36:3530 hrs ago1719311795
0xE4584C42...942F3cb34
0.00890559 ETH
201645792024-06-24 22:39:2342 hrs ago1719268763
0xE4584C42...942F3cb34
0.07419978 ETH
201619762024-06-24 13:55:472 days ago1719237347
0xE4584C42...942F3cb34
0.01584493 ETH
201619222024-06-24 13:44:592 days ago1719236699
0xE4584C42...942F3cb34
0.04295934 ETH
201595732024-06-24 5:51:472 days ago1719208307
0xE4584C42...942F3cb34
0.01586093 ETH
201564192024-06-23 19:16:592 days ago1719170219
0xE4584C42...942F3cb34
0.05985995 ETH
201546202024-06-23 13:14:593 days ago1719148499
0xE4584C42...942F3cb34
0.0223711 ETH
201517692024-06-23 3:38:593 days ago1719113939
0xE4584C42...942F3cb34
0.00359073 ETH
201459972024-06-22 8:17:114 days ago1719044231
0xE4584C42...942F3cb34
0.02264977 ETH
201447592024-06-22 4:07:354 days ago1719029255
0xE4584C42...942F3cb34
0.0250528 ETH
201434562024-06-21 23:44:594 days ago1719013499
0xE4584C42...942F3cb34
0.01555596 ETH
201398842024-06-21 11:45:355 days ago1718970335
0xE4584C42...942F3cb34
0.04529531 ETH
201393572024-06-21 9:59:595 days ago1718963999
0xE4584C42...942F3cb34
0.18604146 ETH
201359242024-06-20 22:29:475 days ago1718922587
0xE4584C42...942F3cb34
0.00675557 ETH
201326822024-06-20 11:36:476 days ago1718883407
0xE4584C42...942F3cb34
0.2017921 ETH
201320482024-06-20 9:28:596 days ago1718875739
0xE4584C42...942F3cb34
0.08975869 ETH
201263322024-06-19 14:18:237 days ago1718806703
0xE4584C42...942F3cb34
0.01603125 ETH
201244202024-06-19 7:53:597 days ago1718783639
0xE4584C42...942F3cb34
0.07903025 ETH
201194742024-06-18 15:16:238 days ago1718723783
0xE4584C42...942F3cb34
0.03367326 ETH
201180332024-06-18 10:25:118 days ago1718706311
0xE4584C42...942F3cb34
0.04496564 ETH
201158202024-06-18 2:57:238 days ago1718679443
0xE4584C42...942F3cb34
0.03413216 ETH
201146902024-06-17 23:09:478 days ago1718665787
0xE4584C42...942F3cb34
0.03991375 ETH
201146782024-06-17 23:07:238 days ago1718665643
0xE4584C42...942F3cb34
0.03880986 ETH
201141752024-06-17 21:25:478 days ago1718659547
0xE4584C42...942F3cb34
0.10462239 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MilQFarm

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-27
*/

// SPDX-License-Identifier: MIT

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @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 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.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @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.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * 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.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the 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 virtual onlyOwner {
        _transferOwnership(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 virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

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

// File: LinqStaQing.sol


//If you are here to forQ the code for this Qontract, good lucQ figuring out how to keep track of your MilQ

//With Love, LinQ & Aevum DeFi - Creating a New Paradigm in DeFi.

pragma solidity ^0.8.0;



interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface iLinq{
    function claim() external;
}

contract MilQFarm is Ownable, ReentrancyGuard {

    IERC20 private linQ;
    IERC20 private milQ;
    IERC20 private glinQ;
    iLinq public ILINQ;
    IUniswapV2Router02 private uniswapRouter;

    constructor(address _linqAddress, address _milQAddress, address _glinQAddress, address _oddysParlour, address _uniswapRouterAddress) {    
        linQ = IERC20(_linqAddress);
        ILINQ = iLinq(_linqAddress);
        milQ = IERC20(_milQAddress);
        glinQ = IERC20(_glinQAddress);
        oddysParlour = _oddysParlour;
        uniswapRouter = IUniswapV2Router02(_uniswapRouterAddress);
    }   
   
    bool private staQingPaused = true;

    address public oddysParlour;

    address private swapLinq = 0x3e34eabF5858a126cb583107E643080cEE20cA64;
   
    uint256 public daisys = 0; 

    uint256 public bessies = 0;

    uint256 public linQers = 0;

    uint256 public milQers = 0;

    uint256 public vitaliksMilkShipped = 0;

    uint256 public vitaliksMilkQompounded = 0;

    uint256 private daisysToOddysParlour = 15;

    uint256 private bessiesToOddysParlour = 15;

    uint256 public daisysMilkProduced = 0;

    uint256 public bessiesMilkProduced = 0;

    uint256 public daisysRentalTime;

    uint256 public bessiesRentalTime;

    uint256 public roundUpDaisysTime;

    uint256 public roundUpBessiesTime;

    uint256 public totalVitaliksMilkShipments = 0;

    uint256 public MilqShipments = 0;

    uint256 private minLinQ = 10000000000000000000;

    uint256 private minMilQ = 1000000000000000000;

    uint256 public totalMilQClaimed = 0;

    uint256 private highClaimThreshold = 5000000000000000000;

    event highClaim(address User, uint256 Amount);

    function sethighClaimThreshold(uint256 weiAmount) public onlyOwner {
        highClaimThreshold = weiAmount;
    }

    uint256 private lowBalanceThreshold = 10000000000000000000;

    event lowBalance(uint256 time, uint256 balance);

    function setLowBalanceThreshold(uint256 weiAmount) public onlyOwner {
        lowBalanceThreshold = weiAmount;
    }

    event rewardChange(uint256 index ,uint256 newBessies, uint256 newDaisys);

    event Qompound(address user, uint256 _ethAmount, uint256 boughtAmount);

    event newStaQe(address user, uint256 linq, uint256 milq);

    struct LinQerParlour {
        uint256 daisys;
        uint256 rentedDaisysSince;
        uint256 rentedDaisysTill;
        uint256 vitaliksMilkShipped;
        uint256 lastShippedVitaliksMilk;
        uint256 vitaliksMilkClaimable;
        uint256 QompoundedMilk;
        uint256 daisysOwnedSince;
        uint256 daisysOwnedTill;
        bool hasDaisys;
        bool ownsDaisys;
        bool owedMilk;
        uint256 shipmentsRecieved;
    }

    struct LpClaim {
        uint256 lastClaimed;
        uint256 totalClaimed;
    }

    struct MilQerParlour {
        uint256 bessies;
        uint256 rentedBessiesSince;
        uint256 rentedBessiesTill;
        uint256 milQClaimed;
        uint256 vitaliksMilkShipped;
        uint256 lastShippedVitaliksMilk;
        uint256 vitaliksMilkClaimable;
        uint256 bessiesOwnedSince;
        uint256 bessiesOwnedTill;
        bool hasBessies;
        bool ownsBessies;
        bool owedMilk;
        uint256 shipmentsRecieved;
    }

    struct MilQShipment {
        uint256 blockTimestamp;
        uint256 MilQShipped;
        uint256 totallinQStaked;
        uint256 rewardPerlinQ;
    }

    struct VitaliksMilkShipment {
        uint256 timestamp;
        uint256 daisysOutput;
        uint256 bessiesOutput;
    }

    mapping(address => LpClaim) public LpClaims;
    mapping(address => LinQerParlour) public LinQerParlours;
    mapping(address => MilQerParlour) public MilQerParlours;
    mapping(uint256 => MilQShipment) public MilQShipments;
    mapping(uint256 => VitaliksMilkShipment) public VitaliksMilkShipments;

    function rushOddyFee(uint256 _daisysToOddysParlour, uint256 _bessiesToOddysParlour) public onlyOwner{
        require(_daisysToOddysParlour + _bessiesToOddysParlour <= 60);        
        daisysToOddysParlour = _daisysToOddysParlour;
        bessiesToOddysParlour = _bessiesToOddysParlour;
    }

    function zeroFees() public onlyOwner {
        daisysToOddysParlour = 0;
        bessiesToOddysParlour = 0;
    }

    function setOddysParlour(address _oddysParlour) public onlyOwner {
        oddysParlour = _oddysParlour;
    }

    function setGlinQAddress(IERC20 _glinQ) public onlyOwner {
        glinQ = _glinQ;
    }   

    function prepShipment(uint256 _daisysOutput, uint256 _bessiesOutput) public onlyOwner {
        totalVitaliksMilkShipments ++;
        uint256 index = totalVitaliksMilkShipments;
        VitaliksMilkShipments[index] = VitaliksMilkShipment(block.timestamp, _daisysOutput, _bessiesOutput);
        emit rewardChange(index, _daisysOutput, _bessiesOutput);
    }

    function getprepShipment(uint256 index) public view returns (uint256, uint256, uint256) {
        require(index < totalVitaliksMilkShipments);
        VitaliksMilkShipment memory shipment = VitaliksMilkShipments[index];
        return (shipment.timestamp, shipment.daisysOutput, shipment.bessiesOutput);
    }

    function pauseStaQing(bool _state) public onlyOwner {
        staQingPaused = _state;
    }

    function removeVitaliksMilk(uint256 amount) external onlyOwner {
        require(address(this).balance >= amount);
        payable(oddysParlour).transfer(amount);
    }

    function withdrawERC20(address _ERC20, uint256 _Amt) external onlyOwner {
        IERC20(_ERC20).transfer(msg.sender, _Amt);
    }

    function changeDaisysRentalTime(uint256 _daisysRentalTime) external onlyOwner {
        daisysRentalTime = _daisysRentalTime;
    }

    function changeBessiesRentalTime(uint256 _bessiesRentalTime) external onlyOwner {
        bessiesRentalTime = _bessiesRentalTime;
    }

    function changeRoundUpDaisysTime(uint256 _roundUpDaisysTime) external onlyOwner {
        roundUpDaisysTime = _roundUpDaisysTime;
    }

    function changeRoundUpBessiesTime(uint256 _roundUpBessiesTime) external onlyOwner {
        roundUpBessiesTime = _roundUpBessiesTime;
    }

    function changeMinLinQ(uint256 _minLinQ) external onlyOwner {
        minLinQ = _minLinQ;
    }

    function changeMinMilQ(uint256 _minMilQ) external onlyOwner {
        minMilQ = _minMilQ;
    }

    function staQe(uint256 _amountLinQ, uint256 _amountMilQ, uint256 _token) external {
        require(!staQingPaused);
        require(_token == 0 || _token == 1);

        if (LinQerParlours[msg.sender].hasDaisys == true || MilQerParlours[msg.sender].hasBessies == true ) {
            howMuchMilkV3();
        }

        if (_token == 0) {
            require(_amountLinQ >= minLinQ);
            
            if (LinQerParlours[msg.sender].hasDaisys == true) {
                uint256 milQToClaim = checkEstMilQRewards(msg.sender);
                
                if (milQToClaim > 0) {
                    shipLinQersMilQ();
                }
                
                getMoreDaisys(_amountLinQ);
            }        

            if (LinQerParlours[msg.sender].hasDaisys == false){
                firstStaQeLinQ(_amountLinQ);
            }      
        }

        if (_token == 1) { 
            require(_amountMilQ >= minMilQ);
            if (MilQerParlours[msg.sender].hasBessies == true){
                getMoreBessies(_amountMilQ);
            } 

            if (MilQerParlours[msg.sender].hasBessies == false){
                firstStaQeMilQ(_amountMilQ);
            }
        }
        emit newStaQe(msg.sender,_amountLinQ, _amountMilQ);
    }

    function getMoreDaisys(uint256 amountLinQ) internal {
        
        linQ.approve(address(this), amountLinQ);
        linQ.transferFrom(msg.sender, address(this), amountLinQ);
        
        if (LinQerParlours[msg.sender].ownsDaisys == true) {
            glinQ.transfer(msg.sender, amountLinQ);
        } 

        LinQerParlours[msg.sender].daisys += amountLinQ;
        daisys += amountLinQ; 
    }

    function getMoreBessies(uint256 amountMilQ) internal {
        milQ.approve(address(this), amountMilQ);
        milQ.transferFrom(msg.sender, address(this), amountMilQ);
        MilQerParlours[msg.sender].bessies += amountMilQ;
        bessies += amountMilQ;    
    }
   
    function firstStaQeLinQ(uint256 amountLinQ) internal {
        linQ.approve(address(this), amountLinQ);
        linQ.transferFrom(msg.sender, address(this), amountLinQ);
        LinQerParlours[msg.sender].daisys += amountLinQ;
        LinQerParlours[msg.sender].rentedDaisysSince = block.timestamp;
        LinQerParlours[msg.sender].rentedDaisysTill = block.timestamp + daisysRentalTime; 
        LinQerParlours[msg.sender].daisysOwnedSince = 0;
        LinQerParlours[msg.sender].daisysOwnedTill = 32503680000;
        LinQerParlours[msg.sender].hasDaisys = true;
        LinQerParlours[msg.sender].ownsDaisys = false;
        LinQerParlours[msg.sender].vitaliksMilkShipped = 0;
        LinQerParlours[msg.sender].QompoundedMilk = 0;
        LinQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp;
        LinQerParlours[msg.sender].shipmentsRecieved = totalVitaliksMilkShipments;
        LinQerParlours[msg.sender].vitaliksMilkClaimable = 0;
        LinQerParlours[msg.sender].owedMilk = true;
        LpClaims[msg.sender].lastClaimed = totalMilQClaimed;
        LpClaims[msg.sender].totalClaimed = 0;
        daisys += amountLinQ;
        linQers ++;
    }

    function firstStaQeMilQ(uint256 amountMilQ) internal {
        milQ.approve(address(this), amountMilQ);
        milQ.transferFrom(msg.sender, address(this), amountMilQ);
        MilQerParlours[msg.sender].bessies += amountMilQ;
        MilQerParlours[msg.sender].rentedBessiesSince = block.timestamp;
        MilQerParlours[msg.sender].rentedBessiesTill = block.timestamp + bessiesRentalTime;
        MilQerParlours[msg.sender].hasBessies = true;
        MilQerParlours[msg.sender].bessiesOwnedSince = 0;
        MilQerParlours[msg.sender].bessiesOwnedTill = 32503680000;
        MilQerParlours[msg.sender].ownsBessies = false;
        MilQerParlours[msg.sender].vitaliksMilkShipped = 0;
        MilQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp;
        MilQerParlours[msg.sender].shipmentsRecieved = totalVitaliksMilkShipments;
        MilQerParlours[msg.sender].milQClaimed = 0;
        MilQerParlours[msg.sender].vitaliksMilkClaimable = 0;
        MilQerParlours[msg.sender].owedMilk = true;
        bessies += amountMilQ;
        milQers ++;
    }

    function ownCows(uint256 _cow) external {
        require(!staQingPaused);
        require( _cow == 0 || _cow == 1);

        if (_cow == 0) {
            require(LinQerParlours[msg.sender].ownsDaisys == false);
            require(LinQerParlours[msg.sender].hasDaisys == true);
            require(LinQerParlours[msg.sender].rentedDaisysTill < block.timestamp);
            require(glinQ.transfer(msg.sender, LinQerParlours[msg.sender].daisys));
            LinQerParlours[msg.sender].ownsDaisys = true;
            LinQerParlours[msg.sender].daisysOwnedSince = LinQerParlours[msg.sender].rentedDaisysTill;
            LinQerParlours[msg.sender].owedMilk = true;
        }    

        if (_cow == 1) {
            require(MilQerParlours[msg.sender].ownsBessies == false);
            require(MilQerParlours[msg.sender].hasBessies == true);
            require(MilQerParlours[msg.sender].rentedBessiesTill < block.timestamp);
            MilQerParlours[msg.sender].ownsBessies = true;
            MilQerParlours[msg.sender].bessiesOwnedSince = MilQerParlours[msg.sender].rentedBessiesTill;
            MilQerParlours[msg.sender].owedMilk = true;
        }
    }

    function roundUpCows(uint256 _cow) external {
        require(!staQingPaused);
        require(_cow == 0 && LinQerParlours[msg.sender].ownsDaisys == true || _cow == 1 && MilQerParlours[msg.sender].ownsBessies == true);

            if (_cow == 0) {
                uint256 newTimestamp = block.timestamp + roundUpDaisysTime; //make this time variable    
                LinQerParlours[msg.sender].daisysOwnedTill = newTimestamp;
            }

            if (_cow == 1) {
                uint256 newTimestamp = block.timestamp + roundUpBessiesTime; 
                MilQerParlours[msg.sender].bessiesOwnedTill = newTimestamp;
            }
    }

    function unstaQe(uint256 _amtLinQ, uint256 _amtMilQ, uint256 _token) external { 
        require(!staQingPaused); 
        require(_token == 0 || _token == 1); 
        uint256 totalMilk = viewHowMuchMilk(msg.sender); 
 
        if (totalMilk > 0) {   
            shipMilk(); 
        } 
 
        if (_token == 0) { 
            require(_amtLinQ > 0); 
            require(LinQerParlours[msg.sender].daisys >= _amtLinQ);
            require(LinQerParlours[msg.sender].hasDaisys == true); 
            unstaQeLinQ(_amtLinQ); 
        } 
 
        if (_token == 1) { 
            require(_amtMilQ > 0); 
            require(MilQerParlours[msg.sender].bessies >= _amtMilQ);
            require(MilQerParlours[msg.sender].hasBessies == true); 
            unstaQeMilQ(_amtMilQ); 
        }     
    }

    function unstaQeLinQ(uint256 amtLinQ) internal {        
        if (LinQerParlours[msg.sender].ownsDaisys == true) {
            glinQ.approve(address(this), amtLinQ);
            glinQ.transferFrom(msg.sender, address(this), amtLinQ);
        }

        uint256 amtToClaim = checkEstMilQRewards(msg.sender);
        
        if (amtToClaim > 0) {
            shipLinQersMilQ();
        }

        uint256 transferLinQ;
        uint256 dToOddysParlour;

            if (LinQerParlours[msg.sender].daisysOwnedTill < block.timestamp && LinQerParlours[msg.sender].ownsDaisys == true){
                linQ.transfer(msg.sender, amtLinQ);
                LinQerParlours[msg.sender].daisys -= amtLinQ; 
            }

            if (LinQerParlours[msg.sender].rentedDaisysTill < block.timestamp && LinQerParlours[msg.sender].ownsDaisys == false){
                linQ.transfer(msg.sender, amtLinQ);
                LinQerParlours[msg.sender].daisys -= amtLinQ; 
            }

            if (LinQerParlours[msg.sender].daisysOwnedTill > block.timestamp && LinQerParlours[msg.sender].ownsDaisys == true){
                dToOddysParlour = (amtLinQ * daisysToOddysParlour / 100);
                transferLinQ = (amtLinQ - dToOddysParlour);
                linQ.transfer(msg.sender, transferLinQ);
                linQ.transfer(oddysParlour, dToOddysParlour);
                LinQerParlours[msg.sender].daisys -= amtLinQ;          
            }

            if (LinQerParlours[msg.sender].rentedDaisysTill > block.timestamp && LinQerParlours[msg.sender].ownsDaisys == false){
                dToOddysParlour = (amtLinQ * daisysToOddysParlour / 100);
                transferLinQ = (amtLinQ - dToOddysParlour);
                linQ.transfer(msg.sender, transferLinQ);
                linQ.transfer(oddysParlour, dToOddysParlour);
                LinQerParlours[msg.sender].daisys -= amtLinQ;  
            }   

            if (LinQerParlours[msg.sender].daisys < minLinQ) {
                LinQerParlours[msg.sender].daisys = 0;
                LinQerParlours[msg.sender].rentedDaisysSince = 0;
                LinQerParlours[msg.sender].rentedDaisysTill = 0;
                LinQerParlours[msg.sender].vitaliksMilkShipped = 0;
                LinQerParlours[msg.sender].lastShippedVitaliksMilk = 0;
                LinQerParlours[msg.sender].vitaliksMilkClaimable = 0;
                LinQerParlours[msg.sender].QompoundedMilk = 0;
                LinQerParlours[msg.sender].daisysOwnedSince = 0;
                LinQerParlours[msg.sender].daisysOwnedTill = 0;
                LinQerParlours[msg.sender].hasDaisys = false;
                LinQerParlours[msg.sender].ownsDaisys = false;
                LinQerParlours[msg.sender].owedMilk = false;
                LinQerParlours[msg.sender].shipmentsRecieved = 0;
                linQers --;
            }       
    }

    function unstaQeMilQ(uint256 amtMilQ) internal {
        uint256 transferMilQ;
        uint256 bToOddysParlour;

            if (MilQerParlours[msg.sender].bessiesOwnedTill <= block.timestamp && MilQerParlours[msg.sender].ownsBessies == true){
                transferMilQ = amtMilQ;
                milQ.transfer(msg.sender, transferMilQ);
                MilQerParlours[msg.sender].bessies -= amtMilQ;
            }

            if (MilQerParlours[msg.sender].rentedBessiesTill <= block.timestamp && MilQerParlours[msg.sender].ownsBessies == false){
                transferMilQ = amtMilQ;
                milQ.transfer(msg.sender, transferMilQ);
                MilQerParlours[msg.sender].bessies -= amtMilQ;
            }

            if (MilQerParlours[msg.sender].bessiesOwnedTill > block.timestamp && MilQerParlours[msg.sender].ownsBessies == true){
                bToOddysParlour = (amtMilQ * bessiesToOddysParlour / 100);
                transferMilQ = (amtMilQ - bToOddysParlour);
                milQ.transfer(msg.sender, transferMilQ);
                milQ.transfer(oddysParlour, bToOddysParlour);
                MilQerParlours[msg.sender].bessies -= amtMilQ;
            }

            if (MilQerParlours[msg.sender].rentedBessiesTill > block.timestamp && MilQerParlours[msg.sender].ownsBessies == false){
                bToOddysParlour = (amtMilQ * bessiesToOddysParlour / 100);
                transferMilQ = (amtMilQ - bToOddysParlour);
                milQ.transfer(msg.sender, transferMilQ);
                milQ.transfer(oddysParlour, bToOddysParlour);
                MilQerParlours[msg.sender].bessies -= amtMilQ;
            }

            if (MilQerParlours[msg.sender].bessies < minMilQ) {
                MilQerParlours[msg.sender].bessies = 0;
                MilQerParlours[msg.sender].rentedBessiesSince = 0;
                MilQerParlours[msg.sender].rentedBessiesTill = 0;
                MilQerParlours[msg.sender].milQClaimed = 0;
                MilQerParlours[msg.sender].vitaliksMilkShipped = 0;
                MilQerParlours[msg.sender].lastShippedVitaliksMilk = 0;
                MilQerParlours[msg.sender].vitaliksMilkClaimable = 0;
                MilQerParlours[msg.sender].bessiesOwnedSince = 0;
                MilQerParlours[msg.sender].bessiesOwnedTill = 0;
                MilQerParlours[msg.sender].hasBessies = false;
                MilQerParlours[msg.sender].ownsBessies = false;
                MilQerParlours[msg.sender].owedMilk = false;
                MilQerParlours[msg.sender].shipmentsRecieved = 0;
                milQers --;
            }
    }

    function howMuchMilkV3() internal {
        uint256 milkFromDaisys = 0;
        uint256 milkFromBessies = 0;
        if (LinQerParlours[msg.sender].ownsDaisys == true && LinQerParlours[msg.sender].daisysOwnedTill > block.timestamp) {
            if (LinQerParlours[msg.sender].shipmentsRecieved != totalVitaliksMilkShipments) {
                for (uint256 i = LinQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) {
                    milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - LinQerParlours[msg.sender].lastShippedVitaliksMilk);
                    LinQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp;
                    LinQerParlours[msg.sender].shipmentsRecieved ++;
                }
            }
            
            if (LinQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){
                milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (block.timestamp - LinQerParlours[msg.sender].lastShippedVitaliksMilk);
                LinQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp;
            }
        }

        if (LinQerParlours[msg.sender].ownsDaisys == false && LinQerParlours[msg.sender].hasDaisys == true && LinQerParlours[msg.sender].rentedDaisysTill > block.timestamp) {
            if (LinQerParlours[msg.sender].shipmentsRecieved != totalVitaliksMilkShipments) {
                for (uint256 i = LinQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) {
                    milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - LinQerParlours[msg.sender].lastShippedVitaliksMilk);
                    LinQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp;
                    LinQerParlours[msg.sender].shipmentsRecieved ++;
                }
            }
            
            if (LinQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){
                milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (block.timestamp - LinQerParlours[msg.sender].lastShippedVitaliksMilk);
                LinQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp;
            }
        }

        if (LinQerParlours[msg.sender].ownsDaisys == true && LinQerParlours[msg.sender].daisysOwnedTill <= block.timestamp && LinQerParlours[msg.sender].owedMilk == true) {
            if(LinQerParlours[msg.sender].shipmentsRecieved < totalVitaliksMilkShipments) { 
                for (uint256 i = LinQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) {

                    if (LinQerParlours[msg.sender].daisysOwnedTill > VitaliksMilkShipments[i+1].timestamp) {
                        milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - LinQerParlours[msg.sender].lastShippedVitaliksMilk);
                        LinQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp;
                        LinQerParlours[msg.sender].shipmentsRecieved ++;
                    }
            
                    if (LinQerParlours[msg.sender].daisysOwnedTill <= VitaliksMilkShipments[i+1].timestamp) {
                        uint256 time = LinQerParlours[msg.sender].daisysOwnedTill - LinQerParlours[msg.sender].lastShippedVitaliksMilk;
                        milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * time;
                        LinQerParlours[msg.sender].lastShippedVitaliksMilk = LinQerParlours[msg.sender].daisysOwnedTill;
                        LinQerParlours[msg.sender].owedMilk = false;
                        break;   
                    }   
                }
            }

            if (LinQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){
                milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (LinQerParlours[msg.sender].daisysOwnedTill - LinQerParlours[msg.sender].lastShippedVitaliksMilk);
                LinQerParlours[msg.sender].lastShippedVitaliksMilk = LinQerParlours[msg.sender].daisysOwnedTill;
                LinQerParlours[msg.sender].owedMilk = false;
            } 
        }

        if (LinQerParlours[msg.sender].ownsDaisys == false && LinQerParlours[msg.sender].hasDaisys == true && LinQerParlours[msg.sender].rentedDaisysTill <= block.timestamp && LinQerParlours[msg.sender].owedMilk == true) {
            if(LinQerParlours[msg.sender].shipmentsRecieved < totalVitaliksMilkShipments){
                for (uint256 i = LinQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) {
                    if (LinQerParlours[msg.sender].rentedDaisysTill > VitaliksMilkShipments[i+1].timestamp) {
                        milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - LinQerParlours[msg.sender].lastShippedVitaliksMilk);
                        LinQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp;
                        LinQerParlours[msg.sender].shipmentsRecieved ++;
                    }
         
                    if (LinQerParlours[msg.sender].rentedDaisysTill <= VitaliksMilkShipments[i+1].timestamp && LinQerParlours[msg.sender].owedMilk == true){
                        uint256 time = LinQerParlours[msg.sender].rentedDaisysTill - LinQerParlours[msg.sender].lastShippedVitaliksMilk;
                        milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * time;
                        LinQerParlours[msg.sender].lastShippedVitaliksMilk = LinQerParlours[msg.sender].rentedDaisysTill;
                        LinQerParlours[msg.sender].owedMilk = false;
                        break;   
                    }   
                }  
            }

            if (LinQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){
                milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (LinQerParlours[msg.sender].rentedDaisysTill - LinQerParlours[msg.sender].lastShippedVitaliksMilk);
                LinQerParlours[msg.sender].lastShippedVitaliksMilk = LinQerParlours[msg.sender].rentedDaisysTill;
                LinQerParlours[msg.sender].owedMilk = false;
            }       
        }

        if (MilQerParlours[msg.sender].ownsBessies == true && MilQerParlours[msg.sender].bessiesOwnedTill > block.timestamp) {
            if (MilQerParlours[msg.sender].shipmentsRecieved != totalVitaliksMilkShipments) {
                for (uint256 i = MilQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) {
                    milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - MilQerParlours[msg.sender].lastShippedVitaliksMilk);
                    MilQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp;
                    MilQerParlours[msg.sender].shipmentsRecieved ++;
                }
            }

            if (MilQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments) {
                milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (block.timestamp - MilQerParlours[msg.sender].lastShippedVitaliksMilk);
                MilQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp;
            }
        }

        if (MilQerParlours[msg.sender].ownsBessies == false && MilQerParlours[msg.sender].hasBessies == true && MilQerParlours[msg.sender].rentedBessiesTill > block.timestamp && MilQerParlours[msg.sender].owedMilk == true) {
            if (MilQerParlours[msg.sender].shipmentsRecieved != totalVitaliksMilkShipments) {
                for (uint256 i = MilQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) {
                    milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - MilQerParlours[msg.sender].lastShippedVitaliksMilk);
                    MilQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp;
                    MilQerParlours[msg.sender].shipmentsRecieved ++;
                }
            }

            if (MilQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){
                milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (block.timestamp - MilQerParlours[msg.sender].lastShippedVitaliksMilk);
                MilQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp;
            }
        }
        
        if (MilQerParlours[msg.sender].ownsBessies == true && MilQerParlours[msg.sender].bessiesOwnedTill <= block.timestamp && MilQerParlours[msg.sender].owedMilk == true) { 
            if (MilQerParlours[msg.sender].shipmentsRecieved < totalVitaliksMilkShipments) {
                for (uint256 i = MilQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) {
                    if (MilQerParlours[msg.sender].bessiesOwnedTill > VitaliksMilkShipments[i+1].timestamp) {
                        milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - MilQerParlours[msg.sender].lastShippedVitaliksMilk);
                        MilQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp;
                        MilQerParlours[msg.sender].shipmentsRecieved ++;
                    }
            
                    if (MilQerParlours[msg.sender].bessiesOwnedTill <= VitaliksMilkShipments[i+1].timestamp){
                        uint256 time = MilQerParlours[msg.sender].bessiesOwnedTill - MilQerParlours[msg.sender].lastShippedVitaliksMilk;
                        milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * time;
                        MilQerParlours[msg.sender].lastShippedVitaliksMilk = MilQerParlours[msg.sender].bessiesOwnedTill;
                        MilQerParlours[msg.sender].owedMilk = false;
                        break;   
                    }   
                }
            }

            if (MilQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){
                milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (MilQerParlours[msg.sender].bessiesOwnedTill - MilQerParlours[msg.sender].lastShippedVitaliksMilk);
                MilQerParlours[msg.sender].lastShippedVitaliksMilk = MilQerParlours[msg.sender].bessiesOwnedTill;
                MilQerParlours[msg.sender].owedMilk = false;
            }    
        }
  
        if (MilQerParlours[msg.sender].ownsBessies == false && MilQerParlours[msg.sender].hasBessies == true && MilQerParlours[msg.sender].rentedBessiesTill <= block.timestamp  && MilQerParlours[msg.sender].owedMilk == true) {
            if(MilQerParlours[msg.sender].shipmentsRecieved != totalVitaliksMilkShipments){
                for (uint256 i = MilQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) {
                    if (MilQerParlours[msg.sender].rentedBessiesTill > VitaliksMilkShipments[i+1].timestamp) {
                        milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - MilQerParlours[msg.sender].lastShippedVitaliksMilk);
                        MilQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp;
                        MilQerParlours[msg.sender].shipmentsRecieved ++;
                    }
        
                    if (MilQerParlours[msg.sender].rentedBessiesTill <= VitaliksMilkShipments[i+1].timestamp){
                        uint256 time = MilQerParlours[msg.sender].rentedBessiesTill - MilQerParlours[msg.sender].lastShippedVitaliksMilk;
                        milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * time;
                        MilQerParlours[msg.sender].lastShippedVitaliksMilk = MilQerParlours[msg.sender].rentedBessiesTill;
                        MilQerParlours[msg.sender].owedMilk = false;
                        break;   
                    }   
                }  
            }

            if (MilQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){
                milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (MilQerParlours[msg.sender].rentedBessiesTill - MilQerParlours[msg.sender].lastShippedVitaliksMilk);
                MilQerParlours[msg.sender].lastShippedVitaliksMilk = MilQerParlours[msg.sender].rentedBessiesTill;
                MilQerParlours[msg.sender].owedMilk = false;
            }       
        }

        LinQerParlours[msg.sender].vitaliksMilkClaimable += milkFromDaisys;
        MilQerParlours[msg.sender].vitaliksMilkClaimable += milkFromBessies;
        daisysMilkProduced += milkFromDaisys;
        bessiesMilkProduced += milkFromBessies;      
    }

    function viewHowMuchMilk(address user) public view returns (uint256 Total) {
        uint256 daisysShipped = LinQerParlours[user].shipmentsRecieved;
        uint256 daisysTimeShipped = LinQerParlours[user].lastShippedVitaliksMilk;
        uint256 bessiesShipped = MilQerParlours[user].shipmentsRecieved;
        uint256 bessiesTimeShipped = MilQerParlours[user].lastShippedVitaliksMilk;
        uint256 milkFromDaisys = 0;
        uint256 milkFromBessies = 0;

        if (LinQerParlours[user].ownsDaisys == true && LinQerParlours[user].daisysOwnedTill > block.timestamp) {
            if (daisysShipped != totalVitaliksMilkShipments) {
                for (uint256 i = daisysShipped; i < totalVitaliksMilkShipments; i++) {
                    milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - daisysTimeShipped);
                    daisysTimeShipped = VitaliksMilkShipments[i+1].timestamp;
                    daisysShipped ++;
                }
            }
            
            if (daisysShipped == totalVitaliksMilkShipments){
                milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (block.timestamp - daisysTimeShipped);
            }
        }

        if (LinQerParlours[user].ownsDaisys == false && LinQerParlours[user].hasDaisys == true && LinQerParlours[user].rentedDaisysTill > block.timestamp) {
            if (daisysShipped != totalVitaliksMilkShipments) {
                for (uint256 i = daisysShipped; i < totalVitaliksMilkShipments; i++) {
                    milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - daisysTimeShipped);
                    daisysTimeShipped = VitaliksMilkShipments[i+1].timestamp;
                    daisysShipped ++;
                }
            }
            
            if (daisysShipped == totalVitaliksMilkShipments){
                milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (block.timestamp - daisysTimeShipped);
            }
        }

        if (LinQerParlours[user].ownsDaisys == true && LinQerParlours[user].daisysOwnedTill <= block.timestamp && LinQerParlours[user].owedMilk == true) {
            if(daisysShipped < totalVitaliksMilkShipments) { 
                for (uint256 i = daisysShipped; i < totalVitaliksMilkShipments; i++) {

                    if (LinQerParlours[user].daisysOwnedTill > VitaliksMilkShipments[i+1].timestamp) {
                        milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - daisysTimeShipped);
                        daisysTimeShipped = VitaliksMilkShipments[i+1].timestamp;
                        daisysShipped ++;
                    }
            
                    if (LinQerParlours[user].daisysOwnedTill <= VitaliksMilkShipments[i+1].timestamp) {
                        uint256 time = LinQerParlours[user].daisysOwnedTill - daisysTimeShipped;
                        milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * time;
                        break;   
                    }   
                }
            }

            if (daisysShipped == totalVitaliksMilkShipments){
                milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (LinQerParlours[user].daisysOwnedTill - daisysTimeShipped);
            } 
        }

        if (LinQerParlours[user].ownsDaisys == false && LinQerParlours[user].hasDaisys == true && LinQerParlours[user].rentedDaisysTill <= block.timestamp && LinQerParlours[user].owedMilk == true) {
            if(daisysShipped < totalVitaliksMilkShipments){
                for (uint256 i = daisysShipped; i < totalVitaliksMilkShipments; i++) {
                    if (LinQerParlours[user].rentedDaisysTill > VitaliksMilkShipments[i+1].timestamp) {
                        milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - daisysTimeShipped);
                        daisysTimeShipped = VitaliksMilkShipments[i+1].timestamp;
                        daisysShipped ++;
                    }
         
                    if (LinQerParlours[user].rentedDaisysTill <= VitaliksMilkShipments[i+1].timestamp && LinQerParlours[user].owedMilk == true){
                        uint256 time = LinQerParlours[user].rentedDaisysTill - daisysTimeShipped;
                        milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * time;
                        break;   
                    }   
                }  
            }

            if (daisysShipped == totalVitaliksMilkShipments){
                milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (LinQerParlours[user].rentedDaisysTill - daisysTimeShipped);
            }       
        }

        if (MilQerParlours[user].ownsBessies == true && MilQerParlours[user].bessiesOwnedTill > block.timestamp) {
            if (bessiesShipped != totalVitaliksMilkShipments) {
                for (uint256 i = bessiesShipped; i < totalVitaliksMilkShipments; i++) {
                    milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - bessiesTimeShipped);
                    bessiesTimeShipped = VitaliksMilkShipments[i+1].timestamp;
                    bessiesShipped ++;
                }
            }

            if (bessiesShipped == totalVitaliksMilkShipments) {
                milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (block.timestamp - bessiesTimeShipped);
            }
        }

        if (MilQerParlours[user].ownsBessies == false && MilQerParlours[user].hasBessies == true && MilQerParlours[user].rentedBessiesTill > block.timestamp && MilQerParlours[user].owedMilk == true) {
            if (bessiesShipped != totalVitaliksMilkShipments) {
                for (uint256 i = bessiesShipped; i < totalVitaliksMilkShipments; i++) {
                    milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - bessiesTimeShipped);
                    bessiesTimeShipped = VitaliksMilkShipments[i+1].timestamp;
                    bessiesShipped ++;
                }
            }

            if (bessiesShipped == totalVitaliksMilkShipments){
                milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (block.timestamp - bessiesTimeShipped);
            }

        }

        if (MilQerParlours[user].ownsBessies == true && MilQerParlours[user].bessiesOwnedTill <= block.timestamp) { 
            if (bessiesShipped != totalVitaliksMilkShipments) {
                for (uint256 i = bessiesShipped; i < totalVitaliksMilkShipments; i++) {
                    if (MilQerParlours[user].bessiesOwnedTill > VitaliksMilkShipments[i+1].timestamp) {
                        milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - bessiesTimeShipped);
                        bessiesTimeShipped = VitaliksMilkShipments[i+1].timestamp;
                        bessiesShipped ++;
                    }
            
                    if (MilQerParlours[user].bessiesOwnedTill <= VitaliksMilkShipments[i+1].timestamp && MilQerParlours[user].owedMilk == true){
                        uint256 time = MilQerParlours[user].bessiesOwnedTill - bessiesTimeShipped;
                        milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * time;
                        break;   
                    }   
                }
            }

            if (bessiesShipped == totalVitaliksMilkShipments){
                milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (MilQerParlours[user].bessiesOwnedTill - bessiesTimeShipped);
            }    
        }

        if (MilQerParlours[user].ownsBessies == false && MilQerParlours[user].hasBessies == true && MilQerParlours[user].rentedBessiesTill <= block.timestamp) {
            if(bessiesShipped != totalVitaliksMilkShipments){
                for (uint256 i = bessiesShipped; i < totalVitaliksMilkShipments; i++) {
                    if (MilQerParlours[user].rentedBessiesTill > VitaliksMilkShipments[i+1].timestamp) {
                        milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - bessiesTimeShipped);
                        bessiesTimeShipped = VitaliksMilkShipments[i+1].timestamp;
                        bessiesShipped ++;
                    }
        
                    if (MilQerParlours[user].rentedBessiesTill <= VitaliksMilkShipments[i+1].timestamp && MilQerParlours[user].owedMilk == true){
                        uint256 time = MilQerParlours[user].rentedBessiesTill - bessiesTimeShipped;
                        milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * time;
                        break;   
                    }   
                }  
            }

            if (bessiesShipped == totalVitaliksMilkShipments){
                milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (MilQerParlours[user].rentedBessiesTill - bessiesTimeShipped);
            }       
        }

        Total = milkFromDaisys + milkFromBessies; 
        return (Total);       
    }

    function QompoundLinQ(uint256 slippage) external {  
        if (LinQerParlours[msg.sender].hasDaisys == true){
            shipLinQersMilQ();
        }

        howMuchMilkV3();  
  
        uint256 linqAmt = LinQerParlours[msg.sender].vitaliksMilkClaimable; 
        uint256 milqAmt = MilQerParlours[msg.sender].vitaliksMilkClaimable; 
        uint256 _ethAmount = linqAmt + milqAmt; 
  
        address[] memory path = new address[](2);  
        path[0] = uniswapRouter.WETH();  
        path[1] = swapLinq;  
  
        uint256[] memory amountsOut = uniswapRouter.getAmountsOut(_ethAmount, path);  
        uint256 minLinQAmount = amountsOut[1];   
  
      
        uint256 beforeBalance = IERC20(linQ).balanceOf(address(this));  
        uint256 amountSlip = (minLinQAmount * slippage) / 100;  
        uint256 amountAfterSlip = minLinQAmount - amountSlip;  
  
      
        uniswapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: _ethAmount}(  
            amountAfterSlip,  
            path,  
            address(this),  
            block.timestamp  
        );  
  
        uint256 afterBalance = IERC20(linQ).balanceOf(address(this));  
  
        uint256 boughtAmount = afterBalance - beforeBalance;

        if (LinQerParlours[msg.sender].ownsDaisys == true) {
            glinQ.transfer(msg.sender, boughtAmount);
        }

        if (LinQerParlours[msg.sender].hasDaisys == true) { 
            LinQerParlours[msg.sender].daisys += boughtAmount;  
            LinQerParlours[msg.sender].QompoundedMilk += _ethAmount;  
            LinQerParlours[msg.sender].vitaliksMilkClaimable = 0; 
            MilQerParlours[msg.sender].vitaliksMilkClaimable = 0;
        }

        if (LinQerParlours[msg.sender].hasDaisys == false) {
            LinQerParlours[msg.sender].daisys += boughtAmount;
            LinQerParlours[msg.sender].rentedDaisysSince = block.timestamp;
            LinQerParlours[msg.sender].rentedDaisysTill = block.timestamp + daisysRentalTime; 
            LinQerParlours[msg.sender].daisysOwnedSince = 0;
            LinQerParlours[msg.sender].daisysOwnedTill = 32503680000;
            LinQerParlours[msg.sender].hasDaisys = true;
            LinQerParlours[msg.sender].ownsDaisys = false;
            LinQerParlours[msg.sender].vitaliksMilkShipped = 0;
            LinQerParlours[msg.sender].QompoundedMilk = 0;
            LinQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp;
            LinQerParlours[msg.sender].shipmentsRecieved = totalVitaliksMilkShipments;
            LinQerParlours[msg.sender].vitaliksMilkClaimable = 0;
            LinQerParlours[msg.sender].owedMilk = true;
            LpClaims[msg.sender].lastClaimed = totalMilQClaimed;
            LpClaims[msg.sender].totalClaimed = 0;
            MilQerParlours[msg.sender].vitaliksMilkClaimable = 0;
            daisys += boughtAmount;
            linQers ++;
        }

        daisys += boughtAmount;
        vitaliksMilkQompounded += _ethAmount;
        emit Qompound(msg.sender, _ethAmount, boughtAmount);
    }
        
    function shipMilk() public {   
          
        howMuchMilkV3();

        uint256 linq = LinQerParlours[msg.sender].vitaliksMilkClaimable;
        uint256 lp = MilQerParlours[msg.sender].vitaliksMilkClaimable;
        uint256 amount = linq + lp;

        require(address(this).balance >= amount);

        payable(msg.sender).transfer(amount);

        LinQerParlours[msg.sender].vitaliksMilkShipped += linq;
        MilQerParlours[msg.sender].vitaliksMilkShipped += lp;
        LinQerParlours[msg.sender].vitaliksMilkClaimable = 0;
        MilQerParlours[msg.sender].vitaliksMilkClaimable = 0;
        vitaliksMilkShipped += amount;

        if (amount > highClaimThreshold){
            emit highClaim(msg.sender,amount);
        }

        if(address(this).balance < lowBalanceThreshold){
            emit lowBalance(block.timestamp,address(this).balance);
        }    
    }

    function shipFarmMilQ() external onlyOwner {

        uint256 beforeBalance = IERC20(milQ).balanceOf(address(this)); 

        ILINQ.claim();

        uint256 afterBalance = IERC20(milQ).balanceOf(address(this));

        uint256 claimed = afterBalance - beforeBalance;

         uint256 PerLinQ = (claimed * 10**18) / daisys;

        uint256 index = MilqShipments;

        MilQShipments[index] = MilQShipment(block.timestamp, claimed, daisys,PerLinQ);

        MilqShipments++;

        totalMilQClaimed += claimed;
    }

    function shipLinQersMilQ() public {  
        uint256 CurrrentDis = totalMilQClaimed - LpClaims[msg.sender].lastClaimed;  
        uint256 tokensStaked = LinQerParlours[msg.sender].daisys;  
         uint256 divDaisys = daisys / 10**18; 
        uint256 percentOwned = ((tokensStaked * 100) / divDaisys); 
        uint256 userDistro = CurrrentDis * (percentOwned / 100); 
        uint256 userDistroAmount = userDistro / 10**18; 
        milQ.transfer(msg.sender, userDistroAmount); 
  
        MilQerParlours[msg.sender].milQClaimed += userDistroAmount;
        LpClaims[msg.sender].lastClaimed = totalMilQClaimed;  
        LpClaims[msg.sender].totalClaimed += userDistroAmount;  
    }  
  
    function checkEstMilQRewards(address user) public view returns (uint256){  
        uint256 CurrrentDis = totalMilQClaimed - LpClaims[user].lastClaimed;  
        uint256 tokensStaked = LinQerParlours[user].daisys;  
        uint256 divDaisys = daisys / 10**18; 
        uint256 percentOwned = ((tokensStaked * 100) / divDaisys); 
        uint256 userDistro = CurrrentDis * (percentOwned / 100); 
        uint256 userDistroAmount = userDistro / 10**18; 
 
        return userDistroAmount;  
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_linqAddress","type":"address"},{"internalType":"address","name":"_milQAddress","type":"address"},{"internalType":"address","name":"_glinQAddress","type":"address"},{"internalType":"address","name":"_oddysParlour","type":"address"},{"internalType":"address","name":"_uniswapRouterAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"boughtAmount","type":"uint256"}],"name":"Qompound","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"User","type":"address"},{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"highClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"lowBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"linq","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"milq","type":"uint256"}],"name":"newStaQe","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBessies","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDaisys","type":"uint256"}],"name":"rewardChange","type":"event"},{"inputs":[],"name":"ILINQ","outputs":[{"internalType":"contract iLinq","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LinQerParlours","outputs":[{"internalType":"uint256","name":"daisys","type":"uint256"},{"internalType":"uint256","name":"rentedDaisysSince","type":"uint256"},{"internalType":"uint256","name":"rentedDaisysTill","type":"uint256"},{"internalType":"uint256","name":"vitaliksMilkShipped","type":"uint256"},{"internalType":"uint256","name":"lastShippedVitaliksMilk","type":"uint256"},{"internalType":"uint256","name":"vitaliksMilkClaimable","type":"uint256"},{"internalType":"uint256","name":"QompoundedMilk","type":"uint256"},{"internalType":"uint256","name":"daisysOwnedSince","type":"uint256"},{"internalType":"uint256","name":"daisysOwnedTill","type":"uint256"},{"internalType":"bool","name":"hasDaisys","type":"bool"},{"internalType":"bool","name":"ownsDaisys","type":"bool"},{"internalType":"bool","name":"owedMilk","type":"bool"},{"internalType":"uint256","name":"shipmentsRecieved","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LpClaims","outputs":[{"internalType":"uint256","name":"lastClaimed","type":"uint256"},{"internalType":"uint256","name":"totalClaimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"MilQShipments","outputs":[{"internalType":"uint256","name":"blockTimestamp","type":"uint256"},{"internalType":"uint256","name":"MilQShipped","type":"uint256"},{"internalType":"uint256","name":"totallinQStaked","type":"uint256"},{"internalType":"uint256","name":"rewardPerlinQ","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MilQerParlours","outputs":[{"internalType":"uint256","name":"bessies","type":"uint256"},{"internalType":"uint256","name":"rentedBessiesSince","type":"uint256"},{"internalType":"uint256","name":"rentedBessiesTill","type":"uint256"},{"internalType":"uint256","name":"milQClaimed","type":"uint256"},{"internalType":"uint256","name":"vitaliksMilkShipped","type":"uint256"},{"internalType":"uint256","name":"lastShippedVitaliksMilk","type":"uint256"},{"internalType":"uint256","name":"vitaliksMilkClaimable","type":"uint256"},{"internalType":"uint256","name":"bessiesOwnedSince","type":"uint256"},{"internalType":"uint256","name":"bessiesOwnedTill","type":"uint256"},{"internalType":"bool","name":"hasBessies","type":"bool"},{"internalType":"bool","name":"ownsBessies","type":"bool"},{"internalType":"bool","name":"owedMilk","type":"bool"},{"internalType":"uint256","name":"shipmentsRecieved","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MilqShipments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"slippage","type":"uint256"}],"name":"QompoundLinQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"VitaliksMilkShipments","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"daisysOutput","type":"uint256"},{"internalType":"uint256","name":"bessiesOutput","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bessies","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bessiesMilkProduced","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bessiesRentalTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bessiesRentalTime","type":"uint256"}],"name":"changeBessiesRentalTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_daisysRentalTime","type":"uint256"}],"name":"changeDaisysRentalTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minLinQ","type":"uint256"}],"name":"changeMinLinQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minMilQ","type":"uint256"}],"name":"changeMinMilQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_roundUpBessiesTime","type":"uint256"}],"name":"changeRoundUpBessiesTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_roundUpDaisysTime","type":"uint256"}],"name":"changeRoundUpDaisysTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"checkEstMilQRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daisys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daisysMilkProduced","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daisysRentalTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getprepShipment","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"linQers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"milQers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oddysParlour","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cow","type":"uint256"}],"name":"ownCows","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pauseStaQing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_daisysOutput","type":"uint256"},{"internalType":"uint256","name":"_bessiesOutput","type":"uint256"}],"name":"prepShipment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeVitaliksMilk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"roundUpBessiesTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cow","type":"uint256"}],"name":"roundUpCows","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"roundUpDaisysTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_daisysToOddysParlour","type":"uint256"},{"internalType":"uint256","name":"_bessiesToOddysParlour","type":"uint256"}],"name":"rushOddyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_glinQ","type":"address"}],"name":"setGlinQAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"setLowBalanceThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oddysParlour","type":"address"}],"name":"setOddysParlour","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"sethighClaimThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shipFarmMilQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shipLinQersMilQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shipMilk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountLinQ","type":"uint256"},{"internalType":"uint256","name":"_amountMilQ","type":"uint256"},{"internalType":"uint256","name":"_token","type":"uint256"}],"name":"staQe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalMilQClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVitaliksMilkShipments","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":"_amtLinQ","type":"uint256"},{"internalType":"uint256","name":"_amtMilQ","type":"uint256"},{"internalType":"uint256","name":"_token","type":"uint256"}],"name":"unstaQe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"viewHowMuchMilk","outputs":[{"internalType":"uint256","name":"Total","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vitaliksMilkQompounded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vitaliksMilkShipped","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ERC20","type":"address"},{"internalType":"uint256","name":"_Amt","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526006805460ff60a01b1916600160a01b179055600880546001600160a01b031916733e34eabf5858a126cb583107e643080cee20ca641790555f6009819055600a819055600b819055600c819055600d819055600e819055600f8080556010556011819055601281905560178190556018819055678ac7230489e800006019819055670de0b6b3a7640000601a55601b91909155674563918244f40000601c55601d55348015620000b3575f80fd5b506040516200610038038062006100833981016040819052620000d691620001c1565b620000e13362000156565b60018055600280546001600160a01b039687166001600160a01b031991821681179092556005805482169092179091556003805495871695821695909517909455600480549386169385169390931790925560078054918516918416919091179055600680549190931691161790556200022d565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001bc575f80fd5b919050565b5f805f805f60a08688031215620001d6575f80fd5b620001e186620001a5565b9450620001f160208701620001a5565b93506200020160408701620001a5565b92506200021160608701620001a5565b91506200022160808701620001a5565b90509295509295909350565b615ec5806200023b5f395ff3fe6080604052600436106102f6575f3560e01c80639a85d6b111610189578063cc8261c2116100d8578063df48d83b11610092578063ea41a76f1161006d578063ea41a76f146109a5578063f2fde38b14610a2e578063fb53abb814610a4d578063fbe7c08514610a6c575f80fd5b8063df48d83b1461092d578063e0f0985b1461094c578063e114b8ff1461096b575f80fd5b8063cc8261c214610851578063cd15153614610866578063ce24ab451461087a578063d01fe5fe1461088f578063d8d043cd146108ae578063dec794891461090e575f80fd5b8063a72b68c711610143578063c4389a031161011e578063c4389a0314610718578063c5ac67171461072d578063c8d0a0621461081d578063c8e4b0981461083c575f80fd5b8063a72b68c7146106aa578063aa7f085b146106e4578063b0a56c14146106f9575f80fd5b80639a85d6b1146105f05780639c6b99041461060f578063a0eba21a1461062e578063a1db97821461064d578063a20f54541461066c578063a4f5b9f21461068b575f80fd5b806350460cd0116102455780637a5800e9116101ff5780637efd68bb116101da5780637efd68bb146105775780637fa6170f1461058c5780638da5cb5b146105a15780639763715a146105d1575f80fd5b80637a5800e91461052f5780637aa70e3f1461054e5780637e9ef07914610562575f80fd5b806350460cd01461049f57806355bc473c146104b457806365af674d146104c8578063682b08d2146104e7578063715018a614610506578063760e24c71461051a575f80fd5b8063286912cb116102b05780634053119c1161028b5780634053119c146103fb5780634437d10d1461041a578063477d440d1461046157806349ff996414610480575f80fd5b8063286912cb146103a857806338150720146103c75780633b903632146103e6575f80fd5b80630191833b1461030157806305321ea414610329578063115784c41461034a57806311f3f90a1461035f5780631fc865221461037457806320b9e6c614610389575f80fd5b366102fd57005b5f80fd5b34801561030c575f80fd5b5061031660095481565b6040519081526020015b60405180910390f35b348015610334575f80fd5b50610348610343366004615b0f565b610a80565b005b348015610355575f80fd5b50610316600b5481565b34801561036a575f80fd5b5061031660135481565b34801561037f575f80fd5b50610316600c5481565b348015610394575f80fd5b506103486103a3366004615b0f565b610acf565b3480156103b3575f80fd5b506103486103c2366004615b0f565b610cb5565b3480156103d2575f80fd5b506103486103e1366004615b26565b610cc2565b3480156103f1575f80fd5b50610316601b5481565b348015610406575f80fd5b50610316610415366004615b63565b610dba565b348015610425575f80fd5b5061044c610434366004615b63565b601e6020525f90815260409020805460019091015482565b60408051928352602083019190915201610320565b34801561046c575f80fd5b5061034861047b366004615b0f565b612144565b34801561048b575f80fd5b5061034861049a366004615b0f565b612151565b3480156104aa575f80fd5b5061031660175481565b3480156104bf575f80fd5b5061034861215e565b3480156104d3575f80fd5b506103486104e2366004615b63565b6122b8565b3480156104f2575f80fd5b50610348610501366004615b63565b6122e2565b348015610511575f80fd5b5061034861230c565b348015610525575f80fd5b5061031660155481565b34801561053a575f80fd5b50610348610549366004615b0f565b61231f565b348015610559575f80fd5b506103486123ee565b34801561056d575f80fd5b5061031660125481565b348015610582575f80fd5b5061031660165481565b348015610597575f80fd5b50610316600e5481565b3480156105ac575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610320565b3480156105dc575f80fd5b506103486105eb366004615b0f565b612401565b3480156105fb575f80fd5b5061034861060a366004615b0f565b61240e565b34801561061a575f80fd5b50610348610629366004615b26565b61241b565b348015610639575f80fd5b50610348610648366004615b0f565b6125b3565b348015610658575f80fd5b50610348610667366004615b85565b6125c0565b348015610677575f80fd5b50610348610686366004615bbc565b61263b565b348015610696575f80fd5b506007546105b9906001600160a01b031681565b3480156106b5575f80fd5b506106c96106c4366004615b0f565b612661565b60408051938452602084019290925290820152606001610320565b3480156106ef575f80fd5b50610316600a5481565b348015610704575f80fd5b506005546105b9906001600160a01b031681565b348015610723575f80fd5b5061031660145481565b348015610738575f80fd5b506107b5610747366004615b63565b602080525f9081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a909a015498999798969795969495939492939192909160ff808216926101008304821692620100009004909116908d565b604080519d8e5260208e019c909c529a8c019990995260608b019790975260808a019590955260a089019390935260c088019190915260e08701526101008601521515610120850152151561014084015215156101608301526101808201526101a001610320565b348015610828575f80fd5b50610348610837366004615b0f565b6126ae565b348015610847575f80fd5b5061031660185481565b34801561085c575f80fd5b5061031660115481565b348015610871575f80fd5b506103486126bb565b348015610885575f80fd5b50610316600d5481565b34801561089a575f80fd5b506103166108a9366004615b63565b61282d565b3480156108b9575f80fd5b506108ee6108c8366004615b0f565b60216020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610320565b348015610919575f80fd5b50610348610928366004615b0f565b6128cb565b348015610938575f80fd5b50610348610947366004615bd7565b6128d8565b348015610957575f80fd5b50610348610966366004615b0f565b61296c565b348015610976575f80fd5b506106c9610985366004615b0f565b60226020525f908152604090208054600182015460029092015490919083565b3480156109b0575f80fd5b506107b56109bf366004615b63565b601f6020525f9081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a909a015498999798969795969495939492939192909160ff808216926101008304821692620100009004909116908d565b348015610a39575f80fd5b50610348610a48366004615b63565b612f6c565b348015610a58575f80fd5b50610348610a67366004615bd7565b612fe7565b348015610a77575f80fd5b50610348613010565b610a88613205565b80471015610a94575f80fd5b6007546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610acb573d5f803e3d5ffd5b5050565b600654600160a01b900460ff1615610ae5575f80fd5b801580610af25750806001145b610afa575f80fd5b805f03610c1b57335f908152601f6020526040902060090154610100900460ff1615610b24575f80fd5b335f908152601f602052604090206009015460ff161515600114610b46575f80fd5b335f908152601f60205260409020600201544211610b62575f80fd5b60048054335f818152601f60205260409081902054905163a9059cbb60e01b81526001600160a01b039093169363a9059cbb93610ba193929101615bf7565b6020604051808303815f875af1158015610bbd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be19190615c10565b610be9575f80fd5b335f908152601f60205260409020600981018054600283015460079093019290925562ffff0019909116620101001790555b80600103610cb257335f908152602080526040902060090154610100900460ff1615610c45575f80fd5b335f90815260208052604090206009015460ff161515600114610c66575f80fd5b335f9081526020805260409020600201544211610c81575f80fd5b335f9081526020805260409020600981018054600283015460079093019290925562ffff0019909116620101001790555b50565b610cbd613205565b601655565b600654600160a01b900460ff1615610cd8575f80fd5b801580610ce55750806001145b610ced575f80fd5b5f610cf733610dba565b90508015610d0757610d076126bb565b815f03610d5e575f8411610d19575f80fd5b335f908152601f6020526040902054841115610d33575f80fd5b335f908152601f602052604090206009015460ff161515600114610d55575f80fd5b610d5e8461325e565b81600103610db4575f8311610d71575f80fd5b335f908152602080526040902054831115610d8a575f80fd5b335f90815260208052604090206009015460ff161515600114610dab575f80fd5b610db4836138a4565b50505050565b6001600160a01b0381165f908152601f60208181526040808420600a8082015460048301548580529387209182015460059092015495909452600990910154929391929091908590819060ff6101009091041615156001148015610e3757506001600160a01b0388165f908152601f602052604090206008015442105b15610f8b576017548614610f1857855b601754811015610f16578560225f610e60846001615c3f565b81526020019081526020015f205f0154610e7a9190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f90925290912054610eb690670de0b6b3a764000090615c6b565b610ec09190615c8a565b610eca9190615c8a565b610ed49084615c3f565b925060225f610ee4836001615c3f565b815260208101919091526040015f2054955086610f0081615ca1565b9750508080610f0e90615ca1565b915050610e47565b505b6017548603610f8b57610f2b8542615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f90925290912054610f6a90670de0b6b3a764000090615c6b565b610f749190615c8a565b610f7e9190615c8a565b610f889083615c3f565b91505b6001600160a01b0388165f908152601f6020526040902060090154610100900460ff16158015610fda57506001600160a01b0388165f908152601f602052604090206009015460ff1615156001145b8015610fff57506001600160a01b0388165f908152601f602052604090206002015442105b156111535760175486146110e057855b6017548110156110de578560225f611028846001615c3f565b81526020019081526020015f205f01546110429190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f9092529091205461107e90670de0b6b3a764000090615c6b565b6110889190615c8a565b6110929190615c8a565b61109c9084615c3f565b925060225f6110ac836001615c3f565b815260208101919091526040015f20549550866110c881615ca1565b97505080806110d690615ca1565b91505061100f565b505b6017548603611153576110f38542615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f9092529091205461113290670de0b6b3a764000090615c6b565b61113c9190615c8a565b6111469190615c8a565b6111509083615c3f565b91505b6001600160a01b0388165f908152601f602052604090206009015460ff61010090910416151560011480156111a257506001600160a01b0388165f908152601f60205260409020600801544210155b80156111d357506001600160a01b0388165f908152601f602052604090206009015462010000900460ff1615156001145b1561144e576017548610156113bf57855b6017548110156113bd5760225f6111fc836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f909352206008015411156112e0578560225f61123c846001615c3f565b81526020019081526020015f205f01546112569190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f9092529091205461129290670de0b6b3a764000090615c6b565b61129c9190615c8a565b6112a69190615c8a565b6112b09084615c3f565b925060225f6112c0836001615c3f565b815260208101919091526040015f20549550866112dc81615ca1565b9750505b60225f6112ee836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f9093522060080154116113ab576001600160a01b0389165f908152601f6020526040812060080154611344908890615c58565b5f838152602260209081526040808320600101546001600160a01b038f168452601f90925290912054919250829161138590670de0b6b3a764000090615c6b565b61138f9190615c8a565b6113999190615c8a565b6113a39085615c3f565b9350506113bd565b806113b581615ca1565b9150506111e4565b505b601754860361144e576001600160a01b0388165f908152601f60205260409020600801546113ee908690615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f9092529091205461142d90670de0b6b3a764000090615c6b565b6114379190615c8a565b6114419190615c8a565b61144b9083615c3f565b91505b6001600160a01b0388165f908152601f6020526040902060090154610100900460ff1615801561149d57506001600160a01b0388165f908152601f602052604090206009015460ff1615156001145b80156114c357506001600160a01b0388165f908152601f60205260409020600201544210155b80156114f457506001600160a01b0388165f908152601f602052604090206009015462010000900460ff1615156001145b156117a25760175486101561171357855b6017548110156117115760225f61151d836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f90935220600201541115611601578560225f61155d846001615c3f565b81526020019081526020015f205f01546115779190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f909252909120546115b390670de0b6b3a764000090615c6b565b6115bd9190615c8a565b6115c79190615c8a565b6115d19084615c3f565b925060225f6115e1836001615c3f565b815260208101919091526040015f20549550866115fd81615ca1565b9750505b60225f61160f836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f90935220600201541180159061166d57506001600160a01b0389165f908152601f602052604090206009015462010000900460ff1615156001145b156116ff576001600160a01b0389165f908152601f6020526040812060020154611698908890615c58565b5f838152602260209081526040808320600101546001600160a01b038f168452601f9092529091205491925082916116d990670de0b6b3a764000090615c6b565b6116e39190615c8a565b6116ed9190615c8a565b6116f79085615c3f565b935050611711565b8061170981615ca1565b915050611505565b505b60175486036117a2576001600160a01b0388165f908152601f6020526040902060020154611742908690615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f9092529091205461178190670de0b6b3a764000090615c6b565b61178b9190615c8a565b6117959190615c8a565b61179f9083615c3f565b91505b6001600160a01b0388165f90815260208052604090206009015460ff61010090910416151560011480156117ee57506001600160a01b0388165f90815260208052604090206008015442105b1561193e5760175484146118cd57835b6017548110156118cb578360225f611817846001615c3f565b81526020019081526020015f205f01546118319190615c58565b5f828152602260209081526040808320600201546001600160a01b038e1684529180529091205461186b90670de0b6b3a764000090615c6b565b6118759190615c8a565b61187f9190615c8a565b6118899083615c3f565b915060225f611899836001615c3f565b815260208101919091526040015f20549350846118b581615ca1565b95505080806118c390615ca1565b9150506117fe565b505b601754840361193e576118e08342615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d1684529180529091205461191d90670de0b6b3a764000090615c6b565b6119279190615c8a565b6119319190615c8a565b61193b9082615c3f565b90505b6001600160a01b0388165f908152602080526040902060090154610100900460ff1615801561198b57506001600160a01b0388165f90815260208052604090206009015460ff1615156001145b80156119af57506001600160a01b0388165f90815260208052604090206002015442105b80156119df57506001600160a01b0388165f90815260208052604090206009015462010000900460ff1615156001145b15611b2f576017548414611abe57835b601754811015611abc578360225f611a08846001615c3f565b81526020019081526020015f205f0154611a229190615c58565b5f828152602260209081526040808320600201546001600160a01b038e16845291805290912054611a5c90670de0b6b3a764000090615c6b565b611a669190615c8a565b611a709190615c8a565b611a7a9083615c3f565b915060225f611a8a836001615c3f565b815260208101919091526040015f2054935084611aa681615ca1565b9550508080611ab490615ca1565b9150506119ef565b505b6017548403611b2f57611ad18342615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d16845291805290912054611b0e90670de0b6b3a764000090615c6b565b611b189190615c8a565b611b229190615c8a565b611b2c9082615c3f565b90505b6001600160a01b0388165f90815260208052604090206009015460ff6101009091041615156001148015611b7c57506001600160a01b0388165f9081526020805260409020600801544210155b15611e1c576017548414611d9057835b601754811015611d8e5760225f611ba4836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d16825292805220600801541115611c84578360225f611be2846001615c3f565b81526020019081526020015f205f0154611bfc9190615c58565b5f828152602260209081526040808320600201546001600160a01b038e16845291805290912054611c3690670de0b6b3a764000090615c6b565b611c409190615c8a565b611c4a9190615c8a565b611c549083615c3f565b915060225f611c64836001615c3f565b815260208101919091526040015f2054935084611c8081615ca1565b9550505b60225f611c92836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252928052206008015411801590611ced57506001600160a01b0389165f90815260208052604090206009015462010000900460ff1615156001145b15611d7c576001600160a01b0389165f908152602080526040812060080154611d17908690615c58565b5f838152602260209081526040808320600201546001600160a01b038f168452918052909120549192508291611d5690670de0b6b3a764000090615c6b565b611d609190615c8a565b611d6a9190615c8a565b611d749084615c3f565b925050611d8e565b80611d8681615ca1565b915050611b8c565b505b6017548403611e1c576001600160a01b0388165f908152602080526040902060080154611dbe908490615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d16845291805290912054611dfb90670de0b6b3a764000090615c6b565b611e059190615c8a565b611e0f9190615c8a565b611e199082615c3f565b90505b6001600160a01b0388165f908152602080526040902060090154610100900460ff16158015611e6957506001600160a01b0388165f90815260208052604090206009015460ff1615156001145b8015611e8e57506001600160a01b0388165f9081526020805260409020600201544210155b1561212e5760175484146120a257835b6017548110156120a05760225f611eb6836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d16825292805220600201541115611f96578360225f611ef4846001615c3f565b81526020019081526020015f205f0154611f0e9190615c58565b5f828152602260209081526040808320600201546001600160a01b038e16845291805290912054611f4890670de0b6b3a764000090615c6b565b611f529190615c8a565b611f5c9190615c8a565b611f669083615c3f565b915060225f611f76836001615c3f565b815260208101919091526040015f2054935084611f9281615ca1565b9550505b60225f611fa4836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252928052206002015411801590611fff57506001600160a01b0389165f90815260208052604090206009015462010000900460ff1615156001145b1561208e576001600160a01b0389165f908152602080526040812060020154612029908690615c58565b5f838152602260209081526040808320600201546001600160a01b038f16845291805290912054919250829161206890670de0b6b3a764000090615c6b565b6120729190615c8a565b61207c9190615c8a565b6120869084615c3f565b9250506120a0565b8061209881615ca1565b915050611e9e565b505b601754840361212e576001600160a01b0388165f9081526020805260409020600201546120d0908490615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d1684529180529091205461210d90670de0b6b3a764000090615c6b565b6121179190615c8a565b6121219190615c8a565b61212b9082615c3f565b90505b6121388183615c3f565b98975050505050505050565b61214c613205565b601455565b612159613205565b601355565b335f908152601e6020526040812054601b5461217a9190615c58565b335f908152601f6020526040812054600954929350916121a390670de0b6b3a764000090615c6b565b90505f816121b2846064615c8a565b6121bc9190615c6b565b90505f6121ca606483615c6b565b6121d49086615c8a565b90505f6121e9670de0b6b3a764000083615c6b565b60035460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb9061221c9033908590600401615bf7565b6020604051808303815f875af1158015612238573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061225c9190615c10565b50335f9081526020805260408120600301805483929061227d908490615c3f565b9091555050601b54335f908152601e60205260408120918255600190910180548392906122ab908490615c3f565b9091555050505050505050565b6122c0613205565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6122ea613205565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b612314613205565b61231d5f613dbf565b565b600654600160a01b900460ff1615612335575f80fd5b8015801561235f5750335f908152601f602052604090206009015460ff6101009091041615156001145b8061239057508060011480156123905750335f90815260208052604090206009015460ff6101009091041615156001145b612398575f80fd5b805f036123c2575f601554426123ae9190615c3f565b335f908152601f6020526040902060080155505b80600103610cb2575f601654426123d99190615c3f565b335f9081526020805260409020600801555050565b6123f6613205565b5f600f819055601055565b612409613205565b601555565b612416613205565b601a55565b600654600160a01b900460ff1615612431575f80fd5b80158061243e5750806001145b612446575f80fd5b335f908152601f602052604090206009015460ff161515600114806124805750335f90815260208052604090206009015460ff1615156001145b1561248d5761248d613e0e565b805f0361250b576019548310156124a2575f80fd5b335f908152601f602052604090206009015460ff1615156001036124e5575f6124ca3361282d565b905080156124da576124da61215e565b6124e38461549b565b505b335f908152601f602052604081206009015460ff161515900361250b5761250b83615657565b8060010361256c57601a54821015612521575f80fd5b335f90815260208052604090206009015460ff1615156001036125475761254782615834565b335f90815260208052604081206009015460ff161515900361256c5761256c82615951565b60408051338152602081018590529081018390527fe41aca6803ab96b2eebcb4810bd12878f9891213ac7855733805bc095b83d058906060015b60405180910390a1505050565b6125bb613205565b601d55565b6125c8613205565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906125f69033908590600401615bf7565b6020604051808303815f875af1158015612612573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126369190615c10565b505050565b612643613205565b60068054911515600160a01b0260ff60a01b19909216919091179055565b5f805f6017548410612671575f80fd5b5050505f81815260226020908152604091829020825160608101845281548082526001830154938201849052600290920154930183905293909250565b6126b6613205565b601c55565b6126c3613e0e565b335f908152601f602090815260408083206005015491805282206006015490916126ed8284615c3f565b9050804710156126fb575f80fd5b604051339082156108fc029083905f818181858888f19350505050158015612725573d5f803e3d5ffd5b50335f908152601f602052604081206003018054859290612747908490615c3f565b9091555050335f9081526020805260408120600401805484929061276c908490615c3f565b9091555050335f908152601f602090815260408083206005018390559080528120600601819055600d80548392906127a5908490615c3f565b9091555050601c548111156127ee577f09bbc196c5b25ae4a2ce7cb573a0e91cf0f091d6c125f5db36489b8625d81ca533826040516127e5929190615bf7565b60405180910390a15b601d5447101561263657604080514281524760208201527fbe01094ad628b24be59bba55486a9265da2fd85b3526dafae7ad71c4bd1c9ded91016125a6565b6001600160a01b0381165f908152601e6020526040812054601b54829161285391615c58565b6001600160a01b0384165f908152601f60205260408120546009549293509161288590670de0b6b3a764000090615c6b565b90505f81612894846064615c8a565b61289e9190615c6b565b90505f6128ac606483615c6b565b6128b69086615c8a565b90505f612138670de0b6b3a764000083615c6b565b6128d3613205565b601955565b6128e0613205565b60178054905f6128ef83615ca1565b9091555050601754604080516060808201835242825260208083018781528385018781525f8781526022845286902094518555905160018501555160029093019290925582518481529182018690529181018490527f5ead928997a87f087dff9f1b3a30924221910665d62d27862eed256ab4abf15591016125a6565b335f908152601f602052604090206009015460ff1615156001036129925761299261215e565b61299a613e0e565b335f908152601f602090815260408083206005015491805282206006015490916129c48284615c3f565b6040805160028082526060820183529293505f9290916020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612a30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a549190615ccd565b815f81518110612a6657612a66615ce8565b6001600160a01b039283166020918202929092010152600854825191169082906001908110612a9757612a97615ce8565b6001600160a01b03928316602091820292909201015260065460405163d06ca61f60e01b81525f92919091169063d06ca61f90612ada9086908690600401615d3e565b5f60405180830381865afa158015612af4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612b1b9190810190615d5e565b90505f81600181518110612b3157612b31615ce8565b60209081029190910101516002546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612b87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bab9190615e0b565b90505f6064612bba8a85615c8a565b612bc49190615c6b565b90505f612bd18285615c58565b60065460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de95908990612c0a9085908b9030904290600401615e22565b5f604051808303818588803b158015612c21575f80fd5b505af1158015612c33573d5f803e3d5ffd5b50506002546040516370a0823160e01b81523060048201525f94506001600160a01b0390911692506370a082319150602401602060405180830381865afa158015612c80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ca49190615e0b565b90505f612cb18583615c58565b335f908152601f6020526040902060090154909150610100900460ff161515600103612d4a576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91612d08913391869101615bf7565b6020604051808303815f875af1158015612d24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d489190615c10565b505b335f908152601f602052604090206009015460ff161515600103612dd257335f908152601f602052604081208054839290612d86908490615c3f565b9091555050335f908152601f6020526040812060060180548b9290612dac908490615c3f565b9091555050335f908152601f602090815260408083206005018390559080528120600601555b335f908152601f602052604081206009015460ff1615159003612eef57335f908152601f602052604081208054839290612e0d908490615c3f565b9091555050335f908152601f60205260409020426001909101819055601354612e3591615c3f565b335f908152601f602090815260408083206002810194909455600784018390556407915ecc00600885015560098085018054600161ffff198216811783556003880187905560068089018890554260048a0155601754600a8a0155600590980187905562ffffff199091166201000117909155601b54601e8552838620908155018490559180528220909201819055815483929190612ed5908490615c3f565b9091555050600b8054905f612ee983615ca1565b91905055505b8060095f828254612f009190615c3f565b9250508190555088600e5f828254612f189190615c3f565b909155505060408051338152602081018b90529081018290527f7a9b8ad43aacbbf8905aa3cb89f0f20ca67e967741923008984db7686d3af59b9060600160405180910390a1505050505050505050505050565b612f74613205565b6001600160a01b038116612fde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610cb281613dbf565b612fef613205565b603c612ffb8284615c3f565b1115613005575f80fd5b600f91909155601055565b613018613205565b6003546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa15801561305e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130829190615e0b565b905060055f9054906101000a90046001600160a01b03166001600160a01b0316634e71d92d6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156130d0575f80fd5b505af11580156130e2573d5f803e3d5ffd5b50506003546040516370a0823160e01b81523060048201525f93506001600160a01b0390911691506370a0823190602401602060405180830381865afa15801561312e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131529190615e0b565b90505f61315f8383615c58565b90505f60095482670de0b6b3a76400006131799190615c8a565b6131839190615c6b565b60188054604080516080810182524281526020808201888152600954838501908152606084018881525f8781526021909452948320935184559051600184015551600283015591516003909101558254939450909291906131e383615ca1565b919050555082601b5f8282546131f99190615c3f565b90915550505050505050565b5f546001600160a01b0316331461231d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401612fd5565b335f908152601f6020526040902060090154610100900460ff161515600103613368576004805460405163095ea7b360e01b81526001600160a01b039091169163095ea7b3916132b2913091869101615bf7565b6020604051808303815f875af11580156132ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132f29190615c10565b50600480546040516323b872dd60e01b81526001600160a01b03909116916323b872dd916133269133913091879101615e56565b6020604051808303815f875af1158015613342573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133669190615c10565b505b5f6133723361282d565b905080156133825761338261215e565b335f908152601f60205260408120600801548190421180156133c05750335f908152601f602052604090206009015460ff6101009091041615156001145b1561345c5760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906133f79033908890600401615bf7565b6020604051808303815f875af1158015613413573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134379190615c10565b50335f908152601f602052604081208054869290613456908490615c58565b90915550505b335f908152601f6020526040902060020154421180156134935750335f908152601f6020526040902060090154610100900460ff16155b1561352f5760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906134ca9033908890600401615bf7565b6020604051808303815f875af11580156134e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061350a9190615c10565b50335f908152601f602052604081208054869290613529908490615c58565b90915550505b335f908152601f60205260409020600801544210801561356b5750335f908152601f602052604090206009015460ff6101009091041615156001145b156136a5576064600f54856135809190615c8a565b61358a9190615c6b565b90506135968185615c58565b60025460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb906135c99033908690600401615bf7565b6020604051808303815f875af11580156135e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136099190615c10565b5060025460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92613640929116908590600401615bf7565b6020604051808303815f875af115801561365c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136809190615c10565b50335f908152601f60205260408120805486929061369f908490615c58565b90915550505b335f908152601f6020526040902060020154421080156136dc5750335f908152601f6020526040902060090154610100900460ff16155b15613816576064600f54856136f19190615c8a565b6136fb9190615c6b565b90506137078185615c58565b60025460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb9061373a9033908690600401615bf7565b6020604051808303815f875af1158015613756573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061377a9190615c10565b5060025460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb926137b1929116908590600401615bf7565b6020604051808303815f875af11580156137cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137f19190615c10565b50335f908152601f602052604081208054869290613810908490615c58565b90915550505b601954335f908152601f60205260409020541015610db457335f908152601f60205260408120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055600781018290556008810182905560098101805462ffffff19169055600a01819055600b80549161389983615e7a565b919050555050505050565b335f908152602080526040812060080154819042108015906138e15750335f90815260208052604090206009015460ff6101009091041615156001145b1561397f5760035460405163a9059cbb60e01b81528493506001600160a01b039091169063a9059cbb9061391b9033908690600401615bf7565b6020604051808303815f875af1158015613937573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061395b9190615c10565b50335f90815260208052604081208054859290613979908490615c58565b90915550505b335f90815260208052604090206002015442108015906139b55750335f908152602080526040902060090154610100900460ff16155b15613a535760035460405163a9059cbb60e01b81528493506001600160a01b039091169063a9059cbb906139ef9033908690600401615bf7565b6020604051808303815f875af1158015613a0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a2f9190615c10565b50335f90815260208052604081208054859290613a4d908490615c58565b90915550505b335f90815260208052604090206008015442108015613a8d5750335f90815260208052604090206009015460ff6101009091041615156001145b15613bc657606460105484613aa29190615c8a565b613aac9190615c6b565b9050613ab88184615c58565b60035460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb90613aeb9033908690600401615bf7565b6020604051808303815f875af1158015613b07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b2b9190615c10565b5060035460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92613b62929116908590600401615bf7565b6020604051808303815f875af1158015613b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ba29190615c10565b50335f90815260208052604081208054859290613bc0908490615c58565b90915550505b335f90815260208052604090206002015442108015613bfb5750335f908152602080526040902060090154610100900460ff16155b15613d3457606460105484613c109190615c8a565b613c1a9190615c6b565b9050613c268184615c58565b60035460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb90613c599033908690600401615bf7565b6020604051808303815f875af1158015613c75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c999190615c10565b5060035460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92613cd0929116908590600401615bf7565b6020604051808303815f875af1158015613cec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d109190615c10565b50335f90815260208052604081208054859290613d2e908490615c58565b90915550505b601a54335f908152602080526040902054101561263657335f9081526020805260408120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055600781018290556008810182905560098101805462ffffff19169055600a01819055600c805491613db583615e7a565b9190505550505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b335f908152601f6020526040812060090154819060ff6101009091041615156001148015613e4c5750335f908152601f602052604090206008015442105b1561401957601754335f908152601f60205260409020600a015414613f7757335f908152601f60205260409020600a01545b601754811015613f7557335f908152601f602052604081206004015490602290613ea9846001615c3f565b81526020019081526020015f205f0154613ec39190615c58565b5f82815260226020908152604080832060010154338452601f90925290912054613ef690670de0b6b3a764000090615c6b565b613f009190615c8a565b613f0a9190615c8a565b613f149084615c3f565b925060225f613f24836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a909101805491613f5d83615ca1565b91905055508080613f6d90615ca1565b915050613e7e565b505b601754335f908152601f60205260409020600a01540361401957335f908152601f6020526040902060040154613fad9042615c58565b6017545f90815260226020908152604080832060010154338452601f90925290912054613fe390670de0b6b3a764000090615c6b565b613fed9190615c8a565b613ff79190615c8a565b6140019083615c3f565b335f908152601f602052604090204260049091015591505b335f908152601f6020526040902060090154610100900460ff161580156140565750335f908152601f602052604090206009015460ff1615156001145b80156140725750335f908152601f602052604090206002015442105b1561423f57601754335f908152601f60205260409020600a01541461419d57335f908152601f60205260409020600a01545b60175481101561419b57335f908152601f6020526040812060040154906022906140cf846001615c3f565b81526020019081526020015f205f01546140e99190615c58565b5f82815260226020908152604080832060010154338452601f9092529091205461411c90670de0b6b3a764000090615c6b565b6141269190615c8a565b6141309190615c8a565b61413a9084615c3f565b925060225f61414a836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a90910180549161418383615ca1565b9190505550808061419390615ca1565b9150506140a4565b505b601754335f908152601f60205260409020600a01540361423f57335f908152601f60205260409020600401546141d39042615c58565b6017545f90815260226020908152604080832060010154338452601f9092529091205461420990670de0b6b3a764000090615c6b565b6142139190615c8a565b61421d9190615c8a565b6142279083615c3f565b335f908152601f602052604090204260049091015591505b335f908152601f602052604090206009015460ff610100909104161515600114801561427c5750335f908152601f60205260409020600801544210155b80156142a45750335f908152601f602052604090206009015462010000900460ff1615156001145b1561459b57601754335f908152601f60205260409020600a015410156144e257335f908152601f60205260409020600a01545b6017548110156144e05760225f6142ef836001615c3f565b815260208082019290925260409081015f90812054338252601f909352206008015411156143f257335f908152601f602052604081206004015490602290614338846001615c3f565b81526020019081526020015f205f01546143529190615c58565b5f82815260226020908152604080832060010154338452601f9092529091205461438590670de0b6b3a764000090615c6b565b61438f9190615c8a565b6143999190615c8a565b6143a39084615c3f565b925060225f6143b3836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a9091018054916143ec83615ca1565b91905055505b60225f614400836001615c3f565b815260208082019290925260409081015f90812054338252601f9093522060080154116144ce57335f908152601f60205260408120600481015460089091015461444a9190615c58565b5f83815260226020908152604080832060010154338452601f90925290912054919250829161448290670de0b6b3a764000090615c6b565b61448c9190615c8a565b6144969190615c8a565b6144a09085615c3f565b335f908152601f6020526040902060088101546004820155600901805462ff00001916905593506144e09050565b806144d881615ca1565b9150506142d7565b505b601754335f908152601f60205260409020600a01540361459b57335f908152601f60205260409020600481015460089091015461451f9190615c58565b6017545f90815260226020908152604080832060010154338452601f9092529091205461455590670de0b6b3a764000090615c6b565b61455f9190615c8a565b6145699190615c8a565b6145739083615c3f565b335f908152601f6020526040902060088101546004820155600901805462ff00001916905591505b335f908152601f6020526040902060090154610100900460ff161580156145d85750335f908152601f602052604090206009015460ff1615156001145b80156145f55750335f908152601f60205260409020600201544210155b801561461d5750335f908152601f602052604090206009015462010000900460ff1615156001145b1561493e57601754335f908152601f60205260409020600a0154101561488557335f908152601f60205260409020600a01545b6017548110156148835760225f614668836001615c3f565b815260208082019290925260409081015f90812054338252601f9093522060020154111561476b57335f908152601f6020526040812060040154906022906146b1846001615c3f565b81526020019081526020015f205f01546146cb9190615c58565b5f82815260226020908152604080832060010154338452601f909252909120546146fe90670de0b6b3a764000090615c6b565b6147089190615c8a565b6147129190615c8a565b61471c9084615c3f565b925060225f61472c836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a90910180549161476583615ca1565b91905055505b60225f614779836001615c3f565b815260208082019290925260409081015f90812054338252601f9093522060020154118015906147c55750335f908152601f602052604090206009015462010000900460ff1615156001145b1561487157335f908152601f6020526040812060048101546002909101546147ed9190615c58565b5f83815260226020908152604080832060010154338452601f90925290912054919250829161482590670de0b6b3a764000090615c6b565b61482f9190615c8a565b6148399190615c8a565b6148439085615c3f565b335f908152601f6020526040902060028101546004820155600901805462ff00001916905593506148839050565b8061487b81615ca1565b915050614650565b505b601754335f908152601f60205260409020600a01540361493e57335f908152601f6020526040902060048101546002909101546148c29190615c58565b6017545f90815260226020908152604080832060010154338452601f909252909120546148f890670de0b6b3a764000090615c6b565b6149029190615c8a565b61490c9190615c8a565b6149169083615c3f565b335f908152601f6020526040902060028101546004820155600901805462ff00001916905591505b335f90815260208052604090206009015460ff61010090910416151560011480156149785750335f90815260208052604090206008015442105b15614b3957601754335f9081526020805260409020600a015414614a9c57335f9081526020805260409020600a01545b601754811015614a9a57335f908152602080526040812060050154906022906149d2846001615c3f565b81526020019081526020015f205f01546149ec9190615c58565b5f8281526022602090815260408083206002015433845291805290912054614a1d90670de0b6b3a764000090615c6b565b614a279190615c8a565b614a319190615c8a565b614a3b9083615c3f565b915060225f614a4b836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a909101805491614a8283615ca1565b91905055508080614a9290615ca1565b9150506149a8565b505b601754335f9081526020805260409020600a015403614b3957335f908152602080526040902060050154614ad09042615c58565b6017545f9081526022602090815260408083206002015433845291805290912054614b0490670de0b6b3a764000090615c6b565b614b0e9190615c8a565b614b189190615c8a565b614b229082615c3f565b335f90815260208052604090204260059091015590505b335f908152602080526040902060090154610100900460ff16158015614b745750335f90815260208052604090206009015460ff1615156001145b8015614b8f5750335f90815260208052604090206002015442105b8015614bb65750335f90815260208052604090206009015462010000900460ff1615156001145b15614d7757601754335f9081526020805260409020600a015414614cda57335f9081526020805260409020600a01545b601754811015614cd857335f90815260208052604081206005015490602290614c10846001615c3f565b81526020019081526020015f205f0154614c2a9190615c58565b5f8281526022602090815260408083206002015433845291805290912054614c5b90670de0b6b3a764000090615c6b565b614c659190615c8a565b614c6f9190615c8a565b614c799083615c3f565b915060225f614c89836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a909101805491614cc083615ca1565b91905055508080614cd090615ca1565b915050614be6565b505b601754335f9081526020805260409020600a015403614d7757335f908152602080526040902060050154614d0e9042615c58565b6017545f9081526022602090815260408083206002015433845291805290912054614d4290670de0b6b3a764000090615c6b565b614d4c9190615c8a565b614d569190615c8a565b614d609082615c3f565b335f90815260208052604090204260059091015590505b335f90815260208052604090206009015460ff6101009091041615156001148015614db25750335f9081526020805260409020600801544210155b8015614dd95750335f90815260208052604090206009015462010000900460ff1615156001145b156150bc57601754335f9081526020805260409020600a0154101561500857335f9081526020805260409020600a01545b6017548110156150065760225f614e22836001615c3f565b815260208082019290925260409081015f9081205433825292805220600801541115614f1e57335f90815260208052604081206005015490602290614e68846001615c3f565b81526020019081526020015f205f0154614e829190615c58565b5f8281526022602090815260408083206002015433845291805290912054614eb390670de0b6b3a764000090615c6b565b614ebd9190615c8a565b614ec79190615c8a565b614ed19083615c3f565b915060225f614ee1836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a909101805491614f1883615ca1565b91905055505b60225f614f2c836001615c3f565b815260208082019290925260409081015f90812054338252928052206008015411614ff457335f90815260208052604081206005810154600890910154614f739190615c58565b5f83815260226020908152604080832060020154338452918052909120549192508291614fa990670de0b6b3a764000090615c6b565b614fb39190615c8a565b614fbd9190615c8a565b614fc79084615c3f565b335f908152602080526040902060088101546005820155600901805462ff00001916905592506150069050565b80614ffe81615ca1565b915050614e0a565b505b601754335f9081526020805260409020600a0154036150bc57335f908152602080526040902060058101546008909101546150439190615c58565b6017545f908152602260209081526040808320600201543384529180529091205461507790670de0b6b3a764000090615c6b565b6150819190615c8a565b61508b9190615c8a565b6150959082615c3f565b335f908152602080526040902060088101546005820155600901805462ff00001916905590505b335f908152602080526040902060090154610100900460ff161580156150f75750335f90815260208052604090206009015460ff1615156001145b80156151135750335f9081526020805260409020600201544210155b801561513a5750335f90815260208052604090206009015462010000900460ff1615156001145b1561541c57601754335f9081526020805260409020600a01541461536857335f9081526020805260409020600a01545b6017548110156153665760225f615182836001615c3f565b815260208082019290925260409081015f908120543382529280522060020154111561527e57335f908152602080526040812060050154906022906151c8846001615c3f565b81526020019081526020015f205f01546151e29190615c58565b5f828152602260209081526040808320600201543384529180529091205461521390670de0b6b3a764000090615c6b565b61521d9190615c8a565b6152279190615c8a565b6152319083615c3f565b915060225f615241836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a90910180549161527883615ca1565b91905055505b60225f61528c836001615c3f565b815260208082019290925260409081015f9081205433825292805220600201541161535457335f908152602080526040812060058101546002909101546152d39190615c58565b5f8381526022602090815260408083206002015433845291805290912054919250829161530990670de0b6b3a764000090615c6b565b6153139190615c8a565b61531d9190615c8a565b6153279084615c3f565b335f908152602080526040902060028101546005820155600901805462ff00001916905592506153669050565b8061535e81615ca1565b91505061516a565b505b601754335f9081526020805260409020600a01540361541c57335f908152602080526040902060058101546002909101546153a39190615c58565b6017545f90815260226020908152604080832060020154338452918052909120546153d790670de0b6b3a764000090615c6b565b6153e19190615c8a565b6153eb9190615c8a565b6153f59082615c3f565b335f908152602080526040902060028101546005820155600901805462ff00001916905590505b335f908152601f60205260408120600501805484929061543d908490615c3f565b9091555050335f90815260208052604081206006018054839290615462908490615c3f565b925050819055508160115f82825461547a9190615c3f565b925050819055508060125f8282546154929190615c3f565b90915550505050565b60025460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906154cd9030908590600401615bf7565b6020604051808303815f875af11580156154e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061550d9190615c10565b506002546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061554290339030908690600401615e56565b6020604051808303815f875af115801561555e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906155829190615c10565b50335f908152601f6020526040902060090154610100900460ff161515600103615619576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb916155d7913391869101615bf7565b6020604051808303815f875af11580156155f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906156179190615c10565b505b335f908152601f602052604081208054839290615637908490615c3f565b925050819055508060095f82825461564f9190615c3f565b909155505050565b60025460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906156899030908590600401615bf7565b6020604051808303815f875af11580156156a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906156c99190615c10565b506002546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906156fe90339030908690600401615e56565b6020604051808303815f875af115801561571a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061573e9190615c10565b50335f908152601f60205260408120805483929061575d908490615c3f565b9091555050335f908152601f6020526040902042600190910181905560135461578591615c3f565b335f908152601f602090815260408083206002810194909455600784018390556407915ecc00600885015560098085018054600161ffff198216811783556003880187905560068801879055426004890155601754600a890155600590970186905562ffffff191662010001179055601b54601e9093529083209182559201819055815483929190615818908490615c3f565b9091555050600b8054905f61582c83615ca1565b919050555050565b60035460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906158669030908590600401615bf7565b6020604051808303815f875af1158015615882573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906158a69190615c10565b506003546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906158db90339030908690600401615e56565b6020604051808303815f875af11580156158f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061591b9190615c10565b50335f90815260208052604081208054839290615939908490615c3f565b9250508190555080600a5f82825461564f9190615c3f565b60035460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906159839030908590600401615bf7565b6020604051808303815f875af115801561599f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906159c39190615c10565b506003546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906159f890339030908690600401615e56565b6020604051808303815f875af1158015615a14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190615a389190615c10565b50335f90815260208052604081208054839290615a56908490615c3f565b9091555050335f9081526020805260409020426001909101819055601454615a7d91615c3f565b335f90815260208052604081206002810192909255600982018054600784018390556407915ecc00600885015561ffff198116600117825560048401839055426005850155601754600a8086019190915560038501849055600690940183905562ffffff191662010001179055815483929190615afb908490615c3f565b9091555050600c8054905f61582c83615ca1565b5f60208284031215615b1f575f80fd5b5035919050565b5f805f60608486031215615b38575f80fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114610cb2575f80fd5b5f60208284031215615b73575f80fd5b8135615b7e81615b4f565b9392505050565b5f8060408385031215615b96575f80fd5b8235615ba181615b4f565b946020939093013593505050565b8015158114610cb2575f80fd5b5f60208284031215615bcc575f80fd5b8135615b7e81615baf565b5f8060408385031215615be8575f80fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b5f60208284031215615c20575f80fd5b8151615b7e81615baf565b634e487b7160e01b5f52601160045260245ffd5b80820180821115615c5257615c52615c2b565b92915050565b81810381811115615c5257615c52615c2b565b5f82615c8557634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417615c5257615c52615c2b565b5f60018201615cb257615cb2615c2b565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215615cdd575f80fd5b8151615b7e81615b4f565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b83811015615d335781516001600160a01b031687529582019590820190600101615d0e565b509495945050505050565b828152604060208201525f615d566040830184615cfc565b949350505050565b5f6020808385031215615d6f575f80fd5b825167ffffffffffffffff80821115615d86575f80fd5b818501915085601f830112615d99575f80fd5b815181811115615dab57615dab615cb9565b8060051b604051601f19603f83011681018181108582111715615dd057615dd0615cb9565b604052918252848201925083810185019188831115615ded575f80fd5b938501935b8285101561213857845184529385019392850192615df2565b5f60208284031215615e1b575f80fd5b5051919050565b848152608060208201525f615e3a6080830186615cfc565b6001600160a01b03949094166040830152506060015292915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f81615e8857615e88615c2b565b505f19019056fea2646970667358221220678c793e895ba5efb0b8ca4e677ba519b9bc809799f55faf5456f71f6670ac2264736f6c634300081500330000000000000000000000003e34eabf5858a126cb583107e643080cee20ca64000000000000000000000000a8a837e2bf0c37fef5c495951a0dfc33aaead57a000000000000000000000000e973ea957ff5462b1076f5f61ef2df7a4b2f13d800000000000000000000000009eefea02aa2e7914fb87f09eed1f9e3e363dbdd0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106102f6575f3560e01c80639a85d6b111610189578063cc8261c2116100d8578063df48d83b11610092578063ea41a76f1161006d578063ea41a76f146109a5578063f2fde38b14610a2e578063fb53abb814610a4d578063fbe7c08514610a6c575f80fd5b8063df48d83b1461092d578063e0f0985b1461094c578063e114b8ff1461096b575f80fd5b8063cc8261c214610851578063cd15153614610866578063ce24ab451461087a578063d01fe5fe1461088f578063d8d043cd146108ae578063dec794891461090e575f80fd5b8063a72b68c711610143578063c4389a031161011e578063c4389a0314610718578063c5ac67171461072d578063c8d0a0621461081d578063c8e4b0981461083c575f80fd5b8063a72b68c7146106aa578063aa7f085b146106e4578063b0a56c14146106f9575f80fd5b80639a85d6b1146105f05780639c6b99041461060f578063a0eba21a1461062e578063a1db97821461064d578063a20f54541461066c578063a4f5b9f21461068b575f80fd5b806350460cd0116102455780637a5800e9116101ff5780637efd68bb116101da5780637efd68bb146105775780637fa6170f1461058c5780638da5cb5b146105a15780639763715a146105d1575f80fd5b80637a5800e91461052f5780637aa70e3f1461054e5780637e9ef07914610562575f80fd5b806350460cd01461049f57806355bc473c146104b457806365af674d146104c8578063682b08d2146104e7578063715018a614610506578063760e24c71461051a575f80fd5b8063286912cb116102b05780634053119c1161028b5780634053119c146103fb5780634437d10d1461041a578063477d440d1461046157806349ff996414610480575f80fd5b8063286912cb146103a857806338150720146103c75780633b903632146103e6575f80fd5b80630191833b1461030157806305321ea414610329578063115784c41461034a57806311f3f90a1461035f5780631fc865221461037457806320b9e6c614610389575f80fd5b366102fd57005b5f80fd5b34801561030c575f80fd5b5061031660095481565b6040519081526020015b60405180910390f35b348015610334575f80fd5b50610348610343366004615b0f565b610a80565b005b348015610355575f80fd5b50610316600b5481565b34801561036a575f80fd5b5061031660135481565b34801561037f575f80fd5b50610316600c5481565b348015610394575f80fd5b506103486103a3366004615b0f565b610acf565b3480156103b3575f80fd5b506103486103c2366004615b0f565b610cb5565b3480156103d2575f80fd5b506103486103e1366004615b26565b610cc2565b3480156103f1575f80fd5b50610316601b5481565b348015610406575f80fd5b50610316610415366004615b63565b610dba565b348015610425575f80fd5b5061044c610434366004615b63565b601e6020525f90815260409020805460019091015482565b60408051928352602083019190915201610320565b34801561046c575f80fd5b5061034861047b366004615b0f565b612144565b34801561048b575f80fd5b5061034861049a366004615b0f565b612151565b3480156104aa575f80fd5b5061031660175481565b3480156104bf575f80fd5b5061034861215e565b3480156104d3575f80fd5b506103486104e2366004615b63565b6122b8565b3480156104f2575f80fd5b50610348610501366004615b63565b6122e2565b348015610511575f80fd5b5061034861230c565b348015610525575f80fd5b5061031660155481565b34801561053a575f80fd5b50610348610549366004615b0f565b61231f565b348015610559575f80fd5b506103486123ee565b34801561056d575f80fd5b5061031660125481565b348015610582575f80fd5b5061031660165481565b348015610597575f80fd5b50610316600e5481565b3480156105ac575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610320565b3480156105dc575f80fd5b506103486105eb366004615b0f565b612401565b3480156105fb575f80fd5b5061034861060a366004615b0f565b61240e565b34801561061a575f80fd5b50610348610629366004615b26565b61241b565b348015610639575f80fd5b50610348610648366004615b0f565b6125b3565b348015610658575f80fd5b50610348610667366004615b85565b6125c0565b348015610677575f80fd5b50610348610686366004615bbc565b61263b565b348015610696575f80fd5b506007546105b9906001600160a01b031681565b3480156106b5575f80fd5b506106c96106c4366004615b0f565b612661565b60408051938452602084019290925290820152606001610320565b3480156106ef575f80fd5b50610316600a5481565b348015610704575f80fd5b506005546105b9906001600160a01b031681565b348015610723575f80fd5b5061031660145481565b348015610738575f80fd5b506107b5610747366004615b63565b602080525f9081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a909a015498999798969795969495939492939192909160ff808216926101008304821692620100009004909116908d565b604080519d8e5260208e019c909c529a8c019990995260608b019790975260808a019590955260a089019390935260c088019190915260e08701526101008601521515610120850152151561014084015215156101608301526101808201526101a001610320565b348015610828575f80fd5b50610348610837366004615b0f565b6126ae565b348015610847575f80fd5b5061031660185481565b34801561085c575f80fd5b5061031660115481565b348015610871575f80fd5b506103486126bb565b348015610885575f80fd5b50610316600d5481565b34801561089a575f80fd5b506103166108a9366004615b63565b61282d565b3480156108b9575f80fd5b506108ee6108c8366004615b0f565b60216020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610320565b348015610919575f80fd5b50610348610928366004615b0f565b6128cb565b348015610938575f80fd5b50610348610947366004615bd7565b6128d8565b348015610957575f80fd5b50610348610966366004615b0f565b61296c565b348015610976575f80fd5b506106c9610985366004615b0f565b60226020525f908152604090208054600182015460029092015490919083565b3480156109b0575f80fd5b506107b56109bf366004615b63565b601f6020525f9081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a909a015498999798969795969495939492939192909160ff808216926101008304821692620100009004909116908d565b348015610a39575f80fd5b50610348610a48366004615b63565b612f6c565b348015610a58575f80fd5b50610348610a67366004615bd7565b612fe7565b348015610a77575f80fd5b50610348613010565b610a88613205565b80471015610a94575f80fd5b6007546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610acb573d5f803e3d5ffd5b5050565b600654600160a01b900460ff1615610ae5575f80fd5b801580610af25750806001145b610afa575f80fd5b805f03610c1b57335f908152601f6020526040902060090154610100900460ff1615610b24575f80fd5b335f908152601f602052604090206009015460ff161515600114610b46575f80fd5b335f908152601f60205260409020600201544211610b62575f80fd5b60048054335f818152601f60205260409081902054905163a9059cbb60e01b81526001600160a01b039093169363a9059cbb93610ba193929101615bf7565b6020604051808303815f875af1158015610bbd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be19190615c10565b610be9575f80fd5b335f908152601f60205260409020600981018054600283015460079093019290925562ffff0019909116620101001790555b80600103610cb257335f908152602080526040902060090154610100900460ff1615610c45575f80fd5b335f90815260208052604090206009015460ff161515600114610c66575f80fd5b335f9081526020805260409020600201544211610c81575f80fd5b335f9081526020805260409020600981018054600283015460079093019290925562ffff0019909116620101001790555b50565b610cbd613205565b601655565b600654600160a01b900460ff1615610cd8575f80fd5b801580610ce55750806001145b610ced575f80fd5b5f610cf733610dba565b90508015610d0757610d076126bb565b815f03610d5e575f8411610d19575f80fd5b335f908152601f6020526040902054841115610d33575f80fd5b335f908152601f602052604090206009015460ff161515600114610d55575f80fd5b610d5e8461325e565b81600103610db4575f8311610d71575f80fd5b335f908152602080526040902054831115610d8a575f80fd5b335f90815260208052604090206009015460ff161515600114610dab575f80fd5b610db4836138a4565b50505050565b6001600160a01b0381165f908152601f60208181526040808420600a8082015460048301548580529387209182015460059092015495909452600990910154929391929091908590819060ff6101009091041615156001148015610e3757506001600160a01b0388165f908152601f602052604090206008015442105b15610f8b576017548614610f1857855b601754811015610f16578560225f610e60846001615c3f565b81526020019081526020015f205f0154610e7a9190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f90925290912054610eb690670de0b6b3a764000090615c6b565b610ec09190615c8a565b610eca9190615c8a565b610ed49084615c3f565b925060225f610ee4836001615c3f565b815260208101919091526040015f2054955086610f0081615ca1565b9750508080610f0e90615ca1565b915050610e47565b505b6017548603610f8b57610f2b8542615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f90925290912054610f6a90670de0b6b3a764000090615c6b565b610f749190615c8a565b610f7e9190615c8a565b610f889083615c3f565b91505b6001600160a01b0388165f908152601f6020526040902060090154610100900460ff16158015610fda57506001600160a01b0388165f908152601f602052604090206009015460ff1615156001145b8015610fff57506001600160a01b0388165f908152601f602052604090206002015442105b156111535760175486146110e057855b6017548110156110de578560225f611028846001615c3f565b81526020019081526020015f205f01546110429190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f9092529091205461107e90670de0b6b3a764000090615c6b565b6110889190615c8a565b6110929190615c8a565b61109c9084615c3f565b925060225f6110ac836001615c3f565b815260208101919091526040015f20549550866110c881615ca1565b97505080806110d690615ca1565b91505061100f565b505b6017548603611153576110f38542615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f9092529091205461113290670de0b6b3a764000090615c6b565b61113c9190615c8a565b6111469190615c8a565b6111509083615c3f565b91505b6001600160a01b0388165f908152601f602052604090206009015460ff61010090910416151560011480156111a257506001600160a01b0388165f908152601f60205260409020600801544210155b80156111d357506001600160a01b0388165f908152601f602052604090206009015462010000900460ff1615156001145b1561144e576017548610156113bf57855b6017548110156113bd5760225f6111fc836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f909352206008015411156112e0578560225f61123c846001615c3f565b81526020019081526020015f205f01546112569190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f9092529091205461129290670de0b6b3a764000090615c6b565b61129c9190615c8a565b6112a69190615c8a565b6112b09084615c3f565b925060225f6112c0836001615c3f565b815260208101919091526040015f20549550866112dc81615ca1565b9750505b60225f6112ee836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f9093522060080154116113ab576001600160a01b0389165f908152601f6020526040812060080154611344908890615c58565b5f838152602260209081526040808320600101546001600160a01b038f168452601f90925290912054919250829161138590670de0b6b3a764000090615c6b565b61138f9190615c8a565b6113999190615c8a565b6113a39085615c3f565b9350506113bd565b806113b581615ca1565b9150506111e4565b505b601754860361144e576001600160a01b0388165f908152601f60205260409020600801546113ee908690615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f9092529091205461142d90670de0b6b3a764000090615c6b565b6114379190615c8a565b6114419190615c8a565b61144b9083615c3f565b91505b6001600160a01b0388165f908152601f6020526040902060090154610100900460ff1615801561149d57506001600160a01b0388165f908152601f602052604090206009015460ff1615156001145b80156114c357506001600160a01b0388165f908152601f60205260409020600201544210155b80156114f457506001600160a01b0388165f908152601f602052604090206009015462010000900460ff1615156001145b156117a25760175486101561171357855b6017548110156117115760225f61151d836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f90935220600201541115611601578560225f61155d846001615c3f565b81526020019081526020015f205f01546115779190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f909252909120546115b390670de0b6b3a764000090615c6b565b6115bd9190615c8a565b6115c79190615c8a565b6115d19084615c3f565b925060225f6115e1836001615c3f565b815260208101919091526040015f20549550866115fd81615ca1565b9750505b60225f61160f836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f90935220600201541180159061166d57506001600160a01b0389165f908152601f602052604090206009015462010000900460ff1615156001145b156116ff576001600160a01b0389165f908152601f6020526040812060020154611698908890615c58565b5f838152602260209081526040808320600101546001600160a01b038f168452601f9092529091205491925082916116d990670de0b6b3a764000090615c6b565b6116e39190615c8a565b6116ed9190615c8a565b6116f79085615c3f565b935050611711565b8061170981615ca1565b915050611505565b505b60175486036117a2576001600160a01b0388165f908152601f6020526040902060020154611742908690615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f9092529091205461178190670de0b6b3a764000090615c6b565b61178b9190615c8a565b6117959190615c8a565b61179f9083615c3f565b91505b6001600160a01b0388165f90815260208052604090206009015460ff61010090910416151560011480156117ee57506001600160a01b0388165f90815260208052604090206008015442105b1561193e5760175484146118cd57835b6017548110156118cb578360225f611817846001615c3f565b81526020019081526020015f205f01546118319190615c58565b5f828152602260209081526040808320600201546001600160a01b038e1684529180529091205461186b90670de0b6b3a764000090615c6b565b6118759190615c8a565b61187f9190615c8a565b6118899083615c3f565b915060225f611899836001615c3f565b815260208101919091526040015f20549350846118b581615ca1565b95505080806118c390615ca1565b9150506117fe565b505b601754840361193e576118e08342615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d1684529180529091205461191d90670de0b6b3a764000090615c6b565b6119279190615c8a565b6119319190615c8a565b61193b9082615c3f565b90505b6001600160a01b0388165f908152602080526040902060090154610100900460ff1615801561198b57506001600160a01b0388165f90815260208052604090206009015460ff1615156001145b80156119af57506001600160a01b0388165f90815260208052604090206002015442105b80156119df57506001600160a01b0388165f90815260208052604090206009015462010000900460ff1615156001145b15611b2f576017548414611abe57835b601754811015611abc578360225f611a08846001615c3f565b81526020019081526020015f205f0154611a229190615c58565b5f828152602260209081526040808320600201546001600160a01b038e16845291805290912054611a5c90670de0b6b3a764000090615c6b565b611a669190615c8a565b611a709190615c8a565b611a7a9083615c3f565b915060225f611a8a836001615c3f565b815260208101919091526040015f2054935084611aa681615ca1565b9550508080611ab490615ca1565b9150506119ef565b505b6017548403611b2f57611ad18342615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d16845291805290912054611b0e90670de0b6b3a764000090615c6b565b611b189190615c8a565b611b229190615c8a565b611b2c9082615c3f565b90505b6001600160a01b0388165f90815260208052604090206009015460ff6101009091041615156001148015611b7c57506001600160a01b0388165f9081526020805260409020600801544210155b15611e1c576017548414611d9057835b601754811015611d8e5760225f611ba4836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d16825292805220600801541115611c84578360225f611be2846001615c3f565b81526020019081526020015f205f0154611bfc9190615c58565b5f828152602260209081526040808320600201546001600160a01b038e16845291805290912054611c3690670de0b6b3a764000090615c6b565b611c409190615c8a565b611c4a9190615c8a565b611c549083615c3f565b915060225f611c64836001615c3f565b815260208101919091526040015f2054935084611c8081615ca1565b9550505b60225f611c92836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252928052206008015411801590611ced57506001600160a01b0389165f90815260208052604090206009015462010000900460ff1615156001145b15611d7c576001600160a01b0389165f908152602080526040812060080154611d17908690615c58565b5f838152602260209081526040808320600201546001600160a01b038f168452918052909120549192508291611d5690670de0b6b3a764000090615c6b565b611d609190615c8a565b611d6a9190615c8a565b611d749084615c3f565b925050611d8e565b80611d8681615ca1565b915050611b8c565b505b6017548403611e1c576001600160a01b0388165f908152602080526040902060080154611dbe908490615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d16845291805290912054611dfb90670de0b6b3a764000090615c6b565b611e059190615c8a565b611e0f9190615c8a565b611e199082615c3f565b90505b6001600160a01b0388165f908152602080526040902060090154610100900460ff16158015611e6957506001600160a01b0388165f90815260208052604090206009015460ff1615156001145b8015611e8e57506001600160a01b0388165f9081526020805260409020600201544210155b1561212e5760175484146120a257835b6017548110156120a05760225f611eb6836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d16825292805220600201541115611f96578360225f611ef4846001615c3f565b81526020019081526020015f205f0154611f0e9190615c58565b5f828152602260209081526040808320600201546001600160a01b038e16845291805290912054611f4890670de0b6b3a764000090615c6b565b611f529190615c8a565b611f5c9190615c8a565b611f669083615c3f565b915060225f611f76836001615c3f565b815260208101919091526040015f2054935084611f9281615ca1565b9550505b60225f611fa4836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252928052206002015411801590611fff57506001600160a01b0389165f90815260208052604090206009015462010000900460ff1615156001145b1561208e576001600160a01b0389165f908152602080526040812060020154612029908690615c58565b5f838152602260209081526040808320600201546001600160a01b038f16845291805290912054919250829161206890670de0b6b3a764000090615c6b565b6120729190615c8a565b61207c9190615c8a565b6120869084615c3f565b9250506120a0565b8061209881615ca1565b915050611e9e565b505b601754840361212e576001600160a01b0388165f9081526020805260409020600201546120d0908490615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d1684529180529091205461210d90670de0b6b3a764000090615c6b565b6121179190615c8a565b6121219190615c8a565b61212b9082615c3f565b90505b6121388183615c3f565b98975050505050505050565b61214c613205565b601455565b612159613205565b601355565b335f908152601e6020526040812054601b5461217a9190615c58565b335f908152601f6020526040812054600954929350916121a390670de0b6b3a764000090615c6b565b90505f816121b2846064615c8a565b6121bc9190615c6b565b90505f6121ca606483615c6b565b6121d49086615c8a565b90505f6121e9670de0b6b3a764000083615c6b565b60035460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb9061221c9033908590600401615bf7565b6020604051808303815f875af1158015612238573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061225c9190615c10565b50335f9081526020805260408120600301805483929061227d908490615c3f565b9091555050601b54335f908152601e60205260408120918255600190910180548392906122ab908490615c3f565b9091555050505050505050565b6122c0613205565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6122ea613205565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b612314613205565b61231d5f613dbf565b565b600654600160a01b900460ff1615612335575f80fd5b8015801561235f5750335f908152601f602052604090206009015460ff6101009091041615156001145b8061239057508060011480156123905750335f90815260208052604090206009015460ff6101009091041615156001145b612398575f80fd5b805f036123c2575f601554426123ae9190615c3f565b335f908152601f6020526040902060080155505b80600103610cb2575f601654426123d99190615c3f565b335f9081526020805260409020600801555050565b6123f6613205565b5f600f819055601055565b612409613205565b601555565b612416613205565b601a55565b600654600160a01b900460ff1615612431575f80fd5b80158061243e5750806001145b612446575f80fd5b335f908152601f602052604090206009015460ff161515600114806124805750335f90815260208052604090206009015460ff1615156001145b1561248d5761248d613e0e565b805f0361250b576019548310156124a2575f80fd5b335f908152601f602052604090206009015460ff1615156001036124e5575f6124ca3361282d565b905080156124da576124da61215e565b6124e38461549b565b505b335f908152601f602052604081206009015460ff161515900361250b5761250b83615657565b8060010361256c57601a54821015612521575f80fd5b335f90815260208052604090206009015460ff1615156001036125475761254782615834565b335f90815260208052604081206009015460ff161515900361256c5761256c82615951565b60408051338152602081018590529081018390527fe41aca6803ab96b2eebcb4810bd12878f9891213ac7855733805bc095b83d058906060015b60405180910390a1505050565b6125bb613205565b601d55565b6125c8613205565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906125f69033908590600401615bf7565b6020604051808303815f875af1158015612612573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126369190615c10565b505050565b612643613205565b60068054911515600160a01b0260ff60a01b19909216919091179055565b5f805f6017548410612671575f80fd5b5050505f81815260226020908152604091829020825160608101845281548082526001830154938201849052600290920154930183905293909250565b6126b6613205565b601c55565b6126c3613e0e565b335f908152601f602090815260408083206005015491805282206006015490916126ed8284615c3f565b9050804710156126fb575f80fd5b604051339082156108fc029083905f818181858888f19350505050158015612725573d5f803e3d5ffd5b50335f908152601f602052604081206003018054859290612747908490615c3f565b9091555050335f9081526020805260408120600401805484929061276c908490615c3f565b9091555050335f908152601f602090815260408083206005018390559080528120600601819055600d80548392906127a5908490615c3f565b9091555050601c548111156127ee577f09bbc196c5b25ae4a2ce7cb573a0e91cf0f091d6c125f5db36489b8625d81ca533826040516127e5929190615bf7565b60405180910390a15b601d5447101561263657604080514281524760208201527fbe01094ad628b24be59bba55486a9265da2fd85b3526dafae7ad71c4bd1c9ded91016125a6565b6001600160a01b0381165f908152601e6020526040812054601b54829161285391615c58565b6001600160a01b0384165f908152601f60205260408120546009549293509161288590670de0b6b3a764000090615c6b565b90505f81612894846064615c8a565b61289e9190615c6b565b90505f6128ac606483615c6b565b6128b69086615c8a565b90505f612138670de0b6b3a764000083615c6b565b6128d3613205565b601955565b6128e0613205565b60178054905f6128ef83615ca1565b9091555050601754604080516060808201835242825260208083018781528385018781525f8781526022845286902094518555905160018501555160029093019290925582518481529182018690529181018490527f5ead928997a87f087dff9f1b3a30924221910665d62d27862eed256ab4abf15591016125a6565b335f908152601f602052604090206009015460ff1615156001036129925761299261215e565b61299a613e0e565b335f908152601f602090815260408083206005015491805282206006015490916129c48284615c3f565b6040805160028082526060820183529293505f9290916020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612a30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a549190615ccd565b815f81518110612a6657612a66615ce8565b6001600160a01b039283166020918202929092010152600854825191169082906001908110612a9757612a97615ce8565b6001600160a01b03928316602091820292909201015260065460405163d06ca61f60e01b81525f92919091169063d06ca61f90612ada9086908690600401615d3e565b5f60405180830381865afa158015612af4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612b1b9190810190615d5e565b90505f81600181518110612b3157612b31615ce8565b60209081029190910101516002546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612b87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bab9190615e0b565b90505f6064612bba8a85615c8a565b612bc49190615c6b565b90505f612bd18285615c58565b60065460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de95908990612c0a9085908b9030904290600401615e22565b5f604051808303818588803b158015612c21575f80fd5b505af1158015612c33573d5f803e3d5ffd5b50506002546040516370a0823160e01b81523060048201525f94506001600160a01b0390911692506370a082319150602401602060405180830381865afa158015612c80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ca49190615e0b565b90505f612cb18583615c58565b335f908152601f6020526040902060090154909150610100900460ff161515600103612d4a576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91612d08913391869101615bf7565b6020604051808303815f875af1158015612d24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d489190615c10565b505b335f908152601f602052604090206009015460ff161515600103612dd257335f908152601f602052604081208054839290612d86908490615c3f565b9091555050335f908152601f6020526040812060060180548b9290612dac908490615c3f565b9091555050335f908152601f602090815260408083206005018390559080528120600601555b335f908152601f602052604081206009015460ff1615159003612eef57335f908152601f602052604081208054839290612e0d908490615c3f565b9091555050335f908152601f60205260409020426001909101819055601354612e3591615c3f565b335f908152601f602090815260408083206002810194909455600784018390556407915ecc00600885015560098085018054600161ffff198216811783556003880187905560068089018890554260048a0155601754600a8a0155600590980187905562ffffff199091166201000117909155601b54601e8552838620908155018490559180528220909201819055815483929190612ed5908490615c3f565b9091555050600b8054905f612ee983615ca1565b91905055505b8060095f828254612f009190615c3f565b9250508190555088600e5f828254612f189190615c3f565b909155505060408051338152602081018b90529081018290527f7a9b8ad43aacbbf8905aa3cb89f0f20ca67e967741923008984db7686d3af59b9060600160405180910390a1505050505050505050505050565b612f74613205565b6001600160a01b038116612fde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610cb281613dbf565b612fef613205565b603c612ffb8284615c3f565b1115613005575f80fd5b600f91909155601055565b613018613205565b6003546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa15801561305e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130829190615e0b565b905060055f9054906101000a90046001600160a01b03166001600160a01b0316634e71d92d6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156130d0575f80fd5b505af11580156130e2573d5f803e3d5ffd5b50506003546040516370a0823160e01b81523060048201525f93506001600160a01b0390911691506370a0823190602401602060405180830381865afa15801561312e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131529190615e0b565b90505f61315f8383615c58565b90505f60095482670de0b6b3a76400006131799190615c8a565b6131839190615c6b565b60188054604080516080810182524281526020808201888152600954838501908152606084018881525f8781526021909452948320935184559051600184015551600283015591516003909101558254939450909291906131e383615ca1565b919050555082601b5f8282546131f99190615c3f565b90915550505050505050565b5f546001600160a01b0316331461231d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401612fd5565b335f908152601f6020526040902060090154610100900460ff161515600103613368576004805460405163095ea7b360e01b81526001600160a01b039091169163095ea7b3916132b2913091869101615bf7565b6020604051808303815f875af11580156132ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132f29190615c10565b50600480546040516323b872dd60e01b81526001600160a01b03909116916323b872dd916133269133913091879101615e56565b6020604051808303815f875af1158015613342573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133669190615c10565b505b5f6133723361282d565b905080156133825761338261215e565b335f908152601f60205260408120600801548190421180156133c05750335f908152601f602052604090206009015460ff6101009091041615156001145b1561345c5760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906133f79033908890600401615bf7565b6020604051808303815f875af1158015613413573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134379190615c10565b50335f908152601f602052604081208054869290613456908490615c58565b90915550505b335f908152601f6020526040902060020154421180156134935750335f908152601f6020526040902060090154610100900460ff16155b1561352f5760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906134ca9033908890600401615bf7565b6020604051808303815f875af11580156134e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061350a9190615c10565b50335f908152601f602052604081208054869290613529908490615c58565b90915550505b335f908152601f60205260409020600801544210801561356b5750335f908152601f602052604090206009015460ff6101009091041615156001145b156136a5576064600f54856135809190615c8a565b61358a9190615c6b565b90506135968185615c58565b60025460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb906135c99033908690600401615bf7565b6020604051808303815f875af11580156135e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136099190615c10565b5060025460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92613640929116908590600401615bf7565b6020604051808303815f875af115801561365c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136809190615c10565b50335f908152601f60205260408120805486929061369f908490615c58565b90915550505b335f908152601f6020526040902060020154421080156136dc5750335f908152601f6020526040902060090154610100900460ff16155b15613816576064600f54856136f19190615c8a565b6136fb9190615c6b565b90506137078185615c58565b60025460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb9061373a9033908690600401615bf7565b6020604051808303815f875af1158015613756573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061377a9190615c10565b5060025460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb926137b1929116908590600401615bf7565b6020604051808303815f875af11580156137cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137f19190615c10565b50335f908152601f602052604081208054869290613810908490615c58565b90915550505b601954335f908152601f60205260409020541015610db457335f908152601f60205260408120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055600781018290556008810182905560098101805462ffffff19169055600a01819055600b80549161389983615e7a565b919050555050505050565b335f908152602080526040812060080154819042108015906138e15750335f90815260208052604090206009015460ff6101009091041615156001145b1561397f5760035460405163a9059cbb60e01b81528493506001600160a01b039091169063a9059cbb9061391b9033908690600401615bf7565b6020604051808303815f875af1158015613937573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061395b9190615c10565b50335f90815260208052604081208054859290613979908490615c58565b90915550505b335f90815260208052604090206002015442108015906139b55750335f908152602080526040902060090154610100900460ff16155b15613a535760035460405163a9059cbb60e01b81528493506001600160a01b039091169063a9059cbb906139ef9033908690600401615bf7565b6020604051808303815f875af1158015613a0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a2f9190615c10565b50335f90815260208052604081208054859290613a4d908490615c58565b90915550505b335f90815260208052604090206008015442108015613a8d5750335f90815260208052604090206009015460ff6101009091041615156001145b15613bc657606460105484613aa29190615c8a565b613aac9190615c6b565b9050613ab88184615c58565b60035460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb90613aeb9033908690600401615bf7565b6020604051808303815f875af1158015613b07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b2b9190615c10565b5060035460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92613b62929116908590600401615bf7565b6020604051808303815f875af1158015613b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ba29190615c10565b50335f90815260208052604081208054859290613bc0908490615c58565b90915550505b335f90815260208052604090206002015442108015613bfb5750335f908152602080526040902060090154610100900460ff16155b15613d3457606460105484613c109190615c8a565b613c1a9190615c6b565b9050613c268184615c58565b60035460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb90613c599033908690600401615bf7565b6020604051808303815f875af1158015613c75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c999190615c10565b5060035460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92613cd0929116908590600401615bf7565b6020604051808303815f875af1158015613cec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d109190615c10565b50335f90815260208052604081208054859290613d2e908490615c58565b90915550505b601a54335f908152602080526040902054101561263657335f9081526020805260408120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055600781018290556008810182905560098101805462ffffff19169055600a01819055600c805491613db583615e7a565b9190505550505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b335f908152601f6020526040812060090154819060ff6101009091041615156001148015613e4c5750335f908152601f602052604090206008015442105b1561401957601754335f908152601f60205260409020600a015414613f7757335f908152601f60205260409020600a01545b601754811015613f7557335f908152601f602052604081206004015490602290613ea9846001615c3f565b81526020019081526020015f205f0154613ec39190615c58565b5f82815260226020908152604080832060010154338452601f90925290912054613ef690670de0b6b3a764000090615c6b565b613f009190615c8a565b613f0a9190615c8a565b613f149084615c3f565b925060225f613f24836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a909101805491613f5d83615ca1565b91905055508080613f6d90615ca1565b915050613e7e565b505b601754335f908152601f60205260409020600a01540361401957335f908152601f6020526040902060040154613fad9042615c58565b6017545f90815260226020908152604080832060010154338452601f90925290912054613fe390670de0b6b3a764000090615c6b565b613fed9190615c8a565b613ff79190615c8a565b6140019083615c3f565b335f908152601f602052604090204260049091015591505b335f908152601f6020526040902060090154610100900460ff161580156140565750335f908152601f602052604090206009015460ff1615156001145b80156140725750335f908152601f602052604090206002015442105b1561423f57601754335f908152601f60205260409020600a01541461419d57335f908152601f60205260409020600a01545b60175481101561419b57335f908152601f6020526040812060040154906022906140cf846001615c3f565b81526020019081526020015f205f01546140e99190615c58565b5f82815260226020908152604080832060010154338452601f9092529091205461411c90670de0b6b3a764000090615c6b565b6141269190615c8a565b6141309190615c8a565b61413a9084615c3f565b925060225f61414a836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a90910180549161418383615ca1565b9190505550808061419390615ca1565b9150506140a4565b505b601754335f908152601f60205260409020600a01540361423f57335f908152601f60205260409020600401546141d39042615c58565b6017545f90815260226020908152604080832060010154338452601f9092529091205461420990670de0b6b3a764000090615c6b565b6142139190615c8a565b61421d9190615c8a565b6142279083615c3f565b335f908152601f602052604090204260049091015591505b335f908152601f602052604090206009015460ff610100909104161515600114801561427c5750335f908152601f60205260409020600801544210155b80156142a45750335f908152601f602052604090206009015462010000900460ff1615156001145b1561459b57601754335f908152601f60205260409020600a015410156144e257335f908152601f60205260409020600a01545b6017548110156144e05760225f6142ef836001615c3f565b815260208082019290925260409081015f90812054338252601f909352206008015411156143f257335f908152601f602052604081206004015490602290614338846001615c3f565b81526020019081526020015f205f01546143529190615c58565b5f82815260226020908152604080832060010154338452601f9092529091205461438590670de0b6b3a764000090615c6b565b61438f9190615c8a565b6143999190615c8a565b6143a39084615c3f565b925060225f6143b3836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a9091018054916143ec83615ca1565b91905055505b60225f614400836001615c3f565b815260208082019290925260409081015f90812054338252601f9093522060080154116144ce57335f908152601f60205260408120600481015460089091015461444a9190615c58565b5f83815260226020908152604080832060010154338452601f90925290912054919250829161448290670de0b6b3a764000090615c6b565b61448c9190615c8a565b6144969190615c8a565b6144a09085615c3f565b335f908152601f6020526040902060088101546004820155600901805462ff00001916905593506144e09050565b806144d881615ca1565b9150506142d7565b505b601754335f908152601f60205260409020600a01540361459b57335f908152601f60205260409020600481015460089091015461451f9190615c58565b6017545f90815260226020908152604080832060010154338452601f9092529091205461455590670de0b6b3a764000090615c6b565b61455f9190615c8a565b6145699190615c8a565b6145739083615c3f565b335f908152601f6020526040902060088101546004820155600901805462ff00001916905591505b335f908152601f6020526040902060090154610100900460ff161580156145d85750335f908152601f602052604090206009015460ff1615156001145b80156145f55750335f908152601f60205260409020600201544210155b801561461d5750335f908152601f602052604090206009015462010000900460ff1615156001145b1561493e57601754335f908152601f60205260409020600a0154101561488557335f908152601f60205260409020600a01545b6017548110156148835760225f614668836001615c3f565b815260208082019290925260409081015f90812054338252601f9093522060020154111561476b57335f908152601f6020526040812060040154906022906146b1846001615c3f565b81526020019081526020015f205f01546146cb9190615c58565b5f82815260226020908152604080832060010154338452601f909252909120546146fe90670de0b6b3a764000090615c6b565b6147089190615c8a565b6147129190615c8a565b61471c9084615c3f565b925060225f61472c836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a90910180549161476583615ca1565b91905055505b60225f614779836001615c3f565b815260208082019290925260409081015f90812054338252601f9093522060020154118015906147c55750335f908152601f602052604090206009015462010000900460ff1615156001145b1561487157335f908152601f6020526040812060048101546002909101546147ed9190615c58565b5f83815260226020908152604080832060010154338452601f90925290912054919250829161482590670de0b6b3a764000090615c6b565b61482f9190615c8a565b6148399190615c8a565b6148439085615c3f565b335f908152601f6020526040902060028101546004820155600901805462ff00001916905593506148839050565b8061487b81615ca1565b915050614650565b505b601754335f908152601f60205260409020600a01540361493e57335f908152601f6020526040902060048101546002909101546148c29190615c58565b6017545f90815260226020908152604080832060010154338452601f909252909120546148f890670de0b6b3a764000090615c6b565b6149029190615c8a565b61490c9190615c8a565b6149169083615c3f565b335f908152601f6020526040902060028101546004820155600901805462ff00001916905591505b335f90815260208052604090206009015460ff61010090910416151560011480156149785750335f90815260208052604090206008015442105b15614b3957601754335f9081526020805260409020600a015414614a9c57335f9081526020805260409020600a01545b601754811015614a9a57335f908152602080526040812060050154906022906149d2846001615c3f565b81526020019081526020015f205f01546149ec9190615c58565b5f8281526022602090815260408083206002015433845291805290912054614a1d90670de0b6b3a764000090615c6b565b614a279190615c8a565b614a319190615c8a565b614a3b9083615c3f565b915060225f614a4b836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a909101805491614a8283615ca1565b91905055508080614a9290615ca1565b9150506149a8565b505b601754335f9081526020805260409020600a015403614b3957335f908152602080526040902060050154614ad09042615c58565b6017545f9081526022602090815260408083206002015433845291805290912054614b0490670de0b6b3a764000090615c6b565b614b0e9190615c8a565b614b189190615c8a565b614b229082615c3f565b335f90815260208052604090204260059091015590505b335f908152602080526040902060090154610100900460ff16158015614b745750335f90815260208052604090206009015460ff1615156001145b8015614b8f5750335f90815260208052604090206002015442105b8015614bb65750335f90815260208052604090206009015462010000900460ff1615156001145b15614d7757601754335f9081526020805260409020600a015414614cda57335f9081526020805260409020600a01545b601754811015614cd857335f90815260208052604081206005015490602290614c10846001615c3f565b81526020019081526020015f205f0154614c2a9190615c58565b5f8281526022602090815260408083206002015433845291805290912054614c5b90670de0b6b3a764000090615c6b565b614c659190615c8a565b614c6f9190615c8a565b614c799083615c3f565b915060225f614c89836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a909101805491614cc083615ca1565b91905055508080614cd090615ca1565b915050614be6565b505b601754335f9081526020805260409020600a015403614d7757335f908152602080526040902060050154614d0e9042615c58565b6017545f9081526022602090815260408083206002015433845291805290912054614d4290670de0b6b3a764000090615c6b565b614d4c9190615c8a565b614d569190615c8a565b614d609082615c3f565b335f90815260208052604090204260059091015590505b335f90815260208052604090206009015460ff6101009091041615156001148015614db25750335f9081526020805260409020600801544210155b8015614dd95750335f90815260208052604090206009015462010000900460ff1615156001145b156150bc57601754335f9081526020805260409020600a0154101561500857335f9081526020805260409020600a01545b6017548110156150065760225f614e22836001615c3f565b815260208082019290925260409081015f9081205433825292805220600801541115614f1e57335f90815260208052604081206005015490602290614e68846001615c3f565b81526020019081526020015f205f0154614e829190615c58565b5f8281526022602090815260408083206002015433845291805290912054614eb390670de0b6b3a764000090615c6b565b614ebd9190615c8a565b614ec79190615c8a565b614ed19083615c3f565b915060225f614ee1836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a909101805491614f1883615ca1565b91905055505b60225f614f2c836001615c3f565b815260208082019290925260409081015f90812054338252928052206008015411614ff457335f90815260208052604081206005810154600890910154614f739190615c58565b5f83815260226020908152604080832060020154338452918052909120549192508291614fa990670de0b6b3a764000090615c6b565b614fb39190615c8a565b614fbd9190615c8a565b614fc79084615c3f565b335f908152602080526040902060088101546005820155600901805462ff00001916905592506150069050565b80614ffe81615ca1565b915050614e0a565b505b601754335f9081526020805260409020600a0154036150bc57335f908152602080526040902060058101546008909101546150439190615c58565b6017545f908152602260209081526040808320600201543384529180529091205461507790670de0b6b3a764000090615c6b565b6150819190615c8a565b61508b9190615c8a565b6150959082615c3f565b335f908152602080526040902060088101546005820155600901805462ff00001916905590505b335f908152602080526040902060090154610100900460ff161580156150f75750335f90815260208052604090206009015460ff1615156001145b80156151135750335f9081526020805260409020600201544210155b801561513a5750335f90815260208052604090206009015462010000900460ff1615156001145b1561541c57601754335f9081526020805260409020600a01541461536857335f9081526020805260409020600a01545b6017548110156153665760225f615182836001615c3f565b815260208082019290925260409081015f908120543382529280522060020154111561527e57335f908152602080526040812060050154906022906151c8846001615c3f565b81526020019081526020015f205f01546151e29190615c58565b5f828152602260209081526040808320600201543384529180529091205461521390670de0b6b3a764000090615c6b565b61521d9190615c8a565b6152279190615c8a565b6152319083615c3f565b915060225f615241836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a90910180549161527883615ca1565b91905055505b60225f61528c836001615c3f565b815260208082019290925260409081015f9081205433825292805220600201541161535457335f908152602080526040812060058101546002909101546152d39190615c58565b5f8381526022602090815260408083206002015433845291805290912054919250829161530990670de0b6b3a764000090615c6b565b6153139190615c8a565b61531d9190615c8a565b6153279084615c3f565b335f908152602080526040902060028101546005820155600901805462ff00001916905592506153669050565b8061535e81615ca1565b91505061516a565b505b601754335f9081526020805260409020600a01540361541c57335f908152602080526040902060058101546002909101546153a39190615c58565b6017545f90815260226020908152604080832060020154338452918052909120546153d790670de0b6b3a764000090615c6b565b6153e19190615c8a565b6153eb9190615c8a565b6153f59082615c3f565b335f908152602080526040902060028101546005820155600901805462ff00001916905590505b335f908152601f60205260408120600501805484929061543d908490615c3f565b9091555050335f90815260208052604081206006018054839290615462908490615c3f565b925050819055508160115f82825461547a9190615c3f565b925050819055508060125f8282546154929190615c3f565b90915550505050565b60025460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906154cd9030908590600401615bf7565b6020604051808303815f875af11580156154e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061550d9190615c10565b506002546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061554290339030908690600401615e56565b6020604051808303815f875af115801561555e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906155829190615c10565b50335f908152601f6020526040902060090154610100900460ff161515600103615619576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb916155d7913391869101615bf7565b6020604051808303815f875af11580156155f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906156179190615c10565b505b335f908152601f602052604081208054839290615637908490615c3f565b925050819055508060095f82825461564f9190615c3f565b909155505050565b60025460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906156899030908590600401615bf7565b6020604051808303815f875af11580156156a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906156c99190615c10565b506002546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906156fe90339030908690600401615e56565b6020604051808303815f875af115801561571a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061573e9190615c10565b50335f908152601f60205260408120805483929061575d908490615c3f565b9091555050335f908152601f6020526040902042600190910181905560135461578591615c3f565b335f908152601f602090815260408083206002810194909455600784018390556407915ecc00600885015560098085018054600161ffff198216811783556003880187905560068801879055426004890155601754600a890155600590970186905562ffffff191662010001179055601b54601e9093529083209182559201819055815483929190615818908490615c3f565b9091555050600b8054905f61582c83615ca1565b919050555050565b60035460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906158669030908590600401615bf7565b6020604051808303815f875af1158015615882573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906158a69190615c10565b506003546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906158db90339030908690600401615e56565b6020604051808303815f875af11580156158f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061591b9190615c10565b50335f90815260208052604081208054839290615939908490615c3f565b9250508190555080600a5f82825461564f9190615c3f565b60035460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906159839030908590600401615bf7565b6020604051808303815f875af115801561599f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906159c39190615c10565b506003546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906159f890339030908690600401615e56565b6020604051808303815f875af1158015615a14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190615a389190615c10565b50335f90815260208052604081208054839290615a56908490615c3f565b9091555050335f9081526020805260409020426001909101819055601454615a7d91615c3f565b335f90815260208052604081206002810192909255600982018054600784018390556407915ecc00600885015561ffff198116600117825560048401839055426005850155601754600a8086019190915560038501849055600690940183905562ffffff191662010001179055815483929190615afb908490615c3f565b9091555050600c8054905f61582c83615ca1565b5f60208284031215615b1f575f80fd5b5035919050565b5f805f60608486031215615b38575f80fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114610cb2575f80fd5b5f60208284031215615b73575f80fd5b8135615b7e81615b4f565b9392505050565b5f8060408385031215615b96575f80fd5b8235615ba181615b4f565b946020939093013593505050565b8015158114610cb2575f80fd5b5f60208284031215615bcc575f80fd5b8135615b7e81615baf565b5f8060408385031215615be8575f80fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b5f60208284031215615c20575f80fd5b8151615b7e81615baf565b634e487b7160e01b5f52601160045260245ffd5b80820180821115615c5257615c52615c2b565b92915050565b81810381811115615c5257615c52615c2b565b5f82615c8557634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417615c5257615c52615c2b565b5f60018201615cb257615cb2615c2b565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215615cdd575f80fd5b8151615b7e81615b4f565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b83811015615d335781516001600160a01b031687529582019590820190600101615d0e565b509495945050505050565b828152604060208201525f615d566040830184615cfc565b949350505050565b5f6020808385031215615d6f575f80fd5b825167ffffffffffffffff80821115615d86575f80fd5b818501915085601f830112615d99575f80fd5b815181811115615dab57615dab615cb9565b8060051b604051601f19603f83011681018181108582111715615dd057615dd0615cb9565b604052918252848201925083810185019188831115615ded575f80fd5b938501935b8285101561213857845184529385019392850192615df2565b5f60208284031215615e1b575f80fd5b5051919050565b848152608060208201525f615e3a6080830186615cfc565b6001600160a01b03949094166040830152506060015292915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f81615e8857615e88615c2b565b505f19019056fea2646970667358221220678c793e895ba5efb0b8ca4e677ba519b9bc809799f55faf5456f71f6670ac2264736f6c63430008150033

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

0000000000000000000000003e34eabf5858a126cb583107e643080cee20ca64000000000000000000000000a8a837e2bf0c37fef5c495951a0dfc33aaead57a000000000000000000000000e973ea957ff5462b1076f5f61ef2df7a4b2f13d800000000000000000000000009eefea02aa2e7914fb87f09eed1f9e3e363dbdd0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _linqAddress (address): 0x3e34eabF5858a126cb583107E643080cEE20cA64
Arg [1] : _milQAddress (address): 0xA8A837E2bf0c37fEf5C495951a0DFc33aaEAD57A
Arg [2] : _glinQAddress (address): 0xe973Ea957fF5462B1076f5f61EF2df7A4B2f13d8
Arg [3] : _oddysParlour (address): 0x09eeFea02Aa2E7914fb87F09eEd1f9E3E363dbDD
Arg [4] : _uniswapRouterAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000003e34eabf5858a126cb583107e643080cee20ca64
Arg [1] : 000000000000000000000000a8a837e2bf0c37fef5c495951a0dfc33aaead57a
Arg [2] : 000000000000000000000000e973ea957ff5462b1076f5f61ef2df7a4b2f13d8
Arg [3] : 00000000000000000000000009eefea02aa2e7914fb87f09eed1f9e3e363dbdd
Arg [4] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

14606:50143:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15393:25;;;;;;;;;;;;;;;;;;;160::1;;;148:2;133:18;15393:25:0;;;;;;;;20039:171;;;;;;;;;;-1:-1:-1;20039:171:0;;;;;:::i;:::-;;:::i;:::-;;15463:26;;;;;;;;;;;;;;;;15824:31;;;;;;;;;;;;;;;;15498:26;;;;;;;;;;;;;;;;25467:1184;;;;;;;;;;-1:-1:-1;25467:1184:0;;;;;:::i;:::-;;:::i;20789:141::-;;;;;;;;;;-1:-1:-1;20789:141:0;;;;;:::i;:::-;;:::i;27327:820::-;;;;;;;;;;-1:-1:-1;27327:820:0;;;;;:::i;:::-;;:::i;16192:35::-;;;;;;;;;;;;;;;;48272:10607;;;;;;;;;;-1:-1:-1;48272:10607:0;;;;;:::i;:::-;;:::i;18281:43::-;;;;;;;;;;-1:-1:-1;18281:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;1264:25:1;;;1320:2;1305:18;;1298:34;;;;1237:18;18281:43:0;1090:248:1;20499:137:0;;;;;;;;;;-1:-1:-1;20499:137:0;;;;;:::i;:::-;;:::i;20358:133::-;;;;;;;;;;-1:-1:-1;20358:133:0;;;;;:::i;:::-;;:::i;15988:45::-;;;;;;;;;;;;;;;;63493:699;;;;;;;;;;;;;:::i;19145:90::-;;;;;;;;;;-1:-1:-1;19145:90:0;;;;;:::i;:::-;;:::i;19025:112::-;;;;;;;;;;-1:-1:-1;19025:112:0;;;;;:::i;:::-;;:::i;2809:103::-;;;;;;;;;;;;;:::i;15905:32::-;;;;;;;;;;;;;;;;26659:660;;;;;;;;;;-1:-1:-1;26659:660:0;;;;;:::i;:::-;;:::i;18901:116::-;;;;;;;;;;;;;:::i;15777:38::-;;;;;;;;;;;;;;;;15946:33;;;;;;;;;;;;;;;;15580:41;;;;;;;;;;;;;;;;2161:87;;;;;;;;;;-1:-1:-1;2207:7:0;2234:6;-1:-1:-1;;;;;2234:6:0;2161:87;;;-1:-1:-1;;;;;1773:32:1;;;1755:51;;1743:2;1728:18;2161:87:0;1609:203:1;20644:137:0;;;;;;;;;;-1:-1:-1;20644:137:0;;;;;:::i;:::-;;:::i;21043:97::-;;;;;;;;;;-1:-1:-1;21043:97:0;;;;;:::i;:::-;;:::i;21148:1304::-;;;;;;;;;;-1:-1:-1;21148:1304:0;;;;;:::i;:::-;;:::i;16602:118::-;;;;;;;;;;-1:-1:-1;16602:118:0;;;;;:::i;:::-;;:::i;20218:132::-;;;;;;;;;;-1:-1:-1;20218:132:0;;;;;:::i;:::-;;:::i;19938:93::-;;;;;;;;;;-1:-1:-1;19938:93:0;;;;;:::i;:::-;;:::i;15276:27::-;;;;;;;;;;-1:-1:-1;15276:27:0;;;;-1:-1:-1;;;;;15276:27:0;;;19617:313;;;;;;;;;;-1:-1:-1;19617:313:0;;;;;:::i;:::-;;:::i;:::-;;;;2708:25:1;;;2764:2;2749:18;;2742:34;;;;2792:18;;;2785:34;2696:2;2681:18;19617:313:0;2506:319:1;15428:26:0;;;;;;;;;;;;;;;;14740:18;;;;;;;;;;-1:-1:-1;14740:18:0;;;;-1:-1:-1;;;;;14740:18:0;;;15864:32;;;;;;;;;;;;;;;;18393:55;;;;;;;;;;-1:-1:-1;18393:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3519:25:1;;;3575:2;3560:18;;3553:34;;;;3603:18;;;3596:34;;;;3661:2;3646:18;;3639:34;;;;3704:3;3689:19;;3682:35;;;;3748:3;3733:19;;3726:35;;;;3792:3;3777:19;;3770:35;;;;3836:3;3821:19;;3814:35;3880:3;3865:19;;3858:35;3937:14;3930:22;3924:3;3909:19;;3902:51;3997:15;3990:23;3984:3;3969:19;;3962:52;4058:15;4051:23;4045:3;4030:19;;4023:52;4106:3;4091:19;;4084:36;3506:3;3491:19;18393:55:0;3051:1075:1;16355:116:0;;;;;;;;;;-1:-1:-1;16355:116:0;;;;;:::i;:::-;;:::i;16042:32::-;;;;;;;;;;;;;;;;15731:37;;;;;;;;;;;;;;;;62027:907;;;;;;;;;;;;;:::i;15533:38::-;;;;;;;;;;;;;;;;64204:505;;;;;;;;;;-1:-1:-1;64204:505:0;;;;;:::i;:::-;;:::i;18455:53::-;;;;;;;;;;-1:-1:-1;18455:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4362:25:1;;;4418:2;4403:18;;4396:34;;;;4446:18;;;4439:34;4504:2;4489:18;;4482:34;4349:3;4334:19;18455:53:0;4131:391:1;20938:97:0;;;;;;;;;;-1:-1:-1;20938:97:0;;;;;:::i;:::-;;:::i;19246:363::-;;;;;;;;;;-1:-1:-1;19246:363:0;;;;;:::i;:::-;;:::i;58887:3124::-;;;;;;;;;;-1:-1:-1;58887:3124:0;;;;;:::i;:::-;;:::i;18515:69::-;;;;;;;;;;-1:-1:-1;18515:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18331:55;;;;;;;;;;-1:-1:-1;18331:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3067:201;;;;;;;;;;-1:-1:-1;3067:201:0;;;;;:::i;:::-;;:::i;18593:300::-;;;;;;;;;;-1:-1:-1;18593:300:0;;;;;:::i;:::-;;:::i;62942:543::-;;;;;;;;;;;;;:::i;20039:171::-;2047:13;:11;:13::i;:::-;20146:6:::1;20121:21;:31;;20113:40;;;::::0;::::1;;20172:12;::::0;20164:38:::1;::::0;-1:-1:-1;;;;;20172:12:0;;::::1;::::0;20164:38;::::1;;;::::0;20195:6;;20172:12:::1;20164:38:::0;20172:12;20164:38;20195:6;20172:12;20164:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;20039:171:::0;:::o;25467:1184::-;25527:13;;-1:-1:-1;;;25527:13:0;;;;25526:14;25518:23;;;;;;25561:9;;;:22;;;25574:4;25582:1;25574:9;25561:22;25552:32;;;;;;25601:4;25609:1;25601:9;25597:555;;25650:10;25635:26;;;;:14;:26;;;;;:37;;;;;;;;:46;25627:55;;;;;;25720:10;25705:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;25697:53;;;;;;25788:10;25773:26;;;;:14;:26;;;;;:43;;;25819:15;-1:-1:-1;25765:70:0;;;;;;25858:5;;;25873:10;25858:5;25885:26;;;:14;:26;;;;;;;:33;25858:61;;-1:-1:-1;;;25858:61:0;;-1:-1:-1;;;;;25858:5:0;;;;:14;;:61;;25873:10;25885:33;25858:61;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25850:70;;;;;;25950:10;25935:26;;;;:14;:26;;;;;:37;;;:44;;26040:43;;;;25994;;;;:89;;;;-1:-1:-1;;26098:42:0;;;;;;;25597:555;26172:4;26180:1;26172:9;26168:476;;26221:10;26206:26;;;;:14;:26;;;;;:38;;;;;;;;:47;26198:56;;;;;;26292:10;26277:26;;;;:14;:26;;;;;:37;;;;;:45;;:37;:45;26269:54;;;;;;26361:10;26346:26;;;;:14;:26;;;;;:44;;;26393:15;-1:-1:-1;26338:71:0;;;;;;26439:10;26424:26;;;;:14;:26;;;;;:38;;;:45;;26531:44;;;;26484;;;;:91;;;;-1:-1:-1;;26590:42:0;;;;;;;26168:476;25467:1184;:::o;20789:141::-;2047:13;:11;:13::i;:::-;20882:18:::1;:40:::0;20789:141::o;27327:820::-;27426:13;;-1:-1:-1;;;27426:13:0;;;;27425:14;27417:23;;;;;;27460:11;;;:26;;;27475:6;27485:1;27475:11;27460:26;27452:35;;;;;;27499:17;27519:27;27535:10;27519:15;:27::i;:::-;27499:47;-1:-1:-1;27565:13:0;;27561:60;;27598:10;:8;:10::i;:::-;27639:6;27649:1;27639:11;27635:242;;27687:1;27676:8;:12;27668:21;;;;;;27728:10;27713:26;;;;:14;:26;;;;;:33;:45;-1:-1:-1;27713:45:0;27705:54;;;;;;27797:10;27782:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;27774:53;;;;;;27843:21;27855:8;27843:11;:21::i;:::-;27895:6;27905:1;27895:11;27891:244;;27943:1;27932:8;:12;27924:21;;;;;;27984:10;27969:26;;;;:14;:26;;;;;:34;:46;-1:-1:-1;27969:46:0;27961:55;;;;;;28054:10;28039:26;;;;:14;:26;;;;;:37;;;;;:45;;:37;:45;28031:54;;;;;;28101:21;28113:8;28101:11;:21::i;:::-;27405:742;27327:820;;;:::o;48272:10607::-;-1:-1:-1;;;;;48382:20:0;;48332:13;48382:20;;;:14;:20;;;;;;;;:38;;;;;48459:44;;;;48539:20;;;;;;:38;;;;48617:44;;;;;48753:20;;;;:31;;;;;48382:38;;48459:44;;48539:38;;48617:44;48332:13;;;;48753:31;;;;;;:39;;:31;:39;:97;;;;-1:-1:-1;;;;;;48796:20:0;;;;;;:14;:20;;;;;:36;;;48835:15;-1:-1:-1;48753:97:0;48749:897;;;48888:26;;48871:13;:43;48867:483;;48952:13;48935:400;48971:26;;48967:1;:30;48935:400;;;49179:17;49140:21;:26;49162:3;:1;49164;49162:3;:::i;:::-;49140:26;;;;;;;;;;;:36;;;:56;;;;:::i;:::-;49099:24;;;;:21;:24;;;;;;;;:37;;;-1:-1:-1;;;;;49046:20:0;;;;:14;:20;;;;;;:27;:49;;49076:19;;49046:49;:::i;:::-;49045:91;;;;:::i;:::-;:152;;;;:::i;:::-;49027:170;;;;:::i;:::-;;-1:-1:-1;49240:21:0;:26;49262:3;:1;49264;49262:3;:::i;:::-;49240:26;;;;;;;;;;;-1:-1:-1;49240:26:0;:36;;-1:-1:-1;49299:16:0;;;;:::i;:::-;;;;48999:3;;;;;:::i;:::-;;;;48935:400;;;;48867:483;49399:26;;49382:13;:43;49378:257;;49583:35;49601:17;49583:15;:35;:::i;:::-;49539:26;;49517:49;;;;:21;:49;;;;;;;;:62;;;-1:-1:-1;;;;;49464:20:0;;;;:14;:20;;;;;;:27;:49;;49494:19;;49464:49;:::i;:::-;49463:116;;;;:::i;:::-;:156;;;;:::i;:::-;49445:174;;;;:::i;:::-;;;49378:257;-1:-1:-1;;;;;49662:20:0;;;;;;:14;:20;;;;;:31;;;;;;;;:40;;;:82;;-1:-1:-1;;;;;;49706:20:0;;;;;;:14;:20;;;;;:30;;;;;:38;;:30;:38;49662:82;:141;;;;-1:-1:-1;;;;;;49748:20:0;;;;;;:14;:20;;;;;:37;;;49788:15;-1:-1:-1;49662:141:0;49658:941;;;49841:26;;49824:13;:43;49820:483;;49905:13;49888:400;49924:26;;49920:1;:30;49888:400;;;50132:17;50093:21;:26;50115:3;:1;50117;50115:3;:::i;:::-;50093:26;;;;;;;;;;;:36;;;:56;;;;:::i;:::-;50052:24;;;;:21;:24;;;;;;;;:37;;;-1:-1:-1;;;;;49999:20:0;;;;:14;:20;;;;;;:27;:49;;50029:19;;49999:49;:::i;:::-;49998:91;;;;:::i;:::-;:152;;;;:::i;:::-;49980:170;;;;:::i;:::-;;-1:-1:-1;50193:21:0;:26;50215:3;:1;50217;50215:3;:::i;:::-;50193:26;;;;;;;;;;;-1:-1:-1;50193:26:0;:36;;-1:-1:-1;50252:16:0;;;;:::i;:::-;;;;49952:3;;;;;:::i;:::-;;;;49888:400;;;;49820:483;50352:26;;50335:13;:43;50331:257;;50536:35;50554:17;50536:15;:35;:::i;:::-;50492:26;;50470:49;;;;:21;:49;;;;;;;;:62;;;-1:-1:-1;;;;;50417:20:0;;;;:14;:20;;;;;;:27;:49;;50447:19;;50417:49;:::i;:::-;50416:116;;;;:::i;:::-;:156;;;;:::i;:::-;50398:174;;;;:::i;:::-;;;50331:257;-1:-1:-1;;;;;50615:20:0;;;;;;:14;:20;;;;;:31;;;;;;;;;:39;;:31;:39;:98;;;;-1:-1:-1;;;;;;50658:20:0;;;;;;:14;:20;;;;;:36;;;50698:15;-1:-1:-1;50658:55:0;50615:98;:139;;;;-1:-1:-1;;;;;;50717:20:0;;;;;;:14;:20;;;;;:29;;;;;;;;:37;;50750:4;50717:37;50615:139;50611:1510;;;50790:26;;50774:13;:42;50771:1044;;;50855:13;50838:962;50874:26;;50870:1;:30;50838:962;;;50975:21;:26;50997:3;:1;50999;50997:3;:::i;:::-;50975:26;;;;;;;;;;;;;;-1:-1:-1;50975:26:0;;;:36;-1:-1:-1;;;;;50936:20:0;;;;:14;:20;;;;:36;;;:75;50932:428;;;51192:17;51153:21;:26;51175:3;:1;51177;51175:3;:::i;:::-;51153:26;;;;;;;;;;;:36;;;:56;;;;:::i;:::-;51112:24;;;;:21;:24;;;;;;;;:37;;;-1:-1:-1;;;;;51059:20:0;;;;:14;:20;;;;;;:27;:49;;51089:19;;51059:49;:::i;:::-;51058:91;;;;:::i;:::-;:152;;;;:::i;:::-;51040:170;;;;:::i;:::-;;-1:-1:-1;51257:21:0;:26;51279:3;:1;51281;51279:3;:::i;:::-;51257:26;;;;;;;;;;;-1:-1:-1;51257:26:0;:36;;-1:-1:-1;51320:16:0;;;;:::i;:::-;;;;50932:428;51440:21;:26;51462:3;:1;51464;51462:3;:::i;:::-;51440:26;;;;;;;;;;;;;;-1:-1:-1;51440:26:0;;;:36;-1:-1:-1;;;;;51400:20:0;;;;:14;:20;;;;:36;;;:76;51396:382;;-1:-1:-1;;;;;51520:20:0;;51505:12;51520:20;;;:14;:20;;;;;:36;;;:56;;51559:17;;51520:56;:::i;:::-;51675:24;;;;:21;:24;;;;;;;;:37;;;-1:-1:-1;;;;;51622:20:0;;;;:14;:20;;;;;;:27;51505:71;;-1:-1:-1;51505:71:0;;51622:49;;51652:19;;51622:49;:::i;:::-;51621:91;;;;:::i;:::-;:98;;;;:::i;:::-;51603:116;;;;:::i;:::-;;;51746:5;;;51396:382;50902:3;;;;:::i;:::-;;;;50838:962;;;;50771:1044;51852:26;;51835:13;:43;51831:278;;-1:-1:-1;;;;;52036:20:0;;;;;;:14;:20;;;;;:36;;;:56;;52075:17;;52036:56;:::i;:::-;51992:26;;51970:49;;;;:21;:49;;;;;;;;:62;;;-1:-1:-1;;;;;51917:20:0;;;;:14;:20;;;;;;:27;:49;;51947:19;;51917:49;:::i;:::-;51916:116;;;;:::i;:::-;:177;;;;:::i;:::-;51898:195;;;;:::i;:::-;;;51831:278;-1:-1:-1;;;;;52137:20:0;;;;;;:14;:20;;;;;:31;;;;;;;;:40;;;:82;;-1:-1:-1;;;;;;52181:20:0;;;;;;:14;:20;;;;;:30;;;;;:38;;:30;:38;52137:82;:142;;;;-1:-1:-1;;;;;;52223:20:0;;;;;;:14;:20;;;;;:37;;;52264:15;-1:-1:-1;52223:56:0;52137:142;:183;;;;-1:-1:-1;;;;;;52283:20:0;;;;;;:14;:20;;;;;:29;;;;;;;;:37;;52316:4;52283:37;52137:183;52133:1599;;;52356:26;;52340:13;:42;52337:1082;;;52419:13;52402:1000;52438:26;;52434:1;:30;52402:1000;;;52538:21;:26;52560:3;:1;52562;52560:3;:::i;:::-;52538:26;;;;;;;;;;;;;;-1:-1:-1;52538:26:0;;;:36;-1:-1:-1;;;;;52498:20:0;;;;:14;:20;;;;:37;;;:76;52494:429;;;52755:17;52716:21;:26;52738:3;:1;52740;52738:3;:::i;:::-;52716:26;;;;;;;;;;;:36;;;:56;;;;:::i;:::-;52675:24;;;;:21;:24;;;;;;;;:37;;;-1:-1:-1;;;;;52622:20:0;;;;:14;:20;;;;;;:27;:49;;52652:19;;52622:49;:::i;:::-;52621:91;;;;:::i;:::-;:152;;;;:::i;:::-;52603:170;;;;:::i;:::-;;-1:-1:-1;52820:21:0;:26;52842:3;:1;52844;52842:3;:::i;:::-;52820:26;;;;;;;;;;;-1:-1:-1;52820:26:0;:36;;-1:-1:-1;52883:16:0;;;;:::i;:::-;;;;52494:429;53001:21;:26;53023:3;:1;53025;53023:3;:::i;:::-;53001:26;;;;;;;;;;;;;;-1:-1:-1;53001:26:0;;;:36;-1:-1:-1;;;;;52960:20:0;;;;:14;:20;;;;:37;;;:77;;;;:118;;-1:-1:-1;;;;;;53041:20:0;;;;;;:14;:20;;;;;:29;;;;;;;;:37;;53074:4;53041:37;52960:118;52956:424;;;-1:-1:-1;;;;;53121:20:0;;53106:12;53121:20;;;:14;:20;;;;;:37;;;:57;;53161:17;;53121:57;:::i;:::-;53277:24;;;;:21;:24;;;;;;;;:37;;;-1:-1:-1;;;;;53224:20:0;;;;:14;:20;;;;;;:27;53106:72;;-1:-1:-1;53106:72:0;;53224:49;;53254:19;;53224:49;:::i;:::-;53223:91;;;;:::i;:::-;:98;;;;:::i;:::-;53205:116;;;;:::i;:::-;;;53348:5;;;52956:424;52466:3;;;;:::i;:::-;;;;52402:1000;;;;52337:1082;53456:26;;53439:13;:43;53435:279;;-1:-1:-1;;;;;53640:20:0;;;;;;:14;:20;;;;;:37;;;:57;;53680:17;;53640:57;:::i;:::-;53596:26;;53574:49;;;;:21;:49;;;;;;;;:62;;;-1:-1:-1;;;;;53521:20:0;;;;:14;:20;;;;;;:27;:49;;53551:19;;53521:49;:::i;:::-;53520:116;;;;:::i;:::-;:178;;;;:::i;:::-;53502:196;;;;:::i;:::-;;;53435:279;-1:-1:-1;;;;;53748:20:0;;;;;;:14;:20;;;;;:32;;;;;;;;;:40;;:32;:40;:99;;;;-1:-1:-1;;;;;;53792:20:0;;;;;;:14;:20;;;;;:37;;;53832:15;-1:-1:-1;53748:99:0;53744:901;;;53886:26;;53868:14;:44;53864:491;;53950:14;53933:407;53970:26;;53966:1;:30;53933:407;;;54181:18;54142:21;:26;54164:3;:1;54166;54164:3;:::i;:::-;54142:26;;;;;;;;;;;:36;;;:57;;;;:::i;:::-;54100:24;;;;:21;:24;;;;;;;;:38;;;-1:-1:-1;;;;;54046:20:0;;;;;;;;;;:28;:50;;54077:19;;54046:50;:::i;:::-;54045:93;;;;:::i;:::-;:155;;;;:::i;:::-;54026:174;;;;:::i;:::-;;-1:-1:-1;54244:21:0;:26;54266:3;:1;54268;54266:3;:::i;:::-;54244:26;;;;;;;;;;;-1:-1:-1;54244:26:0;:36;;-1:-1:-1;54303:17:0;;;;:::i;:::-;;;;53998:3;;;;;:::i;:::-;;;;53933:407;;;;53864:491;54393:26;;54375:14;:44;54371:263;;54581:36;54599:18;54581:15;:36;:::i;:::-;54536:26;;54514:49;;;;:21;:49;;;;;;;;:63;;;-1:-1:-1;;;;;54460:20:0;;;;;;;;;;:28;:50;;54491:19;;54460:50;:::i;:::-;54459:118;;;;:::i;:::-;:159;;;;:::i;:::-;54440:178;;;;:::i;:::-;;;54371:263;-1:-1:-1;;;;;54661:20:0;;;;;;:14;:20;;;;;:32;;;;;;;;:41;;;:84;;-1:-1:-1;;;;;;54706:20:0;;;;;;:14;:20;;;;;:31;;;;;:39;;:31;:39;54661:84;:144;;;;-1:-1:-1;;;;;;54749:20:0;;;;;;:14;:20;;;;;:38;;;54790:15;-1:-1:-1;54661:144:0;:185;;;;-1:-1:-1;;;;;;54809:20:0;;;;;;:14;:20;;;;;:29;;;;;;;;:37;;54842:4;54809:37;54661:185;54657:988;;;54885:26;;54867:14;:44;54863:491;;54949:14;54932:407;54969:26;;54965:1;:30;54932:407;;;55180:18;55141:21;:26;55163:3;:1;55165;55163:3;:::i;:::-;55141:26;;;;;;;;;;;:36;;;:57;;;;:::i;:::-;55099:24;;;;:21;:24;;;;;;;;:38;;;-1:-1:-1;;;;;55045:20:0;;;;;;;;;;:28;:50;;55076:19;;55045:50;:::i;:::-;55044:93;;;;:::i;:::-;:155;;;;:::i;:::-;55025:174;;;;:::i;:::-;;-1:-1:-1;55243:21:0;:26;55265:3;:1;55267;55265:3;:::i;:::-;55243:26;;;;;;;;;;;-1:-1:-1;55243:26:0;:36;;-1:-1:-1;55302:17:0;;;;:::i;:::-;;;;54997:3;;;;;:::i;:::-;;;;54932:407;;;;54863:491;55392:26;;55374:14;:44;55370:262;;55579:36;55597:18;55579:15;:36;:::i;:::-;55534:26;;55512:49;;;;:21;:49;;;;;;;;:63;;;-1:-1:-1;;;;;55458:20:0;;;;;;;;;;:28;:50;;55489:19;;55458:50;:::i;:::-;55457:118;;;;:::i;:::-;:159;;;;:::i;:::-;55438:178;;;;:::i;:::-;;;55370:262;-1:-1:-1;;;;;55661:20:0;;;;;;:14;:20;;;;;:32;;;;;;;;;:40;;:32;:40;:100;;;;-1:-1:-1;;;;;;55705:20:0;;;;;;:14;:20;;;;;:37;;;55746:15;-1:-1:-1;55705:56:0;55661:100;55657:1535;;;55801:26;;55783:14;:44;55779:1098;;55865:14;55848:1014;55885:26;;55881:1;:30;55848:1014;;;55985:21;:26;56007:3;:1;56009;56007:3;:::i;:::-;55985:26;;;;;;;;;;;;;;-1:-1:-1;55985:26:0;;;:36;-1:-1:-1;;;;;55945:20:0;;;;;;;;:37;;;:76;55941:435;;;56205:18;56166:21;:26;56188:3;:1;56190;56188:3;:::i;:::-;56166:26;;;;;;;;;;;:36;;;:57;;;;:::i;:::-;56124:24;;;;:21;:24;;;;;;;;:38;;;-1:-1:-1;;;;;56070:20:0;;;;;;;;;;:28;:50;;56101:19;;56070:50;:::i;:::-;56069:93;;;;:::i;:::-;:155;;;;:::i;:::-;56050:174;;;;:::i;:::-;;-1:-1:-1;56272:21:0;:26;56294:3;:1;56296;56294:3;:::i;:::-;56272:26;;;;;;;;;;;-1:-1:-1;56272:26:0;:36;;-1:-1:-1;56335:17:0;;;;:::i;:::-;;;;55941:435;56457:21;:26;56479:3;:1;56481;56479:3;:::i;:::-;56457:26;;;;;;;;;;;;;;-1:-1:-1;56457:26:0;;;:36;-1:-1:-1;;;;;56416:20:0;;;;;;;;:37;;;:77;;;;:118;;-1:-1:-1;;;;;;56497:20:0;;;;;;:14;:20;;;;;:29;;;;;;;;:37;;56530:4;56497:37;56416:118;56412:428;;;-1:-1:-1;;;;;56577:20:0;;56562:12;56577:20;;;:14;:20;;;;;:37;;;:58;;56617:18;;56577:58;:::i;:::-;56736:24;;;;:21;:24;;;;;;;;:38;;;-1:-1:-1;;;;;56682:20:0;;;;;;;;;;:28;56562:73;;-1:-1:-1;56562:73:0;;56682:50;;56713:19;;56682:50;:::i;:::-;56681:93;;;;:::i;:::-;:100;;;;:::i;:::-;56662:119;;;;:::i;:::-;;;56808:5;;;56412:428;55913:3;;;;:::i;:::-;;;;55848:1014;;;;55779:1098;56915:26;;56897:14;:44;56893:284;;-1:-1:-1;;;;;57102:20:0;;;;;;:14;:20;;;;;:37;;;:58;;57142:18;;57102:58;:::i;:::-;57057:26;;57035:49;;;;:21;:49;;;;;;;;:63;;;-1:-1:-1;;;;;56981:20:0;;;;;;;;;;:28;:50;;57012:19;;56981:50;:::i;:::-;56980:118;;;;:::i;:::-;:181;;;;:::i;:::-;56961:200;;;;:::i;:::-;;;56893:284;-1:-1:-1;;;;;57208:20:0;;;;;;:14;:20;;;;;:32;;;;;;;;:41;;;:84;;-1:-1:-1;;;;;;57253:20:0;;;;;;:14;:20;;;;;:31;;;;;:39;;:31;:39;57208:84;:145;;;;-1:-1:-1;;;;;;57296:20:0;;;;;;:14;:20;;;;;:38;;;57338:15;-1:-1:-1;57296:57:0;57208:145;57204:1582;;;57391:26;;57373:14;:44;57370:1097;;57454:14;57437:1013;57474:26;;57470:1;:30;57437:1013;;;57575:21;:26;57597:3;:1;57599;57597:3;:::i;:::-;57575:26;;;;;;;;;;;;;;-1:-1:-1;57575:26:0;;;:36;-1:-1:-1;;;;;57534:20:0;;;;;;;;:38;;;:77;57530:436;;;57795:18;57756:21;:26;57778:3;:1;57780;57778:3;:::i;:::-;57756:26;;;;;;;;;;;:36;;;:57;;;;:::i;:::-;57714:24;;;;:21;:24;;;;;;;;:38;;;-1:-1:-1;;;;;57660:20:0;;;;;;;;;;:28;:50;;57691:19;;57660:50;:::i;:::-;57659:93;;;;:::i;:::-;:155;;;;:::i;:::-;57640:174;;;;:::i;:::-;;-1:-1:-1;57862:21:0;:26;57884:3;:1;57886;57884:3;:::i;:::-;57862:26;;;;;;;;;;;-1:-1:-1;57862:26:0;:36;;-1:-1:-1;57925:17:0;;;;:::i;:::-;;;;57530:436;58044:21;:26;58066:3;:1;58068;58066:3;:::i;:::-;58044:26;;;;;;;;;;;;;;-1:-1:-1;58044:26:0;;;:36;-1:-1:-1;;;;;58002:20:0;;;;;;;;:38;;;:78;;;;:119;;-1:-1:-1;;;;;;58084:20:0;;;;;;:14;:20;;;;;:29;;;;;;;;:37;;58117:4;58084:37;58002:119;57998:430;;;-1:-1:-1;;;;;58164:20:0;;58149:12;58164:20;;;:14;:20;;;;;:38;;;:59;;58205:18;;58164:59;:::i;:::-;58324:24;;;;:21;:24;;;;;;;;:38;;;-1:-1:-1;;;;;58270:20:0;;;;;;;;;;:28;58149:74;;-1:-1:-1;58149:74:0;;58270:50;;58301:19;;58270:50;:::i;:::-;58269:93;;;;:::i;:::-;:100;;;;:::i;:::-;58250:119;;;;:::i;:::-;;;58396:5;;;57998:430;57502:3;;;;:::i;:::-;;;;57437:1013;;;;57370:1097;58505:26;;58487:14;:44;58483:285;;-1:-1:-1;;;;;58692:20:0;;;;;;:14;:20;;;;;:38;;;:59;;58733:18;;58692:59;:::i;:::-;58647:26;;58625:49;;;;:21;:49;;;;;;;;:63;;;-1:-1:-1;;;;;58571:20:0;;;;;;;;;;:28;:50;;58602:19;;58571:50;:::i;:::-;58570:118;;;;:::i;:::-;:182;;;;:::i;:::-;58551:201;;;;:::i;:::-;;;58483:285;58806:32;58823:15;58806:14;:32;:::i;:::-;58798:40;48272:10607;-1:-1:-1;;;;;;;;48272:10607:0:o;20499:137::-;2047:13;:11;:13::i;:::-;20590:17:::1;:38:::0;20499:137::o;20358:133::-;2047:13;:11;:13::i;:::-;20447:16:::1;:36:::0;20358:133::o;63493:699::-;63590:10;63540:19;63581:20;;;:8;:20;;;;;:32;63562:16;;:51;;63581:32;63562:51;:::i;:::-;63664:10;63626:20;63649:26;;;:14;:26;;;;;:33;63716:6;;63540:73;;-1:-1:-1;63649:33:0;63716:15;;63725:6;;63716:15;:::i;:::-;63696:35;-1:-1:-1;63743:20:0;63696:35;63768:18;:12;63783:3;63768:18;:::i;:::-;63767:32;;;;:::i;:::-;63743:57;-1:-1:-1;63812:18:0;63848;63863:3;63743:57;63848:18;:::i;:::-;63833:34;;:11;:34;:::i;:::-;63812:55;-1:-1:-1;63879:24:0;63906:19;63919:6;63812:55;63906:19;:::i;:::-;63937:4;;:43;;-1:-1:-1;;;63937:43:0;;63879:46;;-1:-1:-1;;;;;;63937:4:0;;:13;;:43;;63951:10;;63879:46;;63937:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;64011:10:0;63996:26;;;;:14;:26;;;;;:38;;:58;;64038:16;;63996:26;:58;;64038:16;;63996:58;:::i;:::-;;;;-1:-1:-1;;64100:16:0;;64074:10;64065:20;;;;:8;:20;;;;;:51;;;64129:33;;;;:53;;64166:16;;64065:20;64129:53;;64166:16;;64129:53;:::i;:::-;;;;-1:-1:-1;;;;;;;;63493:699:0:o;19145:90::-;2047:13;:11;:13::i;:::-;19213:5:::1;:14:::0;;-1:-1:-1;;;;;;19213:14:0::1;-1:-1:-1::0;;;;;19213:14:0;;;::::1;::::0;;;::::1;::::0;;19145:90::o;19025:112::-;2047:13;:11;:13::i;:::-;19101:12:::1;:28:::0;;-1:-1:-1;;;;;;19101:28:0::1;-1:-1:-1::0;;;;;19101:28:0;;;::::1;::::0;;;::::1;::::0;;19025:112::o;2809:103::-;2047:13;:11;:13::i;:::-;2874:30:::1;2901:1;2874:18;:30::i;:::-;2809:103::o:0;26659:660::-;26723:13;;-1:-1:-1;;;26723:13:0;;;;26722:14;26714:23;;;;;;26756:9;;:58;;;;-1:-1:-1;26784:10:0;26769:26;;;;:14;:26;;;;;:37;;;;;;;;;:45;;:37;:45;26756:58;:121;;;;26818:4;26826:1;26818:9;:59;;;;-1:-1:-1;26846:10:0;26831:26;;;;:14;:26;;;;;:38;;;;;;;;;:46;;:38;:46;26818:59;26748:130;;;;;;26899:4;26907:1;26899:9;26895:214;;26929:20;26970:17;;26952:15;:35;;;;:::i;:::-;27051:10;27036:26;;;;:14;:26;;;;;:42;;:57;-1:-1:-1;26895:214:0;27129:4;27137:1;27129:9;27125:187;;27159:20;27200:18;;27182:15;:36;;;;:::i;:::-;27253:10;27238:26;;;;:14;:26;;;;;:43;;:58;-1:-1:-1;26659:660:0;:::o;18901:116::-;2047:13;:11;:13::i;:::-;18972:1:::1;18949:20;:24:::0;;;18984:21:::1;:25:::0;18901:116::o;20644:137::-;2047:13;:11;:13::i;:::-;20735:17:::1;:38:::0;20644:137::o;21043:97::-;2047:13;:11;:13::i;:::-;21114:7:::1;:18:::0;21043:97::o;21148:1304::-;21250:13;;-1:-1:-1;;;21250:13:0;;;;21249:14;21241:23;;;;;;21283:11;;;:26;;;21298:6;21308:1;21298:11;21283:26;21275:35;;;;;;21342:10;21327:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;;:93;;-1:-1:-1;21390:10:0;21375:26;;;;:14;:26;;;;;:37;;;;;:45;;:37;:45;21327:93;21323:142;;;21438:15;:13;:15::i;:::-;21481:6;21491:1;21481:11;21477:563;;21532:7;;21517:11;:22;;21509:31;;;;;;21588:10;21573:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;21569:318;;21638:19;21660:31;21680:10;21660:19;:31::i;:::-;21638:53;-1:-1:-1;21732:15:0;;21728:81;;21772:17;:15;:17::i;:::-;21845:26;21859:11;21845:13;:26::i;:::-;21619:268;21569:318;21930:10;21915:26;;;;:14;:26;;;;;:36;;;;;:45;;;;21911:112;;21980:27;21995:11;21980:14;:27::i;:::-;22056:6;22066:1;22056:11;22052:332;;22108:7;;22093:11;:22;;22085:31;;;;;;22150:10;22135:26;;;;:14;:26;;;;;:37;;;;;:45;;:37;:45;22131:112;;22200:27;22215:11;22200:14;:27::i;:::-;22279:10;22264:26;;;;:14;:26;;;;;:37;;;;;:46;;;;22260:113;;22330:27;22345:11;22330:14;:27::i;:::-;22399:45;;;22408:10;6441:51:1;;6523:2;6508:18;;6501:34;;;6551:18;;;6544:34;;;22399:45:0;;6429:2:1;6414:18;22399:45:0;;;;;;;;21148:1304;;;:::o;16602:118::-;2047:13;:11;:13::i;:::-;16681:19:::1;:31:::0;16602:118::o;20218:132::-;2047:13;:11;:13::i;:::-;20301:41:::1;::::0;-1:-1:-1;;;20301:41:0;;-1:-1:-1;;;;;20301:23:0;::::1;::::0;::::1;::::0;:41:::1;::::0;20325:10:::1;::::0;20337:4;;20301:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20218:132:::0;;:::o;19938:93::-;2047:13;:11;:13::i;:::-;20001::::1;:22:::0;;;::::1;;-1:-1:-1::0;;;20001:22:0::1;-1:-1:-1::0;;;;20001:22:0;;::::1;::::0;;;::::1;::::0;;19938:93::o;19617:313::-;19678:7;19687;19696;19732:26;;19724:5;:34;19716:43;;;;;;-1:-1:-1;;;19770:36:0;19809:28;;;:21;:28;;;;;;;;;19770:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19617:313;;;;:::o;16355:116::-;2047:13;:11;:13::i;:::-;16433:18:::1;:30:::0;16355:116::o;62027:907::-;62080:15;:13;:15::i;:::-;62138:10;62108:12;62123:26;;;:14;:26;;;;;;;;:48;;;62195:26;;;;;:48;;;62123;;62271:9;62195:48;62123;62271:9;:::i;:::-;62254:26;;62326:6;62301:21;:31;;62293:40;;;;;;62346:36;;62354:10;;62346:36;;;;;62375:6;;62346:36;;;;62375:6;62354:10;62346:36;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62410:10:0;62395:26;;;;:14;:26;;;;;:46;;:54;;62445:4;;62395:26;:54;;62445:4;;62395:54;:::i;:::-;;;;-1:-1:-1;;62475:10:0;62460:26;;;;:14;:26;;;;;:46;;:52;;62510:2;;62460:26;:52;;62510:2;;62460:52;:::i;:::-;;;;-1:-1:-1;;62538:10:0;62574:1;62523:26;;;:14;:26;;;;;;;;:48;;:52;;;62586:26;;;;;:48;;:52;;;62649:19;:29;;62672:6;;62574:1;62649:29;;62672:6;;62649:29;:::i;:::-;;;;-1:-1:-1;;62704:18:0;;62695:27;;62691:92;;;62743:28;62753:10;62764:6;62743:28;;;;;;;:::i;:::-;;;;;;;;62691:92;62822:19;;62798:21;:43;62795:128;;;62862:49;;;62873:15;1264:25:1;;62889:21:0;1320:2:1;1305:18;;1298:34;62862:49:0;;1237:18:1;62862:49:0;1090:248:1;64204:505:0;-1:-1:-1;;;;;64330:14:0;;64268:7;64330:14;;;:8;:14;;;;;:26;64311:16;;64268:7;;64311:45;;;:::i;:::-;-1:-1:-1;;;;;64392:20:0;;64369;64392;;;:14;:20;;;;;:27;64452:6;;64289:67;;-1:-1:-1;64392:27:0;64452:15;;64461:6;;64452:15;:::i;:::-;64432:35;-1:-1:-1;64479:20:0;64432:35;64504:18;:12;64519:3;64504:18;:::i;:::-;64503:32;;;;:::i;:::-;64479:57;-1:-1:-1;64548:18:0;64584;64599:3;64479:57;64584:18;:::i;:::-;64569:34;;:11;:34;:::i;:::-;64548:55;-1:-1:-1;64615:24:0;64642:19;64655:6;64548:55;64642:19;:::i;20938:97::-;2047:13;:11;:13::i;:::-;21009:7:::1;:18:::0;20938:97::o;19246:363::-;2047:13;:11;:13::i;:::-;19343:26:::1;:29:::0;;;:26:::1;:29;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;19399:26:0::1;::::0;19467:68:::1;::::0;;::::1;::::0;;::::1;::::0;;19488:15:::1;19467:68:::0;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;19436:28:0;;;:21:::1;:28:::0;;;;;:99;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;19551:50;;2708:25:1;;;2749:18;;;2742:34;;;2792:18;;;2785:34;;;19551:50:0::1;::::0;2681:18:1;19551:50:0::1;2506:319:1::0;58887:3124:0;58968:10;58953:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;58949:93;;59013:17;:15;:17::i;:::-;59054:15;:13;:15::i;:::-;59119:10;59086:15;59104:26;;;:14;:26;;;;;;;;:48;;;59182:26;;;;;:48;;;59104;;59263:17;59182:48;59104;59263:17;:::i;:::-;59320:16;;;59334:1;59320:16;;;;;;;;59242:38;;-1:-1:-1;59296:21:0;;59320:16;;;;;;;;;;-1:-1:-1;;59359:13:0;;:20;;;-1:-1:-1;;;59359:20:0;;;;59296:40;;-1:-1:-1;;;;;;59359:13:0;;;;:18;;-1:-1:-1;59359:20:0;;;;;;;;;;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59349:4;59354:1;59349:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;59349:30:0;;;:7;;;;;;;;;:30;59402:8;;59392:7;;59402:8;;;59392:4;;59402:8;;59392:7;;;;;;:::i;:::-;-1:-1:-1;;;;;59392:18:0;;;:7;;;;;;;;;:18;59457:13;;:45;;-1:-1:-1;;;59457:45:0;;59427:27;;59457:13;;;;;:27;;:45;;59485:10;;59497:4;;59457:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;59457:45:0;;;;;;;;;;;;:::i;:::-;59427:75;;59515:21;59539:10;59550:1;59539:13;;;;;;;;:::i;:::-;;;;;;;;;;;59609:4;;59602:37;;-1:-1:-1;;;59602:37:0;;59633:4;59602:37;;;1755:51:1;59539:13:0;;-1:-1:-1;59578:21:0;;-1:-1:-1;;;;;59609:4:0;;;;59602:22;;1728:18:1;;59602:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59578:61;-1:-1:-1;59652:18:0;59702:3;59674:24;59690:8;59674:13;:24;:::i;:::-;59673:32;;;;:::i;:::-;59652:53;-1:-1:-1;59718:23:0;59744:26;59652:53;59744:13;:26;:::i;:::-;59795:13;;:211;;-1:-1:-1;;;59795:211:0;;59718:52;;-1:-1:-1;;;;;;59795:13:0;;:64;;59867:10;;59795:211;;59718:52;;59927:4;;59956;;59978:15;;59795:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;60053:4:0;;60046:37;;-1:-1:-1;;;60046:37:0;;60077:4;60046:37;;;1755:51:1;60023:20:0;;-1:-1:-1;;;;;;60053:4:0;;;;-1:-1:-1;60046:22:0;;-1:-1:-1;1728:18:1;;60046:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60023:60;-1:-1:-1;60100:20:0;60123:28;60138:13;60023:60;60123:28;:::i;:::-;60183:10;60168:26;;;;:14;:26;;;;;:37;;;60100:51;;-1:-1:-1;60168:37:0;;;;;:45;;:37;:45;60164:118;;60230:5;;;:40;;-1:-1:-1;;;60230:40:0;;-1:-1:-1;;;;;60230:5:0;;;;:14;;:40;;60245:10;;60257:12;;60230:40;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;60164:118;60313:10;60298:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;60294:336;;60375:10;60360:26;;;;:14;:26;;;;;:49;;60397:12;;60360:26;:49;;60397:12;;60360:49;:::i;:::-;;;;-1:-1:-1;;60441:10:0;60426:26;;;;:14;:26;;;;;:41;;:55;;60471:10;;60426:26;:55;;60471:10;;60426:55;:::i;:::-;;;;-1:-1:-1;;60513:10:0;60549:1;60498:26;;;:14;:26;;;;;;;;:48;;:52;;;60566:26;;;;;:48;;:52;60294:336;60661:10;60646:26;;;;:14;:26;;;;;:36;;;;;:45;;;;60642:1218;;60723:10;60708:26;;;;:14;:26;;;;;:49;;60745:12;;60708:26;:49;;60745:12;;60708:49;:::i;:::-;;;;-1:-1:-1;;60787:10:0;60772:26;;;;:14;:26;;;;;60819:15;60772:44;;;;:62;;;60913:16;;60895:34;;;:::i;:::-;60864:10;60849:26;;;;:14;:26;;;;;;;;:43;;;:80;;;;60945:43;;;:47;;;61052:11;61007:42;;;:56;61078:36;;;;:43;;61117:4;-1:-1:-1;;61136:45:0;;;;;;61196:46;;;:50;;;-1:-1:-1;61261:41:0;;;:45;;;61374:15;-1:-1:-1;61321:50:0;;:68;61451:26;;61404:44;;;:73;-1:-1:-1;61492:48:0;;;:52;;;-1:-1:-1;;61559:42:0;;;;;;;;61651:16;;61616:8;:20;;;;;:51;;;61682:33;:37;;;61734:26;;;;;:48;;;:52;;;61801:22;;61811:12;;61078:36;60849:26;61801:22;;61811:12;;61801:22;:::i;:::-;;;;-1:-1:-1;;61838:7:0;:10;;;:7;:10;;;:::i;:::-;;;;;;60642:1218;61882:12;61872:6;;:22;;;;;;;:::i;:::-;;;;;;;;61931:10;61905:22;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;61957:46:0;;;61966:10;6441:51:1;;6523:2;6508:18;;6501:34;;;6551:18;;;6544:34;;;61957:46:0;;6429:2:1;6414:18;61957:46:0;;;;;;;58936:3075;;;;;;;;;;;58887:3124;:::o;3067:201::-;2047:13;:11;:13::i;:::-;-1:-1:-1;;;;;3156:22:0;::::1;3148:73;;;::::0;-1:-1:-1;;;3148:73:0;;9920:2:1;3148:73:0::1;::::0;::::1;9902:21:1::0;9959:2;9939:18;;;9932:30;9998:34;9978:18;;;9971:62;-1:-1:-1;;;10049:18:1;;;10042:36;10095:19;;3148:73:0::1;;;;;;;;;3232:28;3251:8;3232:18;:28::i;18593:300::-:0;2047:13;:11;:13::i;:::-;18762:2:::1;18712:46;18736:22:::0;18712:21;:46:::1;:::i;:::-;:52;;18704:61;;;::::0;::::1;;18784:20;:44:::0;;;;18839:21:::1;:46:::0;18593:300::o;62942:543::-;2047:13;:11;:13::i;:::-;63029:4:::1;::::0;63022:37:::1;::::0;-1:-1:-1;;;63022:37:0;;63053:4:::1;63022:37;::::0;::::1;1755:51:1::0;62998:21:0::1;::::0;-1:-1:-1;;;;;63029:4:0::1;::::0;63022:22:::1;::::0;1728:18:1;;63022:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62998:61;;63073:5;;;;;;;;;-1:-1:-1::0;;;;;63073:5:0::1;-1:-1:-1::0;;;;;63073:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;63129:4:0::1;::::0;63122:37:::1;::::0;-1:-1:-1;;;63122:37:0;;63153:4:::1;63122:37;::::0;::::1;1755:51:1::0;63099:20:0::1;::::0;-1:-1:-1;;;;;;63129:4:0;;::::1;::::0;-1:-1:-1;63122:22:0::1;::::0;1728:18:1;;63122:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63099:60:::0;-1:-1:-1;63172:15:0::1;63190:28;63205:13:::0;63099:60;63190:28:::1;:::i;:::-;63172:46;;63232:15;63271:6;;63251:7;63261:6;63251:16;;;;:::i;:::-;63250:27;;;;:::i;:::-;63306:13;::::0;;63355:54:::1;::::0;;::::1;::::0;::::1;::::0;;63368:15:::1;63355:54:::0;;::::1;::::0;;::::1;::::0;;;63394:6:::1;::::0;63355:54;;;;;;;;;;;;63290:13:::1;63332:20:::0;;;:13:::1;:20:::0;;;;;;:77;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;63422:15;;63232:45;;-1:-1:-1;63306:13:0;;63422:15;63306:13;63422:15:::1;::::0;::::1;:::i;:::-;;;;;;63470:7;63450:16;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;62942:543:0:o;2326:132::-;2207:7;2234:6;-1:-1:-1;;;;;2234:6:0;794:10;2390:23;2382:68;;;;-1:-1:-1;;;2382:68:0;;10327:2:1;2382:68:0;;;10309:21:1;;;10346:18;;;10339:30;10405:34;10385:18;;;10378:62;10457:18;;2382:68:0;10125:356:1;28155:2920:0;28240:10;28225:26;;;;:14;:26;;;;;:37;;;;;;;;:45;;:37;:45;28221:184;;28287:5;;;:37;;-1:-1:-1;;;28287:37:0;;-1:-1:-1;;;;;28287:5:0;;;;:13;;:37;;28309:4;;28316:7;;28287:37;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28339:5:0;;;:54;;-1:-1:-1;;;28339:54:0;;-1:-1:-1;;;;;28339:5:0;;;;:18;;:54;;28358:10;;28378:4;;28385:7;;28339:54;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28221:184;28417:18;28438:31;28458:10;28438:19;:31::i;:::-;28417:52;-1:-1:-1;28494:14:0;;28490:64;;28525:17;:15;:17::i;:::-;28656:10;28566:20;28641:26;;;:14;:26;;;;;:42;;;28566:20;;28686:15;-1:-1:-1;28641:109:0;;;;-1:-1:-1;28720:10:0;28705:26;;;;:14;:26;;;;;:37;;;;;;;;;:45;;:37;:45;28641:109;28637:247;;;28770:4;;:34;;-1:-1:-1;;;28770:34:0;;-1:-1:-1;;;;;28770:4:0;;;;:13;;:34;;28784:10;;28796:7;;28770:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28838:10:0;28823:26;;;;:14;:26;;;;;:44;;28860:7;;28823:26;:44;;28860:7;;28823:44;:::i;:::-;;;;-1:-1:-1;;28637:247:0;28919:10;28904:26;;;;:14;:26;;;;;:43;;;28950:15;-1:-1:-1;28904:111:0;;;;-1:-1:-1;28984:10:0;28969:26;;;;:14;:26;;;;;:37;;;;;;;;:46;28904:111;28900:249;;;29035:4;;:34;;-1:-1:-1;;;29035:34:0;;-1:-1:-1;;;;;29035:4:0;;;;:13;;:34;;29049:10;;29061:7;;29035:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29103:10:0;29088:26;;;;:14;:26;;;;;:44;;29125:7;;29088:26;:44;;29125:7;;29088:44;:::i;:::-;;;;-1:-1:-1;;28900:249:0;29184:10;29169:26;;;;:14;:26;;;;;:42;;;29214:15;-1:-1:-1;29169:109:0;;;;-1:-1:-1;29248:10:0;29233:26;;;;:14;:26;;;;;:37;;;;;;;;;:45;;:37;:45;29169:109;29165:460;;;29350:3;29327:20;;29317:7;:30;;;;:::i;:::-;:36;;;;:::i;:::-;29298:56;-1:-1:-1;29389:25:0;29298:56;29389:7;:25;:::i;:::-;29434:4;;:39;;-1:-1:-1;;;29434:39:0;;29373:42;;-1:-1:-1;;;;;;29434:4:0;;:13;;:39;;29448:10;;29373:42;;29434:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29492:4:0;;29506:12;;29492:44;;-1:-1:-1;;;29492:44:0;;-1:-1:-1;;;;;29492:4:0;;;;:13;;:44;;29506:12;;;29520:15;;29492:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29570:10:0;29555:26;;;;:14;:26;;;;;:44;;29592:7;;29555:26;:44;;29592:7;;29555:44;:::i;:::-;;;;-1:-1:-1;;29165:460:0;29660:10;29645:26;;;;:14;:26;;;;;:43;;;29691:15;-1:-1:-1;29645:111:0;;;;-1:-1:-1;29725:10:0;29710:26;;;;:14;:26;;;;;:37;;;;;;;;:46;29645:111;29641:454;;;29828:3;29805:20;;29795:7;:30;;;;:::i;:::-;:36;;;;:::i;:::-;29776:56;-1:-1:-1;29867:25:0;29776:56;29867:7;:25;:::i;:::-;29912:4;;:39;;-1:-1:-1;;;29912:39:0;;29851:42;;-1:-1:-1;;;;;;29912:4:0;;:13;;:39;;29926:10;;29851:42;;29912:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29970:4:0;;29984:12;;29970:44;;-1:-1:-1;;;29970:44:0;;-1:-1:-1;;;;;29970:4:0;;;;:13;;:44;;29984:12;;;29998:15;;29970:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30048:10:0;30033:26;;;;:14;:26;;;;;:44;;30070:7;;30033:26;:44;;30070:7;;30033:44;:::i;:::-;;;;-1:-1:-1;;29641:454:0;30154:7;;30133:10;30118:26;;;;:14;:26;;;;;:33;:43;30114:947;;;30197:10;30218:1;30182:26;;;:14;:26;;;;;:37;;;30238:44;;;:48;;;30305:43;;;:47;;;30371:46;;;:50;;;30440;;;:54;;;30513:48;;;:52;;;30584:41;;;:45;;;30648:43;;;:47;;;30714:42;;;:46;;;30779:36;;;:44;;-1:-1:-1;;30906:43:0;;;30968:44;;:48;;;31035:7;:10;;;;;;:::i;:::-;;;;;;28202:2873;;;28155:2920;:::o;31083:2656::-;31231:10;31141:20;31216:26;;;:14;:26;;;;;:43;;;31141:20;;31263:15;-1:-1:-1;31216:62:0;;;:112;;-1:-1:-1;31297:10:0;31282:26;;;;:14;:26;;;;;:38;;;;;;;;;:46;;:38;:46;31216:112;31212:296;;;31389:4;;:39;;-1:-1:-1;;;31389:39:0;;31363:7;;-1:-1:-1;;;;;;31389:4:0;;;;:13;;:39;;31403:10;;31363:7;;31389:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;31462:10:0;31447:26;;;;:14;:26;;;;;:45;;31485:7;;31447:26;:45;;31485:7;;31447:45;:::i;:::-;;;;-1:-1:-1;;31212:296:0;31543:10;31528:26;;;;:14;:26;;;;;:44;;;31576:15;-1:-1:-1;31528:63:0;;;:114;;-1:-1:-1;31610:10:0;31595:26;;;;:14;:26;;;;;:38;;;;;;;;:47;31528:114;31524:298;;;31703:4;;:39;;-1:-1:-1;;;31703:39:0;;31677:7;;-1:-1:-1;;;;;;31703:4:0;;;;:13;;:39;;31717:10;;31677:7;;31703:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;31776:10:0;31761:26;;;;:14;:26;;;;;:45;;31799:7;;31761:26;:45;;31799:7;;31761:45;:::i;:::-;;;;-1:-1:-1;;31524:298:0;31857:10;31842:26;;;;:14;:26;;;;;:43;;;31888:15;-1:-1:-1;31842:111:0;;;;-1:-1:-1;31922:10:0;31907:26;;;;:14;:26;;;;;:38;;;;;;;;;:46;;:38;:46;31842:111;31838:454;;;32026:3;32002:21;;31992:7;:31;;;;:::i;:::-;:37;;;;:::i;:::-;31973:57;-1:-1:-1;32065:25:0;31973:57;32065:7;:25;:::i;:::-;32110:4;;:39;;-1:-1:-1;;;32110:39:0;;32049:42;;-1:-1:-1;;;;;;32110:4:0;;:13;;:39;;32124:10;;32049:42;;32110:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32168:4:0;;32182:12;;32168:44;;-1:-1:-1;;;32168:44:0;;-1:-1:-1;;;;;32168:4:0;;;;:13;;:44;;32182:12;;;32196:15;;32168:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32246:10:0;32231:26;;;;:14;:26;;;;;:45;;32269:7;;32231:26;:45;;32269:7;;32231:45;:::i;:::-;;;;-1:-1:-1;;31838:454:0;32327:10;32312:26;;;;:14;:26;;;;;:44;;;32359:15;-1:-1:-1;32312:113:0;;;;-1:-1:-1;32393:10:0;32378:26;;;;:14;:26;;;;;:38;;;;;;;;:47;32312:113;32308:456;;;32498:3;32474:21;;32464:7;:31;;;;:::i;:::-;:37;;;;:::i;:::-;32445:57;-1:-1:-1;32537:25:0;32445:57;32537:7;:25;:::i;:::-;32582:4;;:39;;-1:-1:-1;;;32582:39:0;;32521:42;;-1:-1:-1;;;;;;32582:4:0;;:13;;:39;;32596:10;;32521:42;;32582:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32640:4:0;;32654:12;;32640:44;;-1:-1:-1;;;32640:44:0;;-1:-1:-1;;;;;32640:4:0;;;;:13;;:44;;32654:12;;;32668:15;;32640:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32718:10:0;32703:26;;;;:14;:26;;;;;:45;;32741:7;;32703:26;:45;;32741:7;;32703:45;:::i;:::-;;;;-1:-1:-1;;32308:456:0;32821:7;;32799:10;32784:26;;;;:14;:26;;;;;:34;:44;32780:952;;;32864:10;32886:1;32849:26;;;:14;:26;;;;;:38;;;32906:45;;;:49;;;32974:44;;;:48;;;33041:38;;;:42;;;33102:46;;;:50;;;33171;;;:54;;;33244:48;;;:52;;;33315:44;;;:48;;;33382:43;;;:47;;;33448:37;;;:45;;-1:-1:-1;;33577:43:0;;;33639:44;;:48;;;33706:7;:10;;;;;;:::i;:::-;;;;;;31130:2609;;31083:2656;:::o;3428:191::-;3502:16;3521:6;;-1:-1:-1;;;;;3538:17:0;;;-1:-1:-1;;;;;;3538:17:0;;;;;;3571:40;;3521:6;;;;;;;3571:40;;3502:16;3571:40;3491:128;3428:191;:::o;33747:14517::-;33886:10;33792:22;33871:26;;;:14;:26;;;;;:37;;;33792:22;;33871:37;;;;;;:45;;:37;:45;:109;;;;-1:-1:-1;33935:10:0;33920:26;;;;:14;:26;;;;;:42;;;33965:15;-1:-1:-1;33871:109:0;33867:1231;;;34049:26;;34016:10;34001:26;;;;:14;:26;;;;;:44;;;:74;33997:648;;34128:10;34101:9;34113:26;;;:14;:26;;;;;:44;;;34096:534;34163:26;;34159:1;:30;34096:534;;;34392:10;34377:26;;;;:14;:26;;;;;:50;;;;34338:21;;34360:3;:1;34362;34360:3;:::i;:::-;34338:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;34297:24;;;;:21;:24;;;;;;;;:37;;;34253:10;34238:26;;:14;:26;;;;;;:33;:55;;34274:19;;34238:55;:::i;:::-;34237:97;;;;:::i;:::-;:191;;;;:::i;:::-;34219:209;;;;:::i;:::-;;-1:-1:-1;34504:21:0;:26;34526:3;:1;34528;34526:3;:::i;:::-;34504:26;;;;;;;;;;;;;;-1:-1:-1;34504:26:0;;;:36;34466:10;34451:26;;:14;:26;;;;;;:50;;;:89;;;;34563:44;;;;:47;;;;;;:::i;:::-;;;;;;34191:3;;;;;:::i;:::-;;;;34096:534;;;;33997:648;34725:26;;34692:10;34677:26;;;;:14;:26;;;;;:44;;;:74;34673:414;;34948:10;34933:26;;;;:14;:26;;;;;:50;;;34915:68;;:15;:68;:::i;:::-;34871:26;;34849:49;;;;:21;:49;;;;;;;;:62;;;34805:10;34790:26;;:14;:26;;;;;;:33;:55;;34826:19;;34790:55;:::i;:::-;34789:122;;;;:::i;:::-;:195;;;;:::i;:::-;34771:213;;;;:::i;:::-;35018:10;35003:26;;;;:14;:26;;;;;35056:15;35003:50;;;;:68;34771:213;-1:-1:-1;34673:414:0;35129:10;35114:26;;;;:14;:26;;;;;:37;;;;;;;;:46;;;:94;;-1:-1:-1;35179:10:0;35164:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;35114:94;:159;;;;-1:-1:-1;35227:10:0;35212:26;;;;:14;:26;;;;;:43;;;35258:15;-1:-1:-1;35114:159:0;35110:1281;;;35342:26;;35309:10;35294:26;;;;:14;:26;;;;;:44;;;:74;35290:648;;35421:10;35394:9;35406:26;;;:14;:26;;;;;:44;;;35389:534;35456:26;;35452:1;:30;35389:534;;;35685:10;35670:26;;;;:14;:26;;;;;:50;;;;35631:21;;35653:3;:1;35655;35653:3;:::i;:::-;35631:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;35590:24;;;;:21;:24;;;;;;;;:37;;;35546:10;35531:26;;:14;:26;;;;;;:33;:55;;35567:19;;35531:55;:::i;:::-;35530:97;;;;:::i;:::-;:191;;;;:::i;:::-;35512:209;;;;:::i;:::-;;-1:-1:-1;35797:21:0;:26;35819:3;:1;35821;35819:3;:::i;:::-;35797:26;;;;;;;;;;;;;;-1:-1:-1;35797:26:0;;;:36;35759:10;35744:26;;:14;:26;;;;;;:50;;;:89;;;;35856:44;;;;:47;;;;;;:::i;:::-;;;;;;35484:3;;;;;:::i;:::-;;;;35389:534;;;;35290:648;36018:26;;35985:10;35970:26;;;;:14;:26;;;;;:44;;;:74;35966:414;;36241:10;36226:26;;;;:14;:26;;;;;:50;;;36208:68;;:15;:68;:::i;:::-;36164:26;;36142:49;;;;:21;:49;;;;;;;;:62;;;36098:10;36083:26;;:14;:26;;;;;;:33;:55;;36119:19;;36083:55;:::i;:::-;36082:122;;;;:::i;:::-;:195;;;;:::i;:::-;36064:213;;;;:::i;:::-;36311:10;36296:26;;;;:14;:26;;;;;36349:15;36296:50;;;;:68;36064:213;-1:-1:-1;35966:414:0;36422:10;36407:26;;;;:14;:26;;;;;:37;;;;;;;;;:45;;:37;:45;:110;;;;-1:-1:-1;36471:10:0;36456:26;;;;:14;:26;;;;;:42;;;36502:15;-1:-1:-1;36456:61:0;36407:110;:157;;;;-1:-1:-1;36536:10:0;36521:26;;;;:14;:26;;;;;:35;;;;;;;;:43;;36560:4;36521:43;36407:157;36403:2194;;;36631:26;;36599:10;36584:26;;;;:14;:26;;;;;:44;;;:73;36581:1458;;;36711:10;36684:9;36696:26;;;:14;:26;;;;;:44;;;36679:1345;36746:26;;36742:1;:30;36679:1345;;;36853:21;:26;36875:3;:1;36877;36875:3;:::i;:::-;36853:26;;;;;;;;;;;;;;-1:-1:-1;36853:26:0;;;:36;36823:10;36808:26;;:14;:26;;;;:42;;;:81;36804:537;;;37091:10;37076:26;;;;:14;:26;;;;;:50;;;;37037:21;;37059:3;:1;37061;37059:3;:::i;:::-;37037:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;36996:24;;;;:21;:24;;;;;;;;:37;;;36952:10;36937:26;;:14;:26;;;;;;:33;:55;;36973:19;;36937:55;:::i;:::-;36936:97;;;;:::i;:::-;:191;;;;:::i;:::-;36918:209;;;;:::i;:::-;;-1:-1:-1;37207:21:0;:26;37229:3;:1;37231;37229:3;:::i;:::-;37207:26;;;;;;;;;;;;;;-1:-1:-1;37207:26:0;;;:36;37169:10;37154:26;;:14;:26;;;;;;:50;;;:89;;;;37270:44;;;;:47;;;;;;:::i;:::-;;;;;;36804:537;37427:21;:26;37449:3;:1;37451;37449:3;:::i;:::-;37427:26;;;;;;;;;;;;;;-1:-1:-1;37427:26:0;;;:36;37396:10;37381:26;;:14;:26;;;;:42;;;:82;37377:625;;37567:10;37492:12;37552:26;;;:14;:26;;;;;:50;;;;37507:42;;;;;:95;;37552:50;37507:95;:::i;:::-;37707:24;;;;:21;:24;;;;;;;;:37;;;37663:10;37648:26;;:14;:26;;;;;;:33;37492:110;;-1:-1:-1;37492:110:0;;37648:55;;37684:19;;37648:55;:::i;:::-;37647:97;;;;:::i;:::-;:104;;;;:::i;:::-;37629:122;;;;:::i;:::-;37846:10;37831:26;;;;:14;:26;;;;;:42;;;;37778:50;;;:95;37900:35;;:43;;-1:-1:-1;;37900:43:0;;;37629:122;-1:-1:-1;37970:5:0;;-1:-1:-1;37970:5:0;37377:625;36774:3;;;;:::i;:::-;;;;36679:1345;;;;36581:1458;38107:26;;38074:10;38059:26;;;;:14;:26;;;;;:44;;;:74;38055:530;;38357:10;38342:26;;;;:14;:26;;;;;:50;;;;38297:42;;;;;:95;;38342:50;38297:95;:::i;:::-;38253:26;;38231:49;;;;:21;:49;;;;;;;;:62;;;38187:10;38172:26;;:14;:26;;;;;;:33;:55;;38208:19;;38172:55;:::i;:::-;38171:122;;;;:::i;:::-;:222;;;;:::i;:::-;38153:240;;;;:::i;:::-;38480:10;38465:26;;;;:14;:26;;;;;:42;;;;38412:50;;;:95;38526:35;;:43;;-1:-1:-1;;38526:43:0;;;38153:240;-1:-1:-1;38055:530:0;38628:10;38613:26;;;;:14;:26;;;;;:37;;;;;;;;:46;;;:94;;-1:-1:-1;38678:10:0;38663:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;38613:94;:160;;;;-1:-1:-1;38726:10:0;38711:26;;;;:14;:26;;;;;:43;;;38758:15;-1:-1:-1;38711:62:0;38613:160;:207;;;;-1:-1:-1;38792:10:0;38777:26;;;;:14;:26;;;;;:35;;;;;;;;:43;;38816:4;38777:43;38613:207;38609:2297;;;38887:26;;38855:10;38840:26;;;;:14;:26;;;;;:44;;;:73;38837:1503;;;38965:10;38938:9;38950:26;;;:14;:26;;;;;:44;;;38933:1390;39000:26;;38996:1;:30;38933:1390;;;39106:21;:26;39128:3;:1;39130;39128:3;:::i;:::-;39106:26;;;;;;;;;;;;;;-1:-1:-1;39106:26:0;;;:36;39075:10;39060:26;;:14;:26;;;;:43;;;:82;39056:538;;;39344:10;39329:26;;;;:14;:26;;;;;:50;;;;39290:21;;39312:3;:1;39314;39312:3;:::i;:::-;39290:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;39249:24;;;;:21;:24;;;;;;;;:37;;;39205:10;39190:26;;:14;:26;;;;;;:33;:55;;39226:19;;39190:55;:::i;:::-;39189:97;;;;:::i;:::-;:191;;;;:::i;:::-;39171:209;;;;:::i;:::-;;-1:-1:-1;39460:21:0;:26;39482:3;:1;39484;39482:3;:::i;:::-;39460:26;;;;;;;;;;;;;;-1:-1:-1;39460:26:0;;;:36;39422:10;39407:26;;:14;:26;;;;;;:50;;;:89;;;;39523:44;;;;:47;;;;;;:::i;:::-;;;;;;39056:538;39678:21;:26;39700:3;:1;39702;39700:3;:::i;:::-;39678:26;;;;;;;;;;;;;;-1:-1:-1;39678:26:0;;;:36;39646:10;39631:26;;:14;:26;;;;:43;;;:83;;;;:130;;-1:-1:-1;39733:10:0;39718:26;;;;:14;:26;;;;;:35;;;;;;;;:43;;39757:4;39718:43;39631:130;39627:674;;;39865:10;39789:12;39850:26;;;:14;:26;;;;;:50;;;;39804:43;;;;;:96;;39850:50;39804:96;:::i;:::-;40005:24;;;;:21;:24;;;;;;;;:37;;;39961:10;39946:26;;:14;:26;;;;;;:33;39789:111;;-1:-1:-1;39789:111:0;;39946:55;;39982:19;;39946:55;:::i;:::-;39945:97;;;;:::i;:::-;:104;;;;:::i;:::-;39927:122;;;;:::i;:::-;40144:10;40129:26;;;;:14;:26;;;;;:43;;;;40076:50;;;:96;40199:35;;:43;;-1:-1:-1;;40199:43:0;;;39927:122;-1:-1:-1;40269:5:0;;-1:-1:-1;40269:5:0;39627:674;39028:3;;;;:::i;:::-;;;;38933:1390;;;;38837:1503;40408:26;;40375:10;40360:26;;;;:14;:26;;;;;:44;;;:74;40356:532;;40659:10;40644:26;;;;:14;:26;;;;;:50;;;;40598:43;;;;;:96;;40644:50;40598:96;:::i;:::-;40554:26;;40532:49;;;;:21;:49;;;;;;;;:62;;;40488:10;40473:26;;:14;:26;;;;;;:33;:55;;40509:19;;40473:55;:::i;:::-;40472:122;;;;:::i;:::-;:223;;;;:::i;:::-;40454:241;;;;:::i;:::-;40782:10;40767:26;;;;:14;:26;;;;;:43;;;;40714:50;;;:96;40829:35;;:43;;-1:-1:-1;;40829:43:0;;;40454:241;-1:-1:-1;40356:532:0;40937:10;40922:26;;;;:14;:26;;;;;:38;;;;;;;;;:46;;:38;:46;:111;;;;-1:-1:-1;40987:10:0;40972:26;;;;:14;:26;;;;;:43;;;41018:15;-1:-1:-1;40922:111:0;40918:1228;;;41102:26;;41069:10;41054:26;;;;:14;:26;;;;;:44;;;:74;41050:651;;41181:10;41154:9;41166:26;;;:14;:26;;;;;:44;;;41149:537;41216:26;;41212:1;:30;41149:537;;;41448:10;41433:26;;;;:14;:26;;;;;:50;;;;41394:21;;41416:3;:1;41418;41416:3;:::i;:::-;41394:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;41352:24;;;;:21;:24;;;;;;;;:38;;;41307:10;41292:26;;;;;;;;:34;:56;;41329:19;;41292:56;:::i;:::-;41291:99;;;;:::i;:::-;:193;;;;:::i;:::-;41272:212;;;;:::i;:::-;;-1:-1:-1;41560:21:0;:26;41582:3;:1;41584;41582:3;:::i;:::-;41560:26;;;;;;;;;;;;;;-1:-1:-1;41560:26:0;;;:36;41522:10;41507:26;;;;;;;;:50;;;:89;;;;41619:44;;;;:47;;;;;;:::i;:::-;;;;;;41244:3;;;;;:::i;:::-;;;;41149:537;;;;41050:651;41769:26;;41736:10;41721:26;;;;:14;:26;;;;;:44;;;:74;41717:418;;41996:10;41981:26;;;;:14;:26;;;;;:50;;;41963:68;;:15;:68;:::i;:::-;41918:26;;41896:49;;;;:21;:49;;;;;;;;:63;;;41851:10;41836:26;;;;;;;;:34;:56;;41873:19;;41836:56;:::i;:::-;41835:124;;;;:::i;:::-;:197;;;;:::i;:::-;41816:216;;;;:::i;:::-;42066:10;42051:26;;;;:14;:26;;;;;42104:15;42051:50;;;;:68;41816:216;-1:-1:-1;41717:418:0;42177:10;42162:26;;;;:14;:26;;;;;:38;;;;;;;;:47;;;:96;;-1:-1:-1;42228:10:0;42213:26;;;;:14;:26;;;;;:37;;;;;:45;;:37;:45;42162:96;:162;;;;-1:-1:-1;42277:10:0;42262:26;;;;:14;:26;;;;;:44;;;42309:15;-1:-1:-1;42162:162:0;:209;;;;-1:-1:-1;42343:10:0;42328:26;;;;:14;:26;;;;;:35;;;;;;;;:43;;42367:4;42328:43;42162:209;42158:1325;;;42440:26;;42407:10;42392:26;;;;:14;:26;;;;;:44;;;:74;42388:651;;42519:10;42492:9;42504:26;;;:14;:26;;;;;:44;;;42487:537;42554:26;;42550:1;:30;42487:537;;;42786:10;42771:26;;;;:14;:26;;;;;:50;;;;42732:21;;42754:3;:1;42756;42754:3;:::i;:::-;42732:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;42690:24;;;;:21;:24;;;;;;;;:38;;;42645:10;42630:26;;;;;;;;:34;:56;;42667:19;;42630:56;:::i;:::-;42629:99;;;;:::i;:::-;:193;;;;:::i;:::-;42610:212;;;;:::i;:::-;;-1:-1:-1;42898:21:0;:26;42920:3;:1;42922;42920:3;:::i;:::-;42898:26;;;;;;;;;;;;;;-1:-1:-1;42898:26:0;;;:36;42860:10;42845:26;;;;;;;;:50;;;:89;;;;42957:44;;;;:47;;;;;;:::i;:::-;;;;;;42582:3;;;;;:::i;:::-;;;;42487:537;;;;42388:651;43107:26;;43074:10;43059:26;;;;:14;:26;;;;;:44;;;:74;43055:417;;43333:10;43318:26;;;;:14;:26;;;;;:50;;;43300:68;;:15;:68;:::i;:::-;43255:26;;43233:49;;;;:21;:49;;;;;;;;:63;;;43188:10;43173:26;;;;;;;;:34;:56;;43210:19;;43173:56;:::i;:::-;43172:124;;;;:::i;:::-;:197;;;;:::i;:::-;43153:216;;;;:::i;:::-;43403:10;43388:26;;;;:14;:26;;;;;43441:15;43388:50;;;;:68;43153:216;-1:-1:-1;43055:417:0;43522:10;43507:26;;;;:14;:26;;;;;:38;;;;;;;;;:46;;:38;:46;:112;;;;-1:-1:-1;43572:10:0;43557:26;;;;:14;:26;;;;;:43;;;43604:15;-1:-1:-1;43557:62:0;43507:112;:159;;;;-1:-1:-1;43638:10:0;43623:26;;;;:14;:26;;;;;:35;;;;;;;;:43;;43662:4;43623:43;43507:159;43503:2212;;;43735:26;;43703:10;43688:26;;;;:14;:26;;;;;:44;;;:73;43684:1465;;;43814:10;43787:9;43799:26;;;:14;:26;;;;;:44;;;43782:1352;43849:26;;43845:1;:30;43782:1352;;;43955:21;:26;43977:3;:1;43979;43977:3;:::i;:::-;43955:26;;;;;;;;;;;;;;-1:-1:-1;43955:26:0;;;:36;43924:10;43909:26;;;;;;:43;;;:82;43905:541;;;44196:10;44181:26;;;;:14;:26;;;;;:50;;;;44142:21;;44164:3;:1;44166;44164:3;:::i;:::-;44142:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;44100:24;;;;:21;:24;;;;;;;;:38;;;44055:10;44040:26;;;;;;;;:34;:56;;44077:19;;44040:56;:::i;:::-;44039:99;;;;:::i;:::-;:193;;;;:::i;:::-;44020:212;;;;:::i;:::-;;-1:-1:-1;44312:21:0;:26;44334:3;:1;44336;44334:3;:::i;:::-;44312:26;;;;;;;;;;;;;;-1:-1:-1;44312:26:0;;;:36;44274:10;44259:26;;;;;;;;:50;;;:89;;;;44375:44;;;;:47;;;;;;:::i;:::-;;;;;;43905:541;44533:21;:26;44555:3;:1;44557;44555:3;:::i;:::-;44533:26;;;;;;;;;;;;;;-1:-1:-1;44533:26:0;;;:36;44501:10;44486:26;;;;;;:43;;;:83;44482:630;;44673:10;44597:12;44658:26;;;:14;:26;;;;;:50;;;;44612:43;;;;;:96;;44658:50;44612:96;:::i;:::-;44815:24;;;;:21;:24;;;;;;;;:38;;;44770:10;44755:26;;;;;;;;:34;44597:111;;-1:-1:-1;44597:111:0;;44755:56;;44792:19;;44755:56;:::i;:::-;44754:99;;;;:::i;:::-;:106;;;;:::i;:::-;44735:125;;;;:::i;:::-;44955:10;44940:26;;;;:14;:26;;;;;:43;;;;44887:50;;;:96;45010:35;;:43;;-1:-1:-1;;45010:43:0;;;44735:125;-1:-1:-1;45080:5:0;;-1:-1:-1;45080:5:0;44482:630;43877:3;;;;:::i;:::-;;;;43782:1352;;;;43684:1465;45217:26;;45184:10;45169:26;;;;:14;:26;;;;;:44;;;:74;45165:535;;45471:10;45456:26;;;;:14;:26;;;;;:50;;;;45410:43;;;;;:96;;45456:50;45410:96;:::i;:::-;45365:26;;45343:49;;;;:21;:49;;;;;;;;:63;;;45298:10;45283:26;;;;;;;;:34;:56;;45320:19;;45283:56;:::i;:::-;45282:124;;;;:::i;:::-;:225;;;;:::i;:::-;45263:244;;;;:::i;:::-;45594:10;45579:26;;;;:14;:26;;;;;:43;;;;45526:50;;;:96;45641:35;;:43;;-1:-1:-1;;45641:43:0;;;45263:244;-1:-1:-1;45165:535:0;45748:10;45733:26;;;;:14;:26;;;;;:38;;;;;;;;:47;;;:96;;-1:-1:-1;45799:10:0;45784:26;;;;:14;:26;;;;;:37;;;;;:45;;:37;:45;45733:96;:163;;;;-1:-1:-1;45848:10:0;45833:26;;;;:14;:26;;;;;:44;;;45881:15;-1:-1:-1;45833:63:0;45733:163;:211;;;;-1:-1:-1;45916:10:0;45901:26;;;;:14;:26;;;;;:35;;;;;;;;:43;;45940:4;45901:43;45733:211;45729:2269;;;46012:26;;45979:10;45964:26;;;;:14;:26;;;;;:44;;;:74;45961:1466;;46090:10;46063:9;46075:26;;;:14;:26;;;;;:44;;;46058:1352;46125:26;;46121:1;:30;46058:1352;;;46232:21;:26;46254:3;:1;46256;46254:3;:::i;:::-;46232:26;;;;;;;;;;;;;;-1:-1:-1;46232:26:0;;;:36;46200:10;46185:26;;;;;;:44;;;:83;46181:542;;;46473:10;46458:26;;;;:14;:26;;;;;:50;;;;46419:21;;46441:3;:1;46443;46441:3;:::i;:::-;46419:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;46377:24;;;;:21;:24;;;;;;;;:38;;;46332:10;46317:26;;;;;;;;:34;:56;;46354:19;;46317:56;:::i;:::-;46316:99;;;;:::i;:::-;:193;;;;:::i;:::-;46297:212;;;;:::i;:::-;;-1:-1:-1;46589:21:0;:26;46611:3;:1;46613;46611:3;:::i;:::-;46589:26;;;;;;;;;;;;;;-1:-1:-1;46589:26:0;;;:36;46551:10;46536:26;;;;;;;;:50;;;:89;;;;46652:44;;;;:47;;;;;;:::i;:::-;;;;;;46181:542;46807:21;:26;46829:3;:1;46831;46829:3;:::i;:::-;46807:26;;;;;;;;;;;;;;-1:-1:-1;46807:26:0;;;:36;46774:10;46759:26;;;;;;:44;;;:84;46755:633;;46948:10;46871:12;46933:26;;;:14;:26;;;;;:50;;;;46886:44;;;;;:97;;46933:50;46886:97;:::i;:::-;47090:24;;;;:21;:24;;;;;;;;:38;;;47045:10;47030:26;;;;;;;;:34;46871:112;;-1:-1:-1;46871:112:0;;47030:56;;47067:19;;47030:56;:::i;:::-;47029:99;;;;:::i;:::-;:106;;;;:::i;:::-;47010:125;;;;:::i;:::-;47230:10;47215:26;;;;:14;:26;;;;;:44;;;;47162:50;;;:97;47286:35;;:43;;-1:-1:-1;;47286:43:0;;;47010:125;-1:-1:-1;47356:5:0;;-1:-1:-1;47356:5:0;46755:633;46153:3;;;;:::i;:::-;;;;46058:1352;;;;45961:1466;47495:26;;47462:10;47447:26;;;;:14;:26;;;;;:44;;;:74;47443:537;;47750:10;47735:26;;;;:14;:26;;;;;:50;;;;47688:44;;;;;:97;;47735:50;47688:97;:::i;:::-;47643:26;;47621:49;;;;:21;:49;;;;;;;;:63;;;47576:10;47561:26;;;;;;;;:34;:56;;47598:19;;47561:56;:::i;:::-;47560:124;;;;:::i;:::-;:226;;;;:::i;:::-;47541:245;;;;:::i;:::-;47873:10;47858:26;;;;:14;:26;;;;;:44;;;;47805:50;;;:97;47921:35;;:43;;-1:-1:-1;;47921:43:0;;;47541:245;-1:-1:-1;47443:537:0;48025:10;48010:26;;;;:14;:26;;;;;:48;;:66;;48062:14;;48010:26;:66;;48062:14;;48010:66;:::i;:::-;;;;-1:-1:-1;;48102:10:0;48087:26;;;;:14;:26;;;;;:48;;:67;;48139:15;;48087:26;:67;;48139:15;;48087:67;:::i;:::-;;;;;;;;48187:14;48165:18;;:36;;;;;;;:::i;:::-;;;;;;;;48235:15;48212:19;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;33747:14517:0:o;22460:416::-;22533:4;;:39;;-1:-1:-1;;;22533:39:0;;-1:-1:-1;;;;;22533:4:0;;;;:12;;:39;;22554:4;;22561:10;;22533:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22583:4:0;;:56;;-1:-1:-1;;;22583:56:0;;-1:-1:-1;;;;;22583:4:0;;;;:17;;:56;;22601:10;;22621:4;;22628:10;;22583:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22679:10:0;22664:26;;;;:14;:26;;;;;:37;;;;;;;;:45;;:37;:45;22660:116;;22726:5;;;:38;;-1:-1:-1;;;22726:38:0;;-1:-1:-1;;;;;22726:5:0;;;;:14;;:38;;22741:10;;22753;;22726:38;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22660:116;22804:10;22789:26;;;;:14;:26;;;;;:47;;22826:10;;22789:26;:47;;22826:10;;22789:47;:::i;:::-;;;;;;;;22857:10;22847:6;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;;22460:416:0:o;23168:1194::-;23232:4;;:39;;-1:-1:-1;;;23232:39:0;;-1:-1:-1;;;;;23232:4:0;;;;:12;;:39;;23253:4;;23260:10;;23232:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23282:4:0;;:56;;-1:-1:-1;;;23282:56:0;;-1:-1:-1;;;;;23282:4:0;;;;:17;;:56;;23300:10;;23320:4;;23327:10;;23282:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23364:10:0;23349:26;;;;:14;:26;;;;;:47;;23386:10;;23349:26;:47;;23386:10;;23349:47;:::i;:::-;;;;-1:-1:-1;;23422:10:0;23407:26;;;;:14;:26;;;;;23454:15;23407:44;;;;:62;;;23544:16;;23526:34;;;:::i;:::-;23495:10;23480:26;;;;:14;:26;;;;;;;;:43;;;:80;;;;23572:43;;;:47;;;23675:11;23630:42;;;:56;23697:36;;;;:43;;23736:4;-1:-1:-1;;23751:45:0;;;;;;23807:46;;;:50;;;-1:-1:-1;23868:41:0;;:45;;;23977:15;-1:-1:-1;23924:50:0;;:68;24050:26;;24003:44;;;:73;-1:-1:-1;24087:48:0;;;:52;;;-1:-1:-1;;24150:42:0;;;;;24238:16;;24203:8;:20;;;;;;:51;;;24265:33;;:37;;;24313:20;;24323:10;;23697:36;23480:26;24313:20;;24323:10;;24313:20;:::i;:::-;;;;-1:-1:-1;;24344:7:0;:10;;;:7;:10;;;:::i;:::-;;;;;;23168:1194;:::o;22884:273::-;22948:4;;:39;;-1:-1:-1;;;22948:39:0;;-1:-1:-1;;;;;22948:4:0;;;;:12;;:39;;22969:4;;22976:10;;22948:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22998:4:0;;:56;;-1:-1:-1;;;22998:56:0;;-1:-1:-1;;;;;22998:4:0;;;;:17;;:56;;23016:10;;23036:4;;23043:10;;22998:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23080:10:0;23065:26;;;;:14;:26;;;;;:48;;23103:10;;23065:26;:48;;23103:10;;23065:48;:::i;:::-;;;;;;;;23135:10;23124:7;;:21;;;;;;;:::i;24370:1089::-;24434:4;;:39;;-1:-1:-1;;;24434:39:0;;-1:-1:-1;;;;;24434:4:0;;;;:12;;:39;;24455:4;;24462:10;;24434:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24484:4:0;;:56;;-1:-1:-1;;;24484:56:0;;-1:-1:-1;;;;;24484:4:0;;;;:17;;:56;;24502:10;;24522:4;;24529:10;;24484:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24566:10:0;24551:26;;;;:14;:26;;;;;:48;;24589:10;;24551:26;:48;;24589:10;;24551:48;:::i;:::-;;;;-1:-1:-1;;24625:10:0;24610:26;;;;:14;:26;;;;;24658:15;24610:45;;;;:63;;;24749:17;;24731:35;;;:::i;:::-;24699:10;24684:26;;;;:14;:26;;;;;:44;;;:82;;;;24777:37;;;:44;;24832;;;:48;;;24937:11;24891:43;;;:57;-1:-1:-1;;24959:46:0;;-1:-1:-1;24959:46:0;;;25016;;;:50;;;25130:15;-1:-1:-1;25077:50:0;;:68;25203:26;;25156:44;;;;:73;;;;-1:-1:-1;25240:38:0;;:42;;;-1:-1:-1;25293:48:0;;;:52;;;-1:-1:-1;;25356:42:0;;;;;25409:21;;25420:10;;25156:44;24684:26;25409:21;;25420:10;;25409:21;:::i;:::-;;;;-1:-1:-1;;25441:7:0;:10;;;:7;:10;;;:::i;196:180:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;381:316::-;458:6;466;474;527:2;515:9;506:7;502:23;498:32;495:52;;;543:1;540;533:12;495:52;-1:-1:-1;;566:23:1;;;636:2;621:18;;608:32;;-1:-1:-1;687:2:1;672:18;;;659:32;;381:316;-1:-1:-1;381:316:1:o;702:131::-;-1:-1:-1;;;;;777:31:1;;767:42;;757:70;;823:1;820;813:12;838:247;897:6;950:2;938:9;929:7;925:23;921:32;918:52;;;966:1;963;956:12;918:52;1005:9;992:23;1024:31;1049:5;1024:31;:::i;:::-;1074:5;838:247;-1:-1:-1;;;838:247:1:o;1817:315::-;1885:6;1893;1946:2;1934:9;1925:7;1921:23;1917:32;1914:52;;;1962:1;1959;1952:12;1914:52;2001:9;1988:23;2020:31;2045:5;2020:31;:::i;:::-;2070:5;2122:2;2107:18;;;;2094:32;;-1:-1:-1;;;1817:315:1:o;2137:118::-;2223:5;2216:13;2209:21;2202:5;2199:32;2189:60;;2245:1;2242;2235:12;2260:241;2316:6;2369:2;2357:9;2348:7;2344:23;2340:32;2337:52;;;2385:1;2382;2375:12;2337:52;2424:9;2411:23;2443:28;2465:5;2443:28;:::i;4527:248::-;4595:6;4603;4656:2;4644:9;4635:7;4631:23;4627:32;4624:52;;;4672:1;4669;4662:12;4624:52;-1:-1:-1;;4695:23:1;;;4765:2;4750:18;;;4737:32;;-1:-1:-1;4527:248:1:o;4780:274::-;-1:-1:-1;;;;;4972:32:1;;;;4954:51;;5036:2;5021:18;;5014:34;4942:2;4927:18;;4780:274::o;5059:245::-;5126:6;5179:2;5167:9;5158:7;5154:23;5150:32;5147:52;;;5195:1;5192;5185:12;5147:52;5227:9;5221:16;5246:28;5268:5;5246:28;:::i;5309:127::-;5370:10;5365:3;5361:20;5358:1;5351:31;5401:4;5398:1;5391:15;5425:4;5422:1;5415:15;5441:125;5506:9;;;5527:10;;;5524:36;;;5540:18;;:::i;:::-;5441:125;;;;:::o;5571:128::-;5638:9;;;5659:11;;;5656:37;;;5673:18;;:::i;5704:217::-;5744:1;5770;5760:132;;5814:10;5809:3;5805:20;5802:1;5795:31;5849:4;5846:1;5839:15;5877:4;5874:1;5867:15;5760:132;-1:-1:-1;5906:9:1;;5704:217::o;5926:168::-;5999:9;;;6030;;6047:15;;;6041:22;;6027:37;6017:71;;6068:18;;:::i;6099:135::-;6138:3;6159:17;;;6156:43;;6179:18;;:::i;:::-;-1:-1:-1;6226:1:1;6215:13;;6099:135::o;6589:127::-;6650:10;6645:3;6641:20;6638:1;6631:31;6681:4;6678:1;6671:15;6705:4;6702:1;6695:15;6721:251;6791:6;6844:2;6832:9;6823:7;6819:23;6815:32;6812:52;;;6860:1;6857;6850:12;6812:52;6892:9;6886:16;6911:31;6936:5;6911:31;:::i;6977:127::-;7038:10;7033:3;7029:20;7026:1;7019:31;7069:4;7066:1;7059:15;7093:4;7090:1;7083:15;7109:461;7162:3;7200:5;7194:12;7227:6;7222:3;7215:19;7253:4;7282:2;7277:3;7273:12;7266:19;;7319:2;7312:5;7308:14;7340:1;7350:195;7364:6;7361:1;7358:13;7350:195;;;7429:13;;-1:-1:-1;;;;;7425:39:1;7413:52;;7485:12;;;;7520:15;;;;7461:1;7379:9;7350:195;;;-1:-1:-1;7561:3:1;;7109:461;-1:-1:-1;;;;;7109:461:1:o;7575:332::-;7782:6;7771:9;7764:25;7825:2;7820;7809:9;7805:18;7798:30;7745:4;7845:56;7897:2;7886:9;7882:18;7874:6;7845:56;:::i;:::-;7837:64;7575:332;-1:-1:-1;;;;7575:332:1:o;7912:1105::-;8007:6;8038:2;8081;8069:9;8060:7;8056:23;8052:32;8049:52;;;8097:1;8094;8087:12;8049:52;8130:9;8124:16;8159:18;8200:2;8192:6;8189:14;8186:34;;;8216:1;8213;8206:12;8186:34;8254:6;8243:9;8239:22;8229:32;;8299:7;8292:4;8288:2;8284:13;8280:27;8270:55;;8321:1;8318;8311:12;8270:55;8350:2;8344:9;8372:2;8368;8365:10;8362:36;;;8378:18;;:::i;:::-;8424:2;8421:1;8417:10;8456:2;8450:9;8519:2;8515:7;8510:2;8506;8502:11;8498:25;8490:6;8486:38;8574:6;8562:10;8559:22;8554:2;8542:10;8539:18;8536:46;8533:72;;;8585:18;;:::i;:::-;8621:2;8614:22;8671:18;;;8705:15;;;;-1:-1:-1;8747:11:1;;;8743:20;;;8775:19;;;8772:39;;;8807:1;8804;8797:12;8772:39;8831:11;;;;8851:135;8867:6;8862:3;8859:15;8851:135;;;8933:10;;8921:23;;8884:12;;;;8964;;;;8851:135;;9022:184;9092:6;9145:2;9133:9;9124:7;9120:23;9116:32;9113:52;;;9161:1;9158;9151:12;9113:52;-1:-1:-1;9184:16:1;;9022:184;-1:-1:-1;9022:184:1:o;9211:502::-;9474:6;9463:9;9456:25;9517:3;9512:2;9501:9;9497:18;9490:31;9437:4;9538:57;9590:3;9579:9;9575:19;9567:6;9538:57;:::i;:::-;-1:-1:-1;;;;;9631:32:1;;;;9626:2;9611:18;;9604:60;-1:-1:-1;9695:2:1;9680:18;9673:34;9530:65;9211:502;-1:-1:-1;;9211:502:1:o;10486:375::-;-1:-1:-1;;;;;10744:15:1;;;10726:34;;10796:15;;;;10791:2;10776:18;;10769:43;10843:2;10828:18;;10821:34;;;;10676:2;10661:18;;10486:375::o;10866:136::-;10905:3;10933:5;10923:39;;10942:18;;:::i;:::-;-1:-1:-1;;;10978:18:1;;10866:136::o

Swarm Source

ipfs://678c793e895ba5efb0b8ca4e677ba519b9bc809799f55faf5456f71f6670ac22

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.