Source Code
Latest 25 from a total of 41 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 5839323 | 762 days ago | IN | 0 MOVR | 0.0030356 | ||||
| Withdraw | 4970962 | 888 days ago | IN | 0 MOVR | 0.00198682 | ||||
| Deposit | 4752690 | 919 days ago | IN | 0 MOVR | 0.00058425 | ||||
| Withdraw | 4752675 | 919 days ago | IN | 0 MOVR | 0.0019863 | ||||
| Deposit | 4626572 | 936 days ago | IN | 0 MOVR | 0.00039757 | ||||
| Deposit | 4532755 | 950 days ago | IN | 0 MOVR | 0.00035773 | ||||
| Withdraw | 4532748 | 950 days ago | IN | 0 MOVR | 0.00185369 | ||||
| Deposit | 4312964 | 981 days ago | IN | 0 MOVR | 0.00035773 | ||||
| Withdraw | 4312958 | 981 days ago | IN | 0 MOVR | 0.00185369 | ||||
| Deposit | 4108784 | 1011 days ago | IN | 0 MOVR | 0.00035773 | ||||
| Withdraw | 4108775 | 1011 days ago | IN | 0 MOVR | 0.00185369 | ||||
| Deposit | 3899475 | 1041 days ago | IN | 0 MOVR | 0.00035773 | ||||
| Withdraw | 3899467 | 1041 days ago | IN | 0 MOVR | 0.00185369 | ||||
| Deposit | 3687872 | 1071 days ago | IN | 0 MOVR | 0.00032521 | ||||
| Withdraw | 3687868 | 1071 days ago | IN | 0 MOVR | 0.00168517 | ||||
| Withdraw | 3646869 | 1077 days ago | IN | 0 MOVR | 0.01415549 | ||||
| Deposit | 3605419 | 1082 days ago | IN | 0 MOVR | 0.00033718 | ||||
| Withdraw | 3605407 | 1082 days ago | IN | 0 MOVR | 0.00047701 | ||||
| Deposit | 3563714 | 1088 days ago | IN | 0 MOVR | 0.00033721 | ||||
| Deposit | 3471055 | 1102 days ago | IN | 0 MOVR | 0.00032521 | ||||
| Withdraw | 3471045 | 1102 days ago | IN | 0 MOVR | 0.00168517 | ||||
| Deposit | 3319660 | 1123 days ago | IN | 0 MOVR | 0.00033718 | ||||
| Deposit | 3239554 | 1135 days ago | IN | 0 MOVR | 0.00032521 | ||||
| Withdraw | 3239549 | 1135 days ago | IN | 0 MOVR | 0.00168517 | ||||
| Deposit | 3027182 | 1166 days ago | IN | 0 MOVR | 0.00032521 |
View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Loading...
Loading
Contract Name:
LPStaking
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at moonriver.moonscan.io on 2022-08-02 */ // Sources flattened with hardhat v2.9.5 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT // 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/[email protected] // OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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/utils/math/[email protected] // 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/token/ERC20/[email protected] // 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/utils/[email protected] // OpenZeppelin Contracts (last updated v4.5.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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (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 ) ); } } /** * @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/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File contracts/RewardNft/IRewardNft.sol pragma solidity ^0.8.4; interface IRewardNft is IERC721 { function mint(address _to, uint256 _numberOfTokens) external; function maxSupply() external view returns (uint256); } // File contracts/Staking/IStaking.sol pragma solidity =0.8.4; interface IStaking { struct Tier { string id; uint256 nfts; uint256 minAmount; // tier is applied when userAmount >= minAmount } function isLocked(uint256 _poolId, address account) external view returns (bool); function getTierById(string calldata id) external view returns (Tier memory); function getLockedAmount(uint256 _poolId, address account) external view returns (uint256); function getUserUnlockTime(uint256 _poolId, address account) external view returns (uint256); function getUserTier(uint256 _poolId, address account) external view returns (Tier memory); function getTierIds() external view returns (string[] memory); } // File contracts/Staking/WithLevels.sol pragma solidity ^0.8.4; abstract contract WithLevels is Ownable, IStaking { Tier[] public tiers; event TierCreate(string indexed id, uint256 nfts, uint256 minAmount); event TierUpdate(string indexed id, uint256 nfts, uint256 minAmount); event TierRemove(string indexed id, uint256 idx); constructor() {} function getTierIds() external view override returns (string[] memory) { string[] memory ids = new string[](tiers.length); for (uint256 i = 0; i < tiers.length; i++) { ids[i] = tiers[i].id; } return ids; } function getTierById(string calldata id) public view override returns (Tier memory) { for (uint256 i = 0; i < tiers.length; i++) { if (stringsEqual(tiers[i].id, id)) { return tiers[i]; } } revert("No such tier"); } function getTierForAmount(uint256 amount) internal view returns (Tier memory) { return tiers[getTierIdxForAmount(amount)]; } function getTierIdxForAmount(uint256 amount) internal view returns (uint256) { if (amount == 0) { return 0; } uint256 maxTierK = 0; uint256 maxTierV; for (uint256 i = 1; i < tiers.length; i++) { Tier memory tier = tiers[i]; if (amount >= tier.minAmount && tier.minAmount > maxTierV) { maxTierK = i; maxTierV = tier.minAmount; } } return maxTierK; } function setTier( string calldata id, uint256 nfts, uint256 minAmount ) external onlyOwner returns (uint256) { for (uint256 i = 0; i < tiers.length; i++) { if (stringsEqual(tiers[i].id, id)) { tiers[i].nfts = nfts; tiers[i].minAmount = minAmount; emit TierUpdate(id, nfts, minAmount); return i; } } Tier memory newTier = Tier(id, nfts, minAmount); tiers.push(newTier); emit TierCreate(id, nfts, minAmount); return tiers.length - 1; } function deleteTier(string calldata id) external onlyOwner { for (uint256 tierIdx = 0; tierIdx < tiers.length; tierIdx++) { if (stringsEqual(tiers[tierIdx].id, id)) { for (uint256 i = tierIdx; i < tiers.length - 1; i++) { tiers[i] = tiers[i + 1]; } tiers.pop(); emit TierRemove(id, tierIdx); break; } } } function stringsEqual(string memory a, string memory b) internal pure returns (bool) { return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b)); } } // File contracts/LpStaking/LpStaking.sol pragma solidity ^0.8.4; contract LPStaking is Ownable, IStaking, WithLevels { using SafeMath for uint256; using SafeERC20 for IERC20; // Info of each user. struct UserInfo { uint256 amount; // How many tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. uint256 depositLockStart; // The date of user staking stake time. } // Info of pool. struct PoolInfo { IERC20 lpToken; IRewardNft rewardToken; // Token to reward uint256 rewardDebted; // How many tokens are being rewarded. } uint256 public lockPeriod; // Info of pool. PoolInfo[] public poolInfo; // Info of each user that stakes token tokens. mapping(uint256 => mapping(address => UserInfo)) public userInfo; event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event Claim(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw( address indexed user, uint256 indexed pid, uint256 amount, address indexed to ); constructor(uint256 _lockPeriod) { lockPeriod = _lockPeriod; } function setLockPeriod(uint256 _lockPeriod) public onlyOwner { lockPeriod = _lockPeriod; } function setPool(IERC20 _lpToken, IRewardNft _rewardToken) public onlyOwner { poolInfo.push(PoolInfo(_lpToken, _rewardToken, 0)); } function poolLength() public view returns (uint256) { return poolInfo.length; } function isLocked(uint256 _poolId, address account) public view override returns (bool) { return block.timestamp < userInfo[_poolId][account].depositLockStart + lockPeriod; } function getUserUnlockTime(uint256 _poolId, address account) public view override returns (uint256) { return userInfo[_poolId][account].depositLockStart + lockPeriod; } function getUserTier(uint256 _poolId, address account) external view override returns (Tier memory) { UserInfo memory user = userInfo[_poolId][account]; return getTierForAmount(user.amount); } function getLockedAmount(uint256 _poolId, address account) external view override returns (uint256) { return userInfo[_poolId][account].amount; } // Deposit tokens for snowpad allocation. function deposit(uint256 _poolId, uint256 _tierId) public { address account = msg.sender; UserInfo storage user = userInfo[_poolId][account]; Tier storage tier = tiers[_tierId]; PoolInfo storage pool = poolInfo[_poolId]; require(user.amount <= 0, "User has already deposited"); require( pool.rewardToken.maxSupply() >= tier.nfts, "Max Reward Reached" ); pool.lpToken.safeTransferFrom( address(account), address(this), tier.minAmount ); user.amount = tier.minAmount; user.rewardDebt = tier.nfts; user.depositLockStart = block.timestamp; pool.rewardDebted = pool.rewardDebted.add(tier.nfts); emit Deposit(account, _poolId, tier.minAmount); } function withdraw(uint256 _poolId) public { address account = msg.sender; UserInfo storage user = userInfo[_poolId][account]; PoolInfo memory pool = poolInfo[_poolId]; bool tokensLocked = isLocked(_poolId, account); require(!tokensLocked, "Tokens are locked"); uint256 _amount = user.amount; pool.lpToken.safeTransfer(account, user.amount); claimReward(_poolId); user.amount = 0; user.depositLockStart = 0; emit Withdraw(account, _poolId, _amount); } function claimReward(uint256 _poolId) public { address account = msg.sender; UserInfo storage user = userInfo[_poolId][account]; bool tokensLocked = isLocked(_poolId, account); PoolInfo memory pool = poolInfo[_poolId]; require(!tokensLocked, "Tokens are locked"); require(user.rewardDebt > 0, "No reward to claim"); pool.rewardToken.mint(account, user.rewardDebt); user.rewardDebt = 0; emit Claim(account, _poolId, user.rewardDebt); } function emergencyWithdraw(uint256 _poolId, address to) public { UserInfo storage user = userInfo[_poolId][msg.sender]; PoolInfo memory pool = poolInfo[_poolId]; uint256 amount = user.amount; user.amount = 0; user.rewardDebt = 0; // Note: transfer can fail or succeed if `amount` is zero. pool.lpToken.safeTransfer(to, amount); emit EmergencyWithdraw(msg.sender, _poolId, amount, to); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"_lockPeriod","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"EmergencyWithdraw","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":true,"internalType":"string","name":"id","type":"string"},{"indexed":false,"internalType":"uint256","name":"nfts","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmount","type":"uint256"}],"name":"TierCreate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"id","type":"string"},{"indexed":false,"internalType":"uint256","name":"idx","type":"uint256"}],"name":"TierRemove","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"id","type":"string"},{"indexed":false,"internalType":"uint256","name":"nfts","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmount","type":"uint256"}],"name":"TierUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"id","type":"string"}],"name":"deleteTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_tierId","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"getLockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"id","type":"string"}],"name":"getTierById","outputs":[{"components":[{"internalType":"string","name":"id","type":"string"},{"internalType":"uint256","name":"nfts","type":"uint256"},{"internalType":"uint256","name":"minAmount","type":"uint256"}],"internalType":"struct IStaking.Tier","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTierIds","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"getUserTier","outputs":[{"components":[{"internalType":"string","name":"id","type":"string"},{"internalType":"uint256","name":"nfts","type":"uint256"},{"internalType":"uint256","name":"minAmount","type":"uint256"}],"internalType":"struct IStaking.Tier","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"getUserUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"contract IRewardNft","name":"rewardToken","type":"address"},{"internalType":"uint256","name":"rewardDebted","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockPeriod","type":"uint256"}],"name":"setLockPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"contract IRewardNft","name":"_rewardToken","type":"address"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"id","type":"string"},{"internalType":"uint256","name":"nfts","type":"uint256"},{"internalType":"uint256","name":"minAmount","type":"uint256"}],"name":"setTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tiers","outputs":[{"internalType":"string","name":"id","type":"string"},{"internalType":"uint256","name":"nfts","type":"uint256"},{"internalType":"uint256","name":"minAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"depositLockStart","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162003ba938038062003ba9833981810160405281019062000037919062000148565b620000576200004b6200006560201b60201c565b6200006d60201b60201c565b806002819055505062000198565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008151905062000142816200017e565b92915050565b6000602082840312156200015b57600080fd5b60006200016b8482850162000131565b91505092915050565b6000819050919050565b620001898162000174565b81146200019557600080fd5b50565b613a0180620001a86000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b8578063ae169a501161007c578063ae169a50146103a1578063d5a162bd146103bd578063d8cde1c6146103ed578063e2bbb1581461040b578063ebb5e18514610427578063f2fde38b1461044357610142565b8063715018a6146102fb578063779972da146103055780638da5cb5b1461032157806393f1a40b1461033f5780639cada7201461037157610142565b80631fc909d61161010a5780631fc909d6146102295780632e1a7d4d146102595780632f940c70146102755780633fd8b02f146102915780634e847fc7146102af57806369f290f9146102cb57610142565b8063039af9eb1461014757806303c1414f14610179578063081e3eda146101a95780631526fe27146101c75780631e142bb4146101f9575b600080fd5b610161600480360381019061015c9190612c94565b61045f565b60405161017093929190613240565b60405180910390f35b610193600480360381019061018e9190612ce6565b610521565b6040516101a091906133e0565b60405180910390f35b6101b161058c565b6040516101be91906133e0565b60405180910390f35b6101e160048036038101906101dc9190612c94565b610599565b6040516101f0939291906131e7565b60405180910390f35b610213600480360381019061020e9190612ce6565b610613565b60405161022091906133be565b60405180910390f35b610243600480360381019061023e9190612ce6565b6106ae565b60405161025091906133e0565b60405180910390f35b610273600480360381019061026e9190612c94565b61070c565b005b61028f600480360381019061028a9190612ce6565b610971565b005b610299610b8b565b6040516102a691906133e0565b60405180910390f35b6102c960048036038101906102c49190612ba7565b610b91565b005b6102e560048036038101906102e09190612ce6565b610d1e565b6040516102f291906131cc565b60405180910390f35b610303610d8b565b005b61031f600480360381019061031a9190612c94565b610e13565b005b610329610e99565b604051610336919061312f565b60405180910390f35b61035960048036038101906103549190612ce6565b610ec2565b60405161036893929190613424565b60405180910390f35b61038b60048036038101906103869190612c28565b610ef9565b60405161039891906133e0565b60405180910390f35b6103bb60048036038101906103b69190612c94565b6112eb565b005b6103d760048036038101906103d29190612be3565b6115c0565b6040516103e491906133be565b60405180910390f35b6103f5611854565b60405161040291906131aa565b60405180910390f35b61042560048036038101906104209190612d22565b611a16565b005b610441600480360381019061043c9190612be3565b611d2d565b005b61045d60048036038101906104589190612b55565b6120c0565b005b6001818154811061046f57600080fd5b906000526020600020906003020160009150905080600001805461049290613662565b80601f01602080910402602001604051908101604052809291908181526020018280546104be90613662565b801561050b5780601f106104e05761010080835404028352916020019161050b565b820191906000526020600020905b8154815290600101906020018083116104ee57829003601f168201915b5050505050908060010154908060020154905083565b60006002546004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461058491906134e2565b905092915050565b6000600380549050905090565b600381815481106105a957600080fd5b90600052602060002090600302016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154905083565b61061b6128fc565b60006004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201548152505090506106a581600001516121b8565b91505092915050565b60006004600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905092915050565b600033905060006004600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600384815481106107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820154815250509050600061087e8585610d1e565b905080156108c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b89061339e565b60405180910390fd5b6000836000015490506108fd858560000154856000015173ffffffffffffffffffffffffffffffffffffffff166122c89092919063ffffffff16565b610906866112eb565b6000846000018190555060008460020181905550858573ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688360405161096191906133e0565b60405180910390a3505050505050565b60006004600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600060038481548110610a01577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152505090506000826000015490506000836000018190555060008360010181905550610b1e8482846000015173ffffffffffffffffffffffffffffffffffffffff166122c89092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16853373ffffffffffffffffffffffffffffffffffffffff167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b84604051610b7c91906133e0565b60405180910390a45050505050565b60025481565b610b9961234e565b73ffffffffffffffffffffffffffffffffffffffff16610bb7610e99565b73ffffffffffffffffffffffffffffffffffffffff1614610c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c04906132de565b60405180910390fd5b600360405180606001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020016000815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015550505050565b60006002546004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610d8191906134e2565b4210905092915050565b610d9361234e565b73ffffffffffffffffffffffffffffffffffffffff16610db1610e99565b73ffffffffffffffffffffffffffffffffffffffff1614610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe906132de565b60405180910390fd5b610e116000612356565b565b610e1b61234e565b73ffffffffffffffffffffffffffffffffffffffff16610e39610e99565b73ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e86906132de565b60405180910390fd5b8060028190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6004602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b6000610f0361234e565b73ffffffffffffffffffffffffffffffffffffffff16610f21610e99565b73ffffffffffffffffffffffffffffffffffffffff1614610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e906132de565b60405180910390fd5b60005b6001805490508110156111ba576110a860018281548110610fc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016000018054610fe090613662565b80601f016020809104026020016040519081016040528092919081815260200182805461100c90613662565b80156110595780601f1061102e57610100808354040283529160200191611059565b820191906000526020600020905b81548152906001019060200180831161103c57829003601f168201915b505050505087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061241a565b156111a75783600182815481106110e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060030201600101819055508260018281548110611138577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906003020160020181905550858560405161115d9291906130ff565b60405180910390207ff597191fc38261341008287271d5b40761e8613911dd016342ec60f3d66365a385856040516111969291906133fb565b60405180910390a2809150506112e3565b80806111b290613694565b915050610f7a565b506000604051806060016040528087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020018581526020018481525090506001819080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001908051906020019061126692919061291d565b5060208201518160010155604082015181600201555050858560405161128d9291906130ff565b60405180910390207fca31771eccee84fe4090d6ff85ce51af55f6798c87b96572d988db7f125f02ca85856040516112c69291906133fb565b60405180910390a2600180805490506112df9190613538565b9150505b949350505050565b600033905060006004600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006113508484610d1e565b905060006003858154811061138e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481525050905081156114a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114979061339e565b60405180910390fd5b60008360010154116114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de9061337e565b60405180910390fd5b806020015173ffffffffffffffffffffffffffffffffffffffff166340c10f198585600101546040518363ffffffff1660e01b815260040161152a929190613181565b600060405180830381600087803b15801561154457600080fd5b505af1158015611558573d6000803e3d6000fd5b5050505060008360010181905550848473ffffffffffffffffffffffffffffffffffffffff167f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf785600101546040516115b191906133e0565b60405180910390a35050505050565b6115c86128fc565b60005b600180549050811015611812576116f960018281548110611615577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060030201600001805461163190613662565b80601f016020809104026020016040519081016040528092919081815260200182805461165d90613662565b80156116aa5780601f1061167f576101008083540402835291602001916116aa565b820191906000526020600020905b81548152906001019060200180831161168d57829003601f168201915b505050505085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061241a565b156117ff5760018181548110611738577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906003020160405180606001604052908160008201805461176190613662565b80601f016020809104026020016040519081016040528092919081815260200182805461178d90613662565b80156117da5780601f106117af576101008083540402835291602001916117da565b820191906000526020600020905b8154815290600101906020018083116117bd57829003601f168201915b505050505081526020016001820154815260200160028201548152505091505061184e565b808061180a90613694565b9150506115cb565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611845906132fe565b60405180910390fd5b92915050565b6060600060018054905067ffffffffffffffff81111561189d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156118d057816020015b60608152602001906001900390816118bb5790505b50905060005b600180549050811015611a0e576001818154811061191d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060030201600001805461193990613662565b80601f016020809104026020016040519081016040528092919081815260200182805461196590613662565b80156119b25780601f10611987576101008083540402835291602001916119b2565b820191906000526020600020905b81548152906001019060200180831161199557829003601f168201915b50505050508282815181106119f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101819052508080611a0690613694565b9150506118d6565b508091505090565b600033905060006004600085815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600060018481548110611aab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302019050600060038681548110611af7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302019050600083600001541115611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b46906132be565b60405180910390fd5b81600101548160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b158015611bbe57600080fd5b505afa158015611bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf69190612cbd565b1015611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e9061333e565b60405180910390fd5b611c8c843084600201548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612473909392919063ffffffff16565b8160020154836000018190555081600101548360010181905550428360020181905550611cca826001015482600201546124fc90919063ffffffff16565b8160020181905550858473ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158460020154604051611d1d91906133e0565b60405180910390a3505050505050565b611d3561234e565b73ffffffffffffffffffffffffffffffffffffffff16611d53610e99565b73ffffffffffffffffffffffffffffffffffffffff1614611da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da0906132de565b60405180910390fd5b60005b6001805490508110156120bb57611eda60018281548110611df6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016000018054611e1290613662565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3e90613662565b8015611e8b5780601f10611e6057610100808354040283529160200191611e8b565b820191906000526020600020905b815481529060010190602001808311611e6e57829003601f168201915b505050505084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061241a565b156120a85760008190505b60018080549050611ef69190613538565b811015611fe25760018082611f0b91906134e2565b81548110611f42577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906003020160018281548110611f8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016000820181600001908054611fac90613662565b611fb79291906129a3565b5060018201548160010155600282015481600201559050508080611fda90613694565b915050611ee5565b50600180548061201b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000209060030201600080820160006120409190612a30565b600182016000905560028201600090555050905582826040516120649291906130ff565b60405180910390207fcee998486f3d0adcdd2adb0961c0a53c3601b7165798f8f771109a455ba2d8b38260405161209b91906133e0565b60405180910390a26120bb565b80806120b390613694565b915050611dac565b505050565b6120c861234e565b73ffffffffffffffffffffffffffffffffffffffff166120e6610e99565b73ffffffffffffffffffffffffffffffffffffffff161461213c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612133906132de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a39061327e565b60405180910390fd5b6121b581612356565b50565b6121c06128fc565b60016121cb83612512565b81548110612202577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906003020160405180606001604052908160008201805461222b90613662565b80601f016020809104026020016040519081016040528092919081815260200182805461225790613662565b80156122a45780601f10612279576101008083540402835291602001916122a4565b820191906000526020600020905b81548152906001019060200180831161228757829003601f168201915b50505050508152602001600182015481526020016002820154815250509050919050565b6123498363a9059cbb60e01b84846040516024016122e7929190613181565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061267f565b505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008160405160200161242d9190613118565b60405160208183030381529060405280519060200120836040516020016124549190613118565b6040516020818303038152906040528051906020012014905092915050565b6124f6846323b872dd60e01b8585856040516024016124949392919061314a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061267f565b50505050565b6000818361250a91906134e2565b905092915050565b600080821415612525576000905061267a565b60008080600190505b60018054905081101561267357600060018281548110612577577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016040518060600160405290816000820180546125a090613662565b80601f01602080910402602001604051908101604052809291908181526020018280546125cc90613662565b80156126195780601f106125ee57610100808354040283529160200191612619565b820191906000526020600020905b8154815290600101906020018083116125fc57829003601f168201915b505050505081526020016001820154815260200160028201548152505090508060400151861015801561264f5750828160400151115b1561265f57819350806040015192505b50808061266b90613694565b91505061252e565b5081925050505b919050565b60006126e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166127469092919063ffffffff16565b905060008151111561274157808060200190518101906127019190612b7e565b612740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127379061335e565b60405180910390fd5b5b505050565b6060612755848460008561275e565b90509392505050565b6060824710156127a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279a9061329e565b60405180910390fd5b6127ac85612872565b6127eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e29061331e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161281491906130e8565b60006040518083038185875af1925050503d8060008114612851576040519150601f19603f3d011682016040523d82523d6000602084013e612856565b606091505b5091509150612866828286612895565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606083156128a5578290506128f5565b6000835111156128b85782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ec919061321e565b60405180910390fd5b9392505050565b60405180606001604052806060815260200160008152602001600081525090565b82805461292990613662565b90600052602060002090601f01602090048101928261294b5760008555612992565b82601f1061296457805160ff1916838001178555612992565b82800160010185558215612992579182015b82811115612991578251825591602001919060010190612976565b5b50905061299f9190612a70565b5090565b8280546129af90613662565b90600052602060002090601f0160209004810192826129d15760008555612a1f565b82601f106129e25780548555612a1f565b82800160010185558215612a1f57600052602060002091601f016020900482015b82811115612a1e578254825591600101919060010190612a03565b5b509050612a2c9190612a70565b5090565b508054612a3c90613662565b6000825580601f10612a4e5750612a6d565b601f016020900490600052602060002090810190612a6c9190612a70565b5b50565b5b80821115612a89576000816000905550600101612a71565b5090565b600081359050612a9c81613958565b92915050565b600081519050612ab18161396f565b92915050565b600081359050612ac681613986565b92915050565b600081359050612adb8161399d565b92915050565b60008083601f840112612af357600080fd5b8235905067ffffffffffffffff811115612b0c57600080fd5b602083019150836001820283011115612b2457600080fd5b9250929050565b600081359050612b3a816139b4565b92915050565b600081519050612b4f816139b4565b92915050565b600060208284031215612b6757600080fd5b6000612b7584828501612a8d565b91505092915050565b600060208284031215612b9057600080fd5b6000612b9e84828501612aa2565b91505092915050565b60008060408385031215612bba57600080fd5b6000612bc885828601612ab7565b9250506020612bd985828601612acc565b9150509250929050565b60008060208385031215612bf657600080fd5b600083013567ffffffffffffffff811115612c1057600080fd5b612c1c85828601612ae1565b92509250509250929050565b60008060008060608587031215612c3e57600080fd5b600085013567ffffffffffffffff811115612c5857600080fd5b612c6487828801612ae1565b94509450506020612c7787828801612b2b565b9250506040612c8887828801612b2b565b91505092959194509250565b600060208284031215612ca657600080fd5b6000612cb484828501612b2b565b91505092915050565b600060208284031215612ccf57600080fd5b6000612cdd84828501612b40565b91505092915050565b60008060408385031215612cf957600080fd5b6000612d0785828601612b2b565b9250506020612d1885828601612a8d565b9150509250929050565b60008060408385031215612d3557600080fd5b6000612d4385828601612b2b565b9250506020612d5485828601612b2b565b9150509250929050565b6000612d6a8383612e79565b905092915050565b612d7b8161356c565b82525050565b6000612d8c8261346b565b612d968185613499565b935083602082028501612da88561345b565b8060005b85811015612de45784840389528151612dc58582612d5e565b9450612dd08361348c565b925060208a01995050600181019050612dac565b50829750879550505050505092915050565b612dff8161357e565b82525050565b6000612e1082613476565b612e1a81856134aa565b9350612e2a81856020860161362f565b80840191505092915050565b612e3f816135d8565b82525050565b612e4e816135fc565b82525050565b6000612e6083856134d7565b9350612e6d838584613620565b82840190509392505050565b6000612e8482613481565b612e8e81856134b5565b9350612e9e81856020860161362f565b612ea78161373b565b840191505092915050565b6000612ebd82613481565b612ec781856134c6565b9350612ed781856020860161362f565b612ee08161373b565b840191505092915050565b6000612ef682613481565b612f0081856134d7565b9350612f1081856020860161362f565b80840191505092915050565b6000612f296026836134c6565b9150612f348261374c565b604082019050919050565b6000612f4c6026836134c6565b9150612f578261379b565b604082019050919050565b6000612f6f601a836134c6565b9150612f7a826137ea565b602082019050919050565b6000612f926020836134c6565b9150612f9d82613813565b602082019050919050565b6000612fb5600c836134c6565b9150612fc08261383c565b602082019050919050565b6000612fd8601d836134c6565b9150612fe382613865565b602082019050919050565b6000612ffb6012836134c6565b91506130068261388e565b602082019050919050565b600061301e602a836134c6565b9150613029826138b7565b604082019050919050565b60006130416012836134c6565b915061304c82613906565b602082019050919050565b60006130646011836134c6565b915061306f8261392f565b602082019050919050565b600060608301600083015184820360008601526130978282612e79565b91505060208301516130ac60208601826130ca565b5060408301516130bf60408601826130ca565b508091505092915050565b6130d3816135ce565b82525050565b6130e2816135ce565b82525050565b60006130f48284612e05565b915081905092915050565b600061310c828486612e54565b91508190509392505050565b60006131248284612eeb565b915081905092915050565b60006020820190506131446000830184612d72565b92915050565b600060608201905061315f6000830186612d72565b61316c6020830185612d72565b61317960408301846130d9565b949350505050565b60006040820190506131966000830185612d72565b6131a360208301846130d9565b9392505050565b600060208201905081810360008301526131c48184612d81565b905092915050565b60006020820190506131e16000830184612df6565b92915050565b60006060820190506131fc6000830186612e36565b6132096020830185612e45565b61321660408301846130d9565b949350505050565b600060208201905081810360008301526132388184612eb2565b905092915050565b6000606082019050818103600083015261325a8186612eb2565b905061326960208301856130d9565b61327660408301846130d9565b949350505050565b6000602082019050818103600083015261329781612f1c565b9050919050565b600060208201905081810360008301526132b781612f3f565b9050919050565b600060208201905081810360008301526132d781612f62565b9050919050565b600060208201905081810360008301526132f781612f85565b9050919050565b6000602082019050818103600083015261331781612fa8565b9050919050565b6000602082019050818103600083015261333781612fcb565b9050919050565b6000602082019050818103600083015261335781612fee565b9050919050565b6000602082019050818103600083015261337781613011565b9050919050565b6000602082019050818103600083015261339781613034565b9050919050565b600060208201905081810360008301526133b781613057565b9050919050565b600060208201905081810360008301526133d8818461307a565b905092915050565b60006020820190506133f560008301846130d9565b92915050565b600060408201905061341060008301856130d9565b61341d60208301846130d9565b9392505050565b600060608201905061343960008301866130d9565b61344660208301856130d9565b61345360408301846130d9565b949350505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006134ed826135ce565b91506134f8836135ce565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561352d5761352c6136dd565b5b828201905092915050565b6000613543826135ce565b915061354e836135ce565b925082821015613561576135606136dd565b5b828203905092915050565b6000613577826135ae565b9050919050565b60008115159050919050565b60006135958261356c565b9050919050565b60006135a78261356c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006135e3826135ea565b9050919050565b60006135f5826135ae565b9050919050565b60006136078261360e565b9050919050565b6000613619826135ae565b9050919050565b82818337600083830152505050565b60005b8381101561364d578082015181840152602081019050613632565b8381111561365c576000848401525b50505050565b6000600282049050600182168061367a57607f821691505b6020821081141561368e5761368d61370c565b5b50919050565b600061369f826135ce565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136d2576136d16136dd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f557365722068617320616c7265616479206465706f7369746564000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f207375636820746965720000000000000000000000000000000000000000600082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f4d61782052657761726420526561636865640000000000000000000000000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f4e6f2072657761726420746f20636c61696d0000000000000000000000000000600082015250565b7f546f6b656e7320617265206c6f636b6564000000000000000000000000000000600082015250565b6139618161356c565b811461396c57600080fd5b50565b6139788161357e565b811461398357600080fd5b50565b61398f8161358a565b811461399a57600080fd5b50565b6139a68161359c565b81146139b157600080fd5b50565b6139bd816135ce565b81146139c857600080fd5b5056fea26469706673582212209d69b1a3df9f7a653a91d5ea081e94b75d96bccb182641f5582b9cdac810f69a64736f6c634300080400330000000000000000000000000000000000000000000000000000000000278d00
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b8578063ae169a501161007c578063ae169a50146103a1578063d5a162bd146103bd578063d8cde1c6146103ed578063e2bbb1581461040b578063ebb5e18514610427578063f2fde38b1461044357610142565b8063715018a6146102fb578063779972da146103055780638da5cb5b1461032157806393f1a40b1461033f5780639cada7201461037157610142565b80631fc909d61161010a5780631fc909d6146102295780632e1a7d4d146102595780632f940c70146102755780633fd8b02f146102915780634e847fc7146102af57806369f290f9146102cb57610142565b8063039af9eb1461014757806303c1414f14610179578063081e3eda146101a95780631526fe27146101c75780631e142bb4146101f9575b600080fd5b610161600480360381019061015c9190612c94565b61045f565b60405161017093929190613240565b60405180910390f35b610193600480360381019061018e9190612ce6565b610521565b6040516101a091906133e0565b60405180910390f35b6101b161058c565b6040516101be91906133e0565b60405180910390f35b6101e160048036038101906101dc9190612c94565b610599565b6040516101f0939291906131e7565b60405180910390f35b610213600480360381019061020e9190612ce6565b610613565b60405161022091906133be565b60405180910390f35b610243600480360381019061023e9190612ce6565b6106ae565b60405161025091906133e0565b60405180910390f35b610273600480360381019061026e9190612c94565b61070c565b005b61028f600480360381019061028a9190612ce6565b610971565b005b610299610b8b565b6040516102a691906133e0565b60405180910390f35b6102c960048036038101906102c49190612ba7565b610b91565b005b6102e560048036038101906102e09190612ce6565b610d1e565b6040516102f291906131cc565b60405180910390f35b610303610d8b565b005b61031f600480360381019061031a9190612c94565b610e13565b005b610329610e99565b604051610336919061312f565b60405180910390f35b61035960048036038101906103549190612ce6565b610ec2565b60405161036893929190613424565b60405180910390f35b61038b60048036038101906103869190612c28565b610ef9565b60405161039891906133e0565b60405180910390f35b6103bb60048036038101906103b69190612c94565b6112eb565b005b6103d760048036038101906103d29190612be3565b6115c0565b6040516103e491906133be565b60405180910390f35b6103f5611854565b60405161040291906131aa565b60405180910390f35b61042560048036038101906104209190612d22565b611a16565b005b610441600480360381019061043c9190612be3565b611d2d565b005b61045d60048036038101906104589190612b55565b6120c0565b005b6001818154811061046f57600080fd5b906000526020600020906003020160009150905080600001805461049290613662565b80601f01602080910402602001604051908101604052809291908181526020018280546104be90613662565b801561050b5780601f106104e05761010080835404028352916020019161050b565b820191906000526020600020905b8154815290600101906020018083116104ee57829003601f168201915b5050505050908060010154908060020154905083565b60006002546004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461058491906134e2565b905092915050565b6000600380549050905090565b600381815481106105a957600080fd5b90600052602060002090600302016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154905083565b61061b6128fc565b60006004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201548152505090506106a581600001516121b8565b91505092915050565b60006004600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905092915050565b600033905060006004600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600384815481106107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820154815250509050600061087e8585610d1e565b905080156108c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b89061339e565b60405180910390fd5b6000836000015490506108fd858560000154856000015173ffffffffffffffffffffffffffffffffffffffff166122c89092919063ffffffff16565b610906866112eb565b6000846000018190555060008460020181905550858573ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688360405161096191906133e0565b60405180910390a3505050505050565b60006004600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600060038481548110610a01577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152505090506000826000015490506000836000018190555060008360010181905550610b1e8482846000015173ffffffffffffffffffffffffffffffffffffffff166122c89092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16853373ffffffffffffffffffffffffffffffffffffffff167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b84604051610b7c91906133e0565b60405180910390a45050505050565b60025481565b610b9961234e565b73ffffffffffffffffffffffffffffffffffffffff16610bb7610e99565b73ffffffffffffffffffffffffffffffffffffffff1614610c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c04906132de565b60405180910390fd5b600360405180606001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020016000815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015550505050565b60006002546004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610d8191906134e2565b4210905092915050565b610d9361234e565b73ffffffffffffffffffffffffffffffffffffffff16610db1610e99565b73ffffffffffffffffffffffffffffffffffffffff1614610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe906132de565b60405180910390fd5b610e116000612356565b565b610e1b61234e565b73ffffffffffffffffffffffffffffffffffffffff16610e39610e99565b73ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e86906132de565b60405180910390fd5b8060028190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6004602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b6000610f0361234e565b73ffffffffffffffffffffffffffffffffffffffff16610f21610e99565b73ffffffffffffffffffffffffffffffffffffffff1614610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e906132de565b60405180910390fd5b60005b6001805490508110156111ba576110a860018281548110610fc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016000018054610fe090613662565b80601f016020809104026020016040519081016040528092919081815260200182805461100c90613662565b80156110595780601f1061102e57610100808354040283529160200191611059565b820191906000526020600020905b81548152906001019060200180831161103c57829003601f168201915b505050505087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061241a565b156111a75783600182815481106110e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060030201600101819055508260018281548110611138577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906003020160020181905550858560405161115d9291906130ff565b60405180910390207ff597191fc38261341008287271d5b40761e8613911dd016342ec60f3d66365a385856040516111969291906133fb565b60405180910390a2809150506112e3565b80806111b290613694565b915050610f7a565b506000604051806060016040528087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020018581526020018481525090506001819080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001908051906020019061126692919061291d565b5060208201518160010155604082015181600201555050858560405161128d9291906130ff565b60405180910390207fca31771eccee84fe4090d6ff85ce51af55f6798c87b96572d988db7f125f02ca85856040516112c69291906133fb565b60405180910390a2600180805490506112df9190613538565b9150505b949350505050565b600033905060006004600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006113508484610d1e565b905060006003858154811061138e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481525050905081156114a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114979061339e565b60405180910390fd5b60008360010154116114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de9061337e565b60405180910390fd5b806020015173ffffffffffffffffffffffffffffffffffffffff166340c10f198585600101546040518363ffffffff1660e01b815260040161152a929190613181565b600060405180830381600087803b15801561154457600080fd5b505af1158015611558573d6000803e3d6000fd5b5050505060008360010181905550848473ffffffffffffffffffffffffffffffffffffffff167f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf785600101546040516115b191906133e0565b60405180910390a35050505050565b6115c86128fc565b60005b600180549050811015611812576116f960018281548110611615577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060030201600001805461163190613662565b80601f016020809104026020016040519081016040528092919081815260200182805461165d90613662565b80156116aa5780601f1061167f576101008083540402835291602001916116aa565b820191906000526020600020905b81548152906001019060200180831161168d57829003601f168201915b505050505085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061241a565b156117ff5760018181548110611738577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906003020160405180606001604052908160008201805461176190613662565b80601f016020809104026020016040519081016040528092919081815260200182805461178d90613662565b80156117da5780601f106117af576101008083540402835291602001916117da565b820191906000526020600020905b8154815290600101906020018083116117bd57829003601f168201915b505050505081526020016001820154815260200160028201548152505091505061184e565b808061180a90613694565b9150506115cb565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611845906132fe565b60405180910390fd5b92915050565b6060600060018054905067ffffffffffffffff81111561189d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156118d057816020015b60608152602001906001900390816118bb5790505b50905060005b600180549050811015611a0e576001818154811061191d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060030201600001805461193990613662565b80601f016020809104026020016040519081016040528092919081815260200182805461196590613662565b80156119b25780601f10611987576101008083540402835291602001916119b2565b820191906000526020600020905b81548152906001019060200180831161199557829003601f168201915b50505050508282815181106119f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101819052508080611a0690613694565b9150506118d6565b508091505090565b600033905060006004600085815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600060018481548110611aab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302019050600060038681548110611af7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302019050600083600001541115611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b46906132be565b60405180910390fd5b81600101548160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b158015611bbe57600080fd5b505afa158015611bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf69190612cbd565b1015611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e9061333e565b60405180910390fd5b611c8c843084600201548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612473909392919063ffffffff16565b8160020154836000018190555081600101548360010181905550428360020181905550611cca826001015482600201546124fc90919063ffffffff16565b8160020181905550858473ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158460020154604051611d1d91906133e0565b60405180910390a3505050505050565b611d3561234e565b73ffffffffffffffffffffffffffffffffffffffff16611d53610e99565b73ffffffffffffffffffffffffffffffffffffffff1614611da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da0906132de565b60405180910390fd5b60005b6001805490508110156120bb57611eda60018281548110611df6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016000018054611e1290613662565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3e90613662565b8015611e8b5780601f10611e6057610100808354040283529160200191611e8b565b820191906000526020600020905b815481529060010190602001808311611e6e57829003601f168201915b505050505084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061241a565b156120a85760008190505b60018080549050611ef69190613538565b811015611fe25760018082611f0b91906134e2565b81548110611f42577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906003020160018281548110611f8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016000820181600001908054611fac90613662565b611fb79291906129a3565b5060018201548160010155600282015481600201559050508080611fda90613694565b915050611ee5565b50600180548061201b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000209060030201600080820160006120409190612a30565b600182016000905560028201600090555050905582826040516120649291906130ff565b60405180910390207fcee998486f3d0adcdd2adb0961c0a53c3601b7165798f8f771109a455ba2d8b38260405161209b91906133e0565b60405180910390a26120bb565b80806120b390613694565b915050611dac565b505050565b6120c861234e565b73ffffffffffffffffffffffffffffffffffffffff166120e6610e99565b73ffffffffffffffffffffffffffffffffffffffff161461213c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612133906132de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a39061327e565b60405180910390fd5b6121b581612356565b50565b6121c06128fc565b60016121cb83612512565b81548110612202577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906003020160405180606001604052908160008201805461222b90613662565b80601f016020809104026020016040519081016040528092919081815260200182805461225790613662565b80156122a45780601f10612279576101008083540402835291602001916122a4565b820191906000526020600020905b81548152906001019060200180831161228757829003601f168201915b50505050508152602001600182015481526020016002820154815250509050919050565b6123498363a9059cbb60e01b84846040516024016122e7929190613181565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061267f565b505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008160405160200161242d9190613118565b60405160208183030381529060405280519060200120836040516020016124549190613118565b6040516020818303038152906040528051906020012014905092915050565b6124f6846323b872dd60e01b8585856040516024016124949392919061314a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061267f565b50505050565b6000818361250a91906134e2565b905092915050565b600080821415612525576000905061267a565b60008080600190505b60018054905081101561267357600060018281548110612577577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600302016040518060600160405290816000820180546125a090613662565b80601f01602080910402602001604051908101604052809291908181526020018280546125cc90613662565b80156126195780601f106125ee57610100808354040283529160200191612619565b820191906000526020600020905b8154815290600101906020018083116125fc57829003601f168201915b505050505081526020016001820154815260200160028201548152505090508060400151861015801561264f5750828160400151115b1561265f57819350806040015192505b50808061266b90613694565b91505061252e565b5081925050505b919050565b60006126e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166127469092919063ffffffff16565b905060008151111561274157808060200190518101906127019190612b7e565b612740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127379061335e565b60405180910390fd5b5b505050565b6060612755848460008561275e565b90509392505050565b6060824710156127a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279a9061329e565b60405180910390fd5b6127ac85612872565b6127eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e29061331e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161281491906130e8565b60006040518083038185875af1925050503d8060008114612851576040519150601f19603f3d011682016040523d82523d6000602084013e612856565b606091505b5091509150612866828286612895565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606083156128a5578290506128f5565b6000835111156128b85782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ec919061321e565b60405180910390fd5b9392505050565b60405180606001604052806060815260200160008152602001600081525090565b82805461292990613662565b90600052602060002090601f01602090048101928261294b5760008555612992565b82601f1061296457805160ff1916838001178555612992565b82800160010185558215612992579182015b82811115612991578251825591602001919060010190612976565b5b50905061299f9190612a70565b5090565b8280546129af90613662565b90600052602060002090601f0160209004810192826129d15760008555612a1f565b82601f106129e25780548555612a1f565b82800160010185558215612a1f57600052602060002091601f016020900482015b82811115612a1e578254825591600101919060010190612a03565b5b509050612a2c9190612a70565b5090565b508054612a3c90613662565b6000825580601f10612a4e5750612a6d565b601f016020900490600052602060002090810190612a6c9190612a70565b5b50565b5b80821115612a89576000816000905550600101612a71565b5090565b600081359050612a9c81613958565b92915050565b600081519050612ab18161396f565b92915050565b600081359050612ac681613986565b92915050565b600081359050612adb8161399d565b92915050565b60008083601f840112612af357600080fd5b8235905067ffffffffffffffff811115612b0c57600080fd5b602083019150836001820283011115612b2457600080fd5b9250929050565b600081359050612b3a816139b4565b92915050565b600081519050612b4f816139b4565b92915050565b600060208284031215612b6757600080fd5b6000612b7584828501612a8d565b91505092915050565b600060208284031215612b9057600080fd5b6000612b9e84828501612aa2565b91505092915050565b60008060408385031215612bba57600080fd5b6000612bc885828601612ab7565b9250506020612bd985828601612acc565b9150509250929050565b60008060208385031215612bf657600080fd5b600083013567ffffffffffffffff811115612c1057600080fd5b612c1c85828601612ae1565b92509250509250929050565b60008060008060608587031215612c3e57600080fd5b600085013567ffffffffffffffff811115612c5857600080fd5b612c6487828801612ae1565b94509450506020612c7787828801612b2b565b9250506040612c8887828801612b2b565b91505092959194509250565b600060208284031215612ca657600080fd5b6000612cb484828501612b2b565b91505092915050565b600060208284031215612ccf57600080fd5b6000612cdd84828501612b40565b91505092915050565b60008060408385031215612cf957600080fd5b6000612d0785828601612b2b565b9250506020612d1885828601612a8d565b9150509250929050565b60008060408385031215612d3557600080fd5b6000612d4385828601612b2b565b9250506020612d5485828601612b2b565b9150509250929050565b6000612d6a8383612e79565b905092915050565b612d7b8161356c565b82525050565b6000612d8c8261346b565b612d968185613499565b935083602082028501612da88561345b565b8060005b85811015612de45784840389528151612dc58582612d5e565b9450612dd08361348c565b925060208a01995050600181019050612dac565b50829750879550505050505092915050565b612dff8161357e565b82525050565b6000612e1082613476565b612e1a81856134aa565b9350612e2a81856020860161362f565b80840191505092915050565b612e3f816135d8565b82525050565b612e4e816135fc565b82525050565b6000612e6083856134d7565b9350612e6d838584613620565b82840190509392505050565b6000612e8482613481565b612e8e81856134b5565b9350612e9e81856020860161362f565b612ea78161373b565b840191505092915050565b6000612ebd82613481565b612ec781856134c6565b9350612ed781856020860161362f565b612ee08161373b565b840191505092915050565b6000612ef682613481565b612f0081856134d7565b9350612f1081856020860161362f565b80840191505092915050565b6000612f296026836134c6565b9150612f348261374c565b604082019050919050565b6000612f4c6026836134c6565b9150612f578261379b565b604082019050919050565b6000612f6f601a836134c6565b9150612f7a826137ea565b602082019050919050565b6000612f926020836134c6565b9150612f9d82613813565b602082019050919050565b6000612fb5600c836134c6565b9150612fc08261383c565b602082019050919050565b6000612fd8601d836134c6565b9150612fe382613865565b602082019050919050565b6000612ffb6012836134c6565b91506130068261388e565b602082019050919050565b600061301e602a836134c6565b9150613029826138b7565b604082019050919050565b60006130416012836134c6565b915061304c82613906565b602082019050919050565b60006130646011836134c6565b915061306f8261392f565b602082019050919050565b600060608301600083015184820360008601526130978282612e79565b91505060208301516130ac60208601826130ca565b5060408301516130bf60408601826130ca565b508091505092915050565b6130d3816135ce565b82525050565b6130e2816135ce565b82525050565b60006130f48284612e05565b915081905092915050565b600061310c828486612e54565b91508190509392505050565b60006131248284612eeb565b915081905092915050565b60006020820190506131446000830184612d72565b92915050565b600060608201905061315f6000830186612d72565b61316c6020830185612d72565b61317960408301846130d9565b949350505050565b60006040820190506131966000830185612d72565b6131a360208301846130d9565b9392505050565b600060208201905081810360008301526131c48184612d81565b905092915050565b60006020820190506131e16000830184612df6565b92915050565b60006060820190506131fc6000830186612e36565b6132096020830185612e45565b61321660408301846130d9565b949350505050565b600060208201905081810360008301526132388184612eb2565b905092915050565b6000606082019050818103600083015261325a8186612eb2565b905061326960208301856130d9565b61327660408301846130d9565b949350505050565b6000602082019050818103600083015261329781612f1c565b9050919050565b600060208201905081810360008301526132b781612f3f565b9050919050565b600060208201905081810360008301526132d781612f62565b9050919050565b600060208201905081810360008301526132f781612f85565b9050919050565b6000602082019050818103600083015261331781612fa8565b9050919050565b6000602082019050818103600083015261333781612fcb565b9050919050565b6000602082019050818103600083015261335781612fee565b9050919050565b6000602082019050818103600083015261337781613011565b9050919050565b6000602082019050818103600083015261339781613034565b9050919050565b600060208201905081810360008301526133b781613057565b9050919050565b600060208201905081810360008301526133d8818461307a565b905092915050565b60006020820190506133f560008301846130d9565b92915050565b600060408201905061341060008301856130d9565b61341d60208301846130d9565b9392505050565b600060608201905061343960008301866130d9565b61344660208301856130d9565b61345360408301846130d9565b949350505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006134ed826135ce565b91506134f8836135ce565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561352d5761352c6136dd565b5b828201905092915050565b6000613543826135ce565b915061354e836135ce565b925082821015613561576135606136dd565b5b828203905092915050565b6000613577826135ae565b9050919050565b60008115159050919050565b60006135958261356c565b9050919050565b60006135a78261356c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006135e3826135ea565b9050919050565b60006135f5826135ae565b9050919050565b60006136078261360e565b9050919050565b6000613619826135ae565b9050919050565b82818337600083830152505050565b60005b8381101561364d578082015181840152602081019050613632565b8381111561365c576000848401525b50505050565b6000600282049050600182168061367a57607f821691505b6020821081141561368e5761368d61370c565b5b50919050565b600061369f826135ce565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136d2576136d16136dd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f557365722068617320616c7265616479206465706f7369746564000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f207375636820746965720000000000000000000000000000000000000000600082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f4d61782052657761726420526561636865640000000000000000000000000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f4e6f2072657761726420746f20636c61696d0000000000000000000000000000600082015250565b7f546f6b656e7320617265206c6f636b6564000000000000000000000000000000600082015250565b6139618161356c565b811461396c57600080fd5b50565b6139788161357e565b811461398357600080fd5b50565b61398f8161358a565b811461399a57600080fd5b50565b6139a68161359c565b81146139b157600080fd5b50565b6139bd816135ce565b81146139c857600080fd5b5056fea26469706673582212209d69b1a3df9f7a653a91d5ea081e94b75d96bccb182641f5582b9cdac810f69a64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000278d00
-----Decoded View---------------
Arg [0] : _lockPeriod (uint256): 2592000
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000278d00
Deployed Bytecode Sourcemap
37407:5100:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34428:19;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39348:223;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38984:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38062:26;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39579:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39843:200;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40947:556;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42039:465;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38005:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38808:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39085:255;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2734:103;;;:::i;:::-;;38696:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2083:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38149:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;36016:628;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41511:520;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34956:330;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34687:261;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40100:839;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36652:461;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2992:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34428:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39348:223::-;39475:7;39553:10;;39507:8;:17;39516:7;39507:17;;;;;;;;;;;:26;39525:7;39507:26;;;;;;;;;;;;;;;:43;;;:56;;;;:::i;:::-;39500:63;;39348:223;;;;:::o;38984:93::-;39027:7;39054:8;:15;;;;39047:22;;38984:93;:::o;38062:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39579:256::-;39702:11;;:::i;:::-;39731:20;39754:8;:17;39763:7;39754:17;;;;;;;;;;;:26;39772:7;39754:26;;;;;;;;;;;;;;;39731:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39798:29;39815:4;:11;;;39798:16;:29::i;:::-;39791:36;;;39579:256;;;;:::o;39843:200::-;39970:7;40002:8;:17;40011:7;40002:17;;;;;;;;;;;:26;40020:7;40002:26;;;;;;;;;;;;;;;:33;;;39995:40;;39843:200;;;;:::o;40947:556::-;41000:15;41018:10;41000:28;;41039:21;41063:8;:17;41072:7;41063:17;;;;;;;;;;;:26;41081:7;41063:26;;;;;;;;;;;;;;;41039:50;;41100:20;41123:8;41132:7;41123:17;;;;;;;;;;;;;;;;;;;;;;;;;;41100:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41151:17;41171:26;41180:7;41189;41171:8;:26::i;:::-;41151:46;;41219:12;41218:13;41210:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41264:15;41282:4;:11;;;41264:29;;41304:47;41330:7;41339:4;:11;;;41304:4;:12;;;:25;;;;:47;;;;;:::i;:::-;41362:20;41374:7;41362:11;:20::i;:::-;41407:1;41393:4;:11;;:15;;;;41443:1;41419:4;:21;;:25;;;;41478:7;41469;41460:35;;;41487:7;41460:35;;;;;;:::i;:::-;;;;;;;;40947:556;;;;;;:::o;42039:465::-;42113:21;42137:8;:17;42146:7;42137:17;;;;;;;;;;;:29;42155:10;42137:29;;;;;;;;;;;;;;;42113:53;;42177:20;42200:8;42209:7;42200:17;;;;;;;;;;;;;;;;;;;;;;;;;;42177:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42228:14;42245:4;:11;;;42228:28;;42281:1;42267:4;:11;;:15;;;;42311:1;42293:4;:15;;:19;;;;42393:37;42419:2;42423:6;42393:4;:12;;;:25;;;;:37;;;;;:::i;:::-;42493:2;42446:50;;42476:7;42464:10;42446:50;;;42485:6;42446:50;;;;;;:::i;:::-;;;;;;;;42039:465;;;;;:::o;38005:25::-;;;;:::o;38808:168::-;2314:12;:10;:12::i;:::-;2303:23;;:7;:5;:7::i;:::-;:23;;;2295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38918:8:::1;38932:35;;;;;;;;38941:8;38932:35;;;;;;38951:12;38932:35;;;;;;38965:1;38932:35;;::::0;38918:50:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38808:168:::0;;:::o;39085:255::-;39203:4;39322:10;;39276:8;:17;39285:7;39276:17;;;;;;;;;;;:26;39294:7;39276:26;;;;;;;;;;;;;;;:43;;;:56;;;;:::i;:::-;39245:15;:87;39225:107;;39085:255;;;;:::o;2734:103::-;2314:12;:10;:12::i;:::-;2303:23;;:7;:5;:7::i;:::-;:23;;;2295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2799:30:::1;2826:1;2799:18;:30::i;:::-;2734:103::o:0;38696:104::-;2314:12;:10;:12::i;:::-;2303:23;;:7;:5;:7::i;:::-;:23;;;2295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38781:11:::1;38768:10;:24;;;;38696:104:::0;:::o;2083:87::-;2129:7;2156:6;;;;;;;;;;;2149:13;;2083:87;:::o;38149:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36016:628::-;36148:7;2314:12;:10;:12::i;:::-;2303:23;;:7;:5;:7::i;:::-;:23;;;2295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36173:9:::1;36168:294;36192:5;:12;;;;36188:1;:16;36168:294;;;36230:29;36243:5;36249:1;36243:8;;;;;;;;;;;;;;;;;;;;;;;;;;:11;;36230:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36256:2;;36230:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:29::i;:::-;36226:225;;;36296:4;36280:5;36286:1;36280:8;;;;;;;;;;;;;;;;;;;;;;;;;;:13;;:20;;;;36340:9;36319:5;36325:1;36319:8;;;;;;;;;;;;;;;;;;;;;;;;;;:18;;:30;;;;36386:2;;36375:31;;;;;;;:::i;:::-;;;;;;;;;36390:4;36396:9;36375:31;;;;;;;:::i;:::-;;;;;;;;36434:1;36427:8;;;;;36226:225;36206:3;;;;;:::i;:::-;;;;36168:294;;;;36474:19;36496:25;;;;;;;;36501:2;;36496:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36505:4;36496:25;;;;36511:9;36496:25;;::::0;36474:47:::1;;36532:5;36543:7;36532:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;36580:2;;36569:31;;;;;;;:::i;:::-;;;;;;;;;36584:4;36590:9;36569:31;;;;;;;:::i;:::-;;;;;;;;36635:1;36620:5:::0;:12:::1;;;;:16;;;;:::i;:::-;36613:23;;;2374:1;36016:628:::0;;;;;;:::o;41511:520::-;41567:15;41585:10;41567:28;;41606:21;41630:8;:17;41639:7;41630:17;;;;;;;;;;;:26;41648:7;41630:26;;;;;;;;;;;;;;;41606:50;;41667:17;41687:26;41696:7;41705;41687:8;:26::i;:::-;41667:46;;41724:20;41747:8;41756:7;41747:17;;;;;;;;;;;;;;;;;;;;;;;;;;41724:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41784:12;41783:13;41775:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41855:1;41837:4;:15;;;:19;41829:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;41890:4;:16;;;:21;;;41912:7;41921:4;:15;;;41890:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41966:1;41948:4;:15;;:19;;;;41998:7;41989;41983:40;;;42007:4;:15;;;41983:40;;;;;;:::i;:::-;;;;;;;;41511:520;;;;;:::o;34956:330::-;35063:11;;:::i;:::-;35097:9;35092:154;35116:5;:12;;;;35112:1;:16;35092:154;;;35154:29;35167:5;35173:1;35167:8;;;;;;;;;;;;;;;;;;;;;;;;;;:11;;35154:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35180:2;;35154:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:29::i;:::-;35150:85;;;35211:5;35217:1;35211:8;;;;;;;;;;;;;;;;;;;;;;;;;;35204:15;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35150:85;35130:3;;;;;:::i;:::-;;;;35092:154;;;;35256:22;;;;;;;;;;:::i;:::-;;;;;;;;34956:330;;;;;:::o;34687:261::-;34741:15;34769:19;34804:5;:12;;;;34791:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34769:48;;34833:9;34828:90;34852:5;:12;;;;34848:1;:16;34828:90;;;34895:5;34901:1;34895:8;;;;;;;;;;;;;;;;;;;;;;;;;;:11;;34886:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:3;34890:1;34886:6;;;;;;;;;;;;;;;;;;;;;:20;;;;34866:3;;;;;:::i;:::-;;;;34828:90;;;;34937:3;34930:10;;;34687:261;:::o;40100:839::-;40169:15;40187:10;40169:28;;40208:21;40232:8;:17;40241:7;40232:17;;;;;;;;;;;:26;40250:7;40232:26;;;;;;;;;;;;;;;40208:50;;40269:17;40289:5;40295:7;40289:14;;;;;;;;;;;;;;;;;;;;;;;;;;40269:34;;40314:21;40338:8;40347:7;40338:17;;;;;;;;;;;;;;;;;;;;;;;;;;40314:41;;40389:1;40374:4;:11;;;:16;;40366:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40486:4;:9;;;40454:4;:16;;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;40432:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;40552:128;40604:7;40635:4;40655;:14;;;40552:4;:12;;;;;;;;;;;;:29;;;;:128;;;;;;:::i;:::-;40707:4;:14;;;40693:4;:11;;:28;;;;40750:4;:9;;;40732:4;:15;;:27;;;;40794:15;40770:4;:21;;:39;;;;40840:32;40862:4;:9;;;40840:4;:17;;;:21;;:32;;;;:::i;:::-;40820:4;:17;;:52;;;;40907:7;40898;40890:41;;;40916:4;:14;;;40890:41;;;;;;:::i;:::-;;;;;;;;40100:839;;;;;;:::o;36652:461::-;2314:12;:10;:12::i;:::-;2303:23;;:7;:5;:7::i;:::-;:23;;;2295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36727:15:::1;36722:384;36758:5;:12;;;;36748:7;:22;36722:384;;;36802:35;36815:5;36821:7;36815:14;;;;;;;;;;;;;;;;;;;;;;;;;;:17;;36802:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36834:2;;36802:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:35::i;:::-;36798:297;;;36863:9;36875:7;36863:19;;36858:119;36903:1;36888:5:::0;:12:::1;;;;:16;;;;:::i;:::-;36884:1;:20;36858:119;;;36945:5;36955:1:::0;36951::::1;:5;;;;:::i;:::-;36945:12;;;;;;;;;;;;;;;;;;;;;;;;;;36934:5;36940:1;36934:8;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36906:3;;;;;:::i;:::-;;;;36858:119;;;;36995:5;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;37043:2;;37032:23;;;;;;;:::i;:::-;;;;;;;;;37047:7;37032:23;;;;;;:::i;:::-;;;;;;;;37074:5;;36798:297;36772:9;;;;;:::i;:::-;;;;36722:384;;;;36652:461:::0;;:::o;2992:238::-;2314:12;:10;:12::i;:::-;2303:23;;:7;:5;:7::i;:::-;:23;;;2295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3115:1:::1;3095:22;;:8;:22;;;;3073:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3194:28;3213:8;3194:18;:28::i;:::-;2992:238:::0;:::o;35294:170::-;35386:11;;:::i;:::-;35422:5;35428:27;35448:6;35428:19;:27::i;:::-;35422:34;;;;;;;;;;;;;;;;;;;;;;;;;;35415:41;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35294:170;;;:::o;23408:248::-;23525:123;23559:5;23602:23;;;23627:2;23631:5;23579:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23525:19;:123::i;:::-;23408:248;;;:::o;780:98::-;833:7;860:10;853:17;;780:98;:::o;3390:191::-;3464:16;3483:6;;;;;;;;;;;3464:25;;3509:8;3500:6;;:17;;;;;;;;;;;;;;;;;;3564:8;3533:40;;3554:8;3533:40;;;;;;;;;;;;3390:191;;:::o;37121:207::-;37227:4;37317:1;37300:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;37290:30;;;;;;37283:1;37266:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;37256:30;;;;;;:64;37249:71;;37121:207;;;;:::o;23664:285::-;23808:133;23842:5;23885:27;;;23914:4;23920:2;23924:5;23862:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23808:19;:133::i;:::-;23664:285;;;;:::o;6628:98::-;6686:7;6717:1;6713;:5;;;;:::i;:::-;6706:12;;6628:98;;;;:::o;35472:536::-;35567:7;35606:1;35596:6;:11;35592:52;;;35631:1;35624:8;;;;35592:52;35654:16;35685;35717:9;35729:1;35717:13;;35712:261;35736:5;:12;;;;35732:1;:16;35712:261;;;35770:16;35789:5;35795:1;35789:8;;;;;;;;;;;;;;;;;;;;;;;;;;35770:27;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35826:4;:14;;;35816:6;:24;;:53;;;;;35861:8;35844:4;:14;;;:25;35816:53;35812:150;;;35901:1;35890:12;;35932:4;:14;;;35921:25;;35812:150;35712:261;35750:3;;;;;:::i;:::-;;;;35712:261;;;;35992:8;35985:15;;;;35472:536;;;;:::o;26375:802::-;26799:23;26825:106;26867:4;26825:106;;;;;;;;;;;;;;;;;26833:5;26825:27;;;;:106;;;;;:::i;:::-;26799:132;;26966:1;26946:10;:17;:21;26942:228;;;27061:10;27050:30;;;;;;;;;;;;:::i;:::-;27024:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;26942:228;26375:802;;;:::o;17816:229::-;17953:12;17985:52;18007:6;18015:4;18021:1;18024:12;17985:21;:52::i;:::-;17978:59;;17816:229;;;;;:::o;19032:571::-;19202:12;19274:5;19249:21;:30;;19227:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;19364:18;19375:6;19364:10;:18::i;:::-;19356:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;19430:12;19444:23;19471:6;:11;;19490:5;19511:4;19471:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19429:97;;;;19544:51;19561:7;19570:10;19582:12;19544:16;:51::i;:::-;19537:58;;;;19032:571;;;;;;:::o;14974:326::-;15034:4;15291:1;15269:7;:19;;;:23;15262:30;;14974:326;;;:::o;21992:712::-;22142:12;22171:7;22167:530;;;22202:10;22195:17;;;;22167:530;22336:1;22316:10;:17;:21;22312:374;;;22514:10;22508:17;22575:15;22562:10;22558:2;22554:19;22547:44;22462:148;22657:12;22650:20;;;;;;;;;;;:::i;:::-;;;;;;;;21992:712;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;206:5;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:167::-;355:5;393:6;380:20;371:29;;409:47;450:5;409:47;:::i;:::-;361:101;;;;:::o;468:177::-;533:5;571:6;558:20;549:29;;587:52;633:5;587:52;:::i;:::-;539:106;;;;:::o;665:352::-;723:8;733:6;783:3;776:4;768:6;764:17;760:27;750:2;;801:1;798;791:12;750:2;837:6;824:20;814:30;;867:18;859:6;856:30;853:2;;;899:1;896;889:12;853:2;936:4;928:6;924:17;912:29;;990:3;982:4;974:6;970:17;960:8;956:32;953:41;950:2;;;1007:1;1004;997:12;950:2;740:277;;;;;:::o;1023:139::-;1069:5;1107:6;1094:20;1085:29;;1123:33;1150:5;1123:33;:::i;:::-;1075:87;;;;:::o;1168:143::-;1225:5;1256:6;1250:13;1241:22;;1272:33;1299:5;1272:33;:::i;:::-;1231:80;;;;:::o;1317:262::-;1376:6;1425:2;1413:9;1404:7;1400:23;1396:32;1393:2;;;1441:1;1438;1431:12;1393:2;1484:1;1509:53;1554:7;1545:6;1534:9;1530:22;1509:53;:::i;:::-;1499:63;;1455:117;1383:196;;;;:::o;1585:278::-;1652:6;1701:2;1689:9;1680:7;1676:23;1672:32;1669:2;;;1717:1;1714;1707:12;1669:2;1760:1;1785:61;1838:7;1829:6;1818:9;1814:22;1785:61;:::i;:::-;1775:71;;1731:125;1659:204;;;;:::o;1869:473::-;1970:6;1978;2027:2;2015:9;2006:7;2002:23;1998:32;1995:2;;;2043:1;2040;2033:12;1995:2;2086:1;2111:67;2170:7;2161:6;2150:9;2146:22;2111:67;:::i;:::-;2101:77;;2057:131;2227:2;2253:72;2317:7;2308:6;2297:9;2293:22;2253:72;:::i;:::-;2243:82;;2198:137;1985:357;;;;;:::o;2348:395::-;2419:6;2427;2476:2;2464:9;2455:7;2451:23;2447:32;2444:2;;;2492:1;2489;2482:12;2444:2;2563:1;2552:9;2548:17;2535:31;2593:18;2585:6;2582:30;2579:2;;;2625:1;2622;2615:12;2579:2;2661:65;2718:7;2709:6;2698:9;2694:22;2661:65;:::i;:::-;2643:83;;;;2506:230;2434:309;;;;;:::o;2749:685::-;2838:6;2846;2854;2862;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2927:1;2924;2917:12;2879:2;2998:1;2987:9;2983:17;2970:31;3028:18;3020:6;3017:30;3014:2;;;3060:1;3057;3050:12;3014:2;3096:65;3153:7;3144:6;3133:9;3129:22;3096:65;:::i;:::-;3078:83;;;;2941:230;3210:2;3236:53;3281:7;3272:6;3261:9;3257:22;3236:53;:::i;:::-;3226:63;;3181:118;3338:2;3364:53;3409:7;3400:6;3389:9;3385:22;3364:53;:::i;:::-;3354:63;;3309:118;2869:565;;;;;;;:::o;3440:262::-;3499:6;3548:2;3536:9;3527:7;3523:23;3519:32;3516:2;;;3564:1;3561;3554:12;3516:2;3607:1;3632:53;3677:7;3668:6;3657:9;3653:22;3632:53;:::i;:::-;3622:63;;3578:117;3506:196;;;;:::o;3708:284::-;3778:6;3827:2;3815:9;3806:7;3802:23;3798:32;3795:2;;;3843:1;3840;3833:12;3795:2;3886:1;3911:64;3967:7;3958:6;3947:9;3943:22;3911:64;:::i;:::-;3901:74;;3857:128;3785:207;;;;:::o;3998:407::-;4066:6;4074;4123:2;4111:9;4102:7;4098:23;4094:32;4091:2;;;4139:1;4136;4129:12;4091:2;4182:1;4207:53;4252:7;4243:6;4232:9;4228:22;4207:53;:::i;:::-;4197:63;;4153:117;4309:2;4335:53;4380:7;4371:6;4360:9;4356:22;4335:53;:::i;:::-;4325:63;;4280:118;4081:324;;;;;:::o;4411:407::-;4479:6;4487;4536:2;4524:9;4515:7;4511:23;4507:32;4504:2;;;4552:1;4549;4542:12;4504:2;4595:1;4620:53;4665:7;4656:6;4645:9;4641:22;4620:53;:::i;:::-;4610:63;;4566:117;4722:2;4748:53;4793:7;4784:6;4773:9;4769:22;4748:53;:::i;:::-;4738:63;;4693:118;4494:324;;;;;:::o;4824:196::-;4913:10;4948:66;5010:3;5002:6;4948:66;:::i;:::-;4934:80;;4924:96;;;;:::o;5026:118::-;5113:24;5131:5;5113:24;:::i;:::-;5108:3;5101:37;5091:53;;:::o;5178:991::-;5317:3;5346:64;5404:5;5346:64;:::i;:::-;5426:96;5515:6;5510:3;5426:96;:::i;:::-;5419:103;;5548:3;5593:4;5585:6;5581:17;5576:3;5572:27;5623:66;5683:5;5623:66;:::i;:::-;5712:7;5743:1;5728:396;5753:6;5750:1;5747:13;5728:396;;;5824:9;5818:4;5814:20;5809:3;5802:33;5875:6;5869:13;5903:84;5982:4;5967:13;5903:84;:::i;:::-;5895:92;;6010:70;6073:6;6010:70;:::i;:::-;6000:80;;6109:4;6104:3;6100:14;6093:21;;5788:336;5775:1;5772;5768:9;5763:14;;5728:396;;;5732:14;6140:4;6133:11;;6160:3;6153:10;;5322:847;;;;;;;;;:::o;6175:109::-;6256:21;6271:5;6256:21;:::i;:::-;6251:3;6244:34;6234:50;;:::o;6290:373::-;6394:3;6422:38;6454:5;6422:38;:::i;:::-;6476:88;6557:6;6552:3;6476:88;:::i;:::-;6469:95;;6573:52;6618:6;6613:3;6606:4;6599:5;6595:16;6573:52;:::i;:::-;6650:6;6645:3;6641:16;6634:23;;6398:265;;;;;:::o;6669:159::-;6770:51;6815:5;6770:51;:::i;:::-;6765:3;6758:64;6748:80;;:::o;6834:169::-;6940:56;6990:5;6940:56;:::i;:::-;6935:3;6928:69;6918:85;;:::o;7033:317::-;7149:3;7170:89;7252:6;7247:3;7170:89;:::i;:::-;7163:96;;7269:43;7305:6;7300:3;7293:5;7269:43;:::i;:::-;7337:6;7332:3;7328:16;7321:23;;7153:197;;;;;:::o;7356:344::-;7434:3;7462:39;7495:5;7462:39;:::i;:::-;7517:61;7571:6;7566:3;7517:61;:::i;:::-;7510:68;;7587:52;7632:6;7627:3;7620:4;7613:5;7609:16;7587:52;:::i;:::-;7664:29;7686:6;7664:29;:::i;:::-;7659:3;7655:39;7648:46;;7438:262;;;;;:::o;7706:364::-;7794:3;7822:39;7855:5;7822:39;:::i;:::-;7877:71;7941:6;7936:3;7877:71;:::i;:::-;7870:78;;7957:52;8002:6;7997:3;7990:4;7983:5;7979:16;7957:52;:::i;:::-;8034:29;8056:6;8034:29;:::i;:::-;8029:3;8025:39;8018:46;;7798:272;;;;;:::o;8076:377::-;8182:3;8210:39;8243:5;8210:39;:::i;:::-;8265:89;8347:6;8342:3;8265:89;:::i;:::-;8258:96;;8363:52;8408:6;8403:3;8396:4;8389:5;8385:16;8363:52;:::i;:::-;8440:6;8435:3;8431:16;8424:23;;8186:267;;;;;:::o;8459:366::-;8601:3;8622:67;8686:2;8681:3;8622:67;:::i;:::-;8615:74;;8698:93;8787:3;8698:93;:::i;:::-;8816:2;8811:3;8807:12;8800:19;;8605:220;;;:::o;8831:366::-;8973:3;8994:67;9058:2;9053:3;8994:67;:::i;:::-;8987:74;;9070:93;9159:3;9070:93;:::i;:::-;9188:2;9183:3;9179:12;9172:19;;8977:220;;;:::o;9203:366::-;9345:3;9366:67;9430:2;9425:3;9366:67;:::i;:::-;9359:74;;9442:93;9531:3;9442:93;:::i;:::-;9560:2;9555:3;9551:12;9544:19;;9349:220;;;:::o;9575:366::-;9717:3;9738:67;9802:2;9797:3;9738:67;:::i;:::-;9731:74;;9814:93;9903:3;9814:93;:::i;:::-;9932:2;9927:3;9923:12;9916:19;;9721:220;;;:::o;9947:366::-;10089:3;10110:67;10174:2;10169:3;10110:67;:::i;:::-;10103:74;;10186:93;10275:3;10186:93;:::i;:::-;10304:2;10299:3;10295:12;10288:19;;10093:220;;;:::o;10319:366::-;10461:3;10482:67;10546:2;10541:3;10482:67;:::i;:::-;10475:74;;10558:93;10647:3;10558:93;:::i;:::-;10676:2;10671:3;10667:12;10660:19;;10465:220;;;:::o;10691:366::-;10833:3;10854:67;10918:2;10913:3;10854:67;:::i;:::-;10847:74;;10930:93;11019:3;10930:93;:::i;:::-;11048:2;11043:3;11039:12;11032:19;;10837:220;;;:::o;11063:366::-;11205:3;11226:67;11290:2;11285:3;11226:67;:::i;:::-;11219:74;;11302:93;11391:3;11302:93;:::i;:::-;11420:2;11415:3;11411:12;11404:19;;11209:220;;;:::o;11435:366::-;11577:3;11598:67;11662:2;11657:3;11598:67;:::i;:::-;11591:74;;11674:93;11763:3;11674:93;:::i;:::-;11792:2;11787:3;11783:12;11776:19;;11581:220;;;:::o;11807:366::-;11949:3;11970:67;12034:2;12029:3;11970:67;:::i;:::-;11963:74;;12046:93;12135:3;12046:93;:::i;:::-;12164:2;12159:3;12155:12;12148:19;;11953:220;;;:::o;12231:777::-;12344:3;12380:4;12375:3;12371:14;12465:4;12458:5;12454:16;12448:23;12518:3;12512:4;12508:14;12501:4;12496:3;12492:14;12485:38;12544:73;12612:4;12598:12;12544:73;:::i;:::-;12536:81;;12395:233;12710:4;12703:5;12699:16;12693:23;12729:63;12786:4;12781:3;12777:14;12763:12;12729:63;:::i;:::-;12638:164;12889:4;12882:5;12878:16;12872:23;12908:63;12965:4;12960:3;12956:14;12942:12;12908:63;:::i;:::-;12812:169;12998:4;12991:11;;12349:659;;;;;:::o;13014:108::-;13091:24;13109:5;13091:24;:::i;:::-;13086:3;13079:37;13069:53;;:::o;13128:118::-;13215:24;13233:5;13215:24;:::i;:::-;13210:3;13203:37;13193:53;;:::o;13252:271::-;13382:3;13404:93;13493:3;13484:6;13404:93;:::i;:::-;13397:100;;13514:3;13507:10;;13386:137;;;;:::o;13529:295::-;13671:3;13693:105;13794:3;13785:6;13777;13693:105;:::i;:::-;13686:112;;13815:3;13808:10;;13675:149;;;;;:::o;13830:275::-;13962:3;13984:95;14075:3;14066:6;13984:95;:::i;:::-;13977:102;;14096:3;14089:10;;13966:139;;;;:::o;14111:222::-;14204:4;14242:2;14231:9;14227:18;14219:26;;14255:71;14323:1;14312:9;14308:17;14299:6;14255:71;:::i;:::-;14209:124;;;;:::o;14339:442::-;14488:4;14526:2;14515:9;14511:18;14503:26;;14539:71;14607:1;14596:9;14592:17;14583:6;14539:71;:::i;:::-;14620:72;14688:2;14677:9;14673:18;14664:6;14620:72;:::i;:::-;14702;14770:2;14759:9;14755:18;14746:6;14702:72;:::i;:::-;14493:288;;;;;;:::o;14787:332::-;14908:4;14946:2;14935:9;14931:18;14923:26;;14959:71;15027:1;15016:9;15012:17;15003:6;14959:71;:::i;:::-;15040:72;15108:2;15097:9;15093:18;15084:6;15040:72;:::i;:::-;14913:206;;;;;:::o;15125:413::-;15288:4;15326:2;15315:9;15311:18;15303:26;;15375:9;15369:4;15365:20;15361:1;15350:9;15346:17;15339:47;15403:128;15526:4;15517:6;15403:128;:::i;:::-;15395:136;;15293:245;;;;:::o;15544:210::-;15631:4;15669:2;15658:9;15654:18;15646:26;;15682:65;15744:1;15733:9;15729:17;15720:6;15682:65;:::i;:::-;15636:118;;;;:::o;15760:508::-;15942:4;15980:2;15969:9;15965:18;15957:26;;15993:85;16075:1;16064:9;16060:17;16051:6;15993:85;:::i;:::-;16088:91;16175:2;16164:9;16160:18;16151:6;16088:91;:::i;:::-;16189:72;16257:2;16246:9;16242:18;16233:6;16189:72;:::i;:::-;15947:321;;;;;;:::o;16274:313::-;16387:4;16425:2;16414:9;16410:18;16402:26;;16474:9;16468:4;16464:20;16460:1;16449:9;16445:17;16438:47;16502:78;16575:4;16566:6;16502:78;:::i;:::-;16494:86;;16392:195;;;;:::o;16593:533::-;16762:4;16800:2;16789:9;16785:18;16777:26;;16849:9;16843:4;16839:20;16835:1;16824:9;16820:17;16813:47;16877:78;16950:4;16941:6;16877:78;:::i;:::-;16869:86;;16965:72;17033:2;17022:9;17018:18;17009:6;16965:72;:::i;:::-;17047;17115:2;17104:9;17100:18;17091:6;17047:72;:::i;:::-;16767:359;;;;;;:::o;17132:419::-;17298:4;17336:2;17325:9;17321:18;17313:26;;17385:9;17379:4;17375:20;17371:1;17360:9;17356:17;17349:47;17413:131;17539:4;17413:131;:::i;:::-;17405:139;;17303:248;;;:::o;17557:419::-;17723:4;17761:2;17750:9;17746:18;17738:26;;17810:9;17804:4;17800:20;17796:1;17785:9;17781:17;17774:47;17838:131;17964:4;17838:131;:::i;:::-;17830:139;;17728:248;;;:::o;17982:419::-;18148:4;18186:2;18175:9;18171:18;18163:26;;18235:9;18229:4;18225:20;18221:1;18210:9;18206:17;18199:47;18263:131;18389:4;18263:131;:::i;:::-;18255:139;;18153:248;;;:::o;18407:419::-;18573:4;18611:2;18600:9;18596:18;18588:26;;18660:9;18654:4;18650:20;18646:1;18635:9;18631:17;18624:47;18688:131;18814:4;18688:131;:::i;:::-;18680:139;;18578:248;;;:::o;18832:419::-;18998:4;19036:2;19025:9;19021:18;19013:26;;19085:9;19079:4;19075:20;19071:1;19060:9;19056:17;19049:47;19113:131;19239:4;19113:131;:::i;:::-;19105:139;;19003:248;;;:::o;19257:419::-;19423:4;19461:2;19450:9;19446:18;19438:26;;19510:9;19504:4;19500:20;19496:1;19485:9;19481:17;19474:47;19538:131;19664:4;19538:131;:::i;:::-;19530:139;;19428:248;;;:::o;19682:419::-;19848:4;19886:2;19875:9;19871:18;19863:26;;19935:9;19929:4;19925:20;19921:1;19910:9;19906:17;19899:47;19963:131;20089:4;19963:131;:::i;:::-;19955:139;;19853:248;;;:::o;20107:419::-;20273:4;20311:2;20300:9;20296:18;20288:26;;20360:9;20354:4;20350:20;20346:1;20335:9;20331:17;20324:47;20388:131;20514:4;20388:131;:::i;:::-;20380:139;;20278:248;;;:::o;20532:419::-;20698:4;20736:2;20725:9;20721:18;20713:26;;20785:9;20779:4;20775:20;20771:1;20760:9;20756:17;20749:47;20813:131;20939:4;20813:131;:::i;:::-;20805:139;;20703:248;;;:::o;20957:419::-;21123:4;21161:2;21150:9;21146:18;21138:26;;21210:9;21204:4;21200:20;21196:1;21185:9;21181:17;21174:47;21238:131;21364:4;21238:131;:::i;:::-;21230:139;;21128:248;;;:::o;21382:361::-;21519:4;21557:2;21546:9;21542:18;21534:26;;21606:9;21600:4;21596:20;21592:1;21581:9;21577:17;21570:47;21634:102;21731:4;21722:6;21634:102;:::i;:::-;21626:110;;21524:219;;;;:::o;21749:222::-;21842:4;21880:2;21869:9;21865:18;21857:26;;21893:71;21961:1;21950:9;21946:17;21937:6;21893:71;:::i;:::-;21847:124;;;;:::o;21977:332::-;22098:4;22136:2;22125:9;22121:18;22113:26;;22149:71;22217:1;22206:9;22202:17;22193:6;22149:71;:::i;:::-;22230:72;22298:2;22287:9;22283:18;22274:6;22230:72;:::i;:::-;22103:206;;;;;:::o;22315:442::-;22464:4;22502:2;22491:9;22487:18;22479:26;;22515:71;22583:1;22572:9;22568:17;22559:6;22515:71;:::i;:::-;22596:72;22664:2;22653:9;22649:18;22640:6;22596:72;:::i;:::-;22678;22746:2;22735:9;22731:18;22722:6;22678:72;:::i;:::-;22469:288;;;;;;:::o;22763:142::-;22840:4;22863:3;22855:11;;22893:4;22888:3;22884:14;22876:22;;22845:60;;;:::o;22911:124::-;22988:6;23022:5;23016:12;23006:22;;22995:40;;;:::o;23041:98::-;23092:6;23126:5;23120:12;23110:22;;23099:40;;;:::o;23145:99::-;23197:6;23231:5;23225:12;23215:22;;23204:40;;;:::o;23250:123::-;23330:4;23362;23357:3;23353:14;23345:22;;23335:38;;;:::o;23379:194::-;23488:11;23522:6;23517:3;23510:19;23562:4;23557:3;23553:14;23538:29;;23500:73;;;;:::o;23579:147::-;23680:11;23717:3;23702:18;;23692:34;;;;:::o;23732:159::-;23806:11;23840:6;23835:3;23828:19;23880:4;23875:3;23871:14;23856:29;;23818:73;;;;:::o;23897:169::-;23981:11;24015:6;24010:3;24003:19;24055:4;24050:3;24046:14;24031:29;;23993:73;;;;:::o;24072:148::-;24174:11;24211:3;24196:18;;24186:34;;;;:::o;24226:305::-;24266:3;24285:20;24303:1;24285:20;:::i;:::-;24280:25;;24319:20;24337:1;24319:20;:::i;:::-;24314:25;;24473:1;24405:66;24401:74;24398:1;24395:81;24392:2;;;24479:18;;:::i;:::-;24392:2;24523:1;24520;24516:9;24509:16;;24270:261;;;;:::o;24537:191::-;24577:4;24597:20;24615:1;24597:20;:::i;:::-;24592:25;;24631:20;24649:1;24631:20;:::i;:::-;24626:25;;24670:1;24667;24664:8;24661:2;;;24675:18;;:::i;:::-;24661:2;24720:1;24717;24713:9;24705:17;;24582:146;;;;:::o;24734:96::-;24771:7;24800:24;24818:5;24800:24;:::i;:::-;24789:35;;24779:51;;;:::o;24836:90::-;24870:7;24913:5;24906:13;24899:21;24888:32;;24878:48;;;:::o;24932:110::-;24983:7;25012:24;25030:5;25012:24;:::i;:::-;25001:35;;24991:51;;;:::o;25048:115::-;25104:7;25133:24;25151:5;25133:24;:::i;:::-;25122:35;;25112:51;;;:::o;25169:126::-;25206:7;25246:42;25239:5;25235:54;25224:65;;25214:81;;;:::o;25301:77::-;25338:7;25367:5;25356:16;;25346:32;;;:::o;25384:154::-;25448:9;25481:51;25526:5;25481:51;:::i;:::-;25468:64;;25458:80;;;:::o;25544:127::-;25608:9;25641:24;25659:5;25641:24;:::i;:::-;25628:37;;25618:53;;;:::o;25677:164::-;25746:9;25779:56;25829:5;25779:56;:::i;:::-;25766:69;;25756:85;;;:::o;25847:132::-;25916:9;25949:24;25967:5;25949:24;:::i;:::-;25936:37;;25926:53;;;:::o;25985:154::-;26069:6;26064:3;26059;26046:30;26131:1;26122:6;26117:3;26113:16;26106:27;26036:103;;;:::o;26145:307::-;26213:1;26223:113;26237:6;26234:1;26231:13;26223:113;;;26322:1;26317:3;26313:11;26307:18;26303:1;26298:3;26294:11;26287:39;26259:2;26256:1;26252:10;26247:15;;26223:113;;;26354:6;26351:1;26348:13;26345:2;;;26434:1;26425:6;26420:3;26416:16;26409:27;26345:2;26194:258;;;;:::o;26458:320::-;26502:6;26539:1;26533:4;26529:12;26519:22;;26586:1;26580:4;26576:12;26607:18;26597:2;;26663:4;26655:6;26651:17;26641:27;;26597:2;26725;26717:6;26714:14;26694:18;26691:38;26688:2;;;26744:18;;:::i;:::-;26688:2;26509:269;;;;:::o;26784:233::-;26823:3;26846:24;26864:5;26846:24;:::i;:::-;26837:33;;26892:66;26885:5;26882:77;26879:2;;;26962:18;;:::i;:::-;26879:2;27009:1;27002:5;26998:13;26991:20;;26827:190;;;:::o;27023:180::-;27071:77;27068:1;27061:88;27168:4;27165:1;27158:15;27192:4;27189:1;27182:15;27209:180;27257:77;27254:1;27247:88;27354:4;27351:1;27344:15;27378:4;27375:1;27368:15;27395:102;27436:6;27487:2;27483:7;27478:2;27471:5;27467:14;27463:28;27453:38;;27443:54;;;:::o;27503:225::-;27643:34;27639:1;27631:6;27627:14;27620:58;27712:8;27707:2;27699:6;27695:15;27688:33;27609:119;:::o;27734:225::-;27874:34;27870:1;27862:6;27858:14;27851:58;27943:8;27938:2;27930:6;27926:15;27919:33;27840:119;:::o;27965:176::-;28105:28;28101:1;28093:6;28089:14;28082:52;28071:70;:::o;28147:182::-;28287:34;28283:1;28275:6;28271:14;28264:58;28253:76;:::o;28335:162::-;28475:14;28471:1;28463:6;28459:14;28452:38;28441:56;:::o;28503:179::-;28643:31;28639:1;28631:6;28627:14;28620:55;28609:73;:::o;28688:168::-;28828:20;28824:1;28816:6;28812:14;28805:44;28794:62;:::o;28862:229::-;29002:34;28998:1;28990:6;28986:14;28979:58;29071:12;29066:2;29058:6;29054:15;29047:37;28968:123;:::o;29097:168::-;29237:20;29233:1;29225:6;29221:14;29214:44;29203:62;:::o;29271:167::-;29411:19;29407:1;29399:6;29395:14;29388:43;29377:61;:::o;29444:122::-;29517:24;29535:5;29517:24;:::i;:::-;29510:5;29507:35;29497:2;;29556:1;29553;29546:12;29497:2;29487:79;:::o;29572:116::-;29642:21;29657:5;29642:21;:::i;:::-;29635:5;29632:32;29622:2;;29678:1;29675;29668:12;29622:2;29612:76;:::o;29694:150::-;29781:38;29813:5;29781:38;:::i;:::-;29774:5;29771:49;29761:2;;29834:1;29831;29824:12;29761:2;29751:93;:::o;29850:160::-;29942:43;29979:5;29942:43;:::i;:::-;29935:5;29932:54;29922:2;;30000:1;29997;29990:12;29922:2;29912:98;:::o;30016:122::-;30089:24;30107:5;30089:24;:::i;:::-;30082:5;30079:35;30069:2;;30128:1;30125;30118:12;30069:2;30059:79;:::o
Swarm Source
ipfs://9d69b1a3df9f7a653a91d5ea081e94b75d96bccb182641f5582b9cdac810f69a
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MOVR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.