Contract 0xf1b08ead7894e255a38babec2be391d41d5ac494 1

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x0be4c39f6e63750cb23e02eda258c5d51220b46204981096ddb86ff7624f123896380302021-07-31 19:04:273 mins ago0xb873a269c254319a88d88b78c63f73727dfc2f83 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.001028835
0x38579d502de35f28b2d65a1488eb2e3cee54e921f34ee94f5f30fd6aa8051f2f96379282021-07-31 18:59:218 mins ago0x5fbcb7177bccc2f657480cbb6cc81f83ee1da844 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.001028835
0xabe62573e8e2b39707430fe5405763ff3e0e74b3d33ab61c5ca3553adbc552ba96378502021-07-31 18:55:2712 mins ago0x92630952200580a2587c2faab40266caed005425 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.001028835
0xcedf71caff077a143339c2c8f6a5e0dd1a2d594ad429b52a80e68d3f09c60b8e96377212021-07-31 18:49:0019 mins ago0x03ebef49ef67cb00aa4724e737ae4c06d1a565d2 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.00099301
0x6db88b677708f77e4230d41a780a6dee10eb6a094d8abce4c14ef31dc5283d3496377102021-07-31 18:48:2719 mins ago0x3d8c6b0d388b160696c555ac7942951d76367e4b IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.00114613
0xff4a42e2d50a73343ed920bce92fce3f5c758b2985a937a34cb6e745350aba5e96376542021-07-31 18:45:3722 mins ago0x982ddf654ef2b438dc009a7721b84dde8faa0686 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.00091801
0x34ef89a49ad2d08403ffdf93188a6cc48592d838462c8df2c4a61f3778af220496376112021-07-31 18:43:2824 mins ago0x39d43098fa1816d4affad72b9f3b064fe7f3b3f4 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.001028835
0xa2e11e129123d94f0acc0aaae93bcf08b96a1794c76436f0ad3ded8819d7898b96375632021-07-31 18:41:0427 mins ago0x39a1e1c65b7e0d4bf2f4849db1fc4fe18be3071c IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.001028835
0x9c05c6b340d2adfa0c2c1199bac5732de145073a38460670b2f59397a5474a1096375392021-07-31 18:39:5228 mins ago0x39a1e1c65b7e0d4bf2f4849db1fc4fe18be3071c IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.001028775
0x61833231a4d8ad796a2df32890b2ea863a5a1330933bb9d201290b25ae88618396374382021-07-31 18:34:4933 mins ago0x38ea8561369c6aebd1350d587216a377ca754731 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.00110878
0x66534a4b82a2e13babb9685640928166c2a8fc91346c91b620c66df6e47975ce96373662021-07-31 18:30:5437 mins ago0xdc800f118daceb08cb06abed3c0811be7cae9b14 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.001028835
0x30295e4d68997e2332a8e6e2d3f4b1fc891bd5ca48a7d568caea5cf2c91b6e1d96373412021-07-31 18:29:2738 mins ago0x0812cb115101e7179297038315ac3ed2ea37eac3 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.001028835
0x1c257a58520be872b4de0c3462a4a92947bc07649e355a071ed0a0a40a5eea7396372722021-07-31 18:25:0643 mins ago0x1082f9e55470626425105301903dc76ae0bbac15 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.00118498
0x35c6de6635aa5ff5c4144edd3d3b2540aa5d366b56164f955d914fe3e987ff7a96372642021-07-31 18:24:3843 mins ago0xc7e4af472b4fd2cb039095fdc7e977569f4e701a IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.00110878
0x51337786cd0559d2293798f82ef7371f2f9961a68cda80fb6adf0aedc751446196371992021-07-31 18:21:1247 mins ago0x700b176833c9807dcaa74412f56cf4770bbd3a8c IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.001028895
0xe56753174e6d3eaa46df36bbd12130fe098467ab734f0ba374d65778e1c8a41596371422021-07-31 18:18:2049 mins ago0x45f88ea6d42c0e5e3bdac54582fd4ffac87949d9 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.001028895
0x036338e32928c95d1320b05d8c1f31175aa04003e9e678705a686705019a10cb96371362021-07-31 18:18:0250 mins ago0x5f71c40537f5bee3ad4fb7c158f25a32032afb58 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.001028835
0x1b0b876909d717d4c04e4a75234ffa705fd0787bef5599886154f65035f777f896370682021-07-31 18:14:3853 mins ago0x1082f9e55470626425105301903dc76ae0bbac15 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.00118504
0xd534bd976072e8a6cce05d04067e3394bda74cce754cc807da2a6396dbb8f67696370132021-07-31 18:11:5356 mins ago0x5f71c40537f5bee3ad4fb7c158f25a32032afb58 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.00110884
0x3e741a55992f098aaa7b2f8abf4749d1fac55d2bc0b51946b8985c6fa62e09bf96369002021-07-31 18:06:121 hr 2 mins ago0x3bf801037192ec0589edaee765ec646c619283d7 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.001028835
0x0361d36791fb55a60bd34dd102700990a08b6010c64271eda0e65fa98f0ab5d496368782021-07-31 18:05:061 hr 3 mins ago0x7d1e05a1cca1a87f69b532c93c8b80e87717d06c IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.001178835
0xfc0a69080e2f1327c717f28a1679884242b3ce2f26580d126b6429986aeb4a6f96365552021-07-31 17:48:561 hr 19 mins ago0x3ec0afa1e59927d523a1a3b6f9e1b0c05246a2bc IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.0010265
0xb29336e165808c22b6d836165c439820f428ee6a72f17c3df9bac51d9883a46e96365252021-07-31 17:47:261 hr 20 mins ago0x0990bdb37064619ca9fa672e44ea1ae083e6ae55 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.000915675
0x581e46c83748e8e7555ca2a84b5e2897c158351e9a916ef7c228164cf83ff56196364812021-07-31 17:45:141 hr 23 mins ago0x57993001845542db9475f36c8ed876392c5d2174 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.00034736
0xc02983a3615758ee9f29283510fc5a66db7d8336db5fcc450180789e4cead5ad96362912021-07-31 17:35:241 hr 32 mins ago0x377e178ac5ac9fc37d3b40c6ea747e0e0af505a9 IN  0xf1b08ead7894e255a38babec2be391d41d5ac4940 BNB0.0010265
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SeedVault

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-06-01
*/

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

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

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

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

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


