More Info
Private Name Tags
ContractCreator:
Sponsored
Latest 25 from a total of 347 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Leech | 21213614 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21211969 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21210556 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21208853 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21207225 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21205606 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21203984 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21202308 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21200622 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21197417 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21195696 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21194103 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21192328 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21190579 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21188923 | 869 days ago | IN | 0 MATIC | 0.00384188 | ||||
Leech | 21187351 | 869 days ago | IN | 0 MATIC | 0.01596346 | ||||
Leech | 21185576 | 869 days ago | IN | 0 MATIC | 0.01628126 | ||||
Leech | 21183956 | 870 days ago | IN | 0 MATIC | 0.0159167 | ||||
Leech | 21182445 | 870 days ago | IN | 0 MATIC | 0.01555214 | ||||
Leech | 21179275 | 870 days ago | IN | 0 MATIC | 0.0159167 | ||||
Leech | 21177517 | 870 days ago | IN | 0 MATIC | 0.01628126 | ||||
Leech | 21175775 | 870 days ago | IN | 0 MATIC | 0.0159167 | ||||
Leech | 21174038 | 870 days ago | IN | 0 MATIC | 0.0159167 | ||||
Leech | 21172313 | 870 days ago | IN | 0 MATIC | 0.01628126 | ||||
Leech | 21170630 | 870 days ago | IN | 0 MATIC | 0.01628126 |
Loading...
Loading
Contract Name:
WormStrategySingleWbtc
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-10-22 */ // SPDX-License-Identifier: MIT // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.1.0/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.1.0/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @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, 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) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * 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); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.1.0/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.1.0/contracts/GSN/Context.sol pragma solidity ^0.6.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; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.1.0/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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 returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.1.0/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.6.0; /** * @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"); } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.1.0/contracts/utils/Pausable.sol pragma solidity ^0.6.0; /** * @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. */ 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 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()); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.1.0/contracts/utils/ReentrancyGuard.sol pragma solidity ^0.6.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ 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; } } // File: contracts/libs/IUniRouter01.sol pragma solidity 0.6.12; interface IUniRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // File: contracts/libs/IUniRouter02.sol pragma solidity 0.6.12; interface IUniRouter02 is IUniRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // File: contracts/libs/IUniPair.sol pragma solidity 0.6.12; interface IUniPair { function token0() external view returns (address); function token1() external view returns (address); } // File: contracts/libs/IMasterchef.sol pragma solidity 0.6.12; interface IMasterchef { function deposit(uint256 _pid, uint256 _amount) external; function withdraw(uint256 _pid, uint256 _amount) external; function emergencyWithdraw(uint256 _pid) external; function userInfo(uint256 _pid, address _address) external view returns (uint256, uint256); // Typical MC poolInfo function poolInfo(uint256 _pid) external view returns (address, uint256, uint256, uint256, uint16, uint256); function totalAllocPoint() external view returns (uint256); function harvest(uint256 _pid, address _to) external; } // File: contracts/BaseWormStrategy.sol pragma solidity 0.6.12; abstract contract BaseWormStrategy is Ownable, ReentrancyGuard, Pausable { using SafeMath for uint256; using SafeERC20 for IERC20; address public constant timeAddress = 0x5c59D7Cb794471a9633391c4927ADe06B8787a90; // TIME token contract address public wantAddress; address public farmedAddress; address public earnedAddress; address public earnedRouterAddress; address public farmedRouterAddress; address public timeRouterAddress; address public constant feeAddress = 0x1F7c88A37f7d0B36E7547E3a79c2D04F90531E75; // Fee Address (held by devWallet) address public wormChefAddress; address public govAddress; uint256 public lastLeechBlock = block.number; uint256 public sharesTotal = 0; address public constant treasuryAddress = 0x374BD17C475f972D6aF4EA0fAC0744B5500A959F; // Treasury Contract Address, behind 28-day Timelock address public constant masterchefAddress = 0x41C4dFA389e8c43BA6220aa62021ed246d441306; // TIME MasterChef contract uint256 public controllerFee = 250; uint256 public rewardRate = 0; uint256 public buyBackRate = 500; uint256 public constant feeMaxTotal = 1000; uint256 public constant feeMax = 10000; uint256 public withdrawFeeFactor = 9990; // 0.1% Withdrawal fees uint256 public constant withdrawFeeFactorMax = 10000; uint256 public constant withdrawFeeFactorLL = 9900; // Max 1% withdrawal fee (lower limit) uint256 public slippageFactor = 950; // 5% default slippage tolerance uint256 public constant slippageFactorUL = 995; address[] public earnedToWmaticPath; address[] public earnedToWantPath; address[] public wantToTimePath; address[] public wantToFarmedPath; address[] public farmedToWantPath; event SetSettings( uint256 _controllerFee, uint256 _buyBackRate, uint256 _withdrawFeeFactor, uint256 _slippageFactor ); event ResetAllowances(); event Pause(); event Unpause(); event Panic(); event SetGov( address _govAddress ); event SetTimeRouterAddress( address _timeRouterAddress ); event SetEarnedRouterAddress( address _earnedRouterAddress ); modifier onlyGov() { require(msg.sender == govAddress, "!gov"); _; } function _wormDeposit(uint256 _farmedTokenAmount) internal virtual; function _wormWithdraw(uint256 _farmedTokenAmount) internal virtual; function leech() external virtual; function totalInUnderlying() public virtual view returns (uint256); function farmedLockedTotal() public virtual view returns (uint256); function _resetAllowances() internal virtual; function _emergencyWormWithdraw() internal virtual; function deposit(address _userAddress, uint256 _wantAmt) external onlyOwner nonReentrant whenNotPaused returns (uint256) { // Call must happen before transfer uint256 farmedLockedBefore = farmedLockedTotal(); // Transfer from VaultChef => WormStrat IERC20(wantAddress).safeTransferFrom( address(msg.sender), address(this), _wantAmt ); uint256 wantAmt = IERC20(wantAddress).balanceOf(address(this)); if (wantAmt == 0) return 0; // Add swaps before deposit if (wantAddress != farmedAddress) { _safeSwapFarmed( wantAmt, wantToFarmedPath, address(this) ); } // Proper deposit amount for tokens with fees, or vaults with deposit fees uint256 sharesAdded = _farm(); if (sharesTotal > 0) { sharesAdded = sharesAdded.mul(sharesTotal).div(farmedLockedBefore); } sharesTotal = sharesTotal.add(sharesAdded); return sharesAdded; } function _farm() internal returns (uint256) { uint256 farmedAmt = IERC20(farmedAddress).balanceOf(address(this)); if (farmedAmt == 0) return 0; uint256 sharesBefore = totalInUnderlying(); _wormDeposit(farmedAmt); uint256 sharesAfter = totalInUnderlying(); return sharesAfter.sub(sharesBefore); } function withdraw(address _userAddress, uint256 _farmedAmt) external onlyOwner nonReentrant returns (uint256, uint256) { require(_farmedAmt > 0, "_farmedAmt is 0"); // Users withdraw shares based of farmedAmt uint256 farmedAmt = IERC20(farmedAddress).balanceOf(address(this)); // Check if strategy has tokens from panic if (_farmedAmt > farmedAmt) { _wormWithdraw(_farmedAmt.sub(farmedAmt)); farmedAmt = IERC20(farmedAddress).balanceOf(address(this)); } if (_farmedAmt > farmedAmt) { _farmedAmt = farmedAmt; } if (_farmedAmt > farmedLockedTotal()) { _farmedAmt = farmedLockedTotal(); } uint256 sharesRemoved = _farmedAmt.mul(sharesTotal).div(farmedLockedTotal()); if (sharesRemoved > sharesTotal) { sharesRemoved = sharesTotal; } sharesTotal = sharesTotal.sub(sharesRemoved); // Convert Farmed to Want if (_farmedAmt > 0 && farmedAddress != wantAddress) { _safeSwapFarmed( _farmedAmt, farmedToWantPath, address(this) ); } // Account for any withdrawal fees uint256 wantBefore = IERC20(wantAddress).balanceOf(address(this)); uint256 wantWithdrawn = wantBefore.mul(withdrawFeeFactor).div(withdrawFeeFactorMax); uint256 wantFees = wantBefore.sub(wantWithdrawn); IERC20(wantAddress).safeTransfer(feeAddress, wantFees); // Transfer Withdrawal Fees IERC20(wantAddress).safeTransfer(wormChefAddress, wantWithdrawn); // Transfer WantWithdrawn to WormChef return (sharesRemoved,wantWithdrawn); } // To pay for earn function, other operating costs that will further grow our protocol function distributeFees(uint256 _earnedAmt) internal returns (uint256) { if (controllerFee > 0) { uint256 fee = _earnedAmt.mul(controllerFee).div(feeMax); _safeSwapWmatic( fee, earnedToWmaticPath, feeAddress ); _earnedAmt = _earnedAmt.sub(fee); } return _earnedAmt; } function buyBack(uint256 _earnedAmt) internal virtual returns (uint256) { if (buyBackRate > 0) { uint256 buyBackAmt = _earnedAmt.mul(buyBackRate).div(feeMax); _safeSwapEarned( buyBackAmt, earnedToWantPath, address(this) ); uint256 wantBuybackAmt = IERC20(wantAddress).balanceOf(address(this)); _safeSwapTime( wantBuybackAmt, wantToTimePath, address(this) ); uint256 timeAmt = IERC20(timeAddress).balanceOf(address(this)); IERC20(timeAddress).safeTransfer( treasuryAddress, timeAmt.div(4) // 25% to treasuryAddress ); IERC20(timeAddress).safeTransfer( masterchefAddress, timeAmt.mul(3).div(4) // 75% TIME to masterchefAddress ); _earnedAmt = _earnedAmt.sub(buyBackAmt); } return _earnedAmt; } function resetAllowances() external onlyGov { _resetAllowances(); emit ResetAllowances(); } function pause() external onlyGov { _pause(); emit Pause(); } function unpause() external onlyGov { _unpause(); _farm(); emit Unpause(); } function panic() external onlyGov { _pause(); _emergencyWormWithdraw(); IERC20(wantAddress).safeApprove(farmedRouterAddress, 0); // Revoke approval emit Panic(); } function setGov(address _govAddress) external onlyGov { govAddress = _govAddress; emit SetGov( _govAddress ); } function setSettings( uint256 _controllerFee, uint256 _buyBackRate, uint256 _withdrawFeeFactor, uint256 _slippageFactor ) external onlyGov { require(_withdrawFeeFactor >= withdrawFeeFactorLL, "_withdrawFeeFactor too low"); require(_withdrawFeeFactor <= withdrawFeeFactorMax, "_withdrawFeeFactor too high"); require(_slippageFactor <= slippageFactorUL, "_slippageFactor too high"); require(_controllerFee.add(_buyBackRate) <= feeMaxTotal, "Performance Fees too high"); controllerFee = _controllerFee; buyBackRate = _buyBackRate; withdrawFeeFactor = _withdrawFeeFactor; slippageFactor = _slippageFactor; emit SetSettings( _controllerFee, _buyBackRate, _withdrawFeeFactor, _slippageFactor ); } function _safeSwapEarned( uint256 _amountIn, address[] memory _path, address _to ) internal { uint256[] memory amounts = IUniRouter02(earnedRouterAddress).getAmountsOut(_amountIn, _path); uint256 amountOut = amounts[amounts.length.sub(1)]; if (_amountIn > 0) { IUniRouter02(earnedRouterAddress).swapExactTokensForTokens( _amountIn, amountOut.mul(slippageFactor).div(1000), _path, _to, now ); } } function _safeSwapFarmed( uint256 _amountIn, address[] memory _path, address _to ) internal { uint256[] memory amounts = IUniRouter02(farmedRouterAddress).getAmountsOut(_amountIn, _path); uint256 amountOut = amounts[amounts.length.sub(1)]; if (_amountIn > 0) { IUniRouter02(farmedRouterAddress).swapExactTokensForTokens( _amountIn, amountOut.mul(slippageFactor).div(1000), _path, _to, now ); } } function _safeSwapTime( uint256 _amountIn, address[] memory _path, address _to ) internal { uint256[] memory amounts = IUniRouter02(timeRouterAddress).getAmountsOut(_amountIn, _path); uint256 amountOut = amounts[amounts.length.sub(1)]; if (_amountIn > 0) { IUniRouter02(timeRouterAddress).swapExactTokensForTokens( _amountIn, amountOut.mul(slippageFactor).div(1000), _path, _to, now ); } } function _safeSwapWmatic( uint256 _amountIn, address[] memory _path, address _to ) internal { uint256[] memory amounts = IUniRouter02(earnedRouterAddress).getAmountsOut(_amountIn, _path); uint256 amountOut = amounts[amounts.length.sub(1)]; if (_amountIn > 0) { IUniRouter02(earnedRouterAddress).swapExactTokensForETH( _amountIn, amountOut.mul(slippageFactor).div(1000), _path, _to, now ); } } } // File: contracts/BaseStrategyLP.sol pragma solidity 0.6.12; abstract contract BaseWormStrategyLP is BaseWormStrategy { using SafeMath for uint256; using SafeERC20 for IERC20; // Safety feature before launching contract function convertDustToTime() external nonReentrant whenNotPaused { uint256 earnedAmt = IERC20(earnedAddress).balanceOf(address(this)); if (earnedAmt > 0 && earnedAddress != wantAddress) { _safeSwapEarned( earnedAmt, earnedToWantPath, address(this) ); } uint256 wantBal = IERC20(wantAddress).balanceOf(address(this)); if (wantBal > 0 && wantAddress != timeAddress) { _safeSwapTime( wantBal, wantToTimePath, treasuryAddress ); } } } // File: contracts/BaseStrategyLPSingle.sol pragma solidity 0.6.12; abstract contract BaseWormStrategyLPSingle is BaseWormStrategyLP { using SafeMath for uint256; using SafeERC20 for IERC20; function _wormHarvest() internal virtual; function leech() external override nonReentrant whenNotPaused onlyGov { // Harvest farmed tokens _wormHarvest(); // Converts farm tokens into want tokens uint256 earnedAmt = IERC20(earnedAddress).balanceOf(address(this)); if (earnedAmt > 0) { earnedAmt = distributeFees(earnedAmt); earnedAmt = buyBack(earnedAmt); if (earnedAddress == farmedAddress) // Immediately restake into pool if staking in single native pool lastLeechBlock = block.number; _farm(); } // Check if there's still earnedAmt left // If there is, swap to Want earnedAmt = IERC20(earnedAddress).balanceOf(address(this)); uint256 _wantBefore = IERC20(wantAddress).balanceOf(address(this)); if (earnedAmt > 0 && earnedAddress != wantAddress) { // Swap all earned to want via earnedRouter _safeSwapEarned( earnedAmt, earnedToWantPath, address(this) ); } uint256 _wantAfter = IERC20(wantAddress).balanceOf(address(this)).sub(_wantBefore); // For single staking pools, we'll need to swap back to the farmed token if (_wantAfter > 0 && wantAddress != farmedAddress) { // Swap all want tokens to farmed _safeSwapFarmed( _wantAfter, wantToFarmedPath, address(this) ); lastLeechBlock = block.number; _farm(); } // For single staking pools that are the same as the want token if (_wantAfter > 0 && wantAddress == farmedAddress) { lastLeechBlock = block.number; _farm(); } } } // File: contracts/strategy/WormStrategySingle.sol pragma solidity 0.6.12; contract WormStrategySingleWbtc is BaseWormStrategyLPSingle { using SafeMath for uint256; using SafeERC20 for IERC20; address public stakingRewardsAddress; uint256 public pid; constructor( address _wormChefAddress, address _stakingRewardsAddress, uint256 _pid, address _earnedRouterAddress, address _farmedRouterAddress, address _timeRouterAddress, address _wantAddress, address _farmedAddress, address _earnedAddress, address[] memory _earnedToWmaticPath, address[] memory _earnedToWantPath, address[] memory _wantToTimePath, address[] memory _wantToFarmedPath, address[] memory _farmedToWantPath ) public { require(address(_wantAddress) != address(_earnedAddress), "wantAddress and earnedAddress cannot be the same"); // Note: Want can also be the same as farmed token if performing single stake govAddress = msg.sender; // @dev test address!!! wormChefAddress = _wormChefAddress; stakingRewardsAddress = _stakingRewardsAddress; earnedRouterAddress = _earnedRouterAddress; farmedRouterAddress = _farmedRouterAddress; timeRouterAddress = _timeRouterAddress; wantAddress = _wantAddress; farmedAddress = _farmedAddress; pid = _pid; earnedAddress = _earnedAddress; earnedToWmaticPath = _earnedToWmaticPath; earnedToWantPath = _earnedToWantPath; wantToTimePath = _wantToTimePath; wantToFarmedPath = _wantToFarmedPath; farmedToWantPath = _farmedToWantPath; transferOwnership(wormChefAddress); _resetAllowances(); } function _wormDeposit(uint256 _farmedAmt) internal override { IMasterchef(stakingRewardsAddress).deposit(pid, _farmedAmt); } function _wormWithdraw(uint256 _farmedAmt) internal override { IMasterchef(stakingRewardsAddress).withdraw(pid, _farmedAmt); } function _wormHarvest() internal override { IMasterchef(stakingRewardsAddress).withdraw(pid, 0); } function totalInUnderlying() public override view returns (uint256) { (uint256 farmedAmount,) = IMasterchef(stakingRewardsAddress).userInfo(pid, address(this)); return farmedAmount; } function farmedLockedTotal() public override view returns (uint256) { return IERC20(farmedAddress).balanceOf(address(this)) .add(totalInUnderlying()); } function farmedAllocPoint() public view returns (uint256) { (,uint256 farmedAP,,,,) = IMasterchef(stakingRewardsAddress).poolInfo(pid); return farmedAP; } function farmedDepositFeeBP() public view returns (uint16) { (,,,,uint16 farmedDF,) = IMasterchef(stakingRewardsAddress).poolInfo(pid); return farmedDF; } function stakingRewardsAllocPointTotal() public view returns (uint256) { uint256 allocPointTotal = IMasterchef(stakingRewardsAddress).totalAllocPoint(); return allocPointTotal; } function _resetAllowances() internal override { // For staking in MC if (wantAddress == farmedAddress) { IERC20(wantAddress).safeApprove(stakingRewardsAddress, uint256(0)); IERC20(wantAddress).safeIncreaseAllowance( stakingRewardsAddress, uint256(-1) ); } if (wantAddress != farmedAddress) { IERC20(farmedAddress).safeApprove(stakingRewardsAddress, uint256(0)); IERC20(farmedAddress).safeIncreaseAllowance( stakingRewardsAddress, uint256(-1) ); } // For leech() IERC20(earnedAddress).safeApprove(earnedRouterAddress, uint256(0)); IERC20(earnedAddress).safeIncreaseAllowance( earnedRouterAddress, uint256(-1) ); // For want approvals IERC20(wantAddress).safeApprove(farmedRouterAddress, uint256(0)); IERC20(wantAddress).safeIncreaseAllowance( farmedRouterAddress, uint256(-1) ); // For farmed approvals IERC20(farmedAddress).safeApprove(farmedRouterAddress, uint256(0)); IERC20(farmedAddress).safeIncreaseAllowance( farmedRouterAddress, uint256(-1) ); // For swapping to TIME IERC20(wantAddress).safeApprove(timeRouterAddress, uint256(0)); IERC20(wantAddress).safeIncreaseAllowance( timeRouterAddress, uint256(-1) ); } function _emergencyWormWithdraw() internal override { IMasterchef(stakingRewardsAddress).emergencyWithdraw(pid); } function setTimeRouterAddress(address _timeRouterAddress) external onlyGov { timeRouterAddress = _timeRouterAddress; emit SetTimeRouterAddress( _timeRouterAddress ); } function setEarnedRouterAddress(address _earnedRouterAddress) external onlyGov { earnedRouterAddress = _earnedRouterAddress; emit SetEarnedRouterAddress( _earnedRouterAddress ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_wormChefAddress","type":"address"},{"internalType":"address","name":"_stakingRewardsAddress","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_earnedRouterAddress","type":"address"},{"internalType":"address","name":"_farmedRouterAddress","type":"address"},{"internalType":"address","name":"_timeRouterAddress","type":"address"},{"internalType":"address","name":"_wantAddress","type":"address"},{"internalType":"address","name":"_farmedAddress","type":"address"},{"internalType":"address","name":"_earnedAddress","type":"address"},{"internalType":"address[]","name":"_earnedToWmaticPath","type":"address[]"},{"internalType":"address[]","name":"_earnedToWantPath","type":"address[]"},{"internalType":"address[]","name":"_wantToTimePath","type":"address[]"},{"internalType":"address[]","name":"_wantToFarmedPath","type":"address[]"},{"internalType":"address[]","name":"_farmedToWantPath","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Panic","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"ResetAllowances","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_earnedRouterAddress","type":"address"}],"name":"SetEarnedRouterAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_govAddress","type":"address"}],"name":"SetGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_controllerFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_buyBackRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_withdrawFeeFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_slippageFactor","type":"uint256"}],"name":"SetSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_timeRouterAddress","type":"address"}],"name":"SetTimeRouterAddress","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"buyBackRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controllerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"convertDustToTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"},{"internalType":"uint256","name":"_wantAmt","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earnedAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earnedRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earnedToWantPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earnedToWmaticPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmedAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmedAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmedDepositFeeBP","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmedLockedTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmedRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"farmedToWantPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeMaxTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"govAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLeechBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leech","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"masterchefAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"panic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetAllowances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_earnedRouterAddress","type":"address"}],"name":"setEarnedRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_govAddress","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_controllerFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackRate","type":"uint256"},{"internalType":"uint256","name":"_withdrawFeeFactor","type":"uint256"},{"internalType":"uint256","name":"_slippageFactor","type":"uint256"}],"name":"setSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timeRouterAddress","type":"address"}],"name":"setTimeRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sharesTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"slippageFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"slippageFactorUL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingRewardsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingRewardsAllocPointTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalInUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wantAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"wantToFarmedPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"wantToTimePath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"},{"internalType":"uint256","name":"_farmedAmt","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFeeFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFeeFactorLL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFeeFactorMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wormChefAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405243600a556000600b5560fa600c556000600d556101f4600e55612706600f556103b66010553480156200003657600080fd5b506040516200497f3803806200497f83398181016040526101c08110156200005d57600080fd5b815160208301516040808501516060860151608087015160a088015160c089015160e08a01516101008b01516101208c01805198519a9c999b979a969995989497939692959194929382019284640100000000821115620000bd57600080fd5b908301906020820185811115620000d357600080fd5b8251866020820283011164010000000082111715620000f157600080fd5b82525081516020918201928201910280838360005b838110156200012057818101518382015260200162000106565b50505050905001604052602001805160405193929190846401000000008211156200014a57600080fd5b9083019060208201858111156200016057600080fd5b82518660208202830111640100000000821117156200017e57600080fd5b82525081516020918201928201910280838360005b83811015620001ad57818101518382015260200162000193565b5050505090500160405260200180516040519392919084640100000000821115620001d757600080fd5b908301906020820185811115620001ed57600080fd5b82518660208202830111640100000000821117156200020b57600080fd5b82525081516020918201928201910280838360005b838110156200023a57818101518382015260200162000220565b50505050905001604052602001805160405193929190846401000000008211156200026457600080fd5b9083019060208201858111156200027a57600080fd5b82518660208202830111640100000000821117156200029857600080fd5b82525081516020918201928201910280838360005b83811015620002c7578181015183820152602001620002ad565b5050505090500160405260200180516040519392919084640100000000821115620002f157600080fd5b9083019060208201858111156200030757600080fd5b82518660208202830111640100000000821117156200032557600080fd5b82525081516020918201928201910280838360005b83811015620003545781810151838201526020016200033a565b505050509050016040525050506000620003736200061360201b60201c565b600080546001600160a01b0319166001600160a01b038316908117825560405192935091600080516020620048ff833981519152908290a350600180556002805460ff191690556001600160a01b038881169087161415620004075760405162461bcd60e51b8152600401808060200182810382526030815260200180620048cf6030913960400191505060405180910390fd5b33600960006101000a8154816001600160a01b0302191690836001600160a01b031602179055508d600860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508c601660006101000a8154816001600160a01b0302191690836001600160a01b031602179055508a600560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555089600660006101000a8154816001600160a01b0302191690836001600160a01b0316021790555088600760006101000a8154816001600160a01b0302191690836001600160a01b0316021790555087600260016101000a8154816001600160a01b0302191690836001600160a01b0316021790555086600360006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b60178190555085600460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555084601190805190602001906200058592919062000ede565b5083516200059b90601290602087019062000ede565b508251620005b190601390602086019062000ede565b508151620005c790601490602085019062000ede565b508051620005dd90601590602084019062000ede565b50600854620005f5906001600160a01b031662000617565b620005ff62000715565b505050505050505050505050505062000f69565b3390565b6200062162000613565b6000546001600160a01b0390811691161462000684576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620006cb5760405162461bcd60e51b8152600401808060200182810382526026815260200180620048a96026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020620048ff83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60035460025461010090046001600160a01b0390811691161415620007975760165460025462000765916001600160a01b0361010090920482169116600062000988602090811b6200204a17901c565b60165460025462000797916001600160a01b036101009092048216911660001962000aac602090811b6200216217901c565b60035460025461010090046001600160a01b039081169116146200080e57601654600354620007e1916001600160a01b039182169116600062000988602090811b6200204a17901c565b6016546003546200080e916001600160a01b03918216911660001962000aac602090811b6200216217901c565b6005546004546200083a916001600160a01b039182169116600062000988602090811b6200204a17901c565b60055460045462000867916001600160a01b03918216911660001962000aac602090811b6200216217901c565b60065460025462000898916001600160a01b0361010090920482169116600062000988602090811b6200204a17901c565b600654600254620008ca916001600160a01b036101009092048216911660001962000aac602090811b6200216217901c565b600654600354620008f6916001600160a01b039182169116600062000988602090811b6200204a17901c565b60065460035462000923916001600160a01b03918216911660001962000aac602090811b6200216217901c565b60075460025462000954916001600160a01b0361010090920482169116600062000988602090811b6200204a17901c565b60075460025462000986916001600160a01b036101009092048216911660001962000aac602090811b6200216217901c565b565b80158062000a12575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015620009e257600080fd5b505afa158015620009f7573d6000803e3d6000fd5b505050506040513d602081101562000a0e57600080fd5b5051155b62000a4f5760405162461bcd60e51b8152600401808060200182810382526036815260200180620049496036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b1790915262000aa791859162000bb516565b505050565b600062000b5382856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801562000b1257600080fd5b505afa15801562000b27573d6000803e3d6000fd5b505050506040513d602081101562000b3e57600080fd5b50519062000c71602090811b6200222117901c565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b1790915291925062000baf9186919062000bb516565b50505050565b606062000c11826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662000cd360201b62002284179092919060201c565b80519091501562000aa75780806020019051602081101562000c3257600080fd5b505162000aa75760405162461bcd60e51b815260040180806020018281038252602a8152602001806200491f602a913960400191505060405180910390fd5b60008282018381101562000ccc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b606062000ce4848460008562000cec565b949350505050565b606062000cf98562000ea4565b62000d4b576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831062000d8c5780518252601f19909201916020918201910162000d6b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811462000df0576040519150601f19603f3d011682016040523d82523d6000602084013e62000df5565b606091505b5091509150811562000e0b57915062000ce49050565b80511562000e1c5780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000e6857818101518382015260200162000e4e565b50505050905090810190601f16801562000e965780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159062000ce4575050151592915050565b82805482825590600052602060002090810192821562000f36579160200282015b8281111562000f3657825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000eff565b5062000f4492915062000f48565b5090565b5b8082111562000f445780546001600160a01b031916815560010162000f49565b6139308062000f796000396000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c806385f02dd61161019d578063cef8577f116100e9578063f1068454116100a2578063f8d0eb0e1161007c578063f8d0eb0e14610640578063fc616ae214610648578063ffbd3b1f14610665578063ffbe9f1e146104505761030c565b8063f1068454146105cd578063f2fde38b146105d5578063f3fef3a3146105fb5761030c565b8063cef8577f14610561578063cfad57a214610569578063e71984741461058f578063e7a0367914610597578063ec2554ec1461059f578063efe83dbd146105c55761030c565b8063b1122b5c11610156578063c8154eb611610130578063c8154eb6146104f7578063c9f7b2f01461051d578063cc1ef5ac1461053c578063ccdfa6c9146105595761030c565b8063b1122b5c146104df578063b74cd242146104e7578063c5f956af146104ef5761030c565b806385f02dd614610488578063866b2018146104905780638da5cb5b146104985780638fefda06146104a05780639456b9ff146104a8578063a086f091146104b05761030c565b806346008a071161025c57806367057b6c11610215578063788bff68116101ef578063788bff68146104685780637b0a47ee146104705780637e78ddb6146104785780638456cb59146104805761030c565b806367057b6c1461045057806368f5416214610458578063715018a6146104605761030c565b806346008a07146103e85780634700d305146103f057806347e7ef24146103f857806353f17840146104245780635c379eef1461042c5780635c975abb146104345761030c565b806338946a8c116102c957806341275358116102a357806341275358146103c85780634140ed09146103d057806341982c7e146103d857806344a3955e146103e05761030c565b806338946a8c1461039b5780633f4ba83a146103b857806340c34b58146103c05761030c565b80631666fc7f14610311578063178a8d071461032b578063260ab48c146103335780632a2275001461036c57806332b0641f146103745780633505b09f14610391575b600080fd5b61031961066d565b60408051918252519081900360200190f35b6103196106f5565b6103506004803603602081101561034957600080fd5b50356106fb565b604080516001600160a01b039092168252519081900360200190f35b610350610722565b6103506004803603602081101561038a57600080fd5b5035610731565b61039961073e565b005b610350600480360360208110156103b157600080fd5b50356107b9565b6103996107c6565b61035061084a565b610350610862565b61035061087a565b610319610889565b610319610912565b610350610918565b610399610927565b6103196004803603604081101561040e57600080fd5b506001600160a01b0381351690602001356109cd565b610350610c4d565b610319610c5c565b61043c610ceb565b604080519115158252519081900360200190f35b610319610cf4565b610319610cfa565b610399610d00565b610350610da2565b610319610db1565b610319610db7565b610399610e32565b610319610ead565b610319610eb3565b610350610eb9565b610319610ec8565b610319610ece565b610399600480360360808110156104c657600080fd5b5080359060208101359060408101359060600135610ed4565b6103996110e2565b61031961158d565b610350611593565b6103996004803603602081101561050d57600080fd5b50356001600160a01b03166115ab565b610525611647565b6040805161ffff9092168252519081900360200190f35b6103506004803603602081101561055257600080fd5b50356116d0565b6103506116dd565b6103996116ec565b6103996004803603602081101561057f57600080fd5b50356001600160a01b03166119c3565b610350611a5f565b610350611a6e565b610399600480360360208110156105b557600080fd5b50356001600160a01b0316611a82565b610350611b1e565b610319611b36565b610399600480360360208110156105eb57600080fd5b50356001600160a01b0316611b3c565b6106276004803603604081101561061157600080fd5b506001600160a01b038135169060200135611c34565b6040805192835260208301919091528051918290030190f35b610350612028565b6103506004803603602081101561065e57600080fd5b5035612037565b610319612044565b601654601754604080516393f1a40b60e01b81526004810192909252306024830152805160009384936001600160a01b03909116926393f1a40b92604480840193829003018186803b1580156106c257600080fd5b505afa1580156106d6573d6000803e3d6000fd5b505050506040513d60408110156106ec57600080fd5b50519150505b90565b600e5481565b6011818154811061070857fe5b6000918252602090912001546001600160a01b0316905081565b6008546001600160a01b031681565b6013818154811061070857fe5b6009546001600160a01b03163314610786576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b61078e61229b565b6040517ff02d1f4fa39e3ca09cf6e4274f9790281a3249d378ee354cdb1fa66ce71c421d90600090a1565b6012818154811061070857fe5b6009546001600160a01b0316331461080e576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b610816612464565b61081e612502565b506040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b7341c4dfa389e8c43ba6220aa62021ed246d44130681565b731f7c88a37f7d0b36e7547e3a79c2d04f90531e7581565b6007546001600160a01b031681565b60165460175460408051631526fe2760e01b815260048101929092525160009283926001600160a01b0390911691631526fe279160248082019260c092909190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d60c081101561090757600080fd5b506020015191505090565b600b5481565b6009546001600160a01b031681565b6009546001600160a01b0316331461096f576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6109776125c2565b61097f612643565b6006546002546109a2916001600160a01b0361010090920482169116600061204a565b6040517ffc838efe7ea0b14d93cb78df90e970953d483f8eeb8af7c95dde440924fd7c1290600090a1565b60006109d76126a7565b6000546001600160a01b03908116911614610a27576040805162461bcd60e51b8152602060048201819052602482015260008051602061387b833981519152604482015290519081900360640190fd5b60026001541415610a6d576040805162461bcd60e51b815260206004820152601f6024820152600080516020613814833981519152604482015290519081900360640190fd5b600260018190555460ff1615610abd576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000610ac7610c5c565b600254909150610ae79061010090046001600160a01b03163330866126ab565b600254604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610b3757600080fd5b505afa158015610b4b573d6000803e3d6000fd5b505050506040513d6020811015610b6157600080fd5b5051905080610b7557600092505050610c43565b60035460025461010090046001600160a01b03908116911614610bf757610bf7816014805480602002602001604051908101604052809291908181526020018280548015610bec57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bce575b505050505030612705565b6000610c01612502565b600b5490915015610c2e57610c2b83610c25600b5484612a2b90919063ffffffff16565b90612a84565b90505b600b54610c3b9082612221565b600b55925050505b6001805592915050565b6006546001600160a01b031681565b6000610ce6610c6961066d565b600354604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610cb457600080fd5b505afa158015610cc8573d6000803e3d6000fd5b505050506040513d6020811015610cde57600080fd5b505190612221565b905090565b60025460ff1690565b61271081565b600f5481565b610d086126a7565b6000546001600160a01b03908116911614610d58576040805162461bcd60e51b8152602060048201819052602482015260008051602061387b833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6016546001600160a01b031681565b600d5481565b600080601660009054906101000a90046001600160a01b03166001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015610e0857600080fd5b505afa158015610e1c573d6000803e3d6000fd5b505050506040513d60208110156106ec57600080fd5b6009546001600160a01b03163314610e7a576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b610e826125c2565b6040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600c5481565b6126ac81565b6000546001600160a01b031690565b6103e881565b600a5481565b6009546001600160a01b03163314610f1c576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6126ac821015610f73576040805162461bcd60e51b815260206004820152601a60248201527f5f7769746864726177466565466163746f7220746f6f206c6f77000000000000604482015290519081900360640190fd5b612710821115610fca576040805162461bcd60e51b815260206004820152601b60248201527f5f7769746864726177466565466163746f7220746f6f20686967680000000000604482015290519081900360640190fd5b6103e3811115611021576040805162461bcd60e51b815260206004820152601860248201527f5f736c697070616765466163746f7220746f6f20686967680000000000000000604482015290519081900360640190fd5b6103e861102e8585612221565b1115611081576040805162461bcd60e51b815260206004820152601960248201527f506572666f726d616e6365204665657320746f6f206869676800000000000000604482015290519081900360640190fd5b600c849055600e839055600f829055601081905560408051858152602081018590528082018490526060810183905290517fd9968429114ac80bd16723a205e45e46393aefba1f08fb7bdffbad9ef60946089181900360800190a150505050565b60026001541415611128576040805162461bcd60e51b815260206004820152601f6024820152600080516020613814833981519152604482015290519081900360640190fd5b600260018190555460ff1615611178576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6009546001600160a01b031633146111c0576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6111c8612ac6565b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b15801561121757600080fd5b505afa15801561122b573d6000803e3d6000fd5b505050506040513d602081101561124157600080fd5b50519050801561128a5761125481612b1c565b905061125f81612bd1565b6003546004549192506001600160a01b03918216911614156112805743600a555b611288612502565b505b60048054604080516370a0823160e01b81523093810193909352516001600160a01b03909116916370a08231916024808301926020929190829003018186803b1580156112d657600080fd5b505afa1580156112ea573d6000803e3d6000fd5b505050506040513d602081101561130057600080fd5b5051600254604080516370a0823160e01b815230600482015290519293506000926101009092046001600160a01b0316916370a0823191602480820192602092909190829003018186803b15801561135757600080fd5b505afa15801561136b573d6000803e3d6000fd5b505050506040513d602081101561138157600080fd5b5051905081158015906113aa57506002546004546001600160a01b039081166101009092041614155b156114145761141482601280548060200260200160405190810160405280929190818152602001828054801561140957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113eb575b505050505030612e3f565b60006114ae82600260019054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561147c57600080fd5b505afa158015611490573d6000803e3d6000fd5b505050506040513d60208110156114a657600080fd5b505190612ff9565b90506000811180156114d6575060035460025461010090046001600160a01b03908116911614155b1561154c5761153e816014805480602002602001604051908101604052809291908181526020018280548015610bec576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610bce57505050505030612705565b43600a5561154a612502565b505b600081118015611571575060035460025461010090046001600160a01b039081169116145b156115845743600a55611582612502565b505b50506001805550565b6103e381565b73374bd17c475f972d6af4ea0fac0744b5500a959f81565b6009546001600160a01b031633146115f3576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b600580546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f60e4061bd285fdfaf5632f986cc0e6897de9a7d69d3bcb415f3494bd59a6b0119181900360200190a150565b60165460175460408051631526fe2760e01b815260048101929092525160009283926001600160a01b0390911691631526fe279160248082019260c092909190829003018186803b15801561169b57600080fd5b505afa1580156116af573d6000803e3d6000fd5b505050506040513d60c08110156116c557600080fd5b506080015191505090565b6015818154811061070857fe5b6005546001600160a01b031681565b60026001541415611732576040805162461bcd60e51b815260206004820152601f6024820152600080516020613814833981519152604482015290519081900360640190fd5b600260018190555460ff1615611782576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b1580156117d157600080fd5b505afa1580156117e5573d6000803e3d6000fd5b505050506040513d60208110156117fb57600080fd5b50519050801580159061182457506002546004546001600160a01b039081166101009092041614155b1561188c5761188c816012805480602002602001604051908101604052809291908181526020018280548015611409576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116113eb57505050505030612e3f565b600254604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156118dc57600080fd5b505afa1580156118f0573d6000803e3d6000fd5b505050506040513d602081101561190657600080fd5b50519050801580159061193d575060025461010090046001600160a01b0316735c59d7cb794471a9633391c4927ade06b8787a9014155b156119bb576119bb81601380548060200260200160405190810160405280929190818152602001828054801561199c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161197e575b505050505073374bd17c475f972d6af4ea0fac0744b5500a959f61303b565b505060018055565b6009546001600160a01b03163314611a0b576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b600980546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f91a8c1cc2d4a3bb60738481947a00cbb9899c822916694cf8bb1d68172fdcd549181900360200190a150565b6004546001600160a01b031681565b60025461010090046001600160a01b031681565b6009546001600160a01b03163314611aca576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b600780546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5ac3cb3f33b7bc11c7fa004edf701aa44849e81382b4bb7bd7f80b354dedeabf9181900360200190a150565b735c59d7cb794471a9633391c4927ade06b8787a9081565b60175481565b611b446126a7565b6000546001600160a01b03908116911614611b94576040805162461bcd60e51b8152602060048201819052602482015260008051602061387b833981519152604482015290519081900360640190fd5b6001600160a01b038116611bd95760405162461bcd60e51b81526004018080602001828103825260268152602001806138346026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c3f6126a7565b6000546001600160a01b03908116911614611c8f576040805162461bcd60e51b8152602060048201819052602482015260008051602061387b833981519152604482015290519081900360640190fd5b60026001541415611cd5576040805162461bcd60e51b815260206004820152601f6024820152600080516020613814833981519152604482015290519081900360640190fd5b600260015582611d1e576040805162461bcd60e51b815260206004820152600f60248201526e05f6661726d6564416d74206973203608c1b604482015290519081900360640190fd5b600354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611d6957600080fd5b505afa158015611d7d573d6000803e3d6000fd5b505050506040513d6020811015611d9357600080fd5b5051905080841115611e2b57611db1611dac8583612ff9565b6131f5565b600354604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611dfc57600080fd5b505afa158015611e10573d6000803e3d6000fd5b505050506040513d6020811015611e2657600080fd5b505190505b80841115611e37578093505b611e3f610c5c565b841115611e5157611e4e610c5c565b93505b6000611e6c611e5e610c5c565b600b54610c25908890612a2b565b9050600b54811115611e7d5750600b545b600b54611e8a9082612ff9565b600b558415801590611eb257506002546003546001600160a01b039081166101009092041614155b15611f1a57611f1a856015805480602002602001604051908101604052809291908181526020018280548015610bec576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610bce57505050505030612705565b600254604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611f6a57600080fd5b505afa158015611f7e573d6000803e3d6000fd5b505050506040513d6020811015611f9457600080fd5b5051600f54909150600090611fb29061271090610c25908590612a2b565b90506000611fc08383612ff9565b600254909150611ff39061010090046001600160a01b0316731f7c88a37f7d0b36e7547e3a79c2d04f90531e7583613260565b600854600254612015916001600160a01b036101009092048216911684613260565b5060018055919791965090945050505050565b6003546001600160a01b031681565b6014818154811061070857fe5b60105481565b8015806120d0575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d60208110156120cc57600080fd5b5051155b61210b5760405162461bcd60e51b81526004018080602001828103825260368152602001806138c56036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261215d9084906132ae565b505050565b60006121c682856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015610cb457600080fd5b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905290915061221b9085906132ae565b50505050565b60008282018381101561227b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6060612293848460008561335f565b949350505050565b60035460025461010090046001600160a01b0390811691161415612300576016546002546122dc916001600160a01b0361010090920482169116600061204a565b601654600254612300916001600160a01b0361010090920482169116600019612162565b60035460025461010090046001600160a01b0390811691161461235a5760165460035461233b916001600160a01b039182169116600061204a565b60165460035461235a916001600160a01b039182169116600019612162565b600554600454612378916001600160a01b039182169116600061204a565b600554600454612397916001600160a01b039182169116600019612162565b6006546002546123ba916001600160a01b0361010090920482169116600061204a565b6006546002546123de916001600160a01b0361010090920482169116600019612162565b6006546003546123fc916001600160a01b039182169116600061204a565b60065460035461241b916001600160a01b039182169116600019612162565b60075460025461243e916001600160a01b0361010090920482169116600061204a565b600754600254612462916001600160a01b0361010090920482169116600019612162565b565b60025460ff166124b2576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6124e56126a7565b604080516001600160a01b039092168252519081900360200190a1565b600354604080516370a0823160e01b8152306004820152905160009283926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561255257600080fd5b505afa158015612566573d6000803e3d6000fd5b505050506040513d602081101561257c57600080fd5b505190508061258f5760009150506106f2565b600061259961066d565b90506125a48261350a565b60006125ae61066d565b90506125ba8183612ff9565b935050505090565b60025460ff161561260d576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124e56126a7565b60165460175460408051632989754760e11b81526004810192909252516001600160a01b0390921691635312ea8e9160248082019260009290919082900301818387803b15801561269357600080fd5b505af115801561221b573d6000803e3d6000fd5b3390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261221b9085906132ae565b6006546040805163d06ca61f60e01b815260048101868152602482019283528551604483015285516060946001600160a01b03169363d06ca61f9389938993909291606401906020808601910280838360005b83811015612770578181015183820152602001612758565b50505050905001935050505060006040518083038186803b15801561279457600080fd5b505afa1580156127a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156127d157600080fd5b8101908080516040519392919084600160201b8211156127f057600080fd5b90830190602082018581111561280557600080fd5b82518660208202830111600160201b8211171561282157600080fd5b82525081516020918201928201910280838360005b8381101561284e578181015183820152602001612836565b50505050905001604052505050905060008161287560018451612ff990919063ffffffff16565b8151811061287f57fe5b602002602001015190506000851115612a24576006546010546001600160a01b03909116906338ed17399087906128bf906103e890610c25908790612a2b565b8787426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561293257818101518382015260200161291a565b505050509050019650505050505050600060405180830381600087803b15801561295b57600080fd5b505af115801561296f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561299857600080fd5b8101908080516040519392919084600160201b8211156129b757600080fd5b9083019060208201858111156129cc57600080fd5b82518660208202830111600160201b821117156129e857600080fd5b82525081516020918201928201910280838360005b83811015612a155781810151838201526020016129fd565b50505050905001604052505050505b5050505050565b600082612a3a5750600061227e565b82820282848281612a4757fe5b041461227b5760405162461bcd60e51b815260040180806020018281038252602181526020018061385a6021913960400191505060405180910390fd5b600061227b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613561565b60165460175460408051630441a3e760e41b8152600481019290925260006024830181905290516001600160a01b039093169263441a3e7092604480820193929182900301818387803b15801561269357600080fd5b600c5460009015612bcd576000612b44612710610c25600c5486612a2b90919063ffffffff16565b9050612bbf816011805480602002602001604051908101604052809291908181526020018280548015612ba057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612b82575b5050505050731f7c88a37f7d0b36e7547e3a79c2d04f90531e756135c6565b612bc98382612ff9565b9250505b5090565b600e5460009015612bcd576000612bf9612710610c25600e5486612a2b90919063ffffffff16565b9050612c5e816012805480602002602001604051908101604052809291908181526020018280548015611409576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116113eb57505050505030612e3f565b600254604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612cae57600080fd5b505afa158015612cc2573d6000803e3d6000fd5b505050506040513d6020811015612cd857600080fd5b50516013805460408051602083810282018101909252828152939450612d4293859390929091830182828015612d3757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612d19575b50505050503061303b565b604080516370a0823160e01b81523060048201529051600091735c59d7cb794471a9633391c4927ade06b8787a90916370a0823191602480820192602092909190829003018186803b158015612d9757600080fd5b505afa158015612dab573d6000803e3d6000fd5b505050506040513d6020811015612dc157600080fd5b50519050612e0473374bd17c475f972d6af4ea0fac0744b5500a959f612de8836004612a84565b735c59d7cb794471a9633391c4927ade06b8787a909190613260565b612e2c7341c4dfa389e8c43ba6220aa62021ed246d441306612de86004610c25856003612a2b565b612e368584612ff9565b95945050505050565b6005546040805163d06ca61f60e01b815260048101868152602482019283528551604483015285516060946001600160a01b03169363d06ca61f9389938993909291606401906020808601910280838360005b83811015612eaa578181015183820152602001612e92565b50505050905001935050505060006040518083038186803b158015612ece57600080fd5b505afa158015612ee2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612f0b57600080fd5b8101908080516040519392919084600160201b821115612f2a57600080fd5b908301906020820185811115612f3f57600080fd5b82518660208202830111600160201b82111715612f5b57600080fd5b82525081516020918201928201910280838360005b83811015612f88578181015183820152602001612f70565b505050509050016040525050509050600081612faf60018451612ff990919063ffffffff16565b81518110612fb957fe5b602002602001015190506000851115612a24576005546010546001600160a01b03909116906338ed17399087906128bf906103e890610c25908790612a2b565b600061227b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613780565b6007546040805163d06ca61f60e01b815260048101868152602482019283528551604483015285516060946001600160a01b03169363d06ca61f9389938993909291606401906020808601910280838360005b838110156130a657818101518382015260200161308e565b50505050905001935050505060006040518083038186803b1580156130ca57600080fd5b505afa1580156130de573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561310757600080fd5b8101908080516040519392919084600160201b82111561312657600080fd5b90830190602082018581111561313b57600080fd5b82518660208202830111600160201b8211171561315757600080fd5b82525081516020918201928201910280838360005b8381101561318457818101518382015260200161316c565b5050505090500160405250505090506000816131ab60018451612ff990919063ffffffff16565b815181106131b557fe5b602002602001015190506000851115612a24576007546010546001600160a01b03909116906338ed17399087906128bf906103e890610c25908790612a2b565b60165460175460408051630441a3e760e41b8152600481019290925260248201849052516001600160a01b039092169163441a3e709160448082019260009290919082900301818387803b15801561324c57600080fd5b505af1158015612a24573d6000803e3d6000fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261215d9084905b6060613303826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122849092919063ffffffff16565b80519091501561215d5780806020019051602081101561332257600080fd5b505161215d5760405162461bcd60e51b815260040180806020018281038252602a81526020018061389b602a913960400191505060405180910390fd5b606061336a856137da565b6133bb576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106133fa5780518252601f1990920191602091820191016133db565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461345c576040519150601f19603f3d011682016040523d82523d6000602084013e613461565b606091505b509150915081156134755791506122939050565b8051156134855780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134cf5781810151838201526020016134b7565b50505050905090810190601f1680156134fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60165460175460408051631c57762b60e31b8152600481019290925260248201849052516001600160a01b039092169163e2bbb1589160448082019260009290919082900301818387803b15801561324c57600080fd5b600081836135b05760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156134cf5781810151838201526020016134b7565b5060008385816135bc57fe5b0495945050505050565b6005546040805163d06ca61f60e01b815260048101868152602482019283528551604483015285516060946001600160a01b03169363d06ca61f9389938993909291606401906020808601910280838360005b83811015613631578181015183820152602001613619565b50505050905001935050505060006040518083038186803b15801561365557600080fd5b505afa158015613669573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561369257600080fd5b8101908080516040519392919084600160201b8211156136b157600080fd5b9083019060208201858111156136c657600080fd5b82518660208202830111600160201b821117156136e257600080fd5b82525081516020918201928201910280838360005b8381101561370f5781810151838201526020016136f7565b50505050905001604052505050905060008161373660018451612ff990919063ffffffff16565b8151811061374057fe5b602002602001015190506000851115612a24576005546010546001600160a01b03909116906318cbafe59087906128bf906103e890610c25908790612a2b565b600081848411156137d25760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156134cf5781810151838201526020016134b7565b505050900390565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061229357505015159291505056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220be61226b45e92bf9bcefc70850bfec56095c22315000e23ba402751f027e60b164736f6c634300060c00334f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737377616e744164647265737320616e64206561726e6564416464726573732063616e6e6f74206265207468652073616d658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000000000ff9d4d65f48633a1dc801b1cbe2ac5a6ecbe2e0d00000000000000000000000036e3937e28abc91c31a91ffd7b20a87b370016a90000000000000000000000000000000000000000000000000000000000000006000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff0000000000000000000000005c6ec38fb0e2609672bdf628b1fd605a523e59230000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd60000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd60000000000000000000000009e9ced60d3c5d52dd779893dce0c14e0e361d70200000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000020000000000000000000000009e9ced60d3c5d52dd779893dce0c14e0e361d7020000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127000000000000000000000000000000000000000000000000000000000000000030000000000000000000000009e9ced60d3c5d52dd779893dce0c14e0e361d7020000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd600000000000000000000000000000000000000000000000000000000000000030000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd60000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f6190000000000000000000000005c59d7cb794471a9633391c4927ade06b8787a9000000000000000000000000000000000000000000000000000000000000000020000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd60000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd600000000000000000000000000000000000000000000000000000000000000020000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd60000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd6
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061030c5760003560e01c806385f02dd61161019d578063cef8577f116100e9578063f1068454116100a2578063f8d0eb0e1161007c578063f8d0eb0e14610640578063fc616ae214610648578063ffbd3b1f14610665578063ffbe9f1e146104505761030c565b8063f1068454146105cd578063f2fde38b146105d5578063f3fef3a3146105fb5761030c565b8063cef8577f14610561578063cfad57a214610569578063e71984741461058f578063e7a0367914610597578063ec2554ec1461059f578063efe83dbd146105c55761030c565b8063b1122b5c11610156578063c8154eb611610130578063c8154eb6146104f7578063c9f7b2f01461051d578063cc1ef5ac1461053c578063ccdfa6c9146105595761030c565b8063b1122b5c146104df578063b74cd242146104e7578063c5f956af146104ef5761030c565b806385f02dd614610488578063866b2018146104905780638da5cb5b146104985780638fefda06146104a05780639456b9ff146104a8578063a086f091146104b05761030c565b806346008a071161025c57806367057b6c11610215578063788bff68116101ef578063788bff68146104685780637b0a47ee146104705780637e78ddb6146104785780638456cb59146104805761030c565b806367057b6c1461045057806368f5416214610458578063715018a6146104605761030c565b806346008a07146103e85780634700d305146103f057806347e7ef24146103f857806353f17840146104245780635c379eef1461042c5780635c975abb146104345761030c565b806338946a8c116102c957806341275358116102a357806341275358146103c85780634140ed09146103d057806341982c7e146103d857806344a3955e146103e05761030c565b806338946a8c1461039b5780633f4ba83a146103b857806340c34b58146103c05761030c565b80631666fc7f14610311578063178a8d071461032b578063260ab48c146103335780632a2275001461036c57806332b0641f146103745780633505b09f14610391575b600080fd5b61031961066d565b60408051918252519081900360200190f35b6103196106f5565b6103506004803603602081101561034957600080fd5b50356106fb565b604080516001600160a01b039092168252519081900360200190f35b610350610722565b6103506004803603602081101561038a57600080fd5b5035610731565b61039961073e565b005b610350600480360360208110156103b157600080fd5b50356107b9565b6103996107c6565b61035061084a565b610350610862565b61035061087a565b610319610889565b610319610912565b610350610918565b610399610927565b6103196004803603604081101561040e57600080fd5b506001600160a01b0381351690602001356109cd565b610350610c4d565b610319610c5c565b61043c610ceb565b604080519115158252519081900360200190f35b610319610cf4565b610319610cfa565b610399610d00565b610350610da2565b610319610db1565b610319610db7565b610399610e32565b610319610ead565b610319610eb3565b610350610eb9565b610319610ec8565b610319610ece565b610399600480360360808110156104c657600080fd5b5080359060208101359060408101359060600135610ed4565b6103996110e2565b61031961158d565b610350611593565b6103996004803603602081101561050d57600080fd5b50356001600160a01b03166115ab565b610525611647565b6040805161ffff9092168252519081900360200190f35b6103506004803603602081101561055257600080fd5b50356116d0565b6103506116dd565b6103996116ec565b6103996004803603602081101561057f57600080fd5b50356001600160a01b03166119c3565b610350611a5f565b610350611a6e565b610399600480360360208110156105b557600080fd5b50356001600160a01b0316611a82565b610350611b1e565b610319611b36565b610399600480360360208110156105eb57600080fd5b50356001600160a01b0316611b3c565b6106276004803603604081101561061157600080fd5b506001600160a01b038135169060200135611c34565b6040805192835260208301919091528051918290030190f35b610350612028565b6103506004803603602081101561065e57600080fd5b5035612037565b610319612044565b601654601754604080516393f1a40b60e01b81526004810192909252306024830152805160009384936001600160a01b03909116926393f1a40b92604480840193829003018186803b1580156106c257600080fd5b505afa1580156106d6573d6000803e3d6000fd5b505050506040513d60408110156106ec57600080fd5b50519150505b90565b600e5481565b6011818154811061070857fe5b6000918252602090912001546001600160a01b0316905081565b6008546001600160a01b031681565b6013818154811061070857fe5b6009546001600160a01b03163314610786576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b61078e61229b565b6040517ff02d1f4fa39e3ca09cf6e4274f9790281a3249d378ee354cdb1fa66ce71c421d90600090a1565b6012818154811061070857fe5b6009546001600160a01b0316331461080e576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b610816612464565b61081e612502565b506040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b7341c4dfa389e8c43ba6220aa62021ed246d44130681565b731f7c88a37f7d0b36e7547e3a79c2d04f90531e7581565b6007546001600160a01b031681565b60165460175460408051631526fe2760e01b815260048101929092525160009283926001600160a01b0390911691631526fe279160248082019260c092909190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d60c081101561090757600080fd5b506020015191505090565b600b5481565b6009546001600160a01b031681565b6009546001600160a01b0316331461096f576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6109776125c2565b61097f612643565b6006546002546109a2916001600160a01b0361010090920482169116600061204a565b6040517ffc838efe7ea0b14d93cb78df90e970953d483f8eeb8af7c95dde440924fd7c1290600090a1565b60006109d76126a7565b6000546001600160a01b03908116911614610a27576040805162461bcd60e51b8152602060048201819052602482015260008051602061387b833981519152604482015290519081900360640190fd5b60026001541415610a6d576040805162461bcd60e51b815260206004820152601f6024820152600080516020613814833981519152604482015290519081900360640190fd5b600260018190555460ff1615610abd576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000610ac7610c5c565b600254909150610ae79061010090046001600160a01b03163330866126ab565b600254604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610b3757600080fd5b505afa158015610b4b573d6000803e3d6000fd5b505050506040513d6020811015610b6157600080fd5b5051905080610b7557600092505050610c43565b60035460025461010090046001600160a01b03908116911614610bf757610bf7816014805480602002602001604051908101604052809291908181526020018280548015610bec57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bce575b505050505030612705565b6000610c01612502565b600b5490915015610c2e57610c2b83610c25600b5484612a2b90919063ffffffff16565b90612a84565b90505b600b54610c3b9082612221565b600b55925050505b6001805592915050565b6006546001600160a01b031681565b6000610ce6610c6961066d565b600354604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610cb457600080fd5b505afa158015610cc8573d6000803e3d6000fd5b505050506040513d6020811015610cde57600080fd5b505190612221565b905090565b60025460ff1690565b61271081565b600f5481565b610d086126a7565b6000546001600160a01b03908116911614610d58576040805162461bcd60e51b8152602060048201819052602482015260008051602061387b833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6016546001600160a01b031681565b600d5481565b600080601660009054906101000a90046001600160a01b03166001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015610e0857600080fd5b505afa158015610e1c573d6000803e3d6000fd5b505050506040513d60208110156106ec57600080fd5b6009546001600160a01b03163314610e7a576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b610e826125c2565b6040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600c5481565b6126ac81565b6000546001600160a01b031690565b6103e881565b600a5481565b6009546001600160a01b03163314610f1c576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6126ac821015610f73576040805162461bcd60e51b815260206004820152601a60248201527f5f7769746864726177466565466163746f7220746f6f206c6f77000000000000604482015290519081900360640190fd5b612710821115610fca576040805162461bcd60e51b815260206004820152601b60248201527f5f7769746864726177466565466163746f7220746f6f20686967680000000000604482015290519081900360640190fd5b6103e3811115611021576040805162461bcd60e51b815260206004820152601860248201527f5f736c697070616765466163746f7220746f6f20686967680000000000000000604482015290519081900360640190fd5b6103e861102e8585612221565b1115611081576040805162461bcd60e51b815260206004820152601960248201527f506572666f726d616e6365204665657320746f6f206869676800000000000000604482015290519081900360640190fd5b600c849055600e839055600f829055601081905560408051858152602081018590528082018490526060810183905290517fd9968429114ac80bd16723a205e45e46393aefba1f08fb7bdffbad9ef60946089181900360800190a150505050565b60026001541415611128576040805162461bcd60e51b815260206004820152601f6024820152600080516020613814833981519152604482015290519081900360640190fd5b600260018190555460ff1615611178576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6009546001600160a01b031633146111c0576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6111c8612ac6565b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b15801561121757600080fd5b505afa15801561122b573d6000803e3d6000fd5b505050506040513d602081101561124157600080fd5b50519050801561128a5761125481612b1c565b905061125f81612bd1565b6003546004549192506001600160a01b03918216911614156112805743600a555b611288612502565b505b60048054604080516370a0823160e01b81523093810193909352516001600160a01b03909116916370a08231916024808301926020929190829003018186803b1580156112d657600080fd5b505afa1580156112ea573d6000803e3d6000fd5b505050506040513d602081101561130057600080fd5b5051600254604080516370a0823160e01b815230600482015290519293506000926101009092046001600160a01b0316916370a0823191602480820192602092909190829003018186803b15801561135757600080fd5b505afa15801561136b573d6000803e3d6000fd5b505050506040513d602081101561138157600080fd5b5051905081158015906113aa57506002546004546001600160a01b039081166101009092041614155b156114145761141482601280548060200260200160405190810160405280929190818152602001828054801561140957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113eb575b505050505030612e3f565b60006114ae82600260019054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561147c57600080fd5b505afa158015611490573d6000803e3d6000fd5b505050506040513d60208110156114a657600080fd5b505190612ff9565b90506000811180156114d6575060035460025461010090046001600160a01b03908116911614155b1561154c5761153e816014805480602002602001604051908101604052809291908181526020018280548015610bec576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610bce57505050505030612705565b43600a5561154a612502565b505b600081118015611571575060035460025461010090046001600160a01b039081169116145b156115845743600a55611582612502565b505b50506001805550565b6103e381565b73374bd17c475f972d6af4ea0fac0744b5500a959f81565b6009546001600160a01b031633146115f3576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b600580546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f60e4061bd285fdfaf5632f986cc0e6897de9a7d69d3bcb415f3494bd59a6b0119181900360200190a150565b60165460175460408051631526fe2760e01b815260048101929092525160009283926001600160a01b0390911691631526fe279160248082019260c092909190829003018186803b15801561169b57600080fd5b505afa1580156116af573d6000803e3d6000fd5b505050506040513d60c08110156116c557600080fd5b506080015191505090565b6015818154811061070857fe5b6005546001600160a01b031681565b60026001541415611732576040805162461bcd60e51b815260206004820152601f6024820152600080516020613814833981519152604482015290519081900360640190fd5b600260018190555460ff1615611782576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b1580156117d157600080fd5b505afa1580156117e5573d6000803e3d6000fd5b505050506040513d60208110156117fb57600080fd5b50519050801580159061182457506002546004546001600160a01b039081166101009092041614155b1561188c5761188c816012805480602002602001604051908101604052809291908181526020018280548015611409576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116113eb57505050505030612e3f565b600254604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156118dc57600080fd5b505afa1580156118f0573d6000803e3d6000fd5b505050506040513d602081101561190657600080fd5b50519050801580159061193d575060025461010090046001600160a01b0316735c59d7cb794471a9633391c4927ade06b8787a9014155b156119bb576119bb81601380548060200260200160405190810160405280929190818152602001828054801561199c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161197e575b505050505073374bd17c475f972d6af4ea0fac0744b5500a959f61303b565b505060018055565b6009546001600160a01b03163314611a0b576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b600980546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f91a8c1cc2d4a3bb60738481947a00cbb9899c822916694cf8bb1d68172fdcd549181900360200190a150565b6004546001600160a01b031681565b60025461010090046001600160a01b031681565b6009546001600160a01b03163314611aca576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b600780546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5ac3cb3f33b7bc11c7fa004edf701aa44849e81382b4bb7bd7f80b354dedeabf9181900360200190a150565b735c59d7cb794471a9633391c4927ade06b8787a9081565b60175481565b611b446126a7565b6000546001600160a01b03908116911614611b94576040805162461bcd60e51b8152602060048201819052602482015260008051602061387b833981519152604482015290519081900360640190fd5b6001600160a01b038116611bd95760405162461bcd60e51b81526004018080602001828103825260268152602001806138346026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c3f6126a7565b6000546001600160a01b03908116911614611c8f576040805162461bcd60e51b8152602060048201819052602482015260008051602061387b833981519152604482015290519081900360640190fd5b60026001541415611cd5576040805162461bcd60e51b815260206004820152601f6024820152600080516020613814833981519152604482015290519081900360640190fd5b600260015582611d1e576040805162461bcd60e51b815260206004820152600f60248201526e05f6661726d6564416d74206973203608c1b604482015290519081900360640190fd5b600354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611d6957600080fd5b505afa158015611d7d573d6000803e3d6000fd5b505050506040513d6020811015611d9357600080fd5b5051905080841115611e2b57611db1611dac8583612ff9565b6131f5565b600354604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611dfc57600080fd5b505afa158015611e10573d6000803e3d6000fd5b505050506040513d6020811015611e2657600080fd5b505190505b80841115611e37578093505b611e3f610c5c565b841115611e5157611e4e610c5c565b93505b6000611e6c611e5e610c5c565b600b54610c25908890612a2b565b9050600b54811115611e7d5750600b545b600b54611e8a9082612ff9565b600b558415801590611eb257506002546003546001600160a01b039081166101009092041614155b15611f1a57611f1a856015805480602002602001604051908101604052809291908181526020018280548015610bec576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610bce57505050505030612705565b600254604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611f6a57600080fd5b505afa158015611f7e573d6000803e3d6000fd5b505050506040513d6020811015611f9457600080fd5b5051600f54909150600090611fb29061271090610c25908590612a2b565b90506000611fc08383612ff9565b600254909150611ff39061010090046001600160a01b0316731f7c88a37f7d0b36e7547e3a79c2d04f90531e7583613260565b600854600254612015916001600160a01b036101009092048216911684613260565b5060018055919791965090945050505050565b6003546001600160a01b031681565b6014818154811061070857fe5b60105481565b8015806120d0575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d60208110156120cc57600080fd5b5051155b61210b5760405162461bcd60e51b81526004018080602001828103825260368152602001806138c56036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261215d9084906132ae565b505050565b60006121c682856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015610cb457600080fd5b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905290915061221b9085906132ae565b50505050565b60008282018381101561227b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6060612293848460008561335f565b949350505050565b60035460025461010090046001600160a01b0390811691161415612300576016546002546122dc916001600160a01b0361010090920482169116600061204a565b601654600254612300916001600160a01b0361010090920482169116600019612162565b60035460025461010090046001600160a01b0390811691161461235a5760165460035461233b916001600160a01b039182169116600061204a565b60165460035461235a916001600160a01b039182169116600019612162565b600554600454612378916001600160a01b039182169116600061204a565b600554600454612397916001600160a01b039182169116600019612162565b6006546002546123ba916001600160a01b0361010090920482169116600061204a565b6006546002546123de916001600160a01b0361010090920482169116600019612162565b6006546003546123fc916001600160a01b039182169116600061204a565b60065460035461241b916001600160a01b039182169116600019612162565b60075460025461243e916001600160a01b0361010090920482169116600061204a565b600754600254612462916001600160a01b0361010090920482169116600019612162565b565b60025460ff166124b2576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6124e56126a7565b604080516001600160a01b039092168252519081900360200190a1565b600354604080516370a0823160e01b8152306004820152905160009283926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561255257600080fd5b505afa158015612566573d6000803e3d6000fd5b505050506040513d602081101561257c57600080fd5b505190508061258f5760009150506106f2565b600061259961066d565b90506125a48261350a565b60006125ae61066d565b90506125ba8183612ff9565b935050505090565b60025460ff161561260d576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124e56126a7565b60165460175460408051632989754760e11b81526004810192909252516001600160a01b0390921691635312ea8e9160248082019260009290919082900301818387803b15801561269357600080fd5b505af115801561221b573d6000803e3d6000fd5b3390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261221b9085906132ae565b6006546040805163d06ca61f60e01b815260048101868152602482019283528551604483015285516060946001600160a01b03169363d06ca61f9389938993909291606401906020808601910280838360005b83811015612770578181015183820152602001612758565b50505050905001935050505060006040518083038186803b15801561279457600080fd5b505afa1580156127a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156127d157600080fd5b8101908080516040519392919084600160201b8211156127f057600080fd5b90830190602082018581111561280557600080fd5b82518660208202830111600160201b8211171561282157600080fd5b82525081516020918201928201910280838360005b8381101561284e578181015183820152602001612836565b50505050905001604052505050905060008161287560018451612ff990919063ffffffff16565b8151811061287f57fe5b602002602001015190506000851115612a24576006546010546001600160a01b03909116906338ed17399087906128bf906103e890610c25908790612a2b565b8787426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561293257818101518382015260200161291a565b505050509050019650505050505050600060405180830381600087803b15801561295b57600080fd5b505af115801561296f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561299857600080fd5b8101908080516040519392919084600160201b8211156129b757600080fd5b9083019060208201858111156129cc57600080fd5b82518660208202830111600160201b821117156129e857600080fd5b82525081516020918201928201910280838360005b83811015612a155781810151838201526020016129fd565b50505050905001604052505050505b5050505050565b600082612a3a5750600061227e565b82820282848281612a4757fe5b041461227b5760405162461bcd60e51b815260040180806020018281038252602181526020018061385a6021913960400191505060405180910390fd5b600061227b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613561565b60165460175460408051630441a3e760e41b8152600481019290925260006024830181905290516001600160a01b039093169263441a3e7092604480820193929182900301818387803b15801561269357600080fd5b600c5460009015612bcd576000612b44612710610c25600c5486612a2b90919063ffffffff16565b9050612bbf816011805480602002602001604051908101604052809291908181526020018280548015612ba057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612b82575b5050505050731f7c88a37f7d0b36e7547e3a79c2d04f90531e756135c6565b612bc98382612ff9565b9250505b5090565b600e5460009015612bcd576000612bf9612710610c25600e5486612a2b90919063ffffffff16565b9050612c5e816012805480602002602001604051908101604052809291908181526020018280548015611409576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116113eb57505050505030612e3f565b600254604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612cae57600080fd5b505afa158015612cc2573d6000803e3d6000fd5b505050506040513d6020811015612cd857600080fd5b50516013805460408051602083810282018101909252828152939450612d4293859390929091830182828015612d3757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612d19575b50505050503061303b565b604080516370a0823160e01b81523060048201529051600091735c59d7cb794471a9633391c4927ade06b8787a90916370a0823191602480820192602092909190829003018186803b158015612d9757600080fd5b505afa158015612dab573d6000803e3d6000fd5b505050506040513d6020811015612dc157600080fd5b50519050612e0473374bd17c475f972d6af4ea0fac0744b5500a959f612de8836004612a84565b735c59d7cb794471a9633391c4927ade06b8787a909190613260565b612e2c7341c4dfa389e8c43ba6220aa62021ed246d441306612de86004610c25856003612a2b565b612e368584612ff9565b95945050505050565b6005546040805163d06ca61f60e01b815260048101868152602482019283528551604483015285516060946001600160a01b03169363d06ca61f9389938993909291606401906020808601910280838360005b83811015612eaa578181015183820152602001612e92565b50505050905001935050505060006040518083038186803b158015612ece57600080fd5b505afa158015612ee2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612f0b57600080fd5b8101908080516040519392919084600160201b821115612f2a57600080fd5b908301906020820185811115612f3f57600080fd5b82518660208202830111600160201b82111715612f5b57600080fd5b82525081516020918201928201910280838360005b83811015612f88578181015183820152602001612f70565b505050509050016040525050509050600081612faf60018451612ff990919063ffffffff16565b81518110612fb957fe5b602002602001015190506000851115612a24576005546010546001600160a01b03909116906338ed17399087906128bf906103e890610c25908790612a2b565b600061227b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613780565b6007546040805163d06ca61f60e01b815260048101868152602482019283528551604483015285516060946001600160a01b03169363d06ca61f9389938993909291606401906020808601910280838360005b838110156130a657818101518382015260200161308e565b50505050905001935050505060006040518083038186803b1580156130ca57600080fd5b505afa1580156130de573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561310757600080fd5b8101908080516040519392919084600160201b82111561312657600080fd5b90830190602082018581111561313b57600080fd5b82518660208202830111600160201b8211171561315757600080fd5b82525081516020918201928201910280838360005b8381101561318457818101518382015260200161316c565b5050505090500160405250505090506000816131ab60018451612ff990919063ffffffff16565b815181106131b557fe5b602002602001015190506000851115612a24576007546010546001600160a01b03909116906338ed17399087906128bf906103e890610c25908790612a2b565b60165460175460408051630441a3e760e41b8152600481019290925260248201849052516001600160a01b039092169163441a3e709160448082019260009290919082900301818387803b15801561324c57600080fd5b505af1158015612a24573d6000803e3d6000fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261215d9084905b6060613303826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122849092919063ffffffff16565b80519091501561215d5780806020019051602081101561332257600080fd5b505161215d5760405162461bcd60e51b815260040180806020018281038252602a81526020018061389b602a913960400191505060405180910390fd5b606061336a856137da565b6133bb576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106133fa5780518252601f1990920191602091820191016133db565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461345c576040519150601f19603f3d011682016040523d82523d6000602084013e613461565b606091505b509150915081156134755791506122939050565b8051156134855780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134cf5781810151838201526020016134b7565b50505050905090810190601f1680156134fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60165460175460408051631c57762b60e31b8152600481019290925260248201849052516001600160a01b039092169163e2bbb1589160448082019260009290919082900301818387803b15801561324c57600080fd5b600081836135b05760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156134cf5781810151838201526020016134b7565b5060008385816135bc57fe5b0495945050505050565b6005546040805163d06ca61f60e01b815260048101868152602482019283528551604483015285516060946001600160a01b03169363d06ca61f9389938993909291606401906020808601910280838360005b83811015613631578181015183820152602001613619565b50505050905001935050505060006040518083038186803b15801561365557600080fd5b505afa158015613669573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561369257600080fd5b8101908080516040519392919084600160201b8211156136b157600080fd5b9083019060208201858111156136c657600080fd5b82518660208202830111600160201b821117156136e257600080fd5b82525081516020918201928201910280838360005b8381101561370f5781810151838201526020016136f7565b50505050905001604052505050905060008161373660018451612ff990919063ffffffff16565b8151811061374057fe5b602002602001015190506000851115612a24576005546010546001600160a01b03909116906318cbafe59087906128bf906103e890610c25908790612a2b565b600081848411156137d25760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156134cf5781810151838201526020016134b7565b505050900390565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061229357505015159291505056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220be61226b45e92bf9bcefc70850bfec56095c22315000e23ba402751f027e60b164736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ff9d4d65f48633a1dc801b1cbe2ac5a6ecbe2e0d00000000000000000000000036e3937e28abc91c31a91ffd7b20a87b370016a90000000000000000000000000000000000000000000000000000000000000006000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff0000000000000000000000005c6ec38fb0e2609672bdf628b1fd605a523e59230000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd60000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd60000000000000000000000009e9ced60d3c5d52dd779893dce0c14e0e361d70200000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000020000000000000000000000009e9ced60d3c5d52dd779893dce0c14e0e361d7020000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127000000000000000000000000000000000000000000000000000000000000000030000000000000000000000009e9ced60d3c5d52dd779893dce0c14e0e361d7020000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd600000000000000000000000000000000000000000000000000000000000000030000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd60000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f6190000000000000000000000005c59d7cb794471a9633391c4927ade06b8787a9000000000000000000000000000000000000000000000000000000000000000020000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd60000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd600000000000000000000000000000000000000000000000000000000000000020000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd60000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd6
-----Decoded View---------------
Arg [0] : _wormChefAddress (address): 0xff9D4d65F48633a1Dc801B1CbE2AC5a6eCBe2E0D
Arg [1] : _stakingRewardsAddress (address): 0x36e3937e28abC91c31A91Ffd7B20a87b370016A9
Arg [2] : _pid (uint256): 6
Arg [3] : _earnedRouterAddress (address): 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff
Arg [4] : _farmedRouterAddress (address): 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff
Arg [5] : _timeRouterAddress (address): 0x5C6EC38fb0e2609672BDf628B1fD605A523E5923
Arg [6] : _wantAddress (address): 0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6
Arg [7] : _farmedAddress (address): 0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6
Arg [8] : _earnedAddress (address): 0x9e9CEd60d3C5d52Dd779893dce0C14E0e361d702
Arg [9] : _earnedToWmaticPath (address[]): 0x9e9CEd60d3C5d52Dd779893dce0C14E0e361d702,0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270
Arg [10] : _earnedToWantPath (address[]): 0x9e9CEd60d3C5d52Dd779893dce0C14E0e361d702,0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174,0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6
Arg [11] : _wantToTimePath (address[]): 0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6,0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619,0x5c59D7Cb794471a9633391c4927ADe06B8787a90
Arg [12] : _wantToFarmedPath (address[]): 0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6,0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6
Arg [13] : _farmedToWantPath (address[]): 0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6,0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6
-----Encoded View---------------
31 Constructor Arguments found :
Arg [0] : 000000000000000000000000ff9d4d65f48633a1dc801b1cbe2ac5a6ecbe2e0d
Arg [1] : 00000000000000000000000036e3937e28abc91c31a91ffd7b20a87b370016a9
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [3] : 000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff
Arg [4] : 000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff
Arg [5] : 0000000000000000000000005c6ec38fb0e2609672bdf628b1fd605a523e5923
Arg [6] : 0000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd6
Arg [7] : 0000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd6
Arg [8] : 0000000000000000000000009e9ced60d3c5d52dd779893dce0c14e0e361d702
Arg [9] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [11] : 00000000000000000000000000000000000000000000000000000000000002a0
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000320
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000380
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [15] : 0000000000000000000000009e9ced60d3c5d52dd779893dce0c14e0e361d702
Arg [16] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [18] : 0000000000000000000000009e9ced60d3c5d52dd779893dce0c14e0e361d702
Arg [19] : 0000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa84174
Arg [20] : 0000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd6
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [22] : 0000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd6
Arg [23] : 0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619
Arg [24] : 0000000000000000000000005c59d7cb794471a9633391c4927ade06b8787a90
Arg [25] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [26] : 0000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd6
Arg [27] : 0000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd6
Arg [28] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [29] : 0000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd6
Arg [30] : 0000000000000000000000001bfd67037b42cf73acf2047067bd4f2c47d9bfd6
Deployed Bytecode Sourcemap
48274:5317:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50471:206;;;:::i;:::-;;;;;;;;;;;;;;;;34660:32;;;:::i;35152:35::-;;;;;;;;;;;;;;;;-1:-1:-1;35152:35:0;;:::i;:::-;;;;-1:-1:-1;;;;;35152:35:0;;;;;;;;;;;;;;34155:30;;;:::i;35234:31::-;;;;;;;;;;;;;;;;-1:-1:-1;35234:31:0;;:::i;41166:116::-;;;:::i;:::-;;35194:33;;;;;;;;;;;;;;;;-1:-1:-1;35194:33:0;;:::i;41384:110::-;;;:::i;34460:86::-;;;:::i;34034:79::-;;;:::i;33995:32::-;;;:::i;50872:173::-;;;:::i;34277:30::-;;;:::i;34192:25::-;;;:::i;41502:208::-;;;:::i;36360:1094::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36360:1094:0;;;;;;;;:::i;33954:34::-;;;:::i;50685:179::-;;;:::i;22913:78::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;34865:52;;;:::i;34795:39::-;;;:::i;17458:148::-;;;:::i;48409:36::-;;;:::i;34624:29::-;;;:::i;51234:197::-;;;:::i;41290:86::-;;;:::i;34583:34::-;;;:::i;34924:50::-;;;:::i;16816:79::-;;;:::i;34699:42::-;;;:::i;34226:44::-;;;:::i;41882:882::-;;;;;;;;;;;;;;;;-1:-1:-1;41882:882:0;;;;;;;;;;;;;;;;;:::i;46230:1956::-;;;:::i;35097:46::-;;;:::i;34316:84::-;;;:::i;53360:226::-;;;;;;;;;;;;;;;;-1:-1:-1;53360:226:0;-1:-1:-1;;;;;53360:226:0;;:::i;51053:173::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35312:33;;;;;;;;;;;;;;;;-1:-1:-1;35312:33:0;;:::i;33913:34::-;;;:::i;45315:647::-;;;:::i;41718:156::-;;;;;;;;;;;;;;;;-1:-1:-1;41718:156:0;-1:-1:-1;;;;;41718:156:0;;:::i;33876:28::-;;;:::i;33808:26::-;;;:::i;53140:214::-;;;;;;;;;;;;;;;;-1:-1:-1;53140:214:0;-1:-1:-1;;;;;53140:214:0;;:::i;33696:80::-;;;:::i;48452:18::-;;;:::i;17761:244::-;;;;;;;;;;;;;;;;-1:-1:-1;17761:244:0;-1:-1:-1;;;;;17761:244:0;;:::i;37828:1761::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37828:1761:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33841:28;;;:::i;35272:33::-;;;;;;;;;;;;;;;;-1:-1:-1;35272:33:0;;:::i;35022:35::-;;;:::i;50471:206::-;50588:21;;50620:3;;50576:63;;;-1:-1:-1;;;50576:63:0;;;;;;;;;50633:4;50576:63;;;;;;50530:7;;;;-1:-1:-1;;;;;50588:21:0;;;;50576:43;;:63;;;;;;;;;;50588:21;50576:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50576:63:0;;-1:-1:-1;;50471:206:0;;:::o;34660:32::-;;;;:::o;35152:35::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35152:35:0;;-1:-1:-1;35152:35:0;:::o;34155:30::-;;;-1:-1:-1;;;;;34155:30:0;;:::o;35234:31::-;;;;;;;;;;41166:116;35870:10;;-1:-1:-1;;;;;35870:10:0;35856;:24;35848:41;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;41221:18:::1;:16;:18::i;:::-;41257:17;::::0;::::1;::::0;;;::::1;41166:116::o:0;35194:33::-;;;;;;;;;;41384:110;35870:10;;-1:-1:-1;;;;;35870:10:0;35856;:24;35848:41;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;41431:10:::1;:8;:10::i;:::-;41452:7;:5;:7::i;:::-;-1:-1:-1::0;41477:9:0::1;::::0;::::1;::::0;;;::::1;41384:110::o:0;34460:86::-;34504:42;34460:86;:::o;34034:79::-;34071:42;34034:79;:::o;33995:32::-;;;-1:-1:-1;;;;;33995:32:0;;:::o;50872:173::-;50977:21;;51009:3;;50965:48;;;-1:-1:-1;;;50965:48:0;;;;;;;;;;50921:7;;;;-1:-1:-1;;;;;50977:21:0;;;;50965:43;;:48;;;;;;;;;;;;;;;50977:21;50965:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50965:48:0;;;;-1:-1:-1;;50872:173:0;:::o;34277:30::-;;;;:::o;34192:25::-;;;-1:-1:-1;;;;;34192:25:0;;:::o;41502:208::-;35870:10;;-1:-1:-1;;;;;35870:10:0;35856;:24;35848:41;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;41547:8:::1;:6;:8::i;:::-;41566:24;:22;:24::i;:::-;41635:19;::::0;41610:11:::1;::::0;41603:55:::1;::::0;-1:-1:-1;;;;;41635:19:0::1;41610:11:::0;;::::1;::::0;::::1;::::0;41635:19:::1;;41603:31;:55::i;:::-;41695:7;::::0;::::1;::::0;;;::::1;41502:208::o:0;36360:1094::-;36472:7;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17020:67:0;;;;;;;;;;;;;;;25879:1:::1;26485:7;;:19;;26477:63;;;::::0;;-1:-1:-1;;;26477:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26477:63:0;;;;;;;;;;;;;::::1;;25879:1;26618:7;:18:::0;;;23231:7;::::2;;23230:8;23222:37;;;::::0;;-1:-1:-1;;;23222:37:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;23222:37:0;;;;;;;;;;;;;::::2;;36537:26:::3;36566:19;:17;:19::i;:::-;36654:11;::::0;36537:48;;-1:-1:-1;36647:132:0::3;::::0;36654:11:::3;::::0;::::3;-1:-1:-1::0;;;;;36654:11:0::3;36706:10;36740:4;36760:8:::0;36647:36:::3;:132::i;:::-;36817:11;::::0;36810:44:::3;::::0;;-1:-1:-1;;;36810:44:0;;36848:4:::3;36810:44;::::0;::::3;::::0;;;-1:-1:-1;;36817:11:0::3;::::0;::::3;-1:-1:-1::0;;;;;36817:11:0::3;::::0;36810:29:::3;::::0;:44;;;;;::::3;::::0;;;;;;;;36817:11;36810:44;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;36810:44:0;;-1:-1:-1;36869:12:0;36865:26:::3;;36890:1;36883:8;;;;;;36865:26;36960:13;::::0;36945:11:::3;::::0;36960:13:::3;36945:11:::0;::::3;-1:-1:-1::0;;;;;36945:11:0;;::::3;36960:13:::0;::::3;36945:28;36941:170;;36988:111;37018:7;37040:16;36988:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;36988:111:0::3;::::0;;;;;::::3;::::0;::::3;;::::0;;::::3;;;;;;;;;37079:4;36988:15;:111::i;:::-;37207:19;37229:7;:5;:7::i;:::-;37253:11;::::0;37207:29;;-1:-1:-1;37253:15:0;37249:114:::3;;37299:52;37332:18;37299:28;37315:11;;37299;:15;;:28;;;;:::i;:::-;:32:::0;::::3;:52::i;:::-;37285:66;;37249:114;37387:11;::::0;:28:::3;::::0;37403:11;37387:15:::3;:28::i;:::-;37373:11;:42:::0;37435:11;-1:-1:-1;;;23270:1:0::3;25835::::1;26797:22:::0;;36360:1094;;-1:-1:-1;;36360:1094:0:o;33954:34::-;;;-1:-1:-1;;;;;33954:34:0;;:::o;50685:179::-;50744:7;50771:85;50836:19;:17;:19::i;:::-;50778:13;;50771:46;;;-1:-1:-1;;;50771:46:0;;50811:4;50771:46;;;;;;-1:-1:-1;;;;;50778:13:0;;;;50771:31;;:46;;;;;;;;;;;;;;;50778:13;50771:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50771:46:0;;:64;:85::i;:::-;50764:92;;50685:179;:::o;22913:78::-;22976:7;;;;22913:78;:::o;34865:52::-;34912:5;34865:52;:::o;34795:39::-;;;;:::o;17458:148::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17020:67:0;;;;;;;;;;;;;;;17565:1:::1;17549:6:::0;;17528:40:::1;::::0;-1:-1:-1;;;;;17549:6:0;;::::1;::::0;17528:40:::1;::::0;17565:1;;17528:40:::1;17596:1;17579:19:::0;;-1:-1:-1;;;;;;17579:19:0::1;::::0;;17458:148::o;48409:36::-;;;-1:-1:-1;;;;;48409:36:0;;:::o;34624:29::-;;;;:::o;51234:197::-;51296:7;51314:23;51352:21;;;;;;;;;-1:-1:-1;;;;;51352:21:0;-1:-1:-1;;;;;51340:50:0;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41290:86;35870:10;;-1:-1:-1;;;;;35870:10:0;35856;:24;35848:41;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;41335:8:::1;:6;:8::i;:::-;41361:7;::::0;::::1;::::0;;;::::1;41290:86::o:0;34583:34::-;;;;:::o;34924:50::-;34970:4;34924:50;:::o;16816:79::-;16854:7;16881:6;-1:-1:-1;;;;;16881:6:0;16816:79;:::o;34699:42::-;34737:4;34699:42;:::o;34226:44::-;;;;:::o;41882:882::-;35870:10;;-1:-1:-1;;;;;35870:10:0;35856;:24;35848:41;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;34970:4:::1;42081:18;:41;;42073:80;;;::::0;;-1:-1:-1;;;42073:80:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;34912:5;42172:18;:42;;42164:82;;;::::0;;-1:-1:-1;;;42164:82:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35140:3;42265:15;:35;;42257:72;;;::::0;;-1:-1:-1;;;42257:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;34737:4;42348:32;:14:::0;42367:12;42348:18:::1;:32::i;:::-;:47;;42340:85;;;::::0;;-1:-1:-1;;;42340:85:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;42438:13;:30:::0;;;42479:11:::1;:26:::0;;;42516:17:::1;:38:::0;;;42565:14:::1;:32:::0;;;42615:141:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;41882:882:::0;;;;:::o;46230:1956::-;25879:1;26485:7;;:19;;26477:63;;;;;-1:-1:-1;;;26477:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26477:63:0;;;;;;;;;;;;;;;25879:1;26618:7;:18;;;23231:7;::::1;;23230:8;23222:37;;;::::0;;-1:-1:-1;;;23222:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23222:37:0;;;;;;;;;;;;;::::1;;35870:10:::2;::::0;-1:-1:-1;;;;;35870:10:0::2;35856;:24;35848:41;;;::::0;;-1:-1:-1;;;35848:41:0;;::::2;;::::0;;::::2;::::0;;;;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;::::2;;46345:14:::3;:12;:14::i;:::-;46449:13;::::0;;46442:46:::3;::::0;;-1:-1:-1;;;46442:46:0;;46482:4:::3;46442:46:::0;;::::3;::::0;;;;;46422:17:::3;::::0;-1:-1:-1;;;;;46449:13:0;;::::3;::::0;46442:31:::3;::::0;:46;;;;;::::3;::::0;;;;;;;;46449:13;46442:46;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;46442:46:0;;-1:-1:-1;46505:13:0;;46501:334:::3;;46547:25;46562:9;46547:14;:25::i;:::-;46535:37;;46599:18;46607:9;46599:7;:18::i;:::-;46655:13;::::0;46638::::3;::::0;46587:30;;-1:-1:-1;;;;;;46638:13:0;;::::3;46655::::0;::::3;46638:30;46634:161;;;46783:12;46766:14;:29:::0;46634:161:::3;46812:7;:5;:7::i;:::-;;46501:334;46966:13;::::0;;46959:46:::3;::::0;;-1:-1:-1;;;46959:46:0;;46999:4:::3;46959:46:::0;;::::3;::::0;;;;;-1:-1:-1;;;;;46966:13:0;;::::3;::::0;46959:31:::3;::::0;:46;;;;;::::3;::::0;;;;;;;;46966:13;46959:46;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;46959:46:0;47049:11:::3;::::0;47042:44:::3;::::0;;-1:-1:-1;;;47042:44:0;;47080:4:::3;47042:44;::::0;::::3;::::0;;;46959:46;;-1:-1:-1;;;47049:11:0::3;::::0;;::::3;-1:-1:-1::0;;;;;47049:11:0::3;::::0;47042:29:::3;::::0;:44;;;;;46959:46:::3;::::0;47042:44;;;;;;;;47049:11;47042:44;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;47042:44:0;;-1:-1:-1;47105:13:0;;;;;:45:::3;;-1:-1:-1::0;47139:11:0::3;::::0;47122:13:::3;::::0;-1:-1:-1;;;;;47122:13:0;;::::3;47139:11;::::0;;::::3;;47122:28;;47105:45;47101:288;;;47232:141;47270:9;47302:16;47232:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;47232:141:0::3;::::0;;;;;::::3;::::0;::::3;;::::0;;::::3;;;;;;;;;47349:4;47232:15;:141::i;:::-;47403:18;47424:61;47473:11;47431;;;;;;;;;-1:-1:-1::0;;;;;47431:11:0::3;-1:-1:-1::0;;;;;47424:29:0::3;;47462:4;47424:44;;;;;;;;;;;;;-1:-1:-1::0;;;;;47424:44:0::3;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;47424:44:0;;:48:::3;:61::i;:::-;47403:82;;47605:1;47592:10;:14;:46;;;;-1:-1:-1::0;47625:13:0::3;::::0;47610:11:::3;::::0;47625:13:::3;47610:11:::0;::::3;-1:-1:-1::0;;;;;47610:11:0;;::::3;47625:13:::0;::::3;47610:28;;47592:46;47588:356;;;47710:142;47748:10;47781:16;47710:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;47710:142:0::3;::::0;;;;;::::3;::::0;::::3;;::::0;;::::3;;;;;;;;47828:4;47710:15;:142::i;:::-;47890:12;47873:14;:29:::0;47921:7:::3;:5;:7::i;:::-;;47588:356;48054:1;48041:10;:14;:46;;;;-1:-1:-1::0;48074:13:0::3;::::0;48059:11:::3;::::0;48074:13:::3;48059:11:::0;::::3;-1:-1:-1::0;;;;;48059:11:0;;::::3;48074:13:::0;::::3;48059:28;48041:46;48037:142;;;48125:12;48108:14;:29:::0;48156:7:::3;:5;:7::i;:::-;;48037:142;-1:-1:-1::0;;25835:1:0;26797:22;;-1:-1:-1;46230:1956:0:o;35097:46::-;35140:3;35097:46;:::o;34316:84::-;34358:42;34316:84;:::o;53360:226::-;35870:10;;-1:-1:-1;;;;;35870:10:0;35856;:24;35848:41;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;53450:19:::1;:42:::0;;-1:-1:-1;;;;;53450:42:0;::::1;-1:-1:-1::0;;;;;;53450:42:0;;::::1;::::0;::::1;::::0;;;53510:68:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;53360:226:::0;:::o;51053:173::-;51158:21;;51190:3;;51146:48;;;-1:-1:-1;;;51146:48:0;;;;;;;;;;51104:6;;;;-1:-1:-1;;;;;51158:21:0;;;;51146:43;;:48;;;;;;;;;;;;;;;51158:21;51146:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51146:48:0;;;;-1:-1:-1;;51053:173:0;:::o;35312:33::-;;;;;;;;;;33913:34;;;-1:-1:-1;;;;;33913:34:0;;:::o;45315:647::-;25879:1;26485:7;;:19;;26477:63;;;;;-1:-1:-1;;;26477:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26477:63:0;;;;;;;;;;;;;;;25879:1;26618:7;:18;;;23231:7;::::1;;23230:8;23222:37;;;::::0;;-1:-1:-1;;;23222:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23222:37:0;;;;;;;;;;;;;::::1;;45420:13:::2;::::0;;45413:46:::2;::::0;;-1:-1:-1;;;45413:46:0;;45453:4:::2;45413:46:::0;;::::2;::::0;;;;;45393:17:::2;::::0;-1:-1:-1;;;;;45420:13:0;;::::2;::::0;45413:31:::2;::::0;:46;;;;;::::2;::::0;;;;;;;;45420:13;45413:46;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;45413:46:0;;-1:-1:-1;45474:13:0;;;;;:45:::2;;-1:-1:-1::0;45508:11:0::2;::::0;45491:13:::2;::::0;-1:-1:-1;;;;;45491:13:0;;::::2;45508:11;::::0;;::::2;;45491:28;;45474:45;45470:203;;;45536:125;45570:9;45598:16;45536:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;45536:125:0::2;::::0;;;;;::::2;::::0;::::2;;::::0;;::::2;;;;;;;;45641:4;45536:15;:125::i;:::-;45710:11;::::0;45703:44:::2;::::0;;-1:-1:-1;;;45703:44:0;;45741:4:::2;45703:44;::::0;::::2;::::0;;;-1:-1:-1;;45710:11:0::2;::::0;::::2;-1:-1:-1::0;;;;;45710:11:0::2;::::0;45703:29:::2;::::0;:44;;;;;::::2;::::0;;;;;;;;45710:11;45703:44;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;45703:44:0;;-1:-1:-1;45762:11:0;;;;;:41:::2;;-1:-1:-1::0;45777:11:0::2;::::0;::::2;::::0;::::2;-1:-1:-1::0;;;;;45777:11:0::2;33734:42;45777:26;;45762:41;45758:195;;;45820:121;45852:7;45878:14;45820:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;45820:121:0::2;::::0;;;;;::::2;::::0;::::2;;::::0;;::::2;;;;;;;;;34358:42;45820:13;:121::i;:::-;-1:-1:-1::0;;25835:1:0;26797:22;;45315:647::o;41718:156::-;35870:10;;-1:-1:-1;;;;;35870:10:0;35856;:24;35848:41;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;41783:10:::1;:24:::0;;-1:-1:-1;;;;;41783:24:0;::::1;-1:-1:-1::0;;;;;;41783:24:0;;::::1;::::0;::::1;::::0;;;41825:41:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;41718:156:::0;:::o;33876:28::-;;;-1:-1:-1;;;;;33876:28:0;;:::o;33808:26::-;;;;;;-1:-1:-1;;;;;33808:26:0;;:::o;53140:214::-;35870:10;;-1:-1:-1;;;;;35870:10:0;35856;:24;35848:41;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;35848:41:0;;;;;;;;;;;;;;;53226:17:::1;:38:::0;;-1:-1:-1;;;;;53226:38:0;::::1;-1:-1:-1::0;;;;;;53226:38:0;;::::1;::::0;::::1;::::0;;;53282:64:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;53140:214:::0;:::o;33696:80::-;33734:42;33696:80;:::o;48452:18::-;;;;:::o;17761:244::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17020:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17850:22:0;::::1;17842:73;;;;-1:-1:-1::0;;;17842:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17952:6;::::0;;17931:38:::1;::::0;-1:-1:-1;;;;;17931:38:0;;::::1;::::0;17952:6;::::1;::::0;17931:38:::1;::::0;::::1;17980:6;:17:::0;;-1:-1:-1;;;;;;17980:17:0::1;-1:-1:-1::0;;;;;17980:17:0;;;::::1;::::0;;;::::1;::::0;;17761:244::o;37828:1761::-;37929:7;37938;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17020:67:0;;;;;;;;;;;;;;;25879:1:::1;26485:7;;:19;;26477:63;;;::::0;;-1:-1:-1;;;26477:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26477:63:0;;;;;;;;;;;;;::::1;;25879:1;26618:7;:18:::0;37966:14;37958:42:::2;;;::::0;;-1:-1:-1;;;37958:42:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;37958:42:0;;;;;;;;;;;;;::::2;;38093:13;::::0;38086:46:::2;::::0;;-1:-1:-1;;;38086:46:0;;38126:4:::2;38086:46;::::0;::::2;::::0;;;38066:17:::2;::::0;-1:-1:-1;;;;;38093:13:0::2;::::0;38086:31:::2;::::0;:46;;;;;::::2;::::0;;;;;;;;38093:13;38086:46;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;38086:46:0;;-1:-1:-1;38201:22:0;;::::2;38197:168;;;38240:40;38254:25;:10:::0;38269:9;38254:14:::2;:25::i;:::-;38240:13;:40::i;:::-;38314:13;::::0;38307:46:::2;::::0;;-1:-1:-1;;;38307:46:0;;38347:4:::2;38307:46;::::0;::::2;::::0;;;-1:-1:-1;;;;;38314:13:0;;::::2;::::0;38307:31:::2;::::0;:46;;;;;::::2;::::0;;;;;;;;;38314:13;38307:46;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;38307:46:0;;-1:-1:-1;38197:168:0::2;38394:9;38381:10;:22;38377:77;;;38433:9;38420:22;;38377:77;38483:19;:17;:19::i;:::-;38470:10;:32;38466:97;;;38532:19;:17;:19::i;:::-;38519:32;;38466:97;38573:21;38597:52;38629:19;:17;:19::i;:::-;38612:11;::::0;38597:27:::2;::::0;:10;;:14:::2;:27::i;:52::-;38573:76;;38680:11;;38664:13;:27;38660:87;;;-1:-1:-1::0;38724:11:0::2;::::0;38660:87:::2;38771:11;::::0;:30:::2;::::0;38787:13;38771:15:::2;:30::i;:::-;38757:11;:44:::0;38853:14;;;;;:46:::2;;-1:-1:-1::0;38888:11:0::2;::::0;38871:13:::2;::::0;-1:-1:-1;;;;;38871:13:0;;::::2;38888:11;::::0;;::::2;;38871:28;;38853:46;38849:199;;;38916:120;38948:10;38975:16;38916:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;38916:120:0::2;::::0;;;;;::::2;::::0;::::2;;::::0;;::::2;;;;;;;;39016:4;38916:15;:120::i;:::-;39132:11;::::0;39125:44:::2;::::0;;-1:-1:-1;;;39125:44:0;;39163:4:::2;39125:44;::::0;::::2;::::0;;;-1:-1:-1;;39132:11:0::2;::::0;::::2;-1:-1:-1::0;;;;;39132:11:0::2;::::0;39125:29:::2;::::0;:44;;;;;::::2;::::0;;;;;;;;39132:11;39125:44;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;39125:44:0;39221:17:::2;::::0;39125:44;;-1:-1:-1;39182:21:0::2;::::0;39206:59:::2;::::0;34912:5:::2;::::0;39206:33:::2;::::0;39125:44;;39206:14:::2;:33::i;:59::-;39182:83:::0;-1:-1:-1;39276:16:0::2;39295:29;:10:::0;39182:83;39295:14:::2;:29::i;:::-;39344:11;::::0;39276:48;;-1:-1:-1;39337:54:0::2;::::0;39344:11:::2;::::0;::::2;-1:-1:-1::0;;;;;39344:11:0::2;34071:42;39276:48:::0;39337:32:::2;:54::i;:::-;39463:15;::::0;39437:11:::2;::::0;39430:64:::2;::::0;-1:-1:-1;;;;;39463:15:0::2;39437:11:::0;;::::2;::::0;::::2;::::0;39463:15:::2;39480:13:::0;39430:32:::2;:64::i;:::-;-1:-1:-1::0;25835:1:0::1;26797:22:::0;;39553:13;;;;-1:-1:-1;37828:1761:0;;-1:-1:-1;;;;;37828:1761:0:o;33841:28::-;;;-1:-1:-1;;;;;33841:28:0;;:::o;35272:33::-;;;;;;;;;;35022:35;;;;:::o;19376:622::-;19746:10;;;19745:62;;-1:-1:-1;19762:39:0;;;-1:-1:-1;;;19762:39:0;;19786:4;19762:39;;;;-1:-1:-1;;;;;19762:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19762:39:0;:44;19745:62;19737:152;;;;-1:-1:-1;;;19737:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19927:62;;;-1:-1:-1;;;;;19927:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19927:62:0;-1:-1:-1;;;19927:62:0;;;19900:90;;19920:5;;19900:19;:90::i;:::-;19376:622;;;:::o;20006:286::-;20103:20;20126:50;20170:5;20126;-1:-1:-1;;;;;20126:15:0;;20150:4;20157:7;20126:39;;;;;;;;;;;;;-1:-1:-1;;;;;20126:39:0;;;;;;-1:-1:-1;;;;;20126:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:50;20214:69;;;-1:-1:-1;;;;;20214:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20214:69:0;-1:-1:-1;;;20214:69:0;;;20103:73;;-1:-1:-1;20187:97:0;;20207:5;;20187:19;:97::i;:::-;20006:286;;;;:::o;7314:181::-;7372:7;7404:5;;;7428:6;;;;7420:46;;;;;-1:-1:-1;;;7420:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7486:1;-1:-1:-1;7314:181:0;;;;;:::o;3971:196::-;4074:12;4106:53;4129:6;4137:4;4143:1;4146:12;4106:22;:53::i;:::-;4099:60;3971:196;-1:-1:-1;;;;3971:196:0:o;51439:1557::-;51545:13;;51530:11;;51545:13;51530:11;;-1:-1:-1;;;;;51530:11:0;;;51545:13;;51530:28;51526:258;;;51605:21;;51580:11;;51573:66;;-1:-1:-1;;;;;51605:21:0;51580:11;;;;;;51605:21;;51573:31;:66::i;:::-;51710:21;;51659:11;;51652:120;;-1:-1:-1;;;;;51710:21:0;51659:11;;;;;;51710:21;-1:-1:-1;;51652:41:0;:120::i;:::-;51815:13;;51800:11;;51815:13;51800:11;;-1:-1:-1;;;;;51800:11:0;;;51815:13;;51800:28;51796:262;;51877:21;;51850:13;;51843:68;;-1:-1:-1;;;;;51850:13:0;;;;51877:21;;51843:33;:68::i;:::-;51984:21;;51931:13;;51924:122;;-1:-1:-1;;;;;51931:13:0;;;;51984:21;-1:-1:-1;;51924:43:0;:122::i;:::-;52128:19;;52101:13;;52094:66;;-1:-1:-1;;;;;52101:13:0;;;;52128:19;;52094:33;:66::i;:::-;52229:19;;52178:13;;52171:114;;-1:-1:-1;;;;;52178:13:0;;;;52229:19;-1:-1:-1;;52171:43:0;:114::i;:::-;52361:19;;52336:11;;52329:64;;-1:-1:-1;;;;;52361:19:0;52336:11;;;;;;52361:19;;52329:31;:64::i;:::-;52460:19;;52411:11;;52404:112;;-1:-1:-1;;;;;52460:19:0;52411:11;;;;;;52460:19;-1:-1:-1;;52404:41:0;:112::i;:::-;52596:19;;52569:13;;52562:66;;-1:-1:-1;;;;;52569:13:0;;;;52596:19;;52562:33;:66::i;:::-;52697:19;;52646:13;;52639:114;;-1:-1:-1;;;;;52646:13:0;;;;52697:19;-1:-1:-1;;52639:43:0;:114::i;:::-;52833:17;;52808:11;;52801:62;;-1:-1:-1;;;;;52833:17:0;52808:11;;;;;;52833:17;;52801:31;:62::i;:::-;52930:17;;52881:11;;52874:110;;-1:-1:-1;;;;;52930:17:0;52881:11;;;;;;52930:17;-1:-1:-1;;52874:41:0;:110::i;:::-;51439:1557::o;23962:120::-;23507:7;;;;23499:40;;;;;-1:-1:-1;;;23499:40:0;;;;;;;;;;;;-1:-1:-1;;;23499:40:0;;;;;;;;;;;;;;;24021:7:::1;:15:::0;;-1:-1:-1;;24021:15:0::1;::::0;;24052:22:::1;24061:12;:10;:12::i;:::-;24052:22;::::0;;-1:-1:-1;;;;;24052:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;23962:120::o:0;37462:358::-;37544:13;;37537:46;;;-1:-1:-1;;;37537:46:0;;37577:4;37537:46;;;;;;37497:7;;;;-1:-1:-1;;;;;37544:13:0;;;;37537:31;;:46;;;;;;;;;;;;;;;37544:13;37537:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37537:46:0;;-1:-1:-1;37598:14:0;37594:28;;37621:1;37614:8;;;;;37594:28;37635:20;37658:19;:17;:19::i;:::-;37635:42;;37688:23;37701:9;37688:12;:23::i;:::-;37722:19;37744;:17;:19::i;:::-;37722:41;-1:-1:-1;37783:29:0;37722:41;37799:12;37783:15;:29::i;:::-;37776:36;;;;;37462:358;:::o;23703:118::-;23231:7;;;;23230:8;23222:37;;;;;-1:-1:-1;;;23222:37:0;;;;;;;;;;;;-1:-1:-1;;;23222:37:0;;;;;;;;;;;;;;;23763:7:::1;:14:::0;;-1:-1:-1;;23763:14:0::1;23773:4;23763:14;::::0;;23793:20:::1;23800:12;:10;:12::i;53004:128::-:0;53079:21;;53120:3;;53067:57;;;-1:-1:-1;;;53067:57:0;;;;;;;;;;-1:-1:-1;;;;;53079:21:0;;;;53067:52;;:57;;;;;53079:21;;53067:57;;;;;;;;53079:21;;53067:57;;;;;;;;;;;;;;;;;;;;;;;;;;15313:106;15401:10;15313:106;:::o;18902:205::-;19030:68;;;-1:-1:-1;;;;;19030:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19030:68:0;-1:-1:-1;;;19030:68:0;;;19003:96;;19023:5;;19003:19;:96::i;43349:569::-;43524:19;;43511:65;;;-1:-1:-1;;;43511:65:0;;;;;;;;;;;;;;;;;;;;;;43484:24;;-1:-1:-1;;;;;43524:19:0;;43511:47;;43559:9;;43570:5;;43511:65;;;;;;;;;;;;;;;43524:19;43511:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43511:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43511:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43511:65:0;;;;;;;;;;;;-1:-1:-1;43511:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43484:92;;43587:17;43607:7;43615:21;43634:1;43615:7;:14;:18;;:21;;;;:::i;:::-;43607:30;;;;;;;;;;;;;;43587:50;;43666:1;43654:9;:13;43650:261;;;43695:19;;43797:14;;-1:-1:-1;;;;;43695:19:0;;;;43682:58;;43757:9;;43783:39;;43817:4;;43783:29;;:9;;:13;:29::i;:39::-;43839:5;43861:3;43881;43682:215;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43682:215:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43682:215:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43682:215:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43682:215:0;;;;;;;;;;;;-1:-1:-1;43682:215:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43650:261;43349:569;;;;;:::o;8668:471::-;8726:7;8971:6;8967:47;;-1:-1:-1;9001:1:0;8994:8;;8967:47;9038:5;;;9042:1;9038;:5;:1;9062:5;;;;;:10;9054:56;;;;-1:-1:-1;;;9054:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9615:132;9673:7;9700:39;9704:1;9707;9700:39;;;;;;;;;;;;;;;;;:3;:39::i;50351:112::-;50416:21;;50448:3;;50404:51;;;-1:-1:-1;;;50404:51:0;;;;;;;;;50416:21;50404:51;;;;;;;;-1:-1:-1;;;;;50416:21:0;;;;50404:43;;:51;;;;;50416:21;50404:51;;;;;;50416:21;;50404:51;;;;;;;;;;39689:408;39775:13;;39751:7;;39775:17;39771:289;;39809:11;39823:41;34781:5;39823:29;39838:13;;39823:10;:14;;:29;;;;:::i;:41::-;39809:55;;39881:118;39915:3;39937:18;39881:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39881:118:0;;;;;;;;;;;;;;;;;;;;;34071:42;39881:15;:118::i;:::-;40029:19;:10;40044:3;40029:14;:19::i;:::-;40016:32;;39771:289;;-1:-1:-1;40079:10:0;39689:408::o;40105:1053::-;40192:11;;40168:7;;40192:15;40188:933;;40224:18;40245:39;34781:5;40245:27;40260:11;;40245:10;:14;;:27;;;;:::i;:39::-;40224:60;;40301:120;40333:10;40360:16;40301:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40301:120:0;;;;;;;;;;;;;;;;;;;;40401:4;40301:15;:120::i;:::-;40470:11;;40463:44;;;-1:-1:-1;;;40463:44:0;;40501:4;40463:44;;;;;;-1:-1:-1;;40470:11:0;;;-1:-1:-1;;;;;40470:11:0;;40463:29;;:44;;;;;;;;;;;;;;40470:11;40463:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40463:44:0;40585:14;40524:120;;;;;40463:44;40524:120;;;;;;;;;;;;;40463:44;;-1:-1:-1;40524:120:0;;40463:44;;40524:120;;40585:14;;40524:120;;40585:14;40524:120;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40524:120:0;;;;;;;;;;;;;;;;;;;;;40624:4;40524:13;:120::i;:::-;40679:44;;;-1:-1:-1;;;40679:44:0;;40717:4;40679:44;;;;;;40661:15;;33734:42;;40679:29;;:44;;;;;;;;;;;;;;;33734:42;40679:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40679:44:0;;-1:-1:-1;40740:140:0;34358:42;40825:14;40679:44;40837:1;40825:11;:14::i;:::-;33734:42;;40740:140;:32;:140::i;:::-;40897:156;34504:42;40984:21;41003:1;40984:14;:7;40996:1;40984:11;:14::i;40897:156::-;41083:26;:10;41098;41083:14;:26::i;:::-;41070:39;40105:1053;-1:-1:-1;;;;;40105:1053:0:o;42772:569::-;42947:19;;42934:65;;;-1:-1:-1;;;42934:65:0;;;;;;;;;;;;;;;;;;;;;;42907:24;;-1:-1:-1;;;;;42947:19:0;;42934:47;;42982:9;;42993:5;;42934:65;;;;;;;;;;;;;;;42947:19;42934:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42934:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;42934:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;42934:65:0;;;;;;;;;;;;-1:-1:-1;42934:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42907:92;;43010:17;43030:7;43038:21;43057:1;43038:7;:14;:18;;:21;;;;:::i;:::-;43030:30;;;;;;;;;;;;;;43010:50;;43089:1;43077:9;:13;43073:261;;;43118:19;;43220:14;;-1:-1:-1;;;;;43118:19:0;;;;43105:58;;43180:9;;43206:39;;43240:4;;43206:29;;:9;;:13;:29::i;7778:136::-;7836:7;7863:43;7867:1;7870;7863:43;;;;;;;;;;;;;;;;;:3;:43::i;43926:563::-;44099:17;;44086:63;;;-1:-1:-1;;;44086:63:0;;;;;;;;;;;;;;;;;;;;;;44059:24;;-1:-1:-1;;;;;44099:17:0;;44086:45;;44132:9;;44143:5;;44086:63;;;;;;;;;;;;;;;44099:17;44086:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44086:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44086:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44086:63:0;;;;;;;;;;;;-1:-1:-1;44086:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44059:90;;44160:17;44180:7;44188:21;44207:1;44188:7;:14;:18;;:21;;;;:::i;:::-;44180:30;;;;;;;;;;;;;;44160:50;;44239:1;44227:9;:13;44223:259;;;44268:17;;44368:14;;-1:-1:-1;;;;;44268:17:0;;;;44255:56;;44328:9;;44354:39;;44388:4;;44354:29;;:9;;:13;:29::i;50203:140::-;50287:21;;50319:3;;50275:60;;;-1:-1:-1;;;50275:60:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50287:21:0;;;;50275:43;;:60;;;;;50287:21;;50275:60;;;;;;;;50287:21;;50275:60;;;;;;;;;;;;;;;;;;;;;;;;;;18717:177;18827:58;;;-1:-1:-1;;;;;18827:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18827:58:0;-1:-1:-1;;;18827:58:0;;;18800:86;;18820:5;;21022:761;21446:23;21472:69;21500:4;21472:69;;;;;;;;;;;;;;;;;21480:5;-1:-1:-1;;;;;21472:27:0;;;:69;;;;;:::i;:::-;21556:17;;21446:95;;-1:-1:-1;21556:21:0;21552:224;;21698:10;21687:30;;;;;;;;;;;;;;;-1:-1:-1;21687:30:0;21679:85;;;;-1:-1:-1;;;21679:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5348:979;5478:12;5511:18;5522:6;5511:10;:18::i;:::-;5503:60;;;;;-1:-1:-1;;;5503:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5637:12;5651:23;5678:6;-1:-1:-1;;;;;5678:11:0;5698:8;5709:4;5678:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5678:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5636:78;;;;5729:7;5725:595;;;5760:10;-1:-1:-1;5753:17:0;;-1:-1:-1;5753:17:0;5725:595;5874:17;;:21;5870:439;;6137:10;6131:17;6198:15;6185:10;6181:2;6177:19;6170:44;6085:148;6280:12;6273:20;;-1:-1:-1;;;6273:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50057:138;50140:21;;50171:3;;50128:59;;;-1:-1:-1;;;50128:59:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50140:21:0;;;;50128:42;;:59;;;;;50140:21;;50128:59;;;;;;;;50140:21;;50128:59;;;;;;;;;;10243:278;10329:7;10364:12;10357:5;10349:28;;;;-1:-1:-1;;;10349:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10388:9;10404:1;10400;:5;;;;;;;10243:278;-1:-1:-1;;;;;10243:278:0:o;44497:564::-;44672:19;;44659:65;;;-1:-1:-1;;;44659:65:0;;;;;;;;;;;;;;;;;;;;;;44632:24;;-1:-1:-1;;;;;44672:19:0;;44659:47;;44707:9;;44718:5;;44659:65;;;;;;;;;;;;;;;44672:19;44659:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44659:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44659:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44659:65:0;;;;;;;;;;;;-1:-1:-1;44659:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44632:92;;44735:17;44755:7;44763:21;44782:1;44763:7;:14;:18;;:21;;;;:::i;:::-;44755:30;;;;;;;;;;;;;;44735:50;;44814:1;44802:9;:13;44798:256;;;44843:19;;44942:14;;-1:-1:-1;;;;;44843:19:0;;;;44830:55;;44902:9;;44928:39;;44962:4;;44928:29;;:9;;:13;:29::i;8217:192::-;8303:7;8339:12;8331:6;;;;8323:29;;;;-1:-1:-1;;;8323:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8375:5:0;;;8217:192::o;856:619::-;916:4;1384:20;;1227:66;1424:23;;;;;;:42;;-1:-1:-1;;1451:15:0;;;1416:51;-1:-1:-1;;856:619:0:o
Swarm Source
ipfs://be61226b45e92bf9bcefc70850bfec56095c22315000e23ba402751f027e60b1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.