Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
MasterChefJoeStrategyV1
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2021-12-09 */ // SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.8.0; /** * @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); } } } } pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with 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; } } /** * @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; } } /** * @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()); } } /** * @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); } /** * @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; } } /** * @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)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @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"); } } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } interface IWAVAX { function approve(address spender, uint amount) external returns (bool); function balanceOf(address) external view returns (uint256); function transferFrom(address src, address dst, uint wad) external returns (bool); function deposit() external payable; function withdraw(uint wad) external; } interface IPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IRouter { function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityAVAX(address token, uint amountTokenDesired, uint amountTokenMin, uint amountAVAXMin, address to, uint deadline) external payable returns (uint amountToken, uint amountAVAX, uint liquidity); function removeLiquidity(address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB); function removeLiquidityAVAX(address token, uint liquidity, uint amountTokenMin, uint amountAVAXMin, address to, uint deadline) external returns (uint amountToken, uint amountAVAX); function removeLiquidityWithPermit(address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint amountA, uint amountB); function removeLiquidityAVAXWithPermit(address token, uint liquidity, uint amountTokenMin, uint amountAVAXMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint amountToken, uint amountAVAX); function removeLiquidityAVAXSupportingFeeOnTransferTokens(address token, uint liquidity, uint amountTokenMin, uint amountAVAXMin, address to, uint deadline) external returns (uint amountAVAX); function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens(address token, uint liquidity, uint amountTokenMin, uint amountAVAXMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint amountAVAX); function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapTokensForExactTokens(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactAVAXForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactAVAX(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForAVAX(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapAVAXForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactAVAXForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline) external payable; function swapExactTokensForAVAXSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] memory path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] memory path) external view returns (uint[] memory amounts); } interface IMasterChef { function deposit(uint256 _pid, uint256 _amount) external; function withdraw(uint256 _pid, uint256 _amount) external; function userInfo(uint256 _pid, address _user) external view returns (uint256, uint256); function emergencyWithdraw(uint256 _pid) external; function pendingTokens(uint256 _pid, address _user) external view returns (uint256, address, string memory, uint256); } interface IStrategyVariables { function harvestFeeBasisPoints() external returns (uint256); function callFeeBasisPoints() external returns (uint256); } interface IProtocolAddresses { function HarvestProcessor() external returns (address); } interface IHarvestProcessor { function process() external; } /** * @title Cycle Protocol MasterChef Strategy for Trader Joe exchange * @dev Only JOE rewards, not double rewards */ contract MasterChefJoeStrategyV1 is Ownable, Pausable, ReentrancyGuard { using SafeERC20 for IERC20; using SafeMath for uint256; address public constant WAVAX = address(0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7); address public Router; address public MasterChef; address public RewardToken; address public Vault; address public LPtoken; address public Token0; address public Token1; uint8 public poolID; address public ProtocolAddresses; address public StrategyVariables; address[] public RewardTokenToWAVAXpath; address[] public RewardTokenToToken0path; address[] public RewardTokenToToken1path; uint256 public constant BASIS_POINT_DIVISOR = 10000; event ProtocolAddressesUpdated(address ProtocolAddresses); event Deposit(uint256 amount); event Withdraw(uint256 amount); event HarvestRun(address indexed caller, uint256 amount); event HarvestFeeProcessed(uint256 amount); event CallFeeProcessed(uint256 amount); constructor( address _LPtoken, uint8 _poolID, address _Vault, address _StrategyVariables, address _MasterChef, address _RewardToken, address _Router ) public { LPtoken = _LPtoken; Token0 = IPair(LPtoken).token0(); Token1 = IPair(LPtoken).token1(); poolID = _poolID; Vault = _Vault; StrategyVariables = _StrategyVariables; MasterChef = _MasterChef; RewardToken = _RewardToken; Router = _Router; RewardTokenToWAVAXpath = [RewardToken, WAVAX]; if (Token0 == WAVAX) { RewardTokenToToken0path = [RewardToken, WAVAX]; } else if (Token0 != RewardToken) { RewardTokenToToken0path = [RewardToken, WAVAX, Token0]; } if (Token1 == WAVAX) { RewardTokenToToken1path = [RewardToken, WAVAX]; } else if (Token1 != RewardToken) { RewardTokenToToken1path = [RewardToken, WAVAX, Token1]; } IERC20(RewardToken).safeApprove(Router, 0); IERC20(RewardToken).safeApprove(Router, uint256(-1)); IERC20(Token0).safeApprove(Router, 0); IERC20(Token0).safeApprove(Router, uint256(-1)); IERC20(Token1).safeApprove(Router, 0); IERC20(Token1).safeApprove(Router, uint256(-1)); } receive() external payable {} modifier onlyVault() { require(msg.sender == Vault, "MasterChefJoeStrategyV1: Caller is not the Vault"); _; } function setProtocolAddresses(address _ProtocolAddresses) external onlyOwner { ProtocolAddresses = _ProtocolAddresses; emit ProtocolAddressesUpdated(ProtocolAddresses); } function balanceLP() public view returns (uint256) { return IERC20(LPtoken).balanceOf(address(this)); } function masterChefBalanceLP() public view returns (uint256 amount) { (amount,) = IMasterChef(MasterChef).userInfo(poolID, address(this)); } function balanceLPinStrategy() external view returns (uint256) { return balanceLP().add(masterChefBalanceLP()); } function balanceRewardToken() public view returns (uint256) { return IERC20(RewardToken).balanceOf(address(this)); } // Withdraws from MasterChef claim pending rewards, so better to show pending + balance // For basic Joe strategy, only concerned with JOE rewards, not double rewards function getRewardsEarned() external view returns (uint256) { (uint256 pendingRewards,,,) = IMasterChef(MasterChef).pendingTokens(poolID, address(this)); return pendingRewards.add(balanceRewardToken()); } /** * @dev Deposits will be paused when strategy has been decommissioned */ function deposit() public whenNotPaused { uint256 balance = balanceLP(); require(balance > 0, "MasterChefJoeStrategyV1: Deposit called with 0 balance"); IERC20(LPtoken).safeIncreaseAllowance(MasterChef, balance); IMasterChef(MasterChef).deposit(poolID, balance); emit Deposit(balance); } /** * @dev Uses available balance in strategy, withdrawing from Masterchef to make up difference */ function withdraw(uint256 amount) external onlyVault { uint256 balance = balanceLP(); if (balance < amount) { IMasterChef(MasterChef).withdraw(poolID, amount.sub(balance)); balance = balanceLP(); } if (balance > amount) { balance = amount; } IERC20(LPtoken).safeTransfer(Vault, balance); emit Withdraw(amount); } function harvest() external whenNotPaused nonReentrant { require(!Address.isContract(msg.sender), "MasterChefJoeStrategyV1: Caller is not an EOA"); IMasterChef(MasterChef).deposit(poolID, 0); uint256 harvestAmount = balanceRewardToken(); _processFees(harvestAmount); _addLiquidity(); deposit(); emit HarvestRun(msg.sender, harvestAmount); } /** * @dev Harvest fee and Call fee processed together */ function _processFees(uint256 harvestAmount) internal { uint256 harvestFeeBasisPoints = IStrategyVariables(StrategyVariables).harvestFeeBasisPoints(); uint256 callFeeBasisPoints = IStrategyVariables(StrategyVariables).callFeeBasisPoints(); uint256 totalFeeBasisPoints = harvestFeeBasisPoints.add(callFeeBasisPoints); uint256 harvestAmountFee = harvestAmount.mul(totalFeeBasisPoints).div(BASIS_POINT_DIVISOR); IRouter(Router).swapExactTokensForTokens(harvestAmountFee, 0, RewardTokenToWAVAXpath, address(this), block.timestamp.add(120)); uint256 balanceWAVAX = IERC20(WAVAX).balanceOf(address(this)); uint256 WAVAXforProcessor = balanceWAVAX.mul(harvestFeeBasisPoints).div(totalFeeBasisPoints); uint256 WAVAXforCaller = balanceWAVAX.sub(WAVAXforProcessor); address HarvestProcessor = IProtocolAddresses(ProtocolAddresses).HarvestProcessor(); IERC20(WAVAX).safeTransfer(HarvestProcessor, WAVAXforProcessor); emit HarvestFeeProcessed(WAVAXforProcessor); IERC20(WAVAX).safeTransfer(msg.sender, WAVAXforCaller); emit CallFeeProcessed(WAVAXforCaller); } function _addLiquidity() internal { uint256 halfRewardToken = balanceRewardToken().div(2); if (Token0 != RewardToken) { IRouter(Router).swapExactTokensForTokens(halfRewardToken, 0, RewardTokenToToken0path, address(this), block.timestamp.add(120)); } if (Token1 != RewardToken) { IRouter(Router).swapExactTokensForTokens(halfRewardToken, 0, RewardTokenToToken1path, address(this), block.timestamp.add(120)); } uint256 balanceToken0 = IERC20(Token0).balanceOf(address(this)); uint256 balanceToken1 = IERC20(Token1).balanceOf(address(this)); IRouter(Router).addLiquidity(Token0, Token1, balanceToken0, balanceToken1, 0, 0, address(this), block.timestamp.add(120)); } /** * @dev This will be called once when the Vault/Strategy is being decommissioned * Remaining rewards will be sent to the HarvestProcessor * All LP tokens will be sent back to the vault and can be withdrawn from there * Deposits will be paused * * WARNING: The strategy will not be able to restart */ function decommissionStrategy() external onlyVault { IMasterChef(MasterChef).deposit(poolID, 0); uint256 receivedRewardToken = balanceRewardToken(); if (receivedRewardToken > 0) { _processFees(receivedRewardToken); } IMasterChef(MasterChef).emergencyWithdraw(poolID); uint256 balance = balanceLP(); IERC20(LPtoken).safeTransfer(Vault, balance); _pause(); } }
[{"inputs":[{"internalType":"address","name":"_LPtoken","type":"address"},{"internalType":"uint8","name":"_poolID","type":"uint8"},{"internalType":"address","name":"_Vault","type":"address"},{"internalType":"address","name":"_StrategyVariables","type":"address"},{"internalType":"address","name":"_MasterChef","type":"address"},{"internalType":"address","name":"_RewardToken","type":"address"},{"internalType":"address","name":"_Router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CallFeeProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"HarvestFeeProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"HarvestRun","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"ProtocolAddresses","type":"address"}],"name":"ProtocolAddressesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BASIS_POINT_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPtoken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MasterChef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ProtocolAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"RewardTokenToToken0path","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"RewardTokenToToken1path","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"RewardTokenToWAVAXpath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"StrategyVariables","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WAVAX","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceLPinStrategy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceRewardToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decommissionStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRewardsEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"masterChefBalanceLP","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolID","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ProtocolAddresses","type":"address"}],"name":"setProtocolAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004dd138038062004dd1833981810160405260e08110156200003757600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505060006200009662000e0260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060008060146101000a81548160ff0219169083151502179055506001808190555086600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ff57600080fd5b505afa15801562000214573d6000803e3d6000fd5b505050506040513d60208110156200022b57600080fd5b8101908080519060200190929190505050600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620002e557600080fd5b505afa158015620002fa573d6000803e3d6000fd5b505050506040513d60208110156200031157600080fd5b8101908080519060200190929190505050600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600860146101000a81548160ff021916908360ff16021790555084600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173b31f66aa3c1e785363f0875a1b74e27b85fd66c773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600b906002620005779291906200139c565b5073b31f66aa3c1e785363f0875a1b74e27b85fd66c773ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156200069f576040518060400160405280600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173b31f66aa3c1e785363f0875a1b74e27b85fd66c773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600c906002620006989291906200139c565b5062000823565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000822576040518060600160405280600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173b31f66aa3c1e785363f0875a1b74e27b85fd66c773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600c906003620008209291906200142b565b505b5b73b31f66aa3c1e785363f0875a1b74e27b85fd66c773ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156200094a576040518060400160405280600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173b31f66aa3c1e785363f0875a1b74e27b85fd66c773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600d906002620009439291906200139c565b5062000ace565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000acd576040518060600160405280600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173b31f66aa3c1e785363f0875a1b74e27b85fd66c773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600d90600362000acb9291906200142b565b505b5b62000b45600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000e0a60201b62001da8179092919060201c565b62000bdb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000e0a60201b62001da8179092919060201c565b62000c52600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000e0a60201b62001da8179092919060201c565b62000ce8600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000e0a60201b62001da8179092919060201c565b62000d5f600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000e0a60201b62001da8179092919060201c565b62000df5600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000e0a60201b62001da8179092919060201c565b50505050505050620014f7565b600033905090565b600081148062000edc575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801562000e9d57600080fd5b505afa15801562000eb2573d6000803e3d6000fd5b505050506040513d602081101562000ec957600080fd5b8101908080519060200190929190505050145b62000f33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018062004d9b6036913960400191505060405180910390fd5b62000fd88363095ea7b360e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505062000fdd60201b60201c565b505050565b606062001046826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620010d760201b62001f6d179092919060201c565b9050600081511115620010d2578080602001905160208110156200106957600080fd5b8101908080519060200190929190505050620010d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018062004d71602a913960400191505060405180910390fd5b5b505050565b6060620010ee8484600085620010f760201b60201c565b90509392505050565b60608247101562001154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018062004d4b6026913960400191505060405180910390fd5b6200116585620012b760201b60201c565b620011d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106200122a578051825260208201915060208101905060208303925062001205565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146200128e576040519150601f19603f3d011682016040523d82523d6000602084013e62001293565b606091505b5091509150620012ab828286620012ca60201b60201c565b92505050949350505050565b600080823b905060008111915050919050565b60608315620012dc5782905062001395565b600083511115620012f05782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620013595780820151818401526020810190506200133c565b50505050905090810190601f168015620013875780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b9392505050565b82805482825590600052602060002090810192821562001418579160200282015b82811115620014175782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620013bd565b5b509050620014279190620014ba565b5090565b828054828255906000526020600020908101928215620014a7579160200282015b82811115620014a65782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906200144c565b5b509050620014b69190620014ba565b5090565b5b80821115620014f357600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101620014bb565b5090565b61384480620015076000396000f3fe6080604052600436106101c65760003560e01c80638d934485116100f7578063cc85d60b11610095578063f0fe082a11610064578063f0fe082a1461074e578063f1e9f1e51461078f578063f2fde38b146107d0578063f6d7eade14610821576101cd565b8063cc85d60b14610666578063d0e30db014610691578063e7063750146106a8578063e9ea46c71461070d576101cd565b80639a3f190b116100d15780639a3f190b14610554578063bb00b32d1461057f578063c14cba3e146105e4578063c9f801c714610625576101cd565b80638d934485146104a45780638da5cb5b146104d257806396a8797e14610513576101cd565b80634641257d11610164578063670213331161013e57806367021333146103e057806369d463d51461040b578063715018a61461044c57806373b295c214610463576101cd565b80634641257d146103715780634fed3148146103885780635c975abb146103b3576101cd565b80632d2c44f2116101a05780632d2c44f21461029f5780632e1a7d4d146102e05780632f390dc31461031b5780633fd5946514610346576101cd565b80630e907e52146101d25780630ef1d6c8146101e95780632b3a09101461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e7610862565b005b3480156101f557600080fd5b506102386004803603602081101561020c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610af5565b005b34801561024657600080fd5b506102736004803603602081101561025d57600080fd5b8101908080359060200190929190505050610c57565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102ab57600080fd5b506102b4610c93565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102ec57600080fd5b506103196004803603602081101561030357600080fd5b8101908080359060200190929190505050610cb9565b005b34801561032757600080fd5b50610330610eed565b6040518082815260200191505060405180910390f35b34801561035257600080fd5b5061035b6110d2565b6040518082815260200191505060405180910390f35b34801561037d57600080fd5b5061038661119d565b005b34801561039457600080fd5b5061039d61141d565b6040518082815260200191505060405180910390f35b3480156103bf57600080fd5b506103c861150e565b60405180821515815260200191505060405180910390f35b3480156103ec57600080fd5b506103f5611524565b6040518082815260200191505060405180910390f35b34801561041757600080fd5b5061042061152a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561045857600080fd5b50610461611550565b005b34801561046f57600080fd5b506104786116bd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104b057600080fd5b506104b96116d5565b604051808260ff16815260200191505060405180910390f35b3480156104de57600080fd5b506104e76116e8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051f57600080fd5b50610528611711565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561056057600080fd5b50610569611737565b6040518082815260200191505060405180910390f35b34801561058b57600080fd5b506105b8600480360360208110156105a257600080fd5b8101908080359060200190929190505050611802565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105f057600080fd5b506105f961183e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561063157600080fd5b5061063a611864565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561067257600080fd5b5061067b61188a565b6040518082815260200191505060405180910390f35b34801561069d57600080fd5b506106a66118b2565b005b3480156106b457600080fd5b506106e1600480360360208110156106cb57600080fd5b8101908080359060200190929190505050611ae2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561071957600080fd5b50610722611b1e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561075a57600080fd5b50610763611b44565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561079b57600080fd5b506107a4611b6a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107dc57600080fd5b5061081f600480360360208110156107f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b90565b005b34801561082d57600080fd5b50610836611d82565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061375e6030913960400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600860149054906101000a900460ff1660006040518363ffffffff1660e01b8152600401808360ff16815260200182815260200192505050600060405180830381600087803b15801561099857600080fd5b505af11580156109ac573d6000803e3d6000fd5b5050505060006109ba611737565b905060008111156109cf576109ce81611f85565b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635312ea8e600860149054906101000a900460ff166040518263ffffffff1660e01b8152600401808260ff168152602001915050600060405180830381600087803b158015610a5657600080fd5b505af1158015610a6a573d6000803e3d6000fd5b505050506000610a786110d2565b9050610ae9600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166125bd9092919063ffffffff16565b610af161265f565b5050565b610afd61274b565b73ffffffffffffffffffffffffffffffffffffffff16610b1b6116e8565b73ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd8ef77a7d69a6b79f131ecd9aa37060ba0853bbd37cb175ec1abd05738ce27cb600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600d8181548110610c6457fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061375e6030913960400191505060405180910390fd5b6000610d696110d2565b905081811015610e3757600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663441a3e70600860149054906101000a900460ff16610dd4848661275390919063ffffffff16565b6040518363ffffffff1660e01b8152600401808360ff16815260200182815260200192505050600060405180830381600087803b158015610e1457600080fd5b505af1158015610e28573d6000803e3d6000fd5b50505050610e346110d2565b90505b81811115610e43578190505b610eb2600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166125bd9092919063ffffffff16565b7f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d826040518082815260200191505060405180910390a15050565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffcd4263600860149054906101000a900460ff16306040518363ffffffff1660e01b8152600401808360ff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b158015610f9357600080fd5b505afa158015610fa7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506080811015610fd157600080fd5b8101908080519060200190929190805190602001909291908051604051939291908464010000000082111561100557600080fd5b8382019150602082018581111561101b57600080fd5b825186600182028301116401000000008211171561103857600080fd5b8083526020830192505050908051906020019080838360005b8381101561106c578082015181840152602081019050611051565b50505050905090810190601f1680156110995780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505050505090506110cc6110bd611737565b826127d690919063ffffffff16565b91505090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561115d57600080fd5b505afa158015611171573d6000803e3d6000fd5b505050506040513d602081101561118757600080fd5b8101908080519060200190929190505050905090565b6111a561150e565b15611218576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60026001541415611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506112a23361285e565b156112f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613731602d913960400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600860149054906101000a900460ff1660006040518363ffffffff1660e01b8152600401808360ff16815260200182815260200192505050600060405180830381600087803b15801561138857600080fd5b505af115801561139c573d6000803e3d6000fd5b5050505060006113aa611737565b90506113b581611f85565b6113bd612871565b6113c56118b2565b3373ffffffffffffffffffffffffffffffffffffffff167f4a7c76b60b192b31b3302115b0acccc775c3a02f2dd660062eb4e34f92e72525826040518082815260200191505060405180910390a25060018081905550565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600860149054906101000a900460ff16306040518363ffffffff1660e01b8152600401808360ff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050604080518083038186803b1580156114c157600080fd5b505afa1580156114d5573d6000803e3d6000fd5b505050506040513d60408110156114eb57600080fd5b810190808051906020019092919080519060200190929190505050508091505090565b60008060149054906101000a900460ff16905090565b61271081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61155861274b565b73ffffffffffffffffffffffffffffffffffffffff166115766116e8565b73ffffffffffffffffffffffffffffffffffffffff16146115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b73b31f66aa3c1e785363f0875a1b74e27b85fd66c781565b600860149054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117c257600080fd5b505afa1580156117d6573d6000803e3d6000fd5b505050506040513d60208110156117ec57600080fd5b8101908080519060200190929190505050905090565b600c818154811061180f57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006118ad61189761141d565b61189f6110d2565b6127d690919063ffffffff16565b905090565b6118ba61150e565b1561192d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60006119376110d2565b905060008111611992576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806136af6036913960400191505060405180910390fd5b611a01600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166130c29092919063ffffffff16565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600860149054906101000a900460ff16836040518363ffffffff1660e01b8152600401808360ff16815260200182815260200192505050600060405180830381600087803b158015611a9057600080fd5b505af1158015611aa4573d6000803e3d6000fd5b505050507f4d6ce1e535dbade1c23defba91e23b8f791ce5edc0cc320257a2b364e4e38426816040518082815260200191505060405180910390a150565b600b8181548110611aef57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b9861274b565b73ffffffffffffffffffffffffffffffffffffffff16611bb66116e8565b73ffffffffffffffffffffffffffffffffffffffff1614611c3f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136e56026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000811480611e76575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611e3957600080fd5b505afa158015611e4d573d6000803e3d6000fd5b505050506040513d6020811015611e6357600080fd5b8101908080519060200190929190505050145b611ecb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806137d96036913960400191505060405180910390fd5b611f688363095ea7b360e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061323b565b505050565b6060611f7c848460008561332a565b90509392505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639297c5306040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611ff157600080fd5b505af1158015612005573d6000803e3d6000fd5b505050506040513d602081101561201b57600080fd5b810190808051906020019092919050505090506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ecc6f5b66040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561209a57600080fd5b505af11580156120ae573d6000803e3d6000fd5b505050506040513d60208110156120c457600080fd5b8101908080519060200190929190505050905060006120ec82846127d690919063ffffffff16565b9050600061211761271061210984886134d390919063ffffffff16565b61355990919063ffffffff16565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed1739826000600b306121716078426127d690919063ffffffff16565b6040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818154815260200191508054801561222957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116121df575b50509650505050505050600060405180830381600087803b15801561224d57600080fd5b505af1158015612261573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561228b57600080fd5b81019080805160405193929190846401000000008211156122ab57600080fd5b838201915060208201858111156122c157600080fd5b82518660208202830111640100000000821117156122de57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156123155780820151818401526020810190506122fa565b5050505090500160405250505050600073b31f66aa3c1e785363f0875a1b74e27b85fd66c773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123a057600080fd5b505afa1580156123b4573d6000803e3d6000fd5b505050506040513d60208110156123ca57600080fd5b810190808051906020019092919050505090506000612404846123f688856134d390919063ffffffff16565b61355990919063ffffffff16565b9050600061241b828461275390919063ffffffff16565b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2af71776040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561248957600080fd5b505af115801561249d573d6000803e3d6000fd5b505050506040513d60208110156124b357600080fd5b81019080805190602001909291905050509050612505818473b31f66aa3c1e785363f0875a1b74e27b85fd66c773ffffffffffffffffffffffffffffffffffffffff166125bd9092919063ffffffff16565b7fec0dee9b44856d8dbe0a460ac7625bf3abe9a042867df1f8d3e7834f12ba3d17836040518082815260200191505060405180910390a161257b338373b31f66aa3c1e785363f0875a1b74e27b85fd66c773ffffffffffffffffffffffffffffffffffffffff166125bd9092919063ffffffff16565b7f1777ed524564847c8fd7dbde1df9966e80c5cc0a0df3c23b6812b5e60cfeb402826040518082815260200191505060405180910390a1505050505050505050565b61265a8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061323b565b505050565b61266761150e565b156126da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861271e61274b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600033905090565b6000828211156127cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b600080828401905083811015612854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080823b905060008111915050919050565b600061288e6002612880611737565b61355990919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b1257600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed1739826000600c3061295f6078426127d690919063ffffffff16565b6040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281038252858181548152602001915080548015612a1757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116129cd575b50509650505050505050600060405180830381600087803b158015612a3b57600080fd5b505af1158015612a4f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015612a7957600080fd5b8101908080516040519392919084640100000000821115612a9957600080fd5b83820191506020820185811115612aaf57600080fd5b8251866020820283011164010000000082111715612acc57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015612b03578082015181840152602081019050612ae8565b50505050905001604052505050505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d9457600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed1739826000600d30612be16078426127d690919063ffffffff16565b6040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281038252858181548152602001915080548015612c9957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612c4f575b50509650505050505050600060405180830381600087803b158015612cbd57600080fd5b505af1158015612cd1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015612cfb57600080fd5b8101908080516040519392919084640100000000821115612d1b57600080fd5b83820191506020820185811115612d3157600080fd5b8251866020820283011164010000000082111715612d4e57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015612d85578082015181840152602081019050612d6a565b50505050905001604052505050505b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612e1f57600080fd5b505afa158015612e33573d6000803e3d6000fd5b505050506040513d6020811015612e4957600080fd5b810190808051906020019092919050505090506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612ee757600080fd5b505afa158015612efb573d6000803e3d6000fd5b505050506040513d6020811015612f1157600080fd5b81019080805190602001909291905050509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e33700600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858560008030612fc26078426127d690919063ffffffff16565b6040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200198505050505050505050606060405180830381600087803b15801561306b57600080fd5b505af115801561307f573d6000803e3d6000fd5b505050506040513d606081101561309557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505050565b6000613196828573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561314d57600080fd5b505afa158015613161573d6000803e3d6000fd5b505050506040513d602081101561317757600080fd5b81019080805190602001909291905050506127d690919063ffffffff16565b90506132358463095ea7b360e01b8584604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061323b565b50505050565b606061329d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611f6d9092919063ffffffff16565b9050600081511115613325578080602001905160208110156132be57600080fd5b8101908080519060200190929190505050613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806137af602a913960400191505060405180910390fd5b5b505050565b606082471015613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061370b6026913960400191505060405180910390fd5b61338e8561285e565b613400576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310613450578051825260208201915060208101905060208303925061342d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146134b2576040519150601f19603f3d011682016040523d82523d6000602084013e6134b7565b606091505b50915091506134c78282866135e2565b92505050949350505050565b6000808314156134e65760009050613553565b60008284029050828482816134f757fe5b041461354e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061378e6021913960400191505060405180910390fd5b809150505b92915050565b60008082116135d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816135d957fe5b04905092915050565b606083156135f2578290506136a7565b6000835111156136055782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561366c578082015181840152602081019050613651565b50505050905090810190601f1680156136995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe4d6173746572436865664a6f65537472617465677956313a204465706f7369742063616c6c6564207769746820302062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4d6173746572436865664a6f65537472617465677956313a2043616c6c6572206973206e6f7420616e20454f414d6173746572436865664a6f65537472617465677956313a2043616c6c6572206973206e6f7420746865205661756c74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a26469706673582212203b205c566a62e7ad4df64084e719979219f19ed2d84ff1af89b5bcfc5af33de264736f6c634300060c0033416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000000000fe15c2695f1f920da45c30aae47d11de51007af9000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000c2c215d9263592665993eefc77976e70590f0df1000000000000000000000000b18dcb184793be39550c6a055338286de94c755d000000000000000000000000d6a4f121ca35509af06a0be99093d08462f530520000000000000000000000006e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd00000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fe15c2695f1f920da45c30aae47d11de51007af9000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000c2c215d9263592665993eefc77976e70590f0df1000000000000000000000000b18dcb184793be39550c6a055338286de94c755d000000000000000000000000d6a4f121ca35509af06a0be99093d08462f530520000000000000000000000006e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd00000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4
-----Decoded View---------------
Arg [0] : _LPtoken (address): 0xfe15c2695f1f920da45c30aae47d11de51007af9
Arg [1] : _poolID (uint8): 26
Arg [2] : _Vault (address): 0xc2c215d9263592665993eefc77976e70590f0df1
Arg [3] : _StrategyVariables (address): 0xb18dcb184793be39550c6a055338286de94c755d
Arg [4] : _MasterChef (address): 0xd6a4f121ca35509af06a0be99093d08462f53052
Arg [5] : _RewardToken (address): 0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd
Arg [6] : _Router (address): 0x60ae616a2155ee3d9a68541ba4544862310933d4
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000fe15c2695f1f920da45c30aae47d11de51007af9
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001a
Arg [2] : 000000000000000000000000c2c215d9263592665993eefc77976e70590f0df1
Arg [3] : 000000000000000000000000b18dcb184793be39550c6a055338286de94c755d
Arg [4] : 000000000000000000000000d6a4f121ca35509af06a0be99093d08462f53052
Arg [5] : 0000000000000000000000006e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd
Arg [6] : 00000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4
Deployed ByteCode Sourcemap
37139:8042:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44726:452;;;;;;;;;;;;;:::i;:::-;;39753:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37787:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37474:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;41481:425;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40691:227;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39954:117;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41914:408;;;;;;;;;;;;;:::i;:::-;;40079:154;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12157:86;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37836:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37653:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10610:148;;;;;;;;;;;;;:::i;:::-;;37289:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37586:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9959:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37558:21;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40376:130;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37740:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37501:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37614:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40241:127;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41019:337;;;;;;;;;;;;;:::i;:::-;;37694:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37409:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37530:21;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37441:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10913:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37381:21;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44726:452;39667:5;;;;;;;;;;;39653:19;;:10;:19;;;39645:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44800:10:::1;;;;;;;;;;;44788:31;;;44820:6;;;;;;;;;;;44828:1;44788:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44841:27;44871:20;:18;:20::i;:::-;44841:50;;44928:1;44906:19;:23;44902:89;;;44946:33;44959:19;44946:12;:33::i;:::-;44902:89;45015:10;;;;;;;;;;;45003:41;;;45045:6;;;;;;;;;;;45003:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;45065:15;45083:11;:9;:11::i;:::-;45065:29;;45105:44;45134:5;;;;;;;;;;;45141:7;45112;;;;;;;;;;;45105:28;;;;:44;;;;;:::i;:::-;45162:8;:6;:8::i;:::-;39736:1;;44726:452::o:0;39753:193::-;10190:12;:10;:12::i;:::-;10179:23;;:7;:5;:7::i;:::-;:23;;;10171:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39861:18:::1;39841:17;;:38;;;;;;;;;;;;;;;;;;39895:43;39920:17;;;;;;;;;;;39895:43;;;;;;;;;;;;;;;;;;;;39753:193:::0;:::o;37787:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37474:20::-;;;;;;;;;;;;;:::o;41481:425::-;39667:5;;;;;;;;;;;39653:19;;:10;:19;;;39645:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41545:15:::1;41563:11;:9;:11::i;:::-;41545:29;;41601:6;41591:7;:16;41587:146;;;41636:10;;;;;;;;;;;41624:32;;;41657:6;;;;;;;;;;;41665:19;41676:7;41665:6;:10;;:19;;;;:::i;:::-;41624:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41710:11;:9;:11::i;:::-;41700:21;;41587:146;41759:6;41749:7;:16;41745:65;;;41792:6;41782:16;;41745:65;41822:44;41851:5;;;;;;;;;;;41858:7;41829;;;;;;;;;;;41822:28;;;;:44;;;;;:::i;:::-;41882:16;41891:6;41882:16;;;;;;;;;;;;;;;;;;39736:1;41481:425:::0;:::o;40691:227::-;40742:7;40763:22;40804:10;;;;;;;;;;;40792:37;;;40830:6;;;;;;;;;;;40846:4;40792:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40762:90;;;;;40870:40;40889:20;:18;:20::i;:::-;40870:14;:18;;:40;;;;:::i;:::-;40863:47;;;40691:227;:::o;39954:117::-;39996:7;40030;;;;;;;;;;;40023:25;;;40057:4;40023:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40016:47;;39954:117;:::o;41914:408::-;12483:8;:6;:8::i;:::-;12482:9;12474:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28710:1:::1;29316:7;;:19;;29308:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28710:1;29449:7;:18;;;;41989:30:::2;42008:10;41989:18;:30::i;:::-;41988:31;41980:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42092:10;;;;;;;;;;;42080:31;;;42112:6;;;;;;;;;;;42120:1;42080:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;42133:21;42157:20;:18;:20::i;:::-;42133:44;;42188:27;42201:13;42188:12;:27::i;:::-;42226:15;:13;:15::i;:::-;42252:9;:7;:9::i;:::-;42288:10;42277:37;;;42300:13;42277:37;;;;;;;;;;;;;;;;;;29480:1;28666::::1;29628:7:::0;:22:::1;;;;41914:408::o:0;40079:154::-;40131:14;40182:10;;;;;;;;;;;40170:32;;;40203:6;;;;;;;;;;;40219:4;40170:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40158:67;;;;;40079:154;:::o;12157:86::-;12204:4;12228:7;;;;;;;;;;;12221:14;;12157:86;:::o;37836:51::-;37882:5;37836:51;:::o;37653:32::-;;;;;;;;;;;;;:::o;10610:148::-;10190:12;:10;:12::i;:::-;10179:23;;:7;:5;:7::i;:::-;:23;;;10171:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10717:1:::1;10680:40;;10701:6;::::0;::::1;;;;;;;;10680:40;;;;;;;;;;;;10748:1;10731:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;10610:148::o:0;37289:83::-;37329:42;37289:83;:::o;37586:19::-;;;;;;;;;;;;;:::o;9959:87::-;10005:7;10032:6;;;;;;;;;;;10025:13;;9959:87;:::o;37558:21::-;;;;;;;;;;;;;:::o;40376:130::-;40427:7;40461:11;;;;;;;;;;;40454:29;;;40492:4;40454:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40447:51;;40376:130;:::o;37740:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37501:22::-;;;;;;;;;;;;;:::o;37614:32::-;;;;;;;;;;;;;:::o;40241:127::-;40295:7;40322:38;40338:21;:19;:21::i;:::-;40322:11;:9;:11::i;:::-;:15;;:38;;;;:::i;:::-;40315:45;;40241:127;:::o;41019:337::-;12483:8;:6;:8::i;:::-;12482:9;12474:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41070:15:::1;41088:11;:9;:11::i;:::-;41070:29;;41128:1;41118:7;:11;41110:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41199:58;41237:10;;;;;;;;;;;41249:7;41206;;;;;;;;;;;41199:37;;;;:58;;;;;:::i;:::-;41280:10;;;;;;;;;;;41268:31;;;41300:6;;;;;;;;;;;41308:7;41268:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41332:16;41340:7;41332:16;;;;;;;;;;;;;;;;;;12523:1;41019:337::o:0;37694:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37409:25::-;;;;;;;;;;;;;:::o;37530:21::-;;;;;;;;;;;;;:::o;37441:26::-;;;;;;;;;;;;;:::o;10913:244::-;10190:12;:10;:12::i;:::-;10179:23;;:7;:5;:7::i;:::-;:23;;;10171:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11022:1:::1;11002:22;;:8;:22;;;;10994:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11112:8;11083:38;;11104:6;::::0;::::1;;;;;;;;11083:38;;;;;;;;;;;;11141:8;11132:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;10913:244:::0;:::o;37381:21::-;;;;;;;;;;;;;:::o;24645:622::-;25024:1;25015:5;:10;25014:62;;;;25074:1;25031:5;:15;;;25055:4;25062:7;25031:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;25014:62;25006:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25169:90;25189:5;25219:22;;;25243:7;25252:5;25196:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25169:19;:90::i;:::-;24645:622;;;:::o;3669:195::-;3772:12;3804:52;3826:6;3834:4;3840:1;3843:12;3804:21;:52::i;:::-;3797:59;;3669:195;;;;;:::o;42405:1181::-;42470:29;42521:17;;;;;;;;;;;42502:59;;;:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42470:93;;42574:26;42622:17;;;;;;;;;;;42603:56;;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42574:87;;42672:27;42702:45;42728:18;42702:21;:25;;:45;;;;:::i;:::-;42672:75;;42760:24;42787:63;37882:5;42787:38;42805:19;42787:13;:17;;:38;;;;:::i;:::-;:42;;:63;;;;:::i;:::-;42760:90;;42871:6;;;;;;;;;;;42863:40;;;42904:16;42922:1;42925:22;42957:4;42964:24;42984:3;42964:15;:19;;:24;;;;:::i;:::-;42863:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43002:20;37329:42;43025:23;;;43057:4;43025:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43002:61;;43076:25;43104:64;43148:19;43104:39;43121:21;43104:12;:16;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;43076:92;;43179:22;43204:35;43221:17;43204:12;:16;;:35;;;;:::i;:::-;43179:60;;43252:24;43298:17;;;;;;;;;;;43279:54;;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43252:83;;43346:63;43373:16;43391:17;37329:42;43346:26;;;;:63;;;;;:::i;:::-;43425:38;43445:17;43425:38;;;;;;;;;;;;;;;;;;43476:54;43503:10;43515:14;37329:42;43476:26;;;;:54;;;;;:::i;:::-;43546:32;43563:14;43546:32;;;;;;;;;;;;;;;;;;42405:1181;;;;;;;;;:::o;23986:177::-;24069:86;24089:5;24119:23;;;24144:2;24148:5;24096:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24069:19;:86::i;:::-;23986:177;;;:::o;12957:118::-;12483:8;:6;:8::i;:::-;12482:9;12474:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13027:4:::1;13017:7;;:14;;;;;;;;;;;;;;;;;;13047:20;13054:12;:10;:12::i;:::-;13047:20;;;;;;;;;;;;;;;;;;;;12957:118::o:0;8588:106::-;8641:15;8676:10;8669:17;;8588:106;:::o;19222:158::-;19280:7;19313:1;19308;:6;;19300:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19371:1;19367;:5;19360:12;;19222:158;;;;:::o;18760:179::-;18818:7;18838:9;18854:1;18850;:5;18838:17;;18879:1;18874;:6;;18866:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18930:1;18923:8;;;18760:179;;;;:::o;751:422::-;811:4;1019:12;1130:7;1118:20;1110:28;;1164:1;1157:4;:8;1150:15;;;751:422;;;:::o;43594:774::-;43639:23;43665:27;43690:1;43665:20;:18;:20::i;:::-;:24;;:27;;;;:::i;:::-;43639:53;;43719:11;;;;;;;;;;;43709:21;;:6;;;;;;;;;;;:21;;;43705:180;;43755:6;;;;;;;;;;;43747:40;;;43788:15;43805:1;43808:23;43841:4;43848:24;43868:3;43848:15;:19;;:24;;;;:::i;:::-;43747:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43705:180;43911:11;;;;;;;;;;;43901:21;;:6;;;;;;;;;;;:21;;;43897:180;;43947:6;;;;;;;;;;;43939:40;;;43980:15;43997:1;44000:23;44033:4;44040:24;44060:3;44040:15;:19;;:24;;;;:::i;:::-;43939:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43897:180;44089:21;44120:6;;;;;;;;;;;44113:24;;;44146:4;44113:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44089:63;;44163:21;44194:6;;;;;;;;;;;44187:24;;;44220:4;44187:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44163:63;;44247:6;;;;;;;;;;;44239:28;;;44268:6;;;;;;;;;;;44276;;;;;;;;;;;44284:13;44299;44314:1;44317;44328:4;44335:24;44355:3;44335:15;:19;;:24;;;;:::i;:::-;44239:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43594:774;;;:::o;25275:286::-;25372:20;25395:50;25439:5;25395;:15;;;25419:4;25426:7;25395:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:43;;:50;;;;:::i;:::-;25372:73;;25456:97;25476:5;25506:22;;;25530:7;25539:12;25483:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25456:19;:97::i;:::-;25275:286;;;;:::o;26291:761::-;26715:23;26741:69;26769:4;26741:69;;;;;;;;;;;;;;;;;26749:5;26741:27;;;;:69;;;;;:::i;:::-;26715:95;;26845:1;26825:10;:17;:21;26821:224;;;26967:10;26956:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26948:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26821:224;26291:761;;;:::o;4721:530::-;4848:12;4906:5;4881:21;:30;;4873:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4973:18;4984:6;4973:10;:18::i;:::-;4965:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5099:12;5113:23;5140:6;:11;;5160:5;5168:4;5140:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5098:75;;;;5191:52;5209:7;5218:10;5230:12;5191:17;:52::i;:::-;5184:59;;;;4721:530;;;;;;:::o;19639:220::-;19697:7;19726:1;19721;:6;19717:20;;;19736:1;19729:8;;;;19717:20;19748:9;19764:1;19760;:5;19748:17;;19793:1;19788;19784;:5;;;;;;:10;19776:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19850:1;19843:8;;;19639:220;;;;;:::o;20337:153::-;20395:7;20427:1;20423;:5;20415:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20481:1;20477;:5;;;;;;20470:12;;20337:153;;;;:::o;7261:742::-;7376:12;7405:7;7401:595;;;7436:10;7429:17;;;;7401:595;7570:1;7550:10;:17;:21;7546:439;;;7813:10;7807:17;7874:15;7861:10;7857:2;7853:19;7846:44;7761:148;7956:12;7949:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7261:742;;;;;;:::o
Swarm Source
ipfs://3b205c566a62e7ad4df64084e719979219f19ed2d84ff1af89b5bcfc5af33de2
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.