/**
 * @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() internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: @openzeppelin/contracts/math/SafeMath.sol


/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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);
}

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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


/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

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

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

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

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

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() internal {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

abstract contract ReEntrancyGuard {
    bool internal locked;

    modifier noReentrant() {
        require(!locked, "No re-entrancy");
        locked = true;
        _;
        locked = false;
    }
}

// File: contracts/interfaces/IMasterChef.sol

interface IMasterChef {
    function deposit(uint256 _pid, uint256 _amount) external;

    function withdraw(uint256 _pid, uint256 _amount) external;

    function pendingTree(uint256 _pid, address _user) external view returns (uint256);

    function userInfo(uint256 _pid, address _user) external view returns (uint256, uint256);

    function emergencyWithdraw(uint256 _pid) external;
}

// File: contracts/SeedVault.sol

contract SeedVault is Ownable, Pausable, ReEntrancyGuard {
    using SafeERC20 for IERC20;
    using SafeMath for uint256;

    struct UserInfo {
        uint256 shares; // number of shares for a user
        uint256 lastDepositedTime; // keeps track of deposited time for potential penalty
        uint256 treeAtLastUserAction; // keeps track of tree deposited at the last user action
        uint256 lastUserActionTime; // keeps track of the last user action time
    }

    IERC20 public immutable token; // Tree token

    IMasterChef public immutable masterchef;

    mapping(address => UserInfo) public userInfo;

    uint256 public totalShares;
    uint256 public lastHarvestedTime;
    address public admin;
    address public treasury;

    uint256 public constant MAX_PERFORMANCE_FEE = 500; // 5%
    uint256 public constant MAX_CALL_FEE = 100; // 1%
    uint256 public constant MAX_WITHDRAW_FEE = 100; // 1%
    uint256 public constant MAX_WITHDRAW_FEE_PERIOD = 72 hours; // 3 days

    uint256 public performanceFee = 200; // 2%
    uint256 public callFee = 25; // 0.25%
    uint256 public withdrawFee = 10; // 0.1%
    uint256 public withdrawFeePeriod = 72 hours; // 3 days
    
    uint256 public seedPoolPid = 24;     // Seed Pool pid in masterchef

    event Deposit(address indexed sender, uint256 amount, uint256 shares, uint256 lastDepositedTime);
    event Withdraw(address indexed sender, uint256 amount, uint256 shares);
    event Harvest(address indexed sender, uint256 performanceFee, uint256 callFee);
    event UpdatePerformancefee(address indexed sender, uint256 oldFee, uint256 newFee);
    event UpdateCallfee(address indexed sender, uint256 oldFee, uint256 newFee);
    event UpdateWithdarwfee(address indexed sender, uint256 oldFee, uint256 newFee);
    event UpdateWithdarwPeriod(address indexed sender, uint256 oldPeriod, uint256 newPeriod);
    event UpdateSeedPoolPid(address indexed sender, uint256 oldPid, uint256 newPid);
    event Pause();
    event Unpause();

    /**
     * @notice Constructor
     * @param _token: Tree token contract
     * @param _masterchef: MasterChef contract
     * @param _admin: address of the admin
     * @param _treasury: address of the treasury (collects fees)
     */
    constructor(
        IERC20 _token,
        IMasterChef _masterchef,
        address _admin,
        address _treasury
    ) public {
        token = _token;
        masterchef = _masterchef;
        admin = _admin;
        treasury = _treasury;

        // Infinite approve
        IERC20(_token).safeApprove(address(_masterchef), uint256(-1));
    }

    /**
     * @notice Checks if the msg.sender is the admin address
     */
    modifier onlyAdmin() {
        require(msg.sender == admin, "admin: wut?");
        _;
    }

    /**
     * @notice Checks if the msg.sender is a contract or a proxy
     */
    modifier notContract() {
        require(!_isContract(msg.sender), "contract not allowed");
        require(msg.sender == tx.origin, "proxy contract not allowed");
        _;
    }

    /**
     * @notice Deposits funds into the tree Vault
     * @dev Only possible when contract not paused.
     * @param _amount: number of tokens to deposit (in TREE)
     */
    function deposit(uint256 _amount) external whenNotPaused notContract {
        require(_amount > 0, "Nothing to deposit");

        uint256 pool = balanceOf();
        token.safeTransferFrom(msg.sender, address(this), _amount);
        uint256 currentShares = 0;
        if (totalShares != 0) {
            currentShares = (_amount.mul(totalShares)).div(pool);
        } else {
            currentShares = _amount;
        }
        UserInfo storage user = userInfo[msg.sender];

        user.shares = user.shares.add(currentShares);
        user.lastDepositedTime = block.timestamp;

        totalShares = totalShares.add(currentShares);

        user.treeAtLastUserAction = user.shares.mul(balanceOf()).div(totalShares);
        user.lastUserActionTime = block.timestamp;

        _earn();

        emit Deposit(msg.sender, _amount, currentShares, block.timestamp);
    }

    /**
     * @notice Withdraws all funds for a user
     */
    function withdrawAll() external notContract {
        withdraw(userInfo[msg.sender].shares);
    }

    /**
     * @notice Reinvests TREE tokens into MasterChef
     * @dev Only possible when contract not paused.
     */
    function harvest() public whenNotPaused notContract {
        uint256 PendingTree = IMasterChef(masterchef).pendingTree(seedPoolPid, address(this));
        IMasterChef(masterchef).withdraw(seedPoolPid, 0);
        
        uint256 harvestedAmount = PendingTree > available() ?
                                available() :
                                PendingTree;

        uint256 currentPerformanceFee = harvestedAmount.mul(performanceFee).div(10000);
        token.safeTransfer(treasury, currentPerformanceFee);

        uint256 currentCallFee = harvestedAmount.mul(callFee).div(10000);
        token.safeTransfer(msg.sender, currentCallFee);

        _earn();

        lastHarvestedTime = block.timestamp;

        emit Harvest(msg.sender, currentPerformanceFee, currentCallFee);
    }

    /**
     * @notice Sets admin address
     * @dev Only callable by the contract owner.
     */
    function setAdmin(address _admin) external onlyOwner {
        require(_admin != address(0), "Cannot be zero address");
        admin = _admin;
    }

    /**
     * @notice Sets treasury address
     * @dev Only callable by the contract owner.
     */
    function setTreasury(address _treasury) external onlyOwner {
        require(_treasury != address(0), "Cannot be zero address");
        treasury = _treasury;
    }

    /**
     * @notice Sets performance fee
     * @dev Only callable by the contract admin.
     */
    function setPerformanceFee(uint256 _performanceFee) external onlyAdmin {
        require(_performanceFee <= MAX_PERFORMANCE_FEE, "performanceFee cannot be more than MAX_PERFORMANCE_FEE");
        uint256 oldFee = performanceFee;
        performanceFee = _performanceFee;

        emit UpdatePerformancefee(msg.sender, oldFee, _performanceFee);
    }

    /**
     * @notice Sets seed pool pid
     * @dev Only callable by the contract admin.
     */
    function setSeedPoolPid(uint256 _seedPoolPid) external onlyAdmin whenPaused{
        uint256 oldPid = seedPoolPid;
        
        // Harvest pending rewards
        IMasterChef(masterchef).withdraw(seedPoolPid, 0);
        // Withdraw all token from old Pool
        emergencyWithdraw();
        
        seedPoolPid = _seedPoolPid;
        
        // stake all token to need pool
        _earn();
        
        emit UpdateSeedPoolPid(msg.sender, oldPid, _seedPoolPid);
    }

    /**
     * @notice Sets call fee
     * @dev Only callable by the contract admin.
     */
    function setCallFee(uint256 _callFee) external onlyAdmin {
        require(_callFee <= MAX_CALL_FEE, "callFee cannot be more than MAX_CALL_FEE");
        uint256 oldFee = callFee;
        callFee = _callFee;

        emit UpdateCallfee(msg.sender, oldFee, _callFee);
    }

    /**
     * @notice Sets withdraw fee
     * @dev Only callable by the contract admin.
     */
    function setWithdrawFee(uint256 _withdrawFee) external onlyAdmin {
        require(_withdrawFee <= MAX_WITHDRAW_FEE, "withdrawFee cannot be more than MAX_WITHDRAW_FEE");
        uint256 oldFee = withdrawFee;
        withdrawFee = _withdrawFee;

        emit UpdateWithdarwfee(msg.sender, oldFee, _withdrawFee);
    }

    /**
     * @notice Sets withdraw fee period
     * @dev Only callable by the contract admin.
     */
    function setWithdrawFeePeriod(uint256 _withdrawFeePeriod) external onlyAdmin {
        require(
            _withdrawFeePeriod <= MAX_WITHDRAW_FEE_PERIOD,
            "withdrawFeePeriod cannot be more than MAX_WITHDRAW_FEE_PERIOD"
        );
        uint256 oldPeriod = withdrawFeePeriod;
        withdrawFeePeriod = _withdrawFeePeriod;

        UpdateWithdarwPeriod(msg.sender, oldPeriod, _withdrawFeePeriod);
    }

    /**
     * @notice Withdraws from MasterChef to Vault without caring about rewards.
     * @dev EMERGENCY ONLY. Only callable by the contract admin.
     */
    function emergencyWithdraw() public onlyAdmin {
        IMasterChef(masterchef).emergencyWithdraw(seedPoolPid);
    }

    /**
     * @notice Withdraw unexpected tokens sent to the Tree Vault
     */
    function inCaseTokensGetStuck(address _token) external onlyAdmin {
        require(_token != address(token), "Token cannot be same as deposit token");

        uint256 amount = IERC20(_token).balanceOf(address(this));
        IERC20(_token).safeTransfer(msg.sender, amount);
    }

    /**
     * @notice Triggers stopped state
     * @dev Only possible when contract not paused.
     */
    function pause() external onlyAdmin whenNotPaused {
        _pause();
        emit Pause();
    }

    /**
     * @notice Returns to normal state
     * @dev Only possible when contract is paused.
     */
    function unpause() external onlyAdmin whenPaused {
        _unpause();
        emit Unpause();
    }

    /**
     * @notice Calculates the expected harvest reward from third party
     * @return Expected reward to collect in TREE
     */
    function calculateHarvestTreeRewards() external view returns (uint256) {
        uint256 amount = IMasterChef(masterchef).pendingTree(seedPoolPid, address(this));
        uint256 currentCallFee = amount.mul(callFee).div(10000);

        return currentCallFee;
    }

    /**
     * @notice Calculates the total pending rewards that can be restaked
     * @return Returns total pending tree rewards
     */
    function calculateTotalPendingTreeRewards() external view returns (uint256) {
        uint256 amount = IMasterChef(masterchef).pendingTree(seedPoolPid, address(this));
        
        return amount;
    }

    /**
     * @notice Calculates the price per share
     */
    function getPricePerFullShare() external view returns (uint256) {
        return totalShares == 0 ? 1e18 : balanceOf().mul(1e18).div(totalShares);
    }

    /**
     * @notice Withdraws from funds from the Tree Vault
     * @param _shares: Number of shares to withdraw
     */
    function withdraw(uint256 _shares) public noReentrant notContract {
        UserInfo storage user = userInfo[msg.sender];
        require(_shares > 0, "Nothing to withdraw");
        require(_shares <= user.shares, "Withdraw amount exceeds balance");

        uint256 currentAmount = (balanceOf().mul(_shares)).div(totalShares);
        user.shares = user.shares.sub(_shares);
        totalShares = totalShares.sub(_shares);

        uint256 bal = available();
        if (bal < currentAmount) {
            uint256 balWithdraw = currentAmount.sub(bal);
            IMasterChef(masterchef).withdraw(seedPoolPid, balWithdraw);
            uint256 balAfter = available();
            uint256 diff = balAfter.sub(bal);
            if (diff < balWithdraw) {
                currentAmount = bal.add(diff);
            }
        }

        if (block.timestamp < user.lastDepositedTime.add(withdrawFeePeriod)) {
            uint256 currentWithdrawFee = currentAmount.mul(withdrawFee).div(10000);
            token.safeTransfer(treasury, currentWithdrawFee);
            currentAmount = currentAmount.sub(currentWithdrawFee);
        }

        token.safeTransfer(msg.sender, currentAmount);
        
        if (user.shares > 0) {
            user.treeAtLastUserAction = user.shares.mul(balanceOf()).div(totalShares);
        } else {
            user.treeAtLastUserAction = 0;
        }
        
        user.lastUserActionTime = block.timestamp;

        emit Withdraw(msg.sender, currentAmount, _shares);
    }

    /**
     * @notice Custom logic for how much the vault allows to be borrowed
     * @dev The contract puts 100% of the tokens to work.
     */
    function available() public view returns (uint256) {
        return token.balanceOf(address(this));
    }

    /**
     * @notice Calculates the total underlying tokens
     * @dev It includes tokens held by the contract and held in MasterChef
     */
    function balanceOf() public view returns (uint256) {
        (uint256 amount, ) = IMasterChef(masterchef).userInfo(seedPoolPid, address(this));
        return token.balanceOf(address(this)).add(amount);
    }

    /**
     * @notice Deposits tokens into MasterChef to earn staking rewards
     */
    function _earn() internal {
        uint256 bal = available();
        if (bal > 0) {
            IMasterChef(masterchef).deposit(seedPoolPid, bal);
        }
    }

    /**
     * @notice Checks if address is a contract
     * @dev It prevents contract from being targetted
     */
    function _isContract(address addr) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(addr)
        }
        return size > 0;
    }
}

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"contract IMasterChef","name":"_masterchef","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDepositedTime","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"performanceFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"callFee","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"UpdateCallfee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"UpdatePerformancefee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldPid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPid","type":"uint256"}],"name":"UpdateSeedPoolPid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"UpdateWithdarwPeriod","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"UpdateWithdarwfee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MAX_CALL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PERFORMANCE_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WITHDRAW_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WITHDRAW_FEE_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"available","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateHarvestTreeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateTotalPendingTreeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"callFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"inCaseTokensGetStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastHarvestedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"contract IMasterChef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"seedPoolPid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_callFee","type":"uint256"}],"name":"setCallFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_performanceFee","type":"uint256"}],"name":"setPerformanceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seedPoolPid","type":"uint256"}],"name":"setSeedPoolPid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawFee","type":"uint256"}],"name":"setWithdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawFeePeriod","type":"uint256"}],"name":"setWithdrawFeePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","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":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"lastDepositedTime","type":"uint256"},{"internalType":"uint256","name":"treeAtLastUserAction","type":"uint256"},{"internalType":"uint256","name":"lastUserActionTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFeePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60c060405260c86006556019600755600a6008556203f4806009556018600a553480156200002c57600080fd5b5060405162004a6d38038062004a6d833981810160405260808110156200005257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050506000620000936200029760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060008060146101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200028d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff166200029f60201b620033d4179092919060201c565b5050505062000831565b600033905090565b600081148062000371575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156200033257600080fd5b505afa15801562000347573d6000803e3d6000fd5b505050506040513d60208110156200035e57600080fd5b8101908080519060200190929190505050145b620003c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018062004a376036913960400191505060405180910390fd5b6200046d8363095ea7b360e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506200047260201b60201c565b505050565b6060620004db826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200056c60201b62003599179092919060201c565b90506000815111156200056757808060200190516020811015620004fe57600080fd5b810190808051906020019092919050505062000566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018062004a0d602a913960400191505060405180910390fd5b5b505050565b60606200058384846000856200058c60201b60201c565b90509392505050565b606082471015620005e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620049e76026913960400191505060405180910390fd5b620005fa856200074c60201b60201c565b6200066d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310620006bf57805182526020820191506020810190506020830392506200069a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811462000723576040519150601f19603f3d011682016040523d82523d6000602084013e62000728565b606091505b5091509150620007408282866200075f60201b60201c565b92505050949350505050565b600080823b905060008111915050919050565b6060831562000771578290506200082a565b600083511115620007855782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620007ee578082015181840152602081019050620007d1565b50505050905090810190601f1680156200081c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b9392505050565b60805160601c60a05160601c614137620008b060003980610a085280610ff352806115d852806116a65280611b2352806120b652806125d35280612d08528061338e528061398152508061114152806111a352806117b1528061182952806118dc52806121925280612a815280612e5a52806133b252506141376000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80638456cb591161013b578063d4b0de2f116100b8578063f0f442601161007c578063f0f4426014610728578063f2fde38b1461076c578063f851a440146107b0578063fb1db278146107e4578063fc0c546a1461081857610248565b8063d4b0de2f14610680578063db2e21bc1461069e578063def68a9c146106a8578063df10b4e6146106ec578063e941fa781461070a57610248565b8063a3e8241b116100ff578063a3e8241b146105ca578063b60f0531146105e8578063b6ac642a14610606578063b6b55f2514610634578063bdca91651461066257610248565b80638456cb5914610546578063853828b614610550578063877887821461055a5780638da5cb5b1461057857806390321e1a146105ac57610248565b80634641257d116101c9578063704b6c021161018d578063704b6c021461048e57806370897b23146104d2578063715018a614610500578063722713f71461050a57806377c7b8fc1461052857610248565b80634641257d146103e457806348a0d754146103ee5780635c975abb1461040c57806361d027b31461042c5780636c8114a61461046057610248565b80632cfc5f01116102105780632cfc5f01146103525780632e1a7d4d146103705780633527d2551461039e5780633a98ef39146103bc5780633f4ba83a146103da57610248565b80631959a0021461024d5780631efac1b8146102ba5780632311cc42146102e857806326465826146103065780632ad5a53f14610334575b600080fd5b61028f6004803603602081101561026357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061084c565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b6102e6600480360360208110156102d057600080fd5b810190808035906020019092919050505061087c565b005b6102f0610a03565b6040518082815260200191505060405180910390f35b6103326004803603602081101561031c57600080fd5b8101908080359060200190929190505050610adb565b005b61033c610c60565b6040518082815260200191505060405180910390f35b61035a610c65565b6040518082815260200191505060405180910390f35b61039c6004803603602081101561038657600080fd5b8101908080359060200190929190505050610c6c565b005b6103a66112bd565b6040518082815260200191505060405180910390f35b6103c46112c3565b6040518082815260200191505060405180910390f35b6103e26112c9565b005b6103ec61143c565b005b6103f66118d8565b6040518082815260200191505060405180910390f35b6104146119a1565b60405180821515815260200191505060405180910390f35b6104346119b7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61048c6004803603602081101561047657600080fd5b81019080803590602001909291905050506119dd565b005b6104d0600480360360208110156104a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c28565b005b6104fe600480360360208110156104e857600080fd5b8101908080359060200190929190505050611dbe565b005b610508611f44565b005b6105126120b1565b6040518082815260200191505060405180910390f35b610530612266565b6040518082815260200191505060405180910390f35b61054e6122bb565b005b61055861242f565b005b610562612599565b6040518082815260200191505060405180910390f35b61058061259f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105b46125c8565b6040518082815260200191505060405180910390f35b6105d26125ce565b6040518082815260200191505060405180910390f35b6105f06126d4565b6040518082815260200191505060405180910390f35b6106326004803603602081101561061c57600080fd5b81019080803590602001909291905050506126da565b005b6106606004803603602081101561064a57600080fd5b810190808035906020019092919050505061285f565b005b61066a612c38565b6040518082815260200191505060405180910390f35b610688612c3e565b6040518082815260200191505060405180910390f35b6106a6612c43565b005b6106ea600480360360208110156106be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d95565b005b6106f4612fd2565b6040518082815260200191505060405180910390f35b610712612fd8565b6040518082815260200191505060405180910390f35b61076a6004803603602081101561073e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fde565b005b6107ae6004803603602081101561078257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613174565b005b6107b8613366565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107ec61338c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108206133b0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60016020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f61646d696e3a207775743f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b6203f48081111561099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180614035603d913960400191505060405180910390fd5b60006009549050816009819055503373ffffffffffffffffffffffffffffffffffffffff167f422e45bf6551fa6275419fa637ab30b36d37b4d2d5ec0bca1d3a950c85cf5b788284604051808381526020018281526020019250505060405180910390a25050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637914dc8f600a54306040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610a9757600080fd5b505afa158015610aab573d6000803e3d6000fd5b505050506040513d6020811015610ac157600080fd5b810190808051906020019092919050505090508091505090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f61646d696e3a207775743f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b6064811115610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613fb66028913960400191505060405180910390fd5b60006007549050816007819055503373ffffffffffffffffffffffffffffffffffffffff167ffb85749da45972d4ba6b7e9a863de3402d8e40edc500d257f20a87801745562b8284604051808381526020018281526020019250505060405180910390a25050565b606481565b6203f48081565b600060159054906101000a900460ff1615610cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f2072652d656e7472616e637900000000000000000000000000000000000081525060200191505060405180910390fd5b6001600060156101000a81548160ff021916908315150217905550610d13336135b1565b15610d86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f636f6e7472616374206e6f7420616c6c6f77656400000000000000000000000081525060200191505060405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f70726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000081525060200191505060405180910390fd5b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008211610ee0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7468696e6720746f2077697468647261770000000000000000000000000081525060200191505060405180910390fd5b8060000154821115610f5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f576974686472617720616d6f756e7420657863656564732062616c616e63650081525060200191505060405180910390fd5b6000610f8a600254610f7c85610f6e6120b1565b6135c490919063ffffffff16565b61364a90919063ffffffff16565b9050610fa38383600001546136d390919063ffffffff16565b8260000181905550610fc0836002546136d390919063ffffffff16565b6002819055506000610fd06118d8565b9050818110156110cb576000610fef82846136d390919063ffffffff16565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663441a3e70600a54836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561106e57600080fd5b505af1158015611082573d6000803e3d6000fd5b5050505060006110906118d8565b905060006110a784836136d390919063ffffffff16565b9050828110156110c7576110c4818561375690919063ffffffff16565b94505b5050505b6110e4600954846001015461375690919063ffffffff16565b42101561119c576000611116612710611108600854866135c490919063ffffffff16565b61364a90919063ffffffff16565b9050611185600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166137de9092919063ffffffff16565b61119881846136d390919063ffffffff16565b9250505b6111e733837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166137de9092919063ffffffff16565b600083600001541115611233576112266002546112186112056120b1565b86600001546135c490919063ffffffff16565b61364a90919063ffffffff16565b836002018190555061123e565b600083600201819055505b4283600301819055503373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688386604051808381526020018281526020019250505060405180910390a250505060008060156101000a81548160ff02191690831515021790555050565b600a5481565b60025481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f61646d696e3a207775743f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b6113946119a1565b611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b61140e613880565b7f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b6114446119a1565b156114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6114c0336135b1565b15611533576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f636f6e7472616374206e6f7420616c6c6f77656400000000000000000000000081525060200191505060405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f70726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000081525060200191505060405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637914dc8f600a54306040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561166757600080fd5b505afa15801561167b573d6000803e3d6000fd5b505050506040513d602081101561169157600080fd5b810190808051906020019092919050505090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663441a3e70600a5460006040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561172257600080fd5b505af1158015611736573d6000803e3d6000fd5b5050505060006117446118d8565b82116117505781611759565b6117586118d8565b5b90506000611786612710611778600654856135c490919063ffffffff16565b61364a90919063ffffffff16565b90506117f5600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166137de9092919063ffffffff16565b6000611820612710611812600754866135c490919063ffffffff16565b61364a90919063ffffffff16565b905061186d33827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166137de9092919063ffffffff16565b61187561396a565b426003819055503373ffffffffffffffffffffffffffffffffffffffff167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae06609249548383604051808381526020018281526020019250505060405180910390a250505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561196157600080fd5b505afa158015611975573d6000803e3d6000fd5b505050506040513d602081101561198b57600080fd5b8101908080519060200190929190505050905090565b60008060149054906101000a900460ff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611aa0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f61646d696e3a207775743f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b611aa86119a1565b611b1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600a5490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663441a3e70600a5460006040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015611b9f57600080fd5b505af1158015611bb3573d6000803e3d6000fd5b50505050611bbf612c43565b81600a81905550611bce61396a565b3373ffffffffffffffffffffffffffffffffffffffff167fb151a20f9732db827c546d83350854714ade0db866af04ff4d564e3a8837d0798284604051808381526020018281526020019250505060405180910390a25050565b611c30613a18565b73ffffffffffffffffffffffffffffffffffffffff16611c4e61259f565b73ffffffffffffffffffffffffffffffffffffffff1614611cd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f74206265207a65726f20616464726573730000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f61646d696e3a207775743f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b6101f4811115611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613fde6036913960400191505060405180910390fd5b60006006549050816006819055503373ffffffffffffffffffffffffffffffffffffffff167f207095a150fc2bbb4d3ffea7e2c9a73576bb294703d11fd124eb5013b6905d978284604051808381526020018281526020019250505060405180910390a25050565b611f4c613a18565b73ffffffffffffffffffffffffffffffffffffffff16611f6a61259f565b73ffffffffffffffffffffffffffffffffffffffff1614611ff3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166393f1a40b600a54306040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050604080518083038186803b15801561214457600080fd5b505afa158015612158573d6000803e3d6000fd5b505050506040513d604081101561216e57600080fd5b810190808051906020019092919080519060200190929190505050509050612260817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561221757600080fd5b505afa15801561222b573d6000803e3d6000fd5b505050506040513d602081101561224157600080fd5b810190808051906020019092919050505061375690919063ffffffff16565b91505090565b600080600254146122ac576122a7600254612299670de0b6b3a764000061228b6120b1565b6135c490919063ffffffff16565b61364a90919063ffffffff16565b6122b6565b670de0b6b3a76400005b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461237e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f61646d696e3a207775743f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b6123866119a1565b156123f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b612401613a20565b7f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b612438336135b1565b156124ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f636f6e7472616374206e6f7420616c6c6f77656400000000000000000000000081525060200191505060405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461254c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f70726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000081525060200191505060405180910390fd5b612597600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610c6c565b565b60065481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075481565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637914dc8f600a54306040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561266257600080fd5b505afa158015612676573d6000803e3d6000fd5b505050506040513d602081101561268c57600080fd5b8101908080519060200190929190505050905060006126ca6127106126bc600754856135c490919063ffffffff16565b61364a90919063ffffffff16565b9050809250505090565b60035481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461279d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f61646d696e3a207775743f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b60648111156127f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061409c6030913960400191505060405180910390fd5b60006008549050816008819055503373ffffffffffffffffffffffffffffffffffffffff167fabaa7e6722a50aed80ce8f6996ce32343c9ea0ef86daf3bb1ad9ce6d23749fd98284604051808381526020018281526020019250505060405180910390a25050565b6128676119a1565b156128da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6128e3336135b1565b15612956576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f636f6e7472616374206e6f7420616c6c6f77656400000000000000000000000081525060200191505060405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f70726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000081525060200191505060405180910390fd5b60008111612a6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f7468696e6720746f206465706f736974000000000000000000000000000081525060200191505060405180910390fd5b6000612a776120b1565b9050612ac63330847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16613b0c909392919063ffffffff16565b60008060025414612aff57612af882612aea600254866135c490919063ffffffff16565b61364a90919063ffffffff16565b9050612b03565b8290505b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b5d82826000015461375690919063ffffffff16565b8160000181905550428160010181905550612b838260025461375690919063ffffffff16565b600281905550612bbb600254612bad612b9a6120b1565b84600001546135c490919063ffffffff16565b61364a90919063ffffffff16565b8160020181905550428160030181905550612bd461396a565b3373ffffffffffffffffffffffffffffffffffffffff167f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e85844260405180848152602001838152602001828152602001935050505060405180910390a250505050565b6101f481565b606481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f61646d696e3a207775743f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635312ea8e600a546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612d7b57600080fd5b505af1158015612d8f573d6000803e3d6000fd5b50505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f61646d696e3a207775743f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613f6b6025913960400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612f6657600080fd5b505afa158015612f7a573d6000803e3d6000fd5b505050506040513d6020811015612f9057600080fd5b81019080805190602001909291905050509050612fce33828473ffffffffffffffffffffffffffffffffffffffff166137de9092919063ffffffff16565b5050565b60095481565b60085481565b612fe6613a18565b73ffffffffffffffffffffffffffffffffffffffff1661300461259f565b73ffffffffffffffffffffffffffffffffffffffff161461308d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613130576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f74206265207a65726f20616464726573730000000000000000000081525060200191505060405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61317c613a18565b73ffffffffffffffffffffffffffffffffffffffff1661319a61259f565b73ffffffffffffffffffffffffffffffffffffffff1614613223576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156132a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613f456026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008114806134a2575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561346557600080fd5b505afa158015613479573d6000803e3d6000fd5b505050506040513d602081101561348f57600080fd5b8101908080519060200190929190505050145b6134f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806140cc6036913960400191505060405180910390fd5b6135948363095ea7b360e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613bcd565b505050565b60606135a88484600085613cbc565b90509392505050565b600080823b905060008111915050919050565b6000808314156135d75760009050613644565b60008284029050828482816135e857fe5b041461363f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806140146021913960400191505060405180910390fd5b809150505b92915050565b60008082116136c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816136ca57fe5b04905092915050565b60008282111561374b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6000808284019050838110156137d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b61387b8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613bcd565b505050565b6138886119a1565b6138fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61393d613a18565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006139746118d8565b90506000811115613a15577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600a54836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156139fc57600080fd5b505af1158015613a10573d6000803e3d6000fd5b505050505b50565b600033905090565b613a286119a1565b15613a9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613adf613a18565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b613bc7846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613bcd565b50505050565b6060613c2f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166135999092919063ffffffff16565b9050600081511115613cb757808060200190516020811015613c5057600080fd5b8101908080519060200190929190505050613cb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614072602a913960400191505060405180910390fd5b5b505050565b606082471015613d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613f906026913960400191505060405180910390fd5b613d2085613e65565b613d92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310613de25780518252602082019150602081019050602083039250613dbf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613e44576040519150601f19603f3d011682016040523d82523d6000602084013e613e49565b606091505b5091509150613e59828286613e78565b92505050949350505050565b600080823b905060008111915050919050565b60608315613e8857829050613f3d565b600083511115613e9b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f02578082015181840152602081019050613ee7565b50505050905090810190601f168015613f2f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373546f6b656e2063616e6e6f742062652073616d65206173206465706f73697420746f6b656e416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c63616c6c4665652063616e6e6f74206265206d6f7265207468616e204d41585f43414c4c5f464545706572666f726d616e63654665652063616e6e6f74206265206d6f7265207468616e204d41585f504552464f524d414e43455f464545536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777769746864726177466565506572696f642063616e6e6f74206265206d6f7265207468616e204d41585f57495448445241575f4645455f504552494f445361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656477697468647261774665652063616e6e6f74206265206d6f7265207468616e204d41585f57495448445241575f4645455361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a26469706673582212209463003a73fdd4ddf2dcd06af9cc5ef0ee460821f8cb9af44189cfa434db389d64736f6c634300060c0033416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000000040b34cc972908060d6d527276e17c105d224559d000000000000000000000000a9a438b8b2e41b3bf322dba139af9490dc226953000000000000000000000000aa287adeff00c1b3e54cc1304af345f11920a835000000000000000000000000b2f903e79d05600ac6bcd604e4ac68a8717d1fd7

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

