Overview
BNB Balance
0 BNB
BNB Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 934 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Zap In | 44858937 | 33 hrs ago | IN | 0.03534985 BNB | 0.00046994 | ||||
Zap In | 44858814 | 33 hrs ago | IN | 0.02888224 BNB | 0.00043633 | ||||
Zap In | 44820530 | 2 days ago | IN | 0 BNB | 0.00047345 | ||||
Zap In | 44808564 | 3 days ago | IN | 0.13979061 BNB | 0.00046723 | ||||
Zap In | 44792561 | 3 days ago | IN | 0 BNB | 0.00030716 | ||||
Zap In | 44725835 | 6 days ago | IN | 0 BNB | 0.00031797 | ||||
Zap In | 44723338 | 6 days ago | IN | 0.00545542 BNB | 0.00045404 | ||||
Zap In | 44698926 | 6 days ago | IN | 0.00270327 BNB | 0.00080947 | ||||
Zap In | 44694859 | 7 days ago | IN | 0 BNB | 0.00032429 | ||||
Zap In | 44686640 | 7 days ago | IN | 0 BNB | 0.00070635 | ||||
Zap In | 44686578 | 7 days ago | IN | 0 BNB | 0.00047629 | ||||
Zap In | 44677005 | 7 days ago | IN | 0 BNB | 0.00050028 | ||||
Zap In | 44673663 | 7 days ago | IN | 0.00937575 BNB | 0.00103831 | ||||
Zap In | 44670760 | 7 days ago | IN | 0 BNB | 0.00045432 | ||||
Zap In | 44670750 | 7 days ago | IN | 0 BNB | 0.00069499 | ||||
Zap In | 44670748 | 7 days ago | IN | 0 BNB | 0.00095023 | ||||
Zap In | 44668489 | 8 days ago | IN | 0 BNB | 0.00029377 | ||||
Zap In | 44661776 | 8 days ago | IN | 0 BNB | 0.00045642 | ||||
Zap In | 44624652 | 9 days ago | IN | 0.00445363 BNB | 0.0004463 | ||||
Zap In | 44618725 | 9 days ago | IN | 0 BNB | 0.00076109 | ||||
Zap In | 44610280 | 10 days ago | IN | 0 BNB | 0.00061666 | ||||
Zap In | 44610255 | 10 days ago | IN | 0.01232323 BNB | 0.00049304 | ||||
Zap In | 44591946 | 10 days ago | IN | 0.03114989 BNB | 0.00069777 | ||||
Zap In | 44590273 | 10 days ago | IN | 0.03649495 BNB | 0.00051069 | ||||
Zap In | 44584814 | 10 days ago | IN | 0.25743158 BNB | 0.00033396 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
44858937 | 33 hrs ago | 0.03534985 BNB | ||||
44858814 | 33 hrs ago | 0.02888224 BNB | ||||
44808564 | 3 days ago | 0.13979061 BNB | ||||
44723338 | 6 days ago | 0.00545542 BNB | ||||
44698926 | 6 days ago | 0.00270327 BNB | ||||
44673663 | 7 days ago | 0.00937575 BNB | ||||
44624652 | 9 days ago | 0.00445363 BNB | ||||
44610255 | 10 days ago | 0.01232323 BNB | ||||
44591946 | 10 days ago | 0.03114989 BNB | ||||
44590273 | 10 days ago | 0.03649495 BNB | ||||
44584814 | 10 days ago | 0.25743158 BNB | ||||
44548557 | 12 days ago | 0.00904227 BNB | ||||
44540308 | 12 days ago | 0.30651284 BNB | ||||
44531764 | 12 days ago | 0.00781924 BNB | ||||
44503193 | 13 days ago | 3.26204855 BNB | ||||
44484686 | 14 days ago | 0.15395158 BNB | ||||
44416777 | 16 days ago | 0.04580808 BNB | ||||
44289480 | 21 days ago | 0.0002131 BNB | ||||
43970600 | 32 days ago | 0.01646773 BNB | ||||
43968711 | 32 days ago | 0.03288953 BNB | ||||
43953310 | 32 days ago | 0.1514696 BNB | ||||
43574024 | 46 days ago | 0.00084149 BNB | ||||
43313623 | 55 days ago | 0.16738476 BNB | ||||
43241140 | 57 days ago | 0.46758713 BNB | ||||
42507538 | 83 days ago | 0.19378894 BNB |
Loading...
Loading
Contract Name:
LiquidusAutoLPFarmIn
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2024-01-18 */ // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @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 a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.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 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' 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) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @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 require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.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. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { 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: contracts/LiquidusAutoLP.sol pragma solidity 0.8.4; interface IWETH { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function balanceOf(address) external view returns (uint); function allowance(address, address) external view returns (uint); receive() external payable; function deposit() external payable; function withdraw(uint wad) external; function totalSupply() external view returns (uint); function approve(address guy, uint wad) external returns (bool); function transfer(address dst, uint wad) external returns (bool); function transferFrom(address src, address dst, uint wad) external returns (bool); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface ILiquidusFeeEstimation { function userFee(address user) external view returns (uint256); } pragma experimental ABIEncoderV2; contract LiquidusAutoLPFarmIn is Ownable, ReentrancyGuard, Pausable { using SafeMath for uint256; using SafeERC20 for IERC20; mapping(address => bool) public whitelistRouters; mapping(address => bool) public whitelistFromFee; event AdminTokenRecovery(address tokenRecovered, uint256 amount); address public feeWallet; address public feeEstimationContract; address private _ETH_ADDRESS_ = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; struct SwapCall { address _swapToken; // Token to be swapped address _router; // Address of router contract for performing the swap bytes apiData; // Kyberswap api data, recipient in API request should be this contract! } struct AddLiquidityCall { address _router; // Address of router contract for adding liquidity uint256 _amount0Min; // Minimum amount of toToken0 before transaction reverts (account for fee) uint256 _amount1Min; // Minimum amount of toToken1 before transaction reverts (account for fee) } struct ZapInCall { address[] _inTokens; // Addresses of input tokens uint256[] _inAmounts; // Amounts of input tokens to swap/deposit address[] _toTokens; // Address of second output tokens SwapCall[] swaps; // Swaps to execute AddLiquidityCall addLiquidityCall; // Liquidity add call data address _lpAddress; // Address of the LP token } function zapIn( ZapInCall calldata params ) payable external nonReentrant whenNotPaused returns (uint256 amountOut0, uint256 amountOut1, uint256 liquidity){ require(params._inTokens.length <= 2 && params._inTokens.length >=1, "Max 2 input tokens"); require(params._toTokens.length == 2, "Max and min 2 output tokens"); require(params._toTokens[0] == IUniswapV2Pair(params._lpAddress).token0() && params._toTokens[1] == IUniswapV2Pair(params._lpAddress).token1() || params._toTokens[0] == IUniswapV2Pair(params._lpAddress).token1() && params._toTokens[1] == IUniswapV2Pair(params._lpAddress).token0(), "Error - Mismatch lpAddress and toTokens"); require(whitelistRouters[params.addLiquidityCall._router], "Error - Liquidity router is not whitelisted"); require(params.swaps.length < 6, "Error - too many swaps"); //if one of inputs in _inTokens is ETH -> Swap Eth to WETH, same amount as _inAmount for(uint i = 0; i < params._inTokens.length; i++){ if(params._inTokens[i] == _ETH_ADDRESS_){ require(msg.value == params._inAmounts[i], "Mismatch ETH amount"); IWETH(payable(IUniswapV2Router02(params.addLiquidityCall._router).WETH())) .deposit{ value: msg.value }(); } else { IERC20(params._inTokens[i]).safeTransferFrom(msg.sender, address(this), params._inAmounts[i]); } } //swap tokens for(uint i = 0; i < params.swaps.length; i++){ require(whitelistRouters[params.swaps[i]._router], "Swap router not whitelisted"); _generalApproveMax(params.swaps[i]._swapToken, params.swaps[i]._router, IERC20(params.swaps[i]._swapToken).balanceOf(address(this))); (bool success, ) = params.swaps[i]._router.call(params.swaps[i].apiData); require(success, "Swap failed"); } // Handle fee, send fee to fee address if(!whitelistFromFee[msg.sender]){ uint256 fee = ILiquidusFeeEstimation(feeEstimationContract).userFee(msg.sender); // Charge fees based on holdings if (fee != 0){ IERC20(params._toTokens[0]).safeTransfer(feeWallet, IERC20(params._toTokens[0]).balanceOf(address(this)).mul(fee).div(10000)); IERC20(params._toTokens[1]).safeTransfer(feeWallet, IERC20(params._toTokens[1]).balanceOf(address(this)).mul(fee).div(10000)); } } // Approve to add liquidity _generalApproveMax(params._toTokens[0], params.addLiquidityCall._router, IERC20(params._toTokens[0]).balanceOf(address(this))); _generalApproveMax(params._toTokens[1], params.addLiquidityCall._router, IERC20(params._toTokens[1]).balanceOf(address(this))); // Add liquidity, mint lp token to user (amountOut0, amountOut1, liquidity) = IUniswapV2Router02(params.addLiquidityCall._router).addLiquidity( params._toTokens[0], params._toTokens[1], IERC20(params._toTokens[0]).balanceOf(address(this)), IERC20(params._toTokens[1]).balanceOf(address(this)), params.addLiquidityCall._amount0Min, params.addLiquidityCall._amount1Min, msg.sender, uint256(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) ); // Send residual back to caller uint256 balance0 = IERC20(params._toTokens[0]).balanceOf(address(this)); uint256 balance1 = IERC20(params._toTokens[1]).balanceOf(address(this)); if (balance0 > 0) {IERC20(params._toTokens[0]).safeTransfer(address(msg.sender), balance0);} if (balance1 > 0) {IERC20(params._toTokens[1]).safeTransfer(address(msg.sender), balance1);} } function _generalApproveMax( address token, address to, uint256 amount ) internal { uint256 allowance = IERC20(token).allowance(address(this), to); if (allowance < amount) { if (allowance > 0) { IERC20(token).safeApprove(to, 0); } IERC20(token).safeApprove(to, uint256(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)); } } function setFees(address _feeWallet, address _feeEstimationContract) public onlyOwner { feeWallet = _feeWallet; feeEstimationContract = _feeEstimationContract; } function recoverWrongTokens(address _tokenAddress, uint256 _tokenAmount) external onlyOwner { IERC20(_tokenAddress).safeTransfer(address(msg.sender), _tokenAmount); emit AdminTokenRecovery(_tokenAddress, _tokenAmount); } function addWhitelistFromFee(address _account) public onlyOwner { whitelistFromFee[_account] = true; } function removeWhitelistFromFee(address _account) public onlyOwner { whitelistFromFee[_account] = false; } function addWhitelistRouters(address _router) public onlyOwner { whitelistRouters[_router] = true; } function removeWhitelistRouters(address _router) public onlyOwner { whitelistRouters[_router] = false; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } receive() external payable {} } contract LiquidusAutoLPFarmOut is Ownable, ReentrancyGuard, Pausable { using SafeMath for uint256; using SafeERC20 for IERC20; mapping(address => bool) public whitelistRouters; mapping(address => bool) public whitelistFromFee; event AdminTokenRecovery(address tokenRecovered, uint256 amount); address public feeWallet; address public feeEstimationContract; address private _ETH_ADDRESS_ = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; struct SwapCall { address _swapToken; // Token to be swapped address _router; // Address of router contract for performing the swap bytes apiData; // Kyberswap api data, recipient in API request should be this contract! } struct AddLiquidityCall { address _router; // Address of router contract for adding liquidity uint256 _amount0Min; // Minimum amount of toToken0 before transaction reverts uint256 _amount1Min; // Minimum amount of toToken1 before transaction reverts } struct ZapOutCall { address[] _toTokens; // Addresses of output tokens SwapCall[] swaps; // Swaps to execute AddLiquidityCall addLiquidityCall; // Liquidity add call data uint256 _liquidity; //amount of lp to burn (withdraw) address _lpAddress; // Address of the lp token } function zapOut( ZapOutCall calldata params ) payable external nonReentrant whenNotPaused { require(params._toTokens.length <= 2 && params._toTokens.length >=1, "Max 2 output tokens"); require(params.swaps.length < 6, "Error - too many swaps"); // Transfer lp token to contract IERC20(params._lpAddress).safeTransferFrom(msg.sender, address(this), params._liquidity); // Remove liquidity require(whitelistRouters[params.addLiquidityCall._router], "Error - Liquidity router is not whitelisted"); _generalApproveMax(params._lpAddress, params.addLiquidityCall._router, IERC20(params._lpAddress).balanceOf(address(this))); address token0 = IUniswapV2Pair(params._lpAddress).token0(); address token1 = IUniswapV2Pair(params._lpAddress).token1(); IUniswapV2Router02(params.addLiquidityCall._router).removeLiquidity( token0, token1, IUniswapV2Pair(params._lpAddress).balanceOf(address(this)), params.addLiquidityCall._amount0Min, params.addLiquidityCall._amount1Min, address(this), uint256(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) ); //swap tokens for(uint i = 0; i < params.swaps.length; i++){ require(whitelistRouters[params.swaps[i]._router], "Swap router not whitelisted"); _generalApproveMax(params.swaps[i]._swapToken, params.swaps[i]._router, IERC20(params.swaps[i]._swapToken).balanceOf(address(this))); (bool success, ) = params.swaps[i]._router.call(params.swaps[i].apiData); require(success, "Swap failed"); } // Handle fee, send fee to fee address if(!whitelistFromFee[msg.sender]){ uint256 fee = ILiquidusFeeEstimation(feeEstimationContract).userFee(msg.sender); // Charge fees based on holdings if (fee != 0){ if(params._toTokens.length == 2) { _generalTransfer(params._toTokens[0], payable(feeWallet), _generalBalanceOf(params._toTokens[0], address(this)).mul(fee).div(10000)); _generalTransfer(params._toTokens[1], payable(feeWallet), _generalBalanceOf(params._toTokens[1], address(this)).mul(fee).div(10000)); } else { _generalTransfer(params._toTokens[0], payable(feeWallet), _generalBalanceOf(params._toTokens[0], address(this)).mul(fee).div(10000)); } } } // Send toTokens to user if(params._toTokens.length == 2) { _generalTransfer(params._toTokens[0], payable(msg.sender), _generalBalanceOf(params._toTokens[0], address(this))); _generalTransfer(params._toTokens[1], payable(msg.sender), _generalBalanceOf(params._toTokens[1], address(this))); } else { _generalTransfer(params._toTokens[0], payable(msg.sender), _generalBalanceOf(params._toTokens[0], address(this))); } } function _generalApproveMax( address token, address to, uint256 amount ) internal { uint256 allowance = IERC20(token).allowance(address(this), to); if (allowance < amount) { if (allowance > 0) { IERC20(token).safeApprove(to, 0); } IERC20(token).safeApprove(to, uint256(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)); } } function _generalTransfer( address token, address payable to, uint256 amount ) internal { if (amount > 0) { if (token == _ETH_ADDRESS_) { to.transfer(amount); } else { IERC20(token).safeTransfer(to, amount); } } } function _generalBalanceOf( address token, address who ) internal view returns (uint256) { if (token == _ETH_ADDRESS_ ) { return who.balance; } else { return IERC20(token).balanceOf(who); } } function setFees(address _feeWallet, address _feeEstimationContract) public onlyOwner { feeWallet = _feeWallet; feeEstimationContract = _feeEstimationContract; } function recoverWrongTokens(address _tokenAddress, uint256 _tokenAmount) external onlyOwner { IERC20(_tokenAddress).safeTransfer(address(msg.sender), _tokenAmount); emit AdminTokenRecovery(_tokenAddress, _tokenAmount); } function addWhitelistFromFee(address _account) public onlyOwner { whitelistFromFee[_account] = true; } function removeWhitelistFromFee(address _account) public onlyOwner { whitelistFromFee[_account] = false; } function addWhitelistRouters(address _router) public onlyOwner { whitelistRouters[_router] = true; } function removeWhitelistRouters(address _router) public onlyOwner { whitelistRouters[_router] = false; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenRecovered","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AdminTokenRecovery","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"addWhitelistFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"addWhitelistRouters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeEstimationContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeWallet","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"recoverWrongTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeWhitelistFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"removeWhitelistRouters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeWallet","type":"address"},{"internalType":"address","name":"_feeEstimationContract","type":"address"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistRouters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address[]","name":"_inTokens","type":"address[]"},{"internalType":"uint256[]","name":"_inAmounts","type":"uint256[]"},{"internalType":"address[]","name":"_toTokens","type":"address[]"},{"components":[{"internalType":"address","name":"_swapToken","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"bytes","name":"apiData","type":"bytes"}],"internalType":"struct LiquidusAutoLPFarmIn.SwapCall[]","name":"swaps","type":"tuple[]"},{"components":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"uint256","name":"_amount0Min","type":"uint256"},{"internalType":"uint256","name":"_amount1Min","type":"uint256"}],"internalType":"struct LiquidusAutoLPFarmIn.AddLiquidityCall","name":"addLiquidityCall","type":"tuple"},{"internalType":"address","name":"_lpAddress","type":"address"}],"internalType":"struct LiquidusAutoLPFarmIn.ZapInCall","name":"params","type":"tuple"}],"name":"zapIn","outputs":[{"internalType":"uint256","name":"amountOut0","type":"uint256"},{"internalType":"uint256","name":"amountOut1","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b50620000876200007b620000af60201b60201c565b620000b760201b60201c565b600180819055506000600260006101000a81548160ff0219169083151502179055506200017b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613dac806200018b6000396000f3fe6080604052600436106101025760003560e01c80637aa51fd6116100955780638f01f9d1116100645780638f01f9d1146102fb5780639378f2e114610324578063f25f4b561461034d578063f2fde38b14610378578063fcd4efd0146103a157610109565b80637aa51fd6146102535780637b72a045146102905780638456cb59146102b95780638da5cb5b146102d057610109565b80634f258ad9116100d15780634f258ad9146101ab578063540eee27146101d45780635c975abb14610211578063715018a61461023c57610109565b806326ade8201461010e5780633f138d4b146101405780633f4ba83a14610169578063404ea1bd1461018057610109565b3661010957005b600080fd5b61012860048036038101906101239190612e67565b6103ca565b604051610137939291906135de565b60405180910390f35b34801561014c57600080fd5b5061016760048036038101906101629190612e02565b611fac565b005b34801561017557600080fd5b5061017e61201c565b005b34801561018c57600080fd5b5061019561202e565b6040516101a2919061325f565b60405180910390f35b3480156101b757600080fd5b506101d260048036038101906101cd9190612d74565b612054565b005b3480156101e057600080fd5b506101fb60048036038101906101f69190612d74565b6120b7565b6040516102089190613381565b60405180910390f35b34801561021d57600080fd5b506102266120d7565b6040516102339190613381565b60405180910390f35b34801561024857600080fd5b506102516120ee565b005b34801561025f57600080fd5b5061027a60048036038101906102759190612d74565b612102565b6040516102879190613381565b60405180910390f35b34801561029c57600080fd5b506102b760048036038101906102b29190612d74565b612122565b005b3480156102c557600080fd5b506102ce612185565b005b3480156102dc57600080fd5b506102e5612197565b6040516102f2919061325f565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612dc6565b6121c0565b005b34801561033057600080fd5b5061034b60048036038101906103469190612d74565b61224e565b005b34801561035957600080fd5b506103626122b1565b60405161036f919061325f565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a9190612d74565b6122d7565b005b3480156103ad57600080fd5b506103c860048036038101906103c39190612d74565b61235b565b005b60008060006103d76123be565b6103df61240e565b60028480600001906103f19190613615565b9050111580156104135750600184806000019061040e9190613615565b905010155b610452576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610449906134de565b60405180910390fd5b60028480604001906104649190613615565b9050146104a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049d9061347e565b60405180910390fd5b8360e00160208101906104b99190612d74565b73ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156104fe57600080fd5b505afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105369190612d9d565b73ffffffffffffffffffffffffffffffffffffffff1684806040019061055c9190613615565b6000818110610594577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906105a99190612d74565b73ffffffffffffffffffffffffffffffffffffffff161480156106e257508360e00160208101906105da9190612d74565b73ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561061f57600080fd5b505afa158015610633573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106579190612d9d565b73ffffffffffffffffffffffffffffffffffffffff1684806040019061067d9190613615565b60018181106106b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906106ca9190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b8061092557508360e00160208101906106fb9190612d74565b73ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561074057600080fd5b505afa158015610754573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107789190612d9d565b73ffffffffffffffffffffffffffffffffffffffff1684806040019061079e9190613615565b60008181106107d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906107eb9190612d74565b73ffffffffffffffffffffffffffffffffffffffff1614801561092457508360e001602081019061081c9190612d74565b73ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561086157600080fd5b505afa158015610875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108999190612d9d565b73ffffffffffffffffffffffffffffffffffffffff168480604001906108bf9190613615565b60018181106108f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061090c9190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b5b610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b9061353e565b60405180910390fd5b6003600085608001600001602081019061097e9190612d74565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fc9061351e565b60405180910390fd5b6006848060600190610a17919061366c565b905010610a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a509061345e565b60405180910390fd5b60005b848060000190610a6c9190613615565b9050811015610d9657600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858060000190610abe9190613615565b83818110610af5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610b0a9190612d74565b73ffffffffffffffffffffffffffffffffffffffff161415610cad57848060200190610b3691906136c3565b82818110610b6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201353414610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac9061341e565b60405180910390fd5b846080016000016020810190610bcb9190612d74565b73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1057600080fd5b505afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190612d9d565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c8f57600080fd5b505af1158015610ca3573d6000803e3d6000fd5b5050505050610d83565b610d823330878060200190610cc291906136c3565b85818110610cf9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135888060000190610d109190613615565b86818110610d47577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610d5c9190612d74565b73ffffffffffffffffffffffffffffffffffffffff16612458909392919063ffffffff16565b5b8080610d8e906138dc565b915050610a5c565b5060005b848060600190610daa919061366c565b905081101561120d5760036000868060600190610dc7919061366c565b84818110610dfe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002810190610e109190613771565b6020016020810190610e229190612d74565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea09061343e565b60405180910390fd5b61107a858060600190610ebc919061366c565b83818110610ef3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002810190610f059190613771565b6000016020810190610f179190612d74565b868060600190610f27919061366c565b84818110610f5e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002810190610f709190613771565b6020016020810190610f829190612d74565b878060600190610f92919061366c565b85818110610fc9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002810190610fdb9190613771565b6000016020810190610fed9190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611025919061325f565b60206040518083038186803b15801561103d57600080fd5b505afa158015611051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110759190612ea8565b6124e1565b600085806060019061108c919061366c565b838181106110c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020028101906110d59190613771565b60200160208101906110e79190612d74565b73ffffffffffffffffffffffffffffffffffffffff1686806060019061110d919061366c565b84818110611144577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020028101906111569190613771565b8060400190611165919061371a565b60405161117392919061322f565b6000604051808303816000865af19150503d80600081146111b0576040519150601f19603f3d011682016040523d82523d6000602084013e6111b5565b606091505b50509050806111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f0906133de565b60405180910390fd5b508080611205906138dc565b915050610d9a565b50600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661167f576000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356c5f349336040518263ffffffff1660e01b81526004016112bc919061325f565b60206040518083038186803b1580156112d457600080fd5b505afa1580156112e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130c9190612ea8565b90506000811461167d576114c9600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611447612710611439858a80604001906113569190613615565b600081811061138e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906113a39190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113db919061325f565b60206040518083038186803b1580156113f357600080fd5b505afa158015611407573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142b9190612ea8565b61260090919063ffffffff16565b61261690919063ffffffff16565b8780604001906114579190613615565b600081811061148f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906114a49190612d74565b73ffffffffffffffffffffffffffffffffffffffff1661262c9092919063ffffffff16565b61167c600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166115fa6127106115ec858a80604001906115099190613615565b6001818110611541577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906115569190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161158e919061325f565b60206040518083038186803b1580156115a657600080fd5b505afa1580156115ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115de9190612ea8565b61260090919063ffffffff16565b61261690919063ffffffff16565b87806040019061160a9190613615565b6001818110611642577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116579190612d74565b73ffffffffffffffffffffffffffffffffffffffff1661262c9092919063ffffffff16565b5b505b6117df8480604001906116929190613615565b60008181106116ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116df9190612d74565b8560800160000160208101906116f59190612d74565b8680604001906117059190613615565b600081811061173d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906117529190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161178a919061325f565b60206040518083038186803b1580156117a257600080fd5b505afa1580156117b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117da9190612ea8565b6124e1565b61193f8480604001906117f29190613615565b600181811061182a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061183f9190612d74565b8560800160000160208101906118559190612d74565b8680604001906118659190613615565b600181811061189d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906118b29190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118ea919061325f565b60206040518083038186803b15801561190257600080fd5b505afa158015611916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193a9190612ea8565b6124e1565b8360800160000160208101906119559190612d74565b73ffffffffffffffffffffffffffffffffffffffff1663e8e337008580604001906119809190613615565b60008181106119b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906119cd9190612d74565b8680604001906119dd9190613615565b6001818110611a15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611a2a9190612d74565b878060400190611a3a9190613615565b6000818110611a72577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611a879190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611abf919061325f565b60206040518083038186803b158015611ad757600080fd5b505afa158015611aeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0f9190612ea8565b888060400190611b1f9190613615565b6001818110611b57577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611b6c9190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ba4919061325f565b60206040518083038186803b158015611bbc57600080fd5b505afa158015611bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf49190612ea8565b89608001602001358a60800160400135337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518963ffffffff1660e01b8152600401611c499897969594939291906132da565b606060405180830381600087803b158015611c6357600080fd5b505af1158015611c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9b9190612ed1565b8093508194508295505050506000848060400190611cb99190613615565b6000818110611cf1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611d069190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d3e919061325f565b60206040518083038186803b158015611d5657600080fd5b505afa158015611d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8e9190612ea8565b90506000858060400190611da29190613615565b6001818110611dda577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611def9190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e27919061325f565b60206040518083038186803b158015611e3f57600080fd5b505afa158015611e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e779190612ea8565b90506000821115611f0a57611f093383888060400190611e979190613615565b6000818110611ecf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611ee49190612d74565b73ffffffffffffffffffffffffffffffffffffffff1661262c9092919063ffffffff16565b5b6000811115611f9b57611f9a3382888060400190611f289190613615565b6001818110611f60577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611f759190612d74565b73ffffffffffffffffffffffffffffffffffffffff1661262c9092919063ffffffff16565b5b5050611fa56126b2565b9193909250565b611fb46126bb565b611fdf33828473ffffffffffffffffffffffffffffffffffffffff1661262c9092919063ffffffff16565b7f74545154aac348a3eac92596bd1971957ca94795f4e954ec5f613b55fab781298282604051612010929190613358565b60405180910390a15050565b6120246126bb565b61202c612739565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61205c6126bb565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60046020528060005260406000206000915054906101000a900460ff1681565b6000600260009054906101000a900460ff16905090565b6120f66126bb565b612100600061279c565b565b60036020528060005260406000206000915054906101000a900460ff1681565b61212a6126bb565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61218d6126bb565b612195612860565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6121c86126bb565b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6122566126bb565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122df6126bb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561234f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612346906133fe565b60405180910390fd5b6123588161279c565b50565b6123636126bb565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60026001541415612404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fb9061359e565b60405180910390fd5b6002600181905550565b6124166120d7565b15612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d906134be565b60405180910390fd5b565b6124db846323b872dd60e01b858585604051602401612479939291906132a3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128c3565b50505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040161251e92919061327a565b60206040518083038186803b15801561253657600080fd5b505afa15801561254a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256e9190612ea8565b9050818110156125fa5760008111156125ae576125ad8360008673ffffffffffffffffffffffffffffffffffffffff1661298a9092919063ffffffff16565b5b6125f9837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff1661298a9092919063ffffffff16565b5b50505050565b6000818361260e91906137f8565b905092915050565b6000818361262491906137c7565b905092915050565b6126ad8363a9059cbb60e01b848460405160240161264b929190613358565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128c3565b505050565b60018081905550565b6126c3612ae8565b73ffffffffffffffffffffffffffffffffffffffff166126e1612197565b73ffffffffffffffffffffffffffffffffffffffff1614612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272e906134fe565b60405180910390fd5b565b612741612af0565b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612785612ae8565b604051612792919061325f565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61286861240e565b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128ac612ae8565b6040516128b9919061325f565b60405180910390a1565b6000612925826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b399092919063ffffffff16565b905060008151111561298557808060200190518101906129459190612e3e565b612984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b9061357e565b60405180910390fd5b5b505050565b6000811480612a23575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b81526004016129d192919061327a565b60206040518083038186803b1580156129e957600080fd5b505afa1580156129fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a219190612ea8565b145b612a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a59906135be565b60405180910390fd5b612ae38363095ea7b360e01b8484604051602401612a81929190613358565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128c3565b505050565b600033905090565b612af86120d7565b612b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2e906133be565b60405180910390fd5b565b6060612b488484600085612b51565b90509392505050565b606082471015612b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8d9061349e565b60405180910390fd5b612b9f85612c65565b612bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd59061355e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612c079190613248565b60006040518083038185875af1925050503d8060008114612c44576040519150601f19603f3d011682016040523d82523d6000602084013e612c49565b606091505b5091509150612c59828286612c88565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315612c9857829050612ce8565b600083511115612cab5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdf919061339c565b60405180910390fd5b9392505050565b600081359050612cfe81613d31565b92915050565b600081519050612d1381613d31565b92915050565b600081519050612d2881613d48565b92915050565b60006101008284031215612d4157600080fd5b81905092915050565b600081359050612d5981613d5f565b92915050565b600081519050612d6e81613d5f565b92915050565b600060208284031215612d8657600080fd5b6000612d9484828501612cef565b91505092915050565b600060208284031215612daf57600080fd5b6000612dbd84828501612d04565b91505092915050565b60008060408385031215612dd957600080fd5b6000612de785828601612cef565b9250506020612df885828601612cef565b9150509250929050565b60008060408385031215612e1557600080fd5b6000612e2385828601612cef565b9250506020612e3485828601612d4a565b9150509250929050565b600060208284031215612e5057600080fd5b6000612e5e84828501612d19565b91505092915050565b600060208284031215612e7957600080fd5b600082013567ffffffffffffffff811115612e9357600080fd5b612e9f84828501612d2e565b91505092915050565b600060208284031215612eba57600080fd5b6000612ec884828501612d5f565b91505092915050565b600080600060608486031215612ee657600080fd5b6000612ef486828701612d5f565b9350506020612f0586828701612d5f565b9250506040612f1686828701612d5f565b9150509250925092565b612f2981613852565b82525050565b612f3881613864565b82525050565b6000612f4a83856137ab565b9350612f5783858461389a565b82840190509392505050565b6000612f6e82613795565b612f7881856137ab565b9350612f888185602086016138a9565b80840191505092915050565b6000612f9f826137a0565b612fa981856137b6565b9350612fb98185602086016138a9565b612fc281613983565b840191505092915050565b6000612fda6014836137b6565b9150612fe582613994565b602082019050919050565b6000612ffd600b836137b6565b9150613008826139bd565b602082019050919050565b60006130206026836137b6565b915061302b826139e6565b604082019050919050565b60006130436013836137b6565b915061304e82613a35565b602082019050919050565b6000613066601b836137b6565b915061307182613a5e565b602082019050919050565b60006130896016836137b6565b915061309482613a87565b602082019050919050565b60006130ac601b836137b6565b91506130b782613ab0565b602082019050919050565b60006130cf6026836137b6565b91506130da82613ad9565b604082019050919050565b60006130f26010836137b6565b91506130fd82613b28565b602082019050919050565b60006131156012836137b6565b915061312082613b51565b602082019050919050565b60006131386020836137b6565b915061314382613b7a565b602082019050919050565b600061315b602b836137b6565b915061316682613ba3565b604082019050919050565b600061317e6027836137b6565b915061318982613bf2565b604082019050919050565b60006131a1601d836137b6565b91506131ac82613c41565b602082019050919050565b60006131c4602a836137b6565b91506131cf82613c6a565b604082019050919050565b60006131e7601f836137b6565b91506131f282613cb9565b602082019050919050565b600061320a6036836137b6565b915061321582613ce2565b604082019050919050565b61322981613890565b82525050565b600061323c828486612f3e565b91508190509392505050565b60006132548284612f63565b915081905092915050565b60006020820190506132746000830184612f20565b92915050565b600060408201905061328f6000830185612f20565b61329c6020830184612f20565b9392505050565b60006060820190506132b86000830186612f20565b6132c56020830185612f20565b6132d26040830184613220565b949350505050565b6000610100820190506132f0600083018b612f20565b6132fd602083018a612f20565b61330a6040830189613220565b6133176060830188613220565b6133246080830187613220565b61333160a0830186613220565b61333e60c0830185612f20565b61334b60e0830184613220565b9998505050505050505050565b600060408201905061336d6000830185612f20565b61337a6020830184613220565b9392505050565b60006020820190506133966000830184612f2f565b92915050565b600060208201905081810360008301526133b68184612f94565b905092915050565b600060208201905081810360008301526133d781612fcd565b9050919050565b600060208201905081810360008301526133f781612ff0565b9050919050565b6000602082019050818103600083015261341781613013565b9050919050565b6000602082019050818103600083015261343781613036565b9050919050565b6000602082019050818103600083015261345781613059565b9050919050565b600060208201905081810360008301526134778161307c565b9050919050565b600060208201905081810360008301526134978161309f565b9050919050565b600060208201905081810360008301526134b7816130c2565b9050919050565b600060208201905081810360008301526134d7816130e5565b9050919050565b600060208201905081810360008301526134f781613108565b9050919050565b600060208201905081810360008301526135178161312b565b9050919050565b600060208201905081810360008301526135378161314e565b9050919050565b6000602082019050818103600083015261355781613171565b9050919050565b6000602082019050818103600083015261357781613194565b9050919050565b60006020820190508181036000830152613597816131b7565b9050919050565b600060208201905081810360008301526135b7816131da565b9050919050565b600060208201905081810360008301526135d7816131fd565b9050919050565b60006060820190506135f36000830186613220565b6136006020830185613220565b61360d6040830184613220565b949350505050565b6000808335600160200384360303811261362e57600080fd5b80840192508235915067ffffffffffffffff82111561364c57600080fd5b60208301925060208202360383131561366457600080fd5b509250929050565b6000808335600160200384360303811261368557600080fd5b80840192508235915067ffffffffffffffff8211156136a357600080fd5b6020830192506020820236038313156136bb57600080fd5b509250929050565b600080833560016020038436030381126136dc57600080fd5b80840192508235915067ffffffffffffffff8211156136fa57600080fd5b60208301925060208202360383131561371257600080fd5b509250929050565b6000808335600160200384360303811261373357600080fd5b80840192508235915067ffffffffffffffff82111561375157600080fd5b60208301925060018202360383131561376957600080fd5b509250929050565b60008235600160600383360303811261378957600080fd5b80830191505092915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006137d282613890565b91506137dd83613890565b9250826137ed576137ec613954565b5b828204905092915050565b600061380382613890565b915061380e83613890565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561384757613846613925565b5b828202905092915050565b600061385d82613870565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138c75780820151818401526020810190506138ac565b838111156138d6576000848401525b50505050565b60006138e782613890565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561391a57613919613925565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f53776170206661696c6564000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d69736d617463682045544820616d6f756e7400000000000000000000000000600082015250565b7f5377617020726f75746572206e6f742077686974656c69737465640000000000600082015250565b7f4572726f72202d20746f6f206d616e7920737761707300000000000000000000600082015250565b7f4d617820616e64206d696e2032206f757470757420746f6b656e730000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4d6178203220696e70757420746f6b656e730000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4572726f72202d204c697175696469747920726f75746572206973206e6f742060008201527f77686974656c6973746564000000000000000000000000000000000000000000602082015250565b7f4572726f72202d204d69736d61746368206c704164647265737320616e64207460008201527f6f546f6b656e7300000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015250565b613d3a81613852565b8114613d4557600080fd5b50565b613d5181613864565b8114613d5c57600080fd5b50565b613d6881613890565b8114613d7357600080fd5b5056fea2646970667358221220deef43f2d454dd4c5376f2a1f1db00d89694f6e3d1f230562ecb36d0fdd09eba64736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101025760003560e01c80637aa51fd6116100955780638f01f9d1116100645780638f01f9d1146102fb5780639378f2e114610324578063f25f4b561461034d578063f2fde38b14610378578063fcd4efd0146103a157610109565b80637aa51fd6146102535780637b72a045146102905780638456cb59146102b95780638da5cb5b146102d057610109565b80634f258ad9116100d15780634f258ad9146101ab578063540eee27146101d45780635c975abb14610211578063715018a61461023c57610109565b806326ade8201461010e5780633f138d4b146101405780633f4ba83a14610169578063404ea1bd1461018057610109565b3661010957005b600080fd5b61012860048036038101906101239190612e67565b6103ca565b604051610137939291906135de565b60405180910390f35b34801561014c57600080fd5b5061016760048036038101906101629190612e02565b611fac565b005b34801561017557600080fd5b5061017e61201c565b005b34801561018c57600080fd5b5061019561202e565b6040516101a2919061325f565b60405180910390f35b3480156101b757600080fd5b506101d260048036038101906101cd9190612d74565b612054565b005b3480156101e057600080fd5b506101fb60048036038101906101f69190612d74565b6120b7565b6040516102089190613381565b60405180910390f35b34801561021d57600080fd5b506102266120d7565b6040516102339190613381565b60405180910390f35b34801561024857600080fd5b506102516120ee565b005b34801561025f57600080fd5b5061027a60048036038101906102759190612d74565b612102565b6040516102879190613381565b60405180910390f35b34801561029c57600080fd5b506102b760048036038101906102b29190612d74565b612122565b005b3480156102c557600080fd5b506102ce612185565b005b3480156102dc57600080fd5b506102e5612197565b6040516102f2919061325f565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612dc6565b6121c0565b005b34801561033057600080fd5b5061034b60048036038101906103469190612d74565b61224e565b005b34801561035957600080fd5b506103626122b1565b60405161036f919061325f565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a9190612d74565b6122d7565b005b3480156103ad57600080fd5b506103c860048036038101906103c39190612d74565b61235b565b005b60008060006103d76123be565b6103df61240e565b60028480600001906103f19190613615565b9050111580156104135750600184806000019061040e9190613615565b905010155b610452576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610449906134de565b60405180910390fd5b60028480604001906104649190613615565b9050146104a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049d9061347e565b60405180910390fd5b8360e00160208101906104b99190612d74565b73ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156104fe57600080fd5b505afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105369190612d9d565b73ffffffffffffffffffffffffffffffffffffffff1684806040019061055c9190613615565b6000818110610594577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906105a99190612d74565b73ffffffffffffffffffffffffffffffffffffffff161480156106e257508360e00160208101906105da9190612d74565b73ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561061f57600080fd5b505afa158015610633573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106579190612d9d565b73ffffffffffffffffffffffffffffffffffffffff1684806040019061067d9190613615565b60018181106106b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906106ca9190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b8061092557508360e00160208101906106fb9190612d74565b73ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561074057600080fd5b505afa158015610754573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107789190612d9d565b73ffffffffffffffffffffffffffffffffffffffff1684806040019061079e9190613615565b60008181106107d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906107eb9190612d74565b73ffffffffffffffffffffffffffffffffffffffff1614801561092457508360e001602081019061081c9190612d74565b73ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561086157600080fd5b505afa158015610875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108999190612d9d565b73ffffffffffffffffffffffffffffffffffffffff168480604001906108bf9190613615565b60018181106108f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061090c9190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b5b610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b9061353e565b60405180910390fd5b6003600085608001600001602081019061097e9190612d74565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fc9061351e565b60405180910390fd5b6006848060600190610a17919061366c565b905010610a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a509061345e565b60405180910390fd5b60005b848060000190610a6c9190613615565b9050811015610d9657600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858060000190610abe9190613615565b83818110610af5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610b0a9190612d74565b73ffffffffffffffffffffffffffffffffffffffff161415610cad57848060200190610b3691906136c3565b82818110610b6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201353414610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac9061341e565b60405180910390fd5b846080016000016020810190610bcb9190612d74565b73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1057600080fd5b505afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190612d9d565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c8f57600080fd5b505af1158015610ca3573d6000803e3d6000fd5b5050505050610d83565b610d823330878060200190610cc291906136c3565b85818110610cf9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135888060000190610d109190613615565b86818110610d47577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610d5c9190612d74565b73ffffffffffffffffffffffffffffffffffffffff16612458909392919063ffffffff16565b5b8080610d8e906138dc565b915050610a5c565b5060005b848060600190610daa919061366c565b905081101561120d5760036000868060600190610dc7919061366c565b84818110610dfe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002810190610e109190613771565b6020016020810190610e229190612d74565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea09061343e565b60405180910390fd5b61107a858060600190610ebc919061366c565b83818110610ef3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002810190610f059190613771565b6000016020810190610f179190612d74565b868060600190610f27919061366c565b84818110610f5e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002810190610f709190613771565b6020016020810190610f829190612d74565b878060600190610f92919061366c565b85818110610fc9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002810190610fdb9190613771565b6000016020810190610fed9190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611025919061325f565b60206040518083038186803b15801561103d57600080fd5b505afa158015611051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110759190612ea8565b6124e1565b600085806060019061108c919061366c565b838181106110c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020028101906110d59190613771565b60200160208101906110e79190612d74565b73ffffffffffffffffffffffffffffffffffffffff1686806060019061110d919061366c565b84818110611144577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020028101906111569190613771565b8060400190611165919061371a565b60405161117392919061322f565b6000604051808303816000865af19150503d80600081146111b0576040519150601f19603f3d011682016040523d82523d6000602084013e6111b5565b606091505b50509050806111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f0906133de565b60405180910390fd5b508080611205906138dc565b915050610d9a565b50600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661167f576000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356c5f349336040518263ffffffff1660e01b81526004016112bc919061325f565b60206040518083038186803b1580156112d457600080fd5b505afa1580156112e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130c9190612ea8565b90506000811461167d576114c9600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611447612710611439858a80604001906113569190613615565b600081811061138e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906113a39190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113db919061325f565b60206040518083038186803b1580156113f357600080fd5b505afa158015611407573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142b9190612ea8565b61260090919063ffffffff16565b61261690919063ffffffff16565b8780604001906114579190613615565b600081811061148f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906114a49190612d74565b73ffffffffffffffffffffffffffffffffffffffff1661262c9092919063ffffffff16565b61167c600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166115fa6127106115ec858a80604001906115099190613615565b6001818110611541577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906115569190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161158e919061325f565b60206040518083038186803b1580156115a657600080fd5b505afa1580156115ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115de9190612ea8565b61260090919063ffffffff16565b61261690919063ffffffff16565b87806040019061160a9190613615565b6001818110611642577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116579190612d74565b73ffffffffffffffffffffffffffffffffffffffff1661262c9092919063ffffffff16565b5b505b6117df8480604001906116929190613615565b60008181106116ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116df9190612d74565b8560800160000160208101906116f59190612d74565b8680604001906117059190613615565b600081811061173d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906117529190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161178a919061325f565b60206040518083038186803b1580156117a257600080fd5b505afa1580156117b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117da9190612ea8565b6124e1565b61193f8480604001906117f29190613615565b600181811061182a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061183f9190612d74565b8560800160000160208101906118559190612d74565b8680604001906118659190613615565b600181811061189d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906118b29190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118ea919061325f565b60206040518083038186803b15801561190257600080fd5b505afa158015611916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193a9190612ea8565b6124e1565b8360800160000160208101906119559190612d74565b73ffffffffffffffffffffffffffffffffffffffff1663e8e337008580604001906119809190613615565b60008181106119b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906119cd9190612d74565b8680604001906119dd9190613615565b6001818110611a15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611a2a9190612d74565b878060400190611a3a9190613615565b6000818110611a72577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611a879190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611abf919061325f565b60206040518083038186803b158015611ad757600080fd5b505afa158015611aeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0f9190612ea8565b888060400190611b1f9190613615565b6001818110611b57577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611b6c9190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ba4919061325f565b60206040518083038186803b158015611bbc57600080fd5b505afa158015611bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf49190612ea8565b89608001602001358a60800160400135337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518963ffffffff1660e01b8152600401611c499897969594939291906132da565b606060405180830381600087803b158015611c6357600080fd5b505af1158015611c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9b9190612ed1565b8093508194508295505050506000848060400190611cb99190613615565b6000818110611cf1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611d069190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d3e919061325f565b60206040518083038186803b158015611d5657600080fd5b505afa158015611d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8e9190612ea8565b90506000858060400190611da29190613615565b6001818110611dda577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611def9190612d74565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e27919061325f565b60206040518083038186803b158015611e3f57600080fd5b505afa158015611e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e779190612ea8565b90506000821115611f0a57611f093383888060400190611e979190613615565b6000818110611ecf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611ee49190612d74565b73ffffffffffffffffffffffffffffffffffffffff1661262c9092919063ffffffff16565b5b6000811115611f9b57611f9a3382888060400190611f289190613615565b6001818110611f60577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611f759190612d74565b73ffffffffffffffffffffffffffffffffffffffff1661262c9092919063ffffffff16565b5b5050611fa56126b2565b9193909250565b611fb46126bb565b611fdf33828473ffffffffffffffffffffffffffffffffffffffff1661262c9092919063ffffffff16565b7f74545154aac348a3eac92596bd1971957ca94795f4e954ec5f613b55fab781298282604051612010929190613358565b60405180910390a15050565b6120246126bb565b61202c612739565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61205c6126bb565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60046020528060005260406000206000915054906101000a900460ff1681565b6000600260009054906101000a900460ff16905090565b6120f66126bb565b612100600061279c565b565b60036020528060005260406000206000915054906101000a900460ff1681565b61212a6126bb565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61218d6126bb565b612195612860565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6121c86126bb565b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6122566126bb565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122df6126bb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561234f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612346906133fe565b60405180910390fd5b6123588161279c565b50565b6123636126bb565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60026001541415612404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fb9061359e565b60405180910390fd5b6002600181905550565b6124166120d7565b15612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d906134be565b60405180910390fd5b565b6124db846323b872dd60e01b858585604051602401612479939291906132a3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128c3565b50505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040161251e92919061327a565b60206040518083038186803b15801561253657600080fd5b505afa15801561254a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256e9190612ea8565b9050818110156125fa5760008111156125ae576125ad8360008673ffffffffffffffffffffffffffffffffffffffff1661298a9092919063ffffffff16565b5b6125f9837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff1661298a9092919063ffffffff16565b5b50505050565b6000818361260e91906137f8565b905092915050565b6000818361262491906137c7565b905092915050565b6126ad8363a9059cbb60e01b848460405160240161264b929190613358565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128c3565b505050565b60018081905550565b6126c3612ae8565b73ffffffffffffffffffffffffffffffffffffffff166126e1612197565b73ffffffffffffffffffffffffffffffffffffffff1614612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272e906134fe565b60405180910390fd5b565b612741612af0565b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612785612ae8565b604051612792919061325f565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61286861240e565b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128ac612ae8565b6040516128b9919061325f565b60405180910390a1565b6000612925826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b399092919063ffffffff16565b905060008151111561298557808060200190518101906129459190612e3e565b612984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b9061357e565b60405180910390fd5b5b505050565b6000811480612a23575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b81526004016129d192919061327a565b60206040518083038186803b1580156129e957600080fd5b505afa1580156129fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a219190612ea8565b145b612a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a59906135be565b60405180910390fd5b612ae38363095ea7b360e01b8484604051602401612a81929190613358565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128c3565b505050565b600033905090565b612af86120d7565b612b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2e906133be565b60405180910390fd5b565b6060612b488484600085612b51565b90509392505050565b606082471015612b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8d9061349e565b60405180910390fd5b612b9f85612c65565b612bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd59061355e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612c079190613248565b60006040518083038185875af1925050503d8060008114612c44576040519150601f19603f3d011682016040523d82523d6000602084013e612c49565b606091505b5091509150612c59828286612c88565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315612c9857829050612ce8565b600083511115612cab5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdf919061339c565b60405180910390fd5b9392505050565b600081359050612cfe81613d31565b92915050565b600081519050612d1381613d31565b92915050565b600081519050612d2881613d48565b92915050565b60006101008284031215612d4157600080fd5b81905092915050565b600081359050612d5981613d5f565b92915050565b600081519050612d6e81613d5f565b92915050565b600060208284031215612d8657600080fd5b6000612d9484828501612cef565b91505092915050565b600060208284031215612daf57600080fd5b6000612dbd84828501612d04565b91505092915050565b60008060408385031215612dd957600080fd5b6000612de785828601612cef565b9250506020612df885828601612cef565b9150509250929050565b60008060408385031215612e1557600080fd5b6000612e2385828601612cef565b9250506020612e3485828601612d4a565b9150509250929050565b600060208284031215612e5057600080fd5b6000612e5e84828501612d19565b91505092915050565b600060208284031215612e7957600080fd5b600082013567ffffffffffffffff811115612e9357600080fd5b612e9f84828501612d2e565b91505092915050565b600060208284031215612eba57600080fd5b6000612ec884828501612d5f565b91505092915050565b600080600060608486031215612ee657600080fd5b6000612ef486828701612d5f565b9350506020612f0586828701612d5f565b9250506040612f1686828701612d5f565b9150509250925092565b612f2981613852565b82525050565b612f3881613864565b82525050565b6000612f4a83856137ab565b9350612f5783858461389a565b82840190509392505050565b6000612f6e82613795565b612f7881856137ab565b9350612f888185602086016138a9565b80840191505092915050565b6000612f9f826137a0565b612fa981856137b6565b9350612fb98185602086016138a9565b612fc281613983565b840191505092915050565b6000612fda6014836137b6565b9150612fe582613994565b602082019050919050565b6000612ffd600b836137b6565b9150613008826139bd565b602082019050919050565b60006130206026836137b6565b915061302b826139e6565b604082019050919050565b60006130436013836137b6565b915061304e82613a35565b602082019050919050565b6000613066601b836137b6565b915061307182613a5e565b602082019050919050565b60006130896016836137b6565b915061309482613a87565b602082019050919050565b60006130ac601b836137b6565b91506130b782613ab0565b602082019050919050565b60006130cf6026836137b6565b91506130da82613ad9565b604082019050919050565b60006130f26010836137b6565b91506130fd82613b28565b602082019050919050565b60006131156012836137b6565b915061312082613b51565b602082019050919050565b60006131386020836137b6565b915061314382613b7a565b602082019050919050565b600061315b602b836137b6565b915061316682613ba3565b604082019050919050565b600061317e6027836137b6565b915061318982613bf2565b604082019050919050565b60006131a1601d836137b6565b91506131ac82613c41565b602082019050919050565b60006131c4602a836137b6565b91506131cf82613c6a565b604082019050919050565b60006131e7601f836137b6565b91506131f282613cb9565b602082019050919050565b600061320a6036836137b6565b915061321582613ce2565b604082019050919050565b61322981613890565b82525050565b600061323c828486612f3e565b91508190509392505050565b60006132548284612f63565b915081905092915050565b60006020820190506132746000830184612f20565b92915050565b600060408201905061328f6000830185612f20565b61329c6020830184612f20565b9392505050565b60006060820190506132b86000830186612f20565b6132c56020830185612f20565b6132d26040830184613220565b949350505050565b6000610100820190506132f0600083018b612f20565b6132fd602083018a612f20565b61330a6040830189613220565b6133176060830188613220565b6133246080830187613220565b61333160a0830186613220565b61333e60c0830185612f20565b61334b60e0830184613220565b9998505050505050505050565b600060408201905061336d6000830185612f20565b61337a6020830184613220565b9392505050565b60006020820190506133966000830184612f2f565b92915050565b600060208201905081810360008301526133b68184612f94565b905092915050565b600060208201905081810360008301526133d781612fcd565b9050919050565b600060208201905081810360008301526133f781612ff0565b9050919050565b6000602082019050818103600083015261341781613013565b9050919050565b6000602082019050818103600083015261343781613036565b9050919050565b6000602082019050818103600083015261345781613059565b9050919050565b600060208201905081810360008301526134778161307c565b9050919050565b600060208201905081810360008301526134978161309f565b9050919050565b600060208201905081810360008301526134b7816130c2565b9050919050565b600060208201905081810360008301526134d7816130e5565b9050919050565b600060208201905081810360008301526134f781613108565b9050919050565b600060208201905081810360008301526135178161312b565b9050919050565b600060208201905081810360008301526135378161314e565b9050919050565b6000602082019050818103600083015261355781613171565b9050919050565b6000602082019050818103600083015261357781613194565b9050919050565b60006020820190508181036000830152613597816131b7565b9050919050565b600060208201905081810360008301526135b7816131da565b9050919050565b600060208201905081810360008301526135d7816131fd565b9050919050565b60006060820190506135f36000830186613220565b6136006020830185613220565b61360d6040830184613220565b949350505050565b6000808335600160200384360303811261362e57600080fd5b80840192508235915067ffffffffffffffff82111561364c57600080fd5b60208301925060208202360383131561366457600080fd5b509250929050565b6000808335600160200384360303811261368557600080fd5b80840192508235915067ffffffffffffffff8211156136a357600080fd5b6020830192506020820236038313156136bb57600080fd5b509250929050565b600080833560016020038436030381126136dc57600080fd5b80840192508235915067ffffffffffffffff8211156136fa57600080fd5b60208301925060208202360383131561371257600080fd5b509250929050565b6000808335600160200384360303811261373357600080fd5b80840192508235915067ffffffffffffffff82111561375157600080fd5b60208301925060018202360383131561376957600080fd5b509250929050565b60008235600160600383360303811261378957600080fd5b80830191505092915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006137d282613890565b91506137dd83613890565b9250826137ed576137ec613954565b5b828204905092915050565b600061380382613890565b915061380e83613890565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561384757613846613925565b5b828202905092915050565b600061385d82613870565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138c75780820151818401526020810190506138ac565b838111156138d6576000848401525b50505050565b60006138e782613890565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561391a57613919613925565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f53776170206661696c6564000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d69736d617463682045544820616d6f756e7400000000000000000000000000600082015250565b7f5377617020726f75746572206e6f742077686974656c69737465640000000000600082015250565b7f4572726f72202d20746f6f206d616e7920737761707300000000000000000000600082015250565b7f4d617820616e64206d696e2032206f757470757420746f6b656e730000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4d6178203220696e70757420746f6b656e730000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4572726f72202d204c697175696469747920726f75746572206973206e6f742060008201527f77686974656c6973746564000000000000000000000000000000000000000000602082015250565b7f4572726f72202d204d69736d61746368206c704164647265737320616e64207460008201527f6f546f6b656e7300000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015250565b613d3a81613852565b8114613d4557600080fd5b50565b613d5181613864565b8114613d5c57600080fd5b50565b613d6881613890565b8114613d7357600080fd5b5056fea2646970667358221220deef43f2d454dd4c5376f2a1f1db00d89694f6e3d1f230562ecb36d0fdd09eba64736f6c63430008040033
Deployed Bytecode Sourcemap
43505:7016:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45058:3868;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;49596:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50416:65;;;;;;;;;;;;;:::i;:::-;;43864:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49971:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43703:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33554:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31064:103;;;;;;;;;;;;;:::i;:::-;;43648:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50221:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50347:61;;;;;;;;;;;;;:::i;:::-;;30416:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49404:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50099:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43833:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31322:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49847:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45058:3868;45169:18;45189;45209:17;9386:21;:19;:21::i;:::-;33159:19:::1;:17;:19::i;:::-;45273:1:::2;45246:6;:16;;;;;;;;:::i;:::-;:23;;:28;;:59;;;;;45304:1;45278:6;:16;;;;;;;;:::i;:::-;:23;;:27;;45246:59;45238:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;45374:1;45347:6;:16;;;;;;;;:::i;:::-;:23;;:28;45339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45464:6;:17;;;;;;;;;;:::i;:::-;45449:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45426:65;;:6;:16;;;;;;;;:::i;:::-;45443:1;45426:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;;;:134;;;;;45533:6;:17;;;;;;;;;;:::i;:::-;45518:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45495:65;;:6;:16;;;;;;;;:::i;:::-;45512:1;45495:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;;;45426:134;:286;;;;45616:6;:17;;;;;;;;;;:::i;:::-;45601:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45578:65;;:6;:16;;;;;;;;:::i;:::-;45595:1;45578:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;;;:134;;;;;45685:6;:17;;;;;;;;;;:::i;:::-;45670:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45647:65;;:6;:16;;;;;;;;:::i;:::-;45664:1;45647:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;;;45578:134;45426:286;45418:351;;;;;;;;;;;;:::i;:::-;;;;;;;;;45788:16;:49;45805:6;:23;;:31;;;;;;;;;;:::i;:::-;45788:49;;;;;;;;;;;;;;;;;;;;;;;;;45780:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;45926:1;45904:6;:12;;;;;;;;:::i;:::-;:19;;:23;45896:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;46065:6;46061:494;46081:6;:16;;;;;;;;:::i;:::-;:23;;46077:1;:27;46061:494;;;46151:13;;;;;;;;;;;46128:36;;:6;:16;;;;;;;;:::i;:::-;46145:1;46128:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;;46125:419;;;46205:6;:17;;;;;;;;:::i;:::-;46223:1;46205:20;;;;;;;;;;;;;;;;;;;;;46192:9;:33;46184:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;46301:6;:23;;:31;;;;;;;;;;:::i;:::-;46282:56;;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46268:104;;;46381:9;46268:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;46125:419;;;46435:93;46480:10;46500:4;46507:6;:17;;;;;;;;:::i;:::-;46525:1;46507:20;;;;;;;;;;;;;;;;;;;;;46442:6;:16;;;;;;;;:::i;:::-;46459:1;46442:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46435:44;;;;:93;;;;;;:::i;:::-;46125:419;46106:3;;;;;:::i;:::-;;;;46061:494;;;;46594:6;46590:433;46610:6;:12;;;;;;;;:::i;:::-;:19;;46606:1;:23;46590:433;;;46658:16;:41;46675:6;:12;;;;;;;;:::i;:::-;46688:1;46675:15;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:23;;;;;;;;;;:::i;:::-;46658:41;;;;;;;;;;;;;;;;;;;;;;;;;46650:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;46746:132;46765:6;:12;;;;;;;;:::i;:::-;46778:1;46765:15;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:26;;;;;;;;;;:::i;:::-;46793:6;:12;;;;;;;;:::i;:::-;46806:1;46793:15;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:23;;;;;;;;;;:::i;:::-;46825:6;:12;;;;;;;;:::i;:::-;46838:1;46825:15;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:26;;;;;;;;;;:::i;:::-;46818:44;;;46871:4;46818:59;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46746:18;:132::i;:::-;46894:12;46912:6;:12;;;;;;;;:::i;:::-;46925:1;46912:15;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:23;;;;;;;;;;:::i;:::-;:28;;46941:6;:12;;;;;;;;:::i;:::-;46954:1;46941:15;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:23;;;;;;;;:::i;:::-;46912:53;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46893:72;;;46988:7;46980:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;46590:433;46631:3;;;;;:::i;:::-;;;;46590:433;;;;47087:16;:28;47104:10;47087:28;;;;;;;;;;;;;;;;;;;;;;;;;47083:516;;47131:11;47168:21;;;;;;;;;;;47145:53;;;47199:10;47145:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47131:79;;47282:1;47275:3;:8;47271:317;;47303:125;47344:9;;;;;;;;;;;47355:72;47421:5;47355:61;47412:3;47362:6;:16;;;;;;;;:::i;:::-;47379:1;47362:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47355:37;;;47401:4;47355:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;:65;;:72;;;;:::i;:::-;47310:6;:16;;;;;;;;:::i;:::-;47327:1;47310:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47303:40;;;;:125;;;;;:::i;:::-;47447;47488:9;;;;;;;;;;;47499:72;47565:5;47499:61;47556:3;47506:6;:16;;;;;;;;:::i;:::-;47523:1;47506:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47499:37;;;47545:4;47499:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;:65;;:72;;;;:::i;:::-;47454:6;:16;;;;;;;;:::i;:::-;47471:1;47454:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47447:40;;;;:125;;;;;:::i;:::-;47271:317;47083:516;;47652:126;47671:6;:16;;;;;;;;:::i;:::-;47688:1;47671:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47692:6;:23;;:31;;;;;;;;;;:::i;:::-;47732:6;:16;;;;;;;;:::i;:::-;47749:1;47732:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47725:37;;;47771:4;47725:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47652:18;:126::i;:::-;47789;47808:6;:16;;;;;;;;:::i;:::-;47825:1;47808:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47829:6;:23;;:31;;;;;;;;;;:::i;:::-;47869:6;:16;;;;;;;;:::i;:::-;47886:1;47869:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47862:37;;;47908:4;47862:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47789:18;:126::i;:::-;48034:6;:23;;:31;;;;;;;;;;:::i;:::-;48015:64;;;48094:6;:16;;;;;;;;:::i;:::-;48111:1;48094:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48128:6;:16;;;;;;;;:::i;:::-;48145:1;48128:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48169:6;:16;;;;;;;;:::i;:::-;48186:1;48169:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48162:37;;;48208:4;48162:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48236:6;:16;;;;;;;;:::i;:::-;48253:1;48236:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48229:37;;;48275:4;48229:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48296:6;:23;;:35;;;48346:6;:23;;:35;;;48396:10;48429:66;48015:492;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47977:530;;;;;;;;;;;;48561:16;48587:6;:16;;;;;;;;:::i;:::-;48604:1;48587:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48580:37;;;48626:4;48580:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48561:71;;48643:16;48669:6;:16;;;;;;;;:::i;:::-;48686:1;48669:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48662:37;;;48708:4;48662:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48643:71;;48740:1;48729:8;:12;48725:92;;;48744:71;48793:10;48806:8;48751:6;:16;;;;;;;;:::i;:::-;48768:1;48751:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48744:40;;;;:71;;;;;:::i;:::-;48725:92;48842:1;48831:8;:12;48827:92;;;48846:71;48895:10;48908:8;48853:6;:16;;;;;;;;:::i;:::-;48870:1;48853:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48846:40;;;;:71;;;;;:::i;:::-;48827:92;33189:1;;9430:20:::0;:18;:20::i;:::-;45058:3868;;;;;:::o;49596:243::-;30302:13;:11;:13::i;:::-;49699:69:::1;49742:10;49755:12;49706:13;49699:34;;;;:69;;;;;:::i;:::-;49784:47;49803:13;49818:12;49784:47;;;;;;;:::i;:::-;;;;;;;;49596:243:::0;;:::o;50416:65::-;30302:13;:11;:13::i;:::-;50463:10:::1;:8;:10::i;:::-;50416:65::o:0;43864:36::-;;;;;;;;;;;;;:::o;49971:120::-;30302:13;:11;:13::i;:::-;50078:5:::1;50049:16;:26;50066:8;50049:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;49971:120:::0;:::o;43703:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;33554:86::-;33601:4;33625:7;;;;;;;;;;;33618:14;;33554:86;:::o;31064:103::-;30302:13;:11;:13::i;:::-;31129:30:::1;31156:1;31129:18;:30::i;:::-;31064:103::o:0;43648:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;50221:118::-;30302:13;:11;:13::i;:::-;50326:5:::1;50298:16;:25;50315:7;50298:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;50221:118:::0;:::o;50347:61::-;30302:13;:11;:13::i;:::-;50392:8:::1;:6;:8::i;:::-;50347:61::o:0;30416:87::-;30462:7;30489:6;;;;;;;;;;;30482:13;;30416:87;:::o;49404:184::-;30302:13;:11;:13::i;:::-;49513:10:::1;49501:9;;:22;;;;;;;;;;;;;;;;;;49558;49534:21;;:46;;;;;;;;;;;;;;;;;;49404:184:::0;;:::o;50099:114::-;30302:13;:11;:13::i;:::-;50201:4:::1;50173:16;:25;50190:7;50173:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;50099:114:::0;:::o;43833:24::-;;;;;;;;;;;;;:::o;31322:201::-;30302:13;:11;:13::i;:::-;31431:1:::1;31411:22;;:8;:22;;;;31403:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31487:28;31506:8;31487:18;:28::i;:::-;31322:201:::0;:::o;49847:116::-;30302:13;:11;:13::i;:::-;49951:4:::1;49922:16;:26;49939:8;49922:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;49847:116:::0;:::o;9466:293::-;8868:1;9600:7;;:19;;9592:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;8868:1;9733:7;:18;;;;9466:293::o;33713:108::-;33784:8;:6;:8::i;:::-;33783:9;33775:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33713:108::o;24717:248::-;24861:96;24881:5;24911:27;;;24940:4;24946:2;24950:5;24888:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24861:19;:96::i;:::-;24717:248;;;;:::o;48934:462::-;49059:17;49086:5;49079:23;;;49111:4;49118:2;49079:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49059:62;;49148:6;49136:9;:18;49132:257;;;49187:1;49175:9;:13;49171:86;;;49209:32;49235:2;49239:1;49216:5;49209:25;;;;:32;;;;;:::i;:::-;49171:86;49271:106;49297:2;49309:66;49278:5;49271:25;;;;:106;;;;;:::i;:::-;49132:257;48934:462;;;;:::o;3614:98::-;3672:7;3703:1;3699;:5;;;;:::i;:::-;3692:12;;3614:98;;;;:::o;4013:::-;4071:7;4102:1;4098;:5;;;;:::i;:::-;4091:12;;4013:98;;;;:::o;24498:211::-;24615:86;24635:5;24665:23;;;24690:2;24694:5;24642:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24615:19;:86::i;:::-;24498:211;;;:::o;9767:213::-;8824:1;9950:7;:22;;;;9767:213::o;30581:132::-;30656:12;:10;:12::i;:::-;30645:23;;:7;:5;:7::i;:::-;:23;;;30637:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30581:132::o;34409:120::-;33418:16;:14;:16::i;:::-;34478:5:::1;34468:7;;:15;;;;;;;;;;;;;;;;;;34499:22;34508:12;:10;:12::i;:::-;34499:22;;;;;;:::i;:::-;;;;;;;;34409:120::o:0;31683:191::-;31757:16;31776:6;;;;;;;;;;;31757:25;;31802:8;31793:6;;:17;;;;;;;;;;;;;;;;;;31857:8;31826:40;;31847:8;31826:40;;;;;;;;;;;;31683:191;;:::o;34150:118::-;33159:19;:17;:19::i;:::-;34220:4:::1;34210:7;;:14;;;;;;;;;;;;;;;;;;34240:20;34247:12;:10;:12::i;:::-;34240:20;;;;;;:::i;:::-;;;;;;;;34150:118::o:0;27565:716::-;27989:23;28015:69;28043:4;28015:69;;;;;;;;;;;;;;;;;28023:5;28015:27;;;;:69;;;;;:::i;:::-;27989:95;;28119:1;28099:10;:17;:21;28095:179;;;28196:10;28185:30;;;;;;;;;;;;:::i;:::-;28177:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28095:179;27565:716;;;:::o;25234:616::-;25607:1;25598:5;:10;25597:62;;;;25657:1;25614:5;:15;;;25638:4;25645:7;25614:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;25597:62;25575:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;25752:90;25772:5;25802:22;;;25826:7;25835:5;25779:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25752:19;:90::i;:::-;25234:616;;;:::o;28967:98::-;29020:7;29047:10;29040:17;;28967:98;:::o;33898:108::-;33965:8;:6;:8::i;:::-;33957:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;33898:108::o;13965:229::-;14102:12;14134:52;14156:6;14164:4;14170:1;14173:12;14134:21;:52::i;:::-;14127:59;;13965:229;;;;;:::o;15085:510::-;15255:12;15313:5;15288:21;:30;;15280:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;15380:18;15391:6;15380:10;:18::i;:::-;15372:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;15446:12;15460:23;15487:6;:11;;15506:5;15513:4;15487:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15445:73;;;;15536:51;15553:7;15562:10;15574:12;15536:16;:51::i;:::-;15529:58;;;;15085:510;;;;;;:::o;11220:326::-;11280:4;11537:1;11515:7;:19;;;:23;11508:30;;11220:326;;;:::o;17771:762::-;17921:12;17950:7;17946:580;;;17981:10;17974:17;;;;17946:580;18115:1;18095:10;:17;:21;18091:424;;;18343:10;18337:17;18404:15;18391:10;18387:2;18383:19;18376:44;18291:148;18486:12;18479:20;;;;;;;;;;;:::i;:::-;;;;;;;;17771:762;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:137::-;355:5;386:6;380:13;371:22;;402:30;426:5;402:30;:::i;:::-;361:77;;;;:::o;489:167::-;564:5;605:3;596:6;591:3;587:16;583:26;580:2;;;622:1;619;612:12;580:2;644:6;635:15;;570:86;;;;:::o;662:139::-;708:5;746:6;733:20;724:29;;762:33;789:5;762:33;:::i;:::-;714:87;;;;:::o;807:143::-;864:5;895:6;889:13;880:22;;911:33;938:5;911:33;:::i;:::-;870:80;;;;:::o;956:262::-;1015:6;1064:2;1052:9;1043:7;1039:23;1035:32;1032:2;;;1080:1;1077;1070:12;1032:2;1123:1;1148:53;1193:7;1184:6;1173:9;1169:22;1148:53;:::i;:::-;1138:63;;1094:117;1022:196;;;;:::o;1224:284::-;1294:6;1343:2;1331:9;1322:7;1318:23;1314:32;1311:2;;;1359:1;1356;1349:12;1311:2;1402:1;1427:64;1483:7;1474:6;1463:9;1459:22;1427:64;:::i;:::-;1417:74;;1373:128;1301:207;;;;:::o;1514:407::-;1582:6;1590;1639:2;1627:9;1618:7;1614:23;1610:32;1607:2;;;1655:1;1652;1645:12;1607:2;1698:1;1723:53;1768:7;1759:6;1748:9;1744:22;1723:53;:::i;:::-;1713:63;;1669:117;1825:2;1851:53;1896:7;1887:6;1876:9;1872:22;1851:53;:::i;:::-;1841:63;;1796:118;1597:324;;;;;:::o;1927:407::-;1995:6;2003;2052:2;2040:9;2031:7;2027:23;2023:32;2020:2;;;2068:1;2065;2058:12;2020:2;2111:1;2136:53;2181:7;2172:6;2161:9;2157:22;2136:53;:::i;:::-;2126:63;;2082:117;2238:2;2264:53;2309:7;2300:6;2289:9;2285:22;2264:53;:::i;:::-;2254:63;;2209:118;2010:324;;;;;:::o;2340:278::-;2407:6;2456:2;2444:9;2435:7;2431:23;2427:32;2424:2;;;2472:1;2469;2462:12;2424:2;2515:1;2540:61;2593:7;2584:6;2573:9;2569:22;2540:61;:::i;:::-;2530:71;;2486:125;2414:204;;;;:::o;2624:413::-;2712:6;2761:2;2749:9;2740:7;2736:23;2732:32;2729:2;;;2777:1;2774;2767:12;2729:2;2848:1;2837:9;2833:17;2820:31;2878:18;2870:6;2867:30;2864:2;;;2910:1;2907;2900:12;2864:2;2938:82;3012:7;3003:6;2992:9;2988:22;2938:82;:::i;:::-;2928:92;;2791:239;2719:318;;;;:::o;3043:284::-;3113:6;3162:2;3150:9;3141:7;3137:23;3133:32;3130:2;;;3178:1;3175;3168:12;3130:2;3221:1;3246:64;3302:7;3293:6;3282:9;3278:22;3246:64;:::i;:::-;3236:74;;3192:128;3120:207;;;;:::o;3333:596::-;3421:6;3429;3437;3486:2;3474:9;3465:7;3461:23;3457:32;3454:2;;;3502:1;3499;3492:12;3454:2;3545:1;3570:64;3626:7;3617:6;3606:9;3602:22;3570:64;:::i;:::-;3560:74;;3516:128;3683:2;3709:64;3765:7;3756:6;3745:9;3741:22;3709:64;:::i;:::-;3699:74;;3654:129;3822:2;3848:64;3904:7;3895:6;3884:9;3880:22;3848:64;:::i;:::-;3838:74;;3793:129;3444:485;;;;;:::o;3935:118::-;4022:24;4040:5;4022:24;:::i;:::-;4017:3;4010:37;4000:53;;:::o;4059:109::-;4140:21;4155:5;4140:21;:::i;:::-;4135:3;4128:34;4118:50;;:::o;4196:314::-;4310:3;4331:88;4412:6;4407:3;4331:88;:::i;:::-;4324:95;;4429:43;4465:6;4460:3;4453:5;4429:43;:::i;:::-;4497:6;4492:3;4488:16;4481:23;;4314:196;;;;;:::o;4516:373::-;4620:3;4648:38;4680:5;4648:38;:::i;:::-;4702:88;4783:6;4778:3;4702:88;:::i;:::-;4695:95;;4799:52;4844:6;4839:3;4832:4;4825:5;4821:16;4799:52;:::i;:::-;4876:6;4871:3;4867:16;4860:23;;4624:265;;;;;:::o;4895:364::-;4983:3;5011:39;5044:5;5011:39;:::i;:::-;5066:71;5130:6;5125:3;5066:71;:::i;:::-;5059:78;;5146:52;5191:6;5186:3;5179:4;5172:5;5168:16;5146:52;:::i;:::-;5223:29;5245:6;5223:29;:::i;:::-;5218:3;5214:39;5207:46;;4987:272;;;;;:::o;5265:366::-;5407:3;5428:67;5492:2;5487:3;5428:67;:::i;:::-;5421:74;;5504:93;5593:3;5504:93;:::i;:::-;5622:2;5617:3;5613:12;5606:19;;5411:220;;;:::o;5637:366::-;5779:3;5800:67;5864:2;5859:3;5800:67;:::i;:::-;5793:74;;5876:93;5965:3;5876:93;:::i;:::-;5994:2;5989:3;5985:12;5978:19;;5783:220;;;:::o;6009:366::-;6151:3;6172:67;6236:2;6231:3;6172:67;:::i;:::-;6165:74;;6248:93;6337:3;6248:93;:::i;:::-;6366:2;6361:3;6357:12;6350:19;;6155:220;;;:::o;6381:366::-;6523:3;6544:67;6608:2;6603:3;6544:67;:::i;:::-;6537:74;;6620:93;6709:3;6620:93;:::i;:::-;6738:2;6733:3;6729:12;6722:19;;6527:220;;;:::o;6753:366::-;6895:3;6916:67;6980:2;6975:3;6916:67;:::i;:::-;6909:74;;6992:93;7081:3;6992:93;:::i;:::-;7110:2;7105:3;7101:12;7094:19;;6899:220;;;:::o;7125:366::-;7267:3;7288:67;7352:2;7347:3;7288:67;:::i;:::-;7281:74;;7364:93;7453:3;7364:93;:::i;:::-;7482:2;7477:3;7473:12;7466:19;;7271:220;;;:::o;7497:366::-;7639:3;7660:67;7724:2;7719:3;7660:67;:::i;:::-;7653:74;;7736:93;7825:3;7736:93;:::i;:::-;7854:2;7849:3;7845:12;7838:19;;7643:220;;;:::o;7869:366::-;8011:3;8032:67;8096:2;8091:3;8032:67;:::i;:::-;8025:74;;8108:93;8197:3;8108:93;:::i;:::-;8226:2;8221:3;8217:12;8210:19;;8015:220;;;:::o;8241:366::-;8383:3;8404:67;8468:2;8463:3;8404:67;:::i;:::-;8397:74;;8480:93;8569:3;8480:93;:::i;:::-;8598:2;8593:3;8589:12;8582:19;;8387:220;;;:::o;8613:366::-;8755:3;8776:67;8840:2;8835:3;8776:67;:::i;:::-;8769:74;;8852:93;8941:3;8852:93;:::i;:::-;8970:2;8965:3;8961:12;8954:19;;8759:220;;;:::o;8985:366::-;9127:3;9148:67;9212:2;9207:3;9148:67;:::i;:::-;9141:74;;9224:93;9313:3;9224:93;:::i;:::-;9342:2;9337:3;9333:12;9326:19;;9131:220;;;:::o;9357:366::-;9499:3;9520:67;9584:2;9579:3;9520:67;:::i;:::-;9513:74;;9596:93;9685:3;9596:93;:::i;:::-;9714:2;9709:3;9705:12;9698:19;;9503:220;;;:::o;9729:366::-;9871:3;9892:67;9956:2;9951:3;9892:67;:::i;:::-;9885:74;;9968:93;10057:3;9968:93;:::i;:::-;10086:2;10081:3;10077:12;10070:19;;9875:220;;;:::o;10101:366::-;10243:3;10264:67;10328:2;10323:3;10264:67;:::i;:::-;10257:74;;10340:93;10429:3;10340:93;:::i;:::-;10458:2;10453:3;10449:12;10442:19;;10247:220;;;:::o;10473:366::-;10615:3;10636:67;10700:2;10695:3;10636:67;:::i;:::-;10629:74;;10712:93;10801:3;10712:93;:::i;:::-;10830:2;10825:3;10821:12;10814:19;;10619:220;;;:::o;10845:366::-;10987:3;11008:67;11072:2;11067:3;11008:67;:::i;:::-;11001:74;;11084:93;11173:3;11084:93;:::i;:::-;11202:2;11197:3;11193:12;11186:19;;10991:220;;;:::o;11217:366::-;11359:3;11380:67;11444:2;11439:3;11380:67;:::i;:::-;11373:74;;11456:93;11545:3;11456:93;:::i;:::-;11574:2;11569:3;11565:12;11558:19;;11363:220;;;:::o;11589:118::-;11676:24;11694:5;11676:24;:::i;:::-;11671:3;11664:37;11654:53;;:::o;11713:291::-;11853:3;11875:103;11974:3;11965:6;11957;11875:103;:::i;:::-;11868:110;;11995:3;11988:10;;11857:147;;;;;:::o;12010:271::-;12140:3;12162:93;12251:3;12242:6;12162:93;:::i;:::-;12155:100;;12272:3;12265:10;;12144:137;;;;:::o;12287:222::-;12380:4;12418:2;12407:9;12403:18;12395:26;;12431:71;12499:1;12488:9;12484:17;12475:6;12431:71;:::i;:::-;12385:124;;;;:::o;12515:332::-;12636:4;12674:2;12663:9;12659:18;12651:26;;12687:71;12755:1;12744:9;12740:17;12731:6;12687:71;:::i;:::-;12768:72;12836:2;12825:9;12821:18;12812:6;12768:72;:::i;:::-;12641:206;;;;;:::o;12853:442::-;13002:4;13040:2;13029:9;13025:18;13017:26;;13053:71;13121:1;13110:9;13106:17;13097:6;13053:71;:::i;:::-;13134:72;13202:2;13191:9;13187:18;13178:6;13134:72;:::i;:::-;13216;13284:2;13273:9;13269:18;13260:6;13216:72;:::i;:::-;13007:288;;;;;;:::o;13301:997::-;13590:4;13628:3;13617:9;13613:19;13605:27;;13642:71;13710:1;13699:9;13695:17;13686:6;13642:71;:::i;:::-;13723:72;13791:2;13780:9;13776:18;13767:6;13723:72;:::i;:::-;13805;13873:2;13862:9;13858:18;13849:6;13805:72;:::i;:::-;13887;13955:2;13944:9;13940:18;13931:6;13887:72;:::i;:::-;13969:73;14037:3;14026:9;14022:19;14013:6;13969:73;:::i;:::-;14052;14120:3;14109:9;14105:19;14096:6;14052:73;:::i;:::-;14135;14203:3;14192:9;14188:19;14179:6;14135:73;:::i;:::-;14218;14286:3;14275:9;14271:19;14262:6;14218:73;:::i;:::-;13595:703;;;;;;;;;;;:::o;14304:332::-;14425:4;14463:2;14452:9;14448:18;14440:26;;14476:71;14544:1;14533:9;14529:17;14520:6;14476:71;:::i;:::-;14557:72;14625:2;14614:9;14610:18;14601:6;14557:72;:::i;:::-;14430:206;;;;;:::o;14642:210::-;14729:4;14767:2;14756:9;14752:18;14744:26;;14780:65;14842:1;14831:9;14827:17;14818:6;14780:65;:::i;:::-;14734:118;;;;:::o;14858:313::-;14971:4;15009:2;14998:9;14994:18;14986:26;;15058:9;15052:4;15048:20;15044:1;15033:9;15029:17;15022:47;15086:78;15159:4;15150:6;15086:78;:::i;:::-;15078:86;;14976:195;;;;:::o;15177:419::-;15343:4;15381:2;15370:9;15366:18;15358:26;;15430:9;15424:4;15420:20;15416:1;15405:9;15401:17;15394:47;15458:131;15584:4;15458:131;:::i;:::-;15450:139;;15348:248;;;:::o;15602:419::-;15768:4;15806:2;15795:9;15791:18;15783:26;;15855:9;15849:4;15845:20;15841:1;15830:9;15826:17;15819:47;15883:131;16009:4;15883:131;:::i;:::-;15875:139;;15773:248;;;:::o;16027:419::-;16193:4;16231:2;16220:9;16216:18;16208:26;;16280:9;16274:4;16270:20;16266:1;16255:9;16251:17;16244:47;16308:131;16434:4;16308:131;:::i;:::-;16300:139;;16198:248;;;:::o;16452:419::-;16618:4;16656:2;16645:9;16641:18;16633:26;;16705:9;16699:4;16695:20;16691:1;16680:9;16676:17;16669:47;16733:131;16859:4;16733:131;:::i;:::-;16725:139;;16623:248;;;:::o;16877:419::-;17043:4;17081:2;17070:9;17066:18;17058:26;;17130:9;17124:4;17120:20;17116:1;17105:9;17101:17;17094:47;17158:131;17284:4;17158:131;:::i;:::-;17150:139;;17048:248;;;:::o;17302:419::-;17468:4;17506:2;17495:9;17491:18;17483:26;;17555:9;17549:4;17545:20;17541:1;17530:9;17526:17;17519:47;17583:131;17709:4;17583:131;:::i;:::-;17575:139;;17473:248;;;:::o;17727:419::-;17893:4;17931:2;17920:9;17916:18;17908:26;;17980:9;17974:4;17970:20;17966:1;17955:9;17951:17;17944:47;18008:131;18134:4;18008:131;:::i;:::-;18000:139;;17898:248;;;:::o;18152:419::-;18318:4;18356:2;18345:9;18341:18;18333:26;;18405:9;18399:4;18395:20;18391:1;18380:9;18376:17;18369:47;18433:131;18559:4;18433:131;:::i;:::-;18425:139;;18323:248;;;:::o;18577:419::-;18743:4;18781:2;18770:9;18766:18;18758:26;;18830:9;18824:4;18820:20;18816:1;18805:9;18801:17;18794:47;18858:131;18984:4;18858:131;:::i;:::-;18850:139;;18748:248;;;:::o;19002:419::-;19168:4;19206:2;19195:9;19191:18;19183:26;;19255:9;19249:4;19245:20;19241:1;19230:9;19226:17;19219:47;19283:131;19409:4;19283:131;:::i;:::-;19275:139;;19173:248;;;:::o;19427:419::-;19593:4;19631:2;19620:9;19616:18;19608:26;;19680:9;19674:4;19670:20;19666:1;19655:9;19651:17;19644:47;19708:131;19834:4;19708:131;:::i;:::-;19700:139;;19598:248;;;:::o;19852:419::-;20018:4;20056:2;20045:9;20041:18;20033:26;;20105:9;20099:4;20095:20;20091:1;20080:9;20076:17;20069:47;20133:131;20259:4;20133:131;:::i;:::-;20125:139;;20023:248;;;:::o;20277:419::-;20443:4;20481:2;20470:9;20466:18;20458:26;;20530:9;20524:4;20520:20;20516:1;20505:9;20501:17;20494:47;20558:131;20684:4;20558:131;:::i;:::-;20550:139;;20448:248;;;:::o;20702:419::-;20868:4;20906:2;20895:9;20891:18;20883:26;;20955:9;20949:4;20945:20;20941:1;20930:9;20926:17;20919:47;20983:131;21109:4;20983:131;:::i;:::-;20975:139;;20873:248;;;:::o;21127:419::-;21293:4;21331:2;21320:9;21316:18;21308:26;;21380:9;21374:4;21370:20;21366:1;21355:9;21351:17;21344:47;21408:131;21534:4;21408:131;:::i;:::-;21400:139;;21298:248;;;:::o;21552:419::-;21718:4;21756:2;21745:9;21741:18;21733:26;;21805:9;21799:4;21795:20;21791:1;21780:9;21776:17;21769:47;21833:131;21959:4;21833:131;:::i;:::-;21825:139;;21723:248;;;:::o;21977:419::-;22143:4;22181:2;22170:9;22166:18;22158:26;;22230:9;22224:4;22220:20;22216:1;22205:9;22201:17;22194:47;22258:131;22384:4;22258:131;:::i;:::-;22250:139;;22148:248;;;:::o;22402:442::-;22551:4;22589:2;22578:9;22574:18;22566:26;;22602:71;22670:1;22659:9;22655:17;22646:6;22602:71;:::i;:::-;22683:72;22751:2;22740:9;22736:18;22727:6;22683:72;:::i;:::-;22765;22833:2;22822:9;22818:18;22809:6;22765:72;:::i;:::-;22556:288;;;;;;:::o;22850:539::-;22943:4;22949:6;23005:11;22992:25;23105:1;23099:4;23095:12;23084:8;23068:14;23064:29;23060:48;23040:18;23036:73;23026:2;;23123:1;23120;23113:12;23026:2;23158:18;23148:8;23144:33;23136:41;;23210:4;23197:18;23187:28;;23238:18;23230:6;23227:30;23224:2;;;23270:1;23267;23260:12;23224:2;23301;23295:4;23291:13;23283:21;;23358:4;23350:6;23346:17;23330:14;23326:38;23320:4;23316:49;23313:2;;;23378:1;23375;23368:12;23313:2;22956:433;;;;;;:::o;23395:567::-;23516:4;23522:6;23578:11;23565:25;23678:1;23672:4;23668:12;23657:8;23641:14;23637:29;23633:48;23613:18;23609:73;23599:2;;23696:1;23693;23686:12;23599:2;23731:18;23721:8;23717:33;23709:41;;23783:4;23770:18;23760:28;;23811:18;23803:6;23800:30;23797:2;;;23843:1;23840;23833:12;23797:2;23874;23868:4;23864:13;23856:21;;23931:4;23923:6;23919:17;23903:14;23899:38;23893:4;23889:49;23886:2;;;23951:1;23948;23941:12;23886:2;23529:433;;;;;;:::o;23968:539::-;24061:4;24067:6;24123:11;24110:25;24223:1;24217:4;24213:12;24202:8;24186:14;24182:29;24178:48;24158:18;24154:73;24144:2;;24241:1;24238;24231:12;24144:2;24276:18;24266:8;24262:33;24254:41;;24328:4;24315:18;24305:28;;24356:18;24348:6;24345:30;24342:2;;;24388:1;24385;24378:12;24342:2;24419;24413:4;24409:13;24401:21;;24476:4;24468:6;24464:17;24448:14;24444:38;24438:4;24434:49;24431:2;;;24496:1;24493;24486:12;24431:2;24074:433;;;;;;:::o;24513:523::-;24590:4;24596:6;24652:11;24639:25;24752:1;24746:4;24742:12;24731:8;24715:14;24711:29;24707:48;24687:18;24683:73;24673:2;;24770:1;24767;24760:12;24673:2;24805:18;24795:8;24791:33;24783:41;;24857:4;24844:18;24834:28;;24885:18;24877:6;24874:30;24871:2;;;24917:1;24914;24907:12;24871:2;24948;24942:4;24938:13;24930:21;;25005:4;24997:6;24993:17;24977:14;24973:38;24967:4;24963:49;24960:2;;;25025:1;25022;25015:12;24960:2;24603:433;;;;;;:::o;25042:327::-;25136:4;25190:11;25177:25;25290:1;25284:4;25280:12;25269:8;25253:14;25249:29;25245:48;25225:18;25221:73;25211:2;;25308:1;25305;25298:12;25211:2;25343:18;25333:8;25329:33;25321:41;;25141:228;;;;;:::o;25375:98::-;25426:6;25460:5;25454:12;25444:22;;25433:40;;;:::o;25479:99::-;25531:6;25565:5;25559:12;25549:22;;25538:40;;;:::o;25584:147::-;25685:11;25722:3;25707:18;;25697:34;;;;:::o;25737:169::-;25821:11;25855:6;25850:3;25843:19;25895:4;25890:3;25886:14;25871:29;;25833:73;;;;:::o;25912:185::-;25952:1;25969:20;25987:1;25969:20;:::i;:::-;25964:25;;26003:20;26021:1;26003:20;:::i;:::-;25998:25;;26042:1;26032:2;;26047:18;;:::i;:::-;26032:2;26089:1;26086;26082:9;26077:14;;25954:143;;;;:::o;26103:348::-;26143:7;26166:20;26184:1;26166:20;:::i;:::-;26161:25;;26200:20;26218:1;26200:20;:::i;:::-;26195:25;;26388:1;26320:66;26316:74;26313:1;26310:81;26305:1;26298:9;26291:17;26287:105;26284:2;;;26395:18;;:::i;:::-;26284:2;26443:1;26440;26436:9;26425:20;;26151:300;;;;:::o;26457:96::-;26494:7;26523:24;26541:5;26523:24;:::i;:::-;26512:35;;26502:51;;;:::o;26559:90::-;26593:7;26636:5;26629:13;26622:21;26611:32;;26601:48;;;:::o;26655:126::-;26692:7;26732:42;26725:5;26721:54;26710:65;;26700:81;;;:::o;26787:77::-;26824:7;26853:5;26842:16;;26832:32;;;:::o;26870:154::-;26954:6;26949:3;26944;26931:30;27016:1;27007:6;27002:3;26998:16;26991:27;26921:103;;;:::o;27030:307::-;27098:1;27108:113;27122:6;27119:1;27116:13;27108:113;;;27207:1;27202:3;27198:11;27192:18;27188:1;27183:3;27179:11;27172:39;27144:2;27141:1;27137:10;27132:15;;27108:113;;;27239:6;27236:1;27233:13;27230:2;;;27319:1;27310:6;27305:3;27301:16;27294:27;27230:2;27079:258;;;;:::o;27343:233::-;27382:3;27405:24;27423:5;27405:24;:::i;:::-;27396:33;;27451:66;27444:5;27441:77;27438:2;;;27521:18;;:::i;:::-;27438:2;27568:1;27561:5;27557:13;27550:20;;27386:190;;;:::o;27582:180::-;27630:77;27627:1;27620:88;27727:4;27724:1;27717:15;27751:4;27748:1;27741:15;27768:180;27816:77;27813:1;27806:88;27913:4;27910:1;27903:15;27937:4;27934:1;27927:15;27954:102;27995:6;28046:2;28042:7;28037:2;28030:5;28026:14;28022:28;28012:38;;28002:54;;;:::o;28062:170::-;28202:22;28198:1;28190:6;28186:14;28179:46;28168:64;:::o;28238:161::-;28378:13;28374:1;28366:6;28362:14;28355:37;28344:55;:::o;28405:225::-;28545:34;28541:1;28533:6;28529:14;28522:58;28614:8;28609:2;28601:6;28597:15;28590:33;28511:119;:::o;28636:169::-;28776:21;28772:1;28764:6;28760:14;28753:45;28742:63;:::o;28811:177::-;28951:29;28947:1;28939:6;28935:14;28928:53;28917:71;:::o;28994:172::-;29134:24;29130:1;29122:6;29118:14;29111:48;29100:66;:::o;29172:177::-;29312:29;29308:1;29300:6;29296:14;29289:53;29278:71;:::o;29355:225::-;29495:34;29491:1;29483:6;29479:14;29472:58;29564:8;29559:2;29551:6;29547:15;29540:33;29461:119;:::o;29586:166::-;29726:18;29722:1;29714:6;29710:14;29703:42;29692:60;:::o;29758:168::-;29898:20;29894:1;29886:6;29882:14;29875:44;29864:62;:::o;29932:182::-;30072:34;30068:1;30060:6;30056:14;30049:58;30038:76;:::o;30120:230::-;30260:34;30256:1;30248:6;30244:14;30237:58;30329:13;30324:2;30316:6;30312:15;30305:38;30226:124;:::o;30356:226::-;30496:34;30492:1;30484:6;30480:14;30473:58;30565:9;30560:2;30552:6;30548:15;30541:34;30462:120;:::o;30588:179::-;30728:31;30724:1;30716:6;30712:14;30705:55;30694:73;:::o;30773:229::-;30913:34;30909:1;30901:6;30897:14;30890:58;30982:12;30977:2;30969:6;30965:15;30958:37;30879:123;:::o;31008:181::-;31148:33;31144:1;31136:6;31132:14;31125:57;31114:75;:::o;31195:241::-;31335:34;31331:1;31323:6;31319:14;31312:58;31404:24;31399:2;31391:6;31387:15;31380:49;31301:135;:::o;31442:122::-;31515:24;31533:5;31515:24;:::i;:::-;31508:5;31505:35;31495:2;;31554:1;31551;31544:12;31495:2;31485:79;:::o;31570:116::-;31640:21;31655:5;31640:21;:::i;:::-;31633:5;31630:32;31620:2;;31676:1;31673;31666:12;31620:2;31610:76;:::o;31692:122::-;31765:24;31783:5;31765:24;:::i;:::-;31758:5;31755:35;31745:2;;31804:1;31801;31794:12;31745:2;31735:79;:::o
Swarm Source
ipfs://deef43f2d454dd4c5376f2a1f1db00d89694f6e3d1f230562ecb36d0fdd09eba
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.