00000000000000000000000040b34cc972908060d6d527276e17c105d224559d000000000000000000000000a9a438b8b2e41b3bf322dba139af9490dc226953000000000000000000000000aa287adeff00c1b3e54cc1304af345f11920a835000000000000000000000000b2f903e79d05600ac6bcd604e4ac68a8717d1fd7

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000040b34cc972908060d6d527276e17c105d224559d
Arg [1] : 000000000000000000000000a9a438b8b2e41b3bf322dba139af9490dc226953
Arg [2] : 000000000000000000000000aa287adeff00c1b3e54cc1304af345f11920a835
Arg [3] : 000000000000000000000000b2f903e79d05600ac6bcd604e4ac68a8717d1fd7


Deployed ByteCode Sourcemap

27988:13320:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28576:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35866:425;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37969:209;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35039:278;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28822:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28936:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38541:1543;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29216:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28629:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37296:103;;;:::i;:::-;;32503:812;;;:::i;:::-;;40243:107;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26100:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28728:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34438:495;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33426:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33972:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2735:148;;;:::i;:::-;;40507:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38251:154;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37078:100;;;:::i;:::-;;32270;;;:::i;:::-;;29013:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2084:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29061:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37548:270;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28662:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35427:322;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31300:897;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28760:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28877:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36464:119;;;:::i;:::-;;36675:285;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29150:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29104:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33692:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3038:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28701:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28528:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28476:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28576:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35866:425::-;30791:5;;;;;;;;;;;30777:19;;:10;:19;;;30769:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28986:8:::1;35976:18;:45;;35954:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36121:17;36141;;36121:37;;36189:18;36169:17;:38;;;;36241:10;36220:63;;;36253:9;36264:18;36220:63;;;;;;;;;;;;;;;;;;;;;;;;30823:1;35866:425:::0;:::o;37969:209::-;38036:7;38056:14;38085:10;38073:35;;;38109:11;;38130:4;38073:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38056:80;;38164:6;38157:13;;;37969:209;:::o;35039:278::-;30791:5;;;;;;;;;;;30777:19;;:10;:19;;;30769:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28861:3:::1;35115:8;:24;;35107:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35195:14;35212:7;;35195:24;;35240:8;35230:7;:18;;;;35280:10;35266:43;;;35292:6;35300:8;35266:43;;;;;;;;;;;;;;;;;;;;;;;;30823:1;35039:278:::0;:::o;28822:42::-;28861:3;28822:42;:::o;28936:58::-;28986:8;28936:58;:::o;38541:1543::-;27399:6;;;;;;;;;;;27398:7;27390:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27444:4;27435:6;;:13;;;;;;;;;;;;;;;;;;30967:23:::1;30979:10;30967:11;:23::i;:::-;30966:24;30958:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31048:9;31034:23;;:10;:23;;;31026:62;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;38618:21:::2;38642:8;:20;38651:10;38642:20;;;;;;;;;;;;;;;38618:44;;38691:1;38681:7;:11;38673:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;38746:4;:11;;;38735:7;:22;;38727:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;38806:21;38830:43;38861:11;;38831:24;38847:7;38831:11;:9;:11::i;:::-;:15;;:24;;;;:::i;:::-;38830:30;;:43;;;;:::i;:::-;38806:67;;38898:24;38914:7;38898:4;:11;;;:15;;:24;;;;:::i;:::-;38884:4;:11;;:38;;;;38947:24;38963:7;38947:11;;:15;;:24;;;;:::i;:::-;38933:11;:38;;;;38984:11;38998;:9;:11::i;:::-;38984:25;;39030:13;39024:3;:19;39020:363;;;39060:19;39082:22;39100:3;39082:13;:17;;:22;;;;:::i;:::-;39060:44;;39131:10;39119:32;;;39152:11;;39165;39119:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;39192:16;39211:11;:9;:11::i;:::-;39192:30;;39237:12;39252:17;39265:3;39252:8;:12;;:17;;;;:::i;:::-;39237:32;;39295:11;39288:4;:18;39284:88;;;39343:13;39351:4;39343:3;:7;;:13;;;;:::i;:::-;39327:29;;39284:88;39020:363;;;;39417:45;39444:17;;39417:4;:22;;;:26;;:45;;;;:::i;:::-;39399:15;:63;39395:297;;;39479:26;39508:41;39543:5;39508:30;39526:11;;39508:13;:17;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;39479:70;;39564:48;39583:8;;;;;;;;;;;39593:18;39564:5;:18;;;;:48;;;;;:::i;:::-;39643:37;39661:18;39643:13;:17;;:37;;;;:::i;:::-;39627:53;;39395:297;;39704:45;39723:10;39735:13;39704:5;:18;;;;:45;;;;;:::i;:::-;39788:1;39774:4;:11;;;:15;39770:183;;;39834:45;39867:11;;39834:28;39850:11;:9;:11::i;:::-;39834:4;:11;;;:15;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;39806:4;:25;;:73;;;;39770:183;;;39940:1;39912:4;:25;;:29;;;;39770:183;39999:15;39973:4;:23;;:41;;;;40041:10;40032:44;;;40053:13;40068:7;40032:44;;;;;;;;;;;;;;;;;;;;;;;;31099:1;;;27480:5:::0;27471:6;;:14;;;;;;;;;;;;;;;;;;38541:1543;:::o;29216:31::-;;;;:::o;28629:26::-;;;;:::o;37296:103::-;30791:5;;;;;;;;;;;30777:19;;:10;:19;;;30769:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26703:8:::1;:6;:8::i;:::-;26695:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;37356:10:::2;:8;:10::i;:::-;37382:9;;;;;;;;;;37296:103::o:0;32503:812::-;26426:8;:6;:8::i;:::-;26425:9;26417:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30967:23:::1;30979:10;30967:11;:23::i;:::-;30966:24;30958:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31048:9;31034:23;;:10;:23;;;31026:62;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32566:19:::2;32600:10;32588:35;;;32624:11;;32645:4;32588:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;32566:85;;32674:10;32662:32;;;32695:11;;32708:1;32662:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;32731:23;32771:11;:9;:11::i;:::-;32757;:25;:119;;32865:11;32757:119;;;32818:11;:9;:11::i;:::-;32757:119;32731:145;;32889:29;32921:46;32961:5;32921:35;32941:14;;32921:15;:19;;:35;;;;:::i;:::-;:39;;:46;;;;:::i;:::-;32889:78;;32978:51;32997:8;;;;;;;;;;;33007:21;32978:5;:18;;;;:51;;;;;:::i;:::-;33042:22;33067:39;33100:5;33067:28;33087:7;;33067:15;:19;;:28;;;;:::i;:::-;:32;;:39;;;;:::i;:::-;33042:64;;33117:46;33136:10;33148:14;33117:5;:18;;;;:46;;;;;:::i;:::-;33176:7;:5;:7::i;:::-;33216:15;33196:17;:35;;;;33257:10;33249:58;;;33269:21;33292:14;33249:58;;;;;;;;;;;;;;;;;;;;;;;;31099:1;;;;32503:812::o:0;40243:107::-;40285:7;40312:5;:15;;;40336:4;40312:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40305:37;;40243:107;:::o;26100:86::-;26147:4;26171:7;;;;;;;;;;;26164:14;;26100:86;:::o;28728:23::-;;;;;;;;;;;;;:::o;34438:495::-;30791:5;;;;;;;;;;;30777:19;;:10;:19;;;30769:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26703:8:::1;:6;:8::i;:::-;26695:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34524:14:::2;34541:11;;34524:28;;34621:10;34609:32;;;34642:11;;34655:1;34609:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;34713:19;:17;:19::i;:::-;34767:12;34753:11;:26;;;;34841:7;:5;:7::i;:::-;34892:10;34874:51;;;34904:6;34912:12;34874:51;;;;;;;;;;;;;;;;;;;;;;;;26747:1;34438:495:::0;:::o;33426:152::-;2315:12;:10;:12::i;:::-;2304:23;;:7;:5;:7::i;:::-;:23;;;2296:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33516:1:::1;33498:20;;:6;:20;;;;33490:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33564:6;33556:5;;:14;;;;;;;;;;;;;;;;;;33426:152:::0;:::o;33972:355::-;30791:5;;;;;;;;;;;30777:19;;:10;:19;;;30769:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28806:3:::1;34062:15;:38;;34054:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34170:14;34187;;34170:31;;34229:15;34212:14;:32;;;;34283:10;34262:57;;;34295:6;34303:15;34262:57;;;;;;;;;;;;;;;;;;;;;;;;30823:1;33972:355:::0;:::o;2735:148::-;2315:12;:10;:12::i;:::-;2304:23;;:7;:5;:7::i;:::-;:23;;;2296:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2842:1:::1;2805:40;;2826:6;::::0;::::1;;;;;;;;2805:40;;;;;;;;;;;;2873:1;2856:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2735:148::o:0;40507:211::-;40549:7;40570:14;40602:10;40590:32;;;40623:11;;40644:4;40590:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40569:81;;;40668:42;40703:6;40668:5;:15;;;40692:4;40668:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;;:42;;;;:::i;:::-;40661:49;;;40507:211;:::o;38251:154::-;38306:7;38348:1;38333:11;;:16;:64;;38359:38;38385:11;;38359:21;38375:4;38359:11;:9;:11::i;:::-;:15;;:21;;;;:::i;:::-;:25;;:38;;;;:::i;:::-;38333:64;;;38352:4;38333:64;38326:71;;38251:154;:::o;37078:100::-;30791:5;;;;;;;;;;;30777:19;;:10;:19;;;30769:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26426:8:::1;:6;:8::i;:::-;26425:9;26417:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;37139:8:::2;:6;:8::i;:::-;37163:7;;;;;;;;;;37078:100::o:0;32270:::-;30967:23;30979:10;30967:11;:23::i;:::-;30966:24;30958:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31048:9;31034:23;;:10;:23;;;31026:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32325:37:::1;32334:8;:20;32343:10;32334:20;;;;;;;;;;;;;;;:27;;;32325:8;:37::i;:::-;32270:100::o:0;29013:35::-;;;;:::o;2084:87::-;2130:7;2157:6;;;;;;;;;;;2150:13;;2084:87;:::o;29061:27::-;;;;:::o;37548:270::-;37610:7;37630:14;37659:10;37647:35;;;37683:11;;37704:4;37647:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37630:80;;37721:22;37746:30;37770:5;37746:19;37757:7;;37746:6;:10;;:19;;;;:::i;:::-;:23;;:30;;;;:::i;:::-;37721:55;;37796:14;37789:21;;;;37548:270;:::o;28662:32::-;;;;:::o;35427:322::-;30791:5;;;;;;;;;;;30777:19;;:10;:19;;;30769:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28920:3:::1;35511:12;:32;;35503:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35607:14;35624:11;;35607:28;;35660:12;35646:11;:26;;;;35708:10;35690:51;;;35720:6;35728:12;35690:51;;;;;;;;;;;;;;;;;;;;;;;;30823:1;35427:322:::0;:::o;31300:897::-;26426:8;:6;:8::i;:::-;26425:9;26417:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30967:23:::1;30979:10;30967:11;:23::i;:::-;30966:24;30958:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31048:9;31034:23;;:10;:23;;;31026:62;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31398:1:::2;31388:7;:11;31380:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;31435:12;31450:11;:9;:11::i;:::-;31435:26;;31472:58;31495:10;31515:4;31522:7;31472:5;:22;;;;:58;;;;;;:::i;:::-;31541:21;31596:1:::0;31581:11:::2;;:16;31577:157;;31630:36;31661:4;31631:24;31643:11;;31631:7;:11;;:24;;;;:::i;:::-;31630:30;;:36;;;;:::i;:::-;31614:52;;31577:157;;;31715:7;31699:23;;31577:157;31744:21;31768:8;:20;31777:10;31768:20;;;;;;;;;;;;;;;31744:44;;31815:30;31831:13;31815:4;:11;;;:15;;:30;;;;:::i;:::-;31801:4;:11;;:44;;;;31881:15;31856:4;:22;;:40;;;;31923:30;31939:13;31923:11;;:15;;:30;;;;:::i;:::-;31909:11;:44;;;;31994:45;32027:11;;31994:28;32010:11;:9;:11::i;:::-;31994:4;:11;;;:15;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;31966:4;:25;;:73;;;;32076:15;32050:4;:23;;:41;;;;32104:7;:5;:7::i;:::-;32137:10;32129:60;;;32149:7;32158:13;32173:15;32129:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31099:1;;;31300:897:::0;:::o;28760:49::-;28806:3;28760:49;:::o;28877:46::-;28920:3;28877:46;:::o;36464:119::-;30791:5;;;;;;;;;;;30777:19;;:10;:19;;;30769:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36533:10:::1;36521:41;;;36563:11;;36521:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36464:119::o:0;36675:285::-;30791:5;;;;;;;;;;;30777:19;;:10;:19;;;30769:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36777:5:::1;36759:24;;:6;:24;;;;36751:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36838:14;36862:6;36855:24;;;36888:4;36855:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;36838:56;;36905:47;36933:10;36945:6;36912;36905:27;;;;:47;;;;;:::i;:::-;30823:1;36675:285:::0;:::o;29150:43::-;;;;:::o;29104:31::-;;;;:::o;33692:167::-;2315:12;:10;:12::i;:::-;2304:23;;:7;:5;:7::i;:::-;:23;;;2296:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33791:1:::1;33770:23;;:9;:23;;;;33762:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33842:9;33831:8;;:20;;;;;;;;;;;;;;;;;;33692:167:::0;:::o;3038:244::-;2315:12;:10;:12::i;:::-;2304:23;;:7;:5;:7::i;:::-;:23;;;2296:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3147:1:::1;3127:22;;:8;:22;;;;3119:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3237:8;3208:38;;3229:6;::::0;::::1;;;;;;;;3208:38;;;;;;;;;;;;3266:8;3257:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3038:244:::0;:::o;28701:20::-;;;;;;;;;;;;;:::o;28528:39::-;;;:::o;28476:29::-;;;:::o;23211:670::-;23638:1;23629:5;:10;23628:62;;;;23688:1;23645:5;:15;;;23669:4;23676:7;23645:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;23628:62;23606:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23783:90;23803:5;23833:22;;;23857:7;23866:5;23810:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23783:19;:90::i;:::-;23211:670;;;:::o;17299:229::-;17436:12;17468:52;17490:6;17498:4;17504:1;17507:12;17468:21;:52::i;:::-;17461:59;;17299:229;;;;;:::o;41114:191::-;41172:4;41189:12;41256:4;41244:17;41236:25;;41296:1;41289:4;:8;41282:15;;;41114:191;;;:::o;6928:220::-;6986:7;7015:1;7010;:6;7006:20;;;7025:1;7018:8;;;;7006:20;7037:9;7053:1;7049;:5;7037:17;;7082:1;7077;7073;:5;;;;;;:10;7065:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7139:1;7132:8;;;6928:220;;;;;:::o;7626:153::-;7684:7;7716:1;7712;:5;7704:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7770:1;7766;:5;;;;;;7759:12;;7626:153;;;;:::o;6511:158::-;6569:7;6602:1;6597;:6;;6589:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6660:1;6656;:5;6649:12;;6511:158;;;;:::o;6049:179::-;6107:7;6127:9;6143:1;6139;:5;6127:17;;6168:1;6163;:6;;6155:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6219:1;6212:8;;;6049:179;;;;:::o;22475:211::-;22592:86;22612:5;22642:23;;;22667:2;22671:5;22619:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22592:19;:86::i;:::-;22475:211;;;:::o;27159:120::-;26703:8;:6;:8::i;:::-;26695:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27228:5:::1;27218:7:::0;::::1;:15;;;;;;;;;;;;;;;;;;27249:22;27258:12;:10;:12::i;:::-;27249:22;;;;;;;;;;;;;;;;;;;;27159:120::o:0;40816:169::-;40853:11;40867;:9;:11::i;:::-;40853:25;;40899:1;40893:3;:7;40889:89;;;40929:10;40917:31;;;40949:11;;40962:3;40917:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40889:89;40816:169;:::o;657:106::-;710:15;745:10;738:17;;657:106;:::o;26900:118::-;26426:8;:6;:8::i;:::-;26425:9;26417:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26970:4:::1;26960:7;;:14;;;;;;;;;;;;;;;;;;26990:20;26997:12;:10;:12::i;:::-;26990:20;;;;;;;;;;;;;;;;;;;;26900:118::o:0;22694:248::-;22838:96;22858:5;22888:27;;;22917:4;22923:2;22927:5;22865:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22838:19;:96::i;:::-;22694:248;;;;:::o;24272:774::-;24696:23;24722:69;24750:4;24722:69;;;;;;;;;;;;;;;;;24730:5;24722:27;;;;:69;;;;;:::i;:::-;24696:95;;24826:1;24806:10;:17;:21;24802:237;;;24961:10;24950:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24942:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24802:237;24272:774;;;:::o;18419:571::-;18589:12;18647:5;18622:21;:30;;18614:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18714:18;18725:6;18714:10;:18::i;:::-;18706:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18840:12;18854:23;18881:6;:11;;18900:5;18907:4;18881:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18839:73;;;;18930:52;18948:7;18957:10;18969:12;18930:17;:52::i;:::-;18923:59;;;;18419:571;;;;;;:::o;14359:444::-;14419:4;14627:12;14751:7;14739:20;14731:28;;14794:1;14787:4;:8;14780:15;;;14359:444;;;:::o;21068:777::-;21218:12;21247:7;21243:595;;;21278:10;21271:17;;;;21243:595;21412:1;21392:10;:17;:21;21388:439;;;21655:10;21649:17;21716:15;21703:10;21699:2;21695:19;21688:44;21603:148;21798:12;21791:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21068:777;;;;;;:::o

Swarm Source

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