More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 106 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Buy Token | 21776125 | 31 hrs ago | IN | 0.017 ETH | 0.00055443 | ||||
Buy Token | 21759023 | 3 days ago | IN | 0.221 ETH | 0.00107694 | ||||
Buy Token | 21715498 | 9 days ago | IN | 0.035 ETH | 0.00131418 | ||||
Buy Token | 21712987 | 10 days ago | IN | 0.032 ETH | 0.00141457 | ||||
Buy Token | 21688107 | 13 days ago | IN | 0.11 ETH | 0.00192593 | ||||
Buy Token | 21682159 | 14 days ago | IN | 0.056 ETH | 0.00259547 | ||||
Buy Token | 21675229 | 15 days ago | IN | 0.005 ETH | 0.00382656 | ||||
Buy Token | 21668507 | 16 days ago | IN | 0.012 ETH | 0.00479527 | ||||
Set Vesting Time | 21655062 | 18 days ago | IN | 0 ETH | 0.00038931 | ||||
Set Token | 21655012 | 18 days ago | IN | 0 ETH | 0.00052784 | ||||
Buy Token | 21653008 | 18 days ago | IN | 0.021 ETH | 0.00150692 | ||||
Buy Token | 21652946 | 18 days ago | IN | 0.0489 ETH | 0.00360888 | ||||
Buy Token | 21573392 | 29 days ago | IN | 0.0365 ETH | 0.00223141 | ||||
Buy Token | 21569586 | 30 days ago | IN | 0.0015 ETH | 0.00075691 | ||||
Buy Token | 21553492 | 32 days ago | IN | 0.003 ETH | 0.00185946 | ||||
Buy Token | 21548093 | 33 days ago | IN | 0.077 ETH | 0.00113378 | ||||
Buy Token | 21533754 | 35 days ago | IN | 0.41 ETH | 0.01327238 | ||||
Buy Token | 21513530 | 37 days ago | IN | 0.01 ETH | 0.00108638 | ||||
Buy Token | 21508083 | 38 days ago | IN | 0.02 ETH | 0.00039231 | ||||
Buy Token | 21492573 | 40 days ago | IN | 0.02 ETH | 0.00160159 | ||||
Add Buyer | 21454853 | 46 days ago | IN | 0 ETH | 0.00123993 | ||||
Buy Token | 21435515 | 48 days ago | IN | 0.0015645 ETH | 0.00105891 | ||||
Buy Token | 21431087 | 49 days ago | IN | 0.017 ETH | 0.0061406 | ||||
Withdraw Usdt | 21410141 | 52 days ago | IN | 0 ETH | 0.00063492 | ||||
Buy Token | 21398613 | 54 days ago | IN | 0.001 ETH | 0.00101737 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21776125 | 31 hrs ago | 0.017 ETH | ||||
21759023 | 3 days ago | 0.221 ETH | ||||
21715498 | 9 days ago | 0.035 ETH | ||||
21712987 | 10 days ago | 0.032 ETH | ||||
21688107 | 13 days ago | 0.11 ETH | ||||
21682159 | 14 days ago | 0.056 ETH | ||||
21675229 | 15 days ago | 0.005 ETH | ||||
21673810 | 15 days ago | 0.00000369 ETH | ||||
21673810 | 15 days ago | 0.00000369 ETH | ||||
21668507 | 16 days ago | 0.012 ETH | ||||
21653008 | 18 days ago | 0.021 ETH | ||||
21652946 | 18 days ago | 0.0489 ETH | ||||
21573392 | 29 days ago | 0.0365 ETH | ||||
21569586 | 30 days ago | 0.0015 ETH | ||||
21553492 | 32 days ago | 0.003 ETH | ||||
21548093 | 33 days ago | 0.077 ETH | ||||
21533754 | 35 days ago | 0.41 ETH | ||||
21513530 | 37 days ago | 0.01 ETH | ||||
21508083 | 38 days ago | 0.02 ETH | ||||
21492573 | 40 days ago | 0.02 ETH | ||||
21435515 | 48 days ago | 0.0015645 ETH | ||||
21431087 | 49 days ago | 0.017 ETH | ||||
21398613 | 54 days ago | 0.001 ETH | ||||
21392392 | 54 days ago | 0.0045 ETH | ||||
21381279 | 56 days ago | 0.019 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Presale
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-10-28 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _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/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. * * ==== Security Considerations * * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be * considered as an intention to spend the allowance in any specific way. The second is that because permits have * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be * generally recommended is: * * ```solidity * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} * doThing(..., value); * } * * function doThing(..., uint256 value) public { * token.safeTransferFrom(msg.sender, address(this), value); * ... * } * ``` * * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also * {SafeERC20-safeTransferFrom}). * * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so * contracts should have entry points that don't rely on permit. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. * * CAUTION: See Security Considerations above. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) pragma solidity ^0.8.20; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedInnerCall(); /** * @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://consensys.net/diligence/blog/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.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } /** * @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 or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {FailedInnerCall} error. * * 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. */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @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`. */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { if (address(this).balance < value) { revert AddressInsufficientBalance(address(this)); } (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an * unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {FailedInnerCall} error. */ function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}. */ function _revert(bytes memory returndata) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert FailedInnerCall(); } } } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.20; /** * @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; /** * @dev An operation with an ERC20 token failed. */ error SafeERC20FailedOperation(address token); /** * @dev Indicates a failed `decreaseAllowance` request. */ error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease); /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value))); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); forceApprove(token, spender, oldAllowance + value); } /** * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no * value, non-reverting calls are assumed to be successful. */ function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal { unchecked { uint256 currentAllowance = token.allowance(address(this), spender); if (currentAllowance < requestedDecrease) { revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease); } forceApprove(token, spender, currentAllowance - requestedDecrease); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval * to be set to zero before setting it to a non-zero value, such as USDT. */ function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value)); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0))); _callOptionalReturn(token, approvalCall); } } /** * @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); if (returndata.length != 0 && !abi.decode(returndata, (bool))) { revert SafeERC20FailedOperation(address(token)); } } /** * @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). * * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. */ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { // 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 cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0; } } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.20; /** * @dev Interface for the optional metadata functions from the ERC20 standard. */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData( uint80 _roundId ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: contracts/FASHPresale.sol pragma solidity ^0.8.20; contract Presale is Ownable, ReentrancyGuard { using SafeERC20 for IERC20; using SafeERC20 for IERC20Metadata; IERC20 public token; IERC20Metadata public tokenMetadata; IERC20 public usdtToken; IERC20Metadata public usdtTokenMetadata; AggregatorV3Interface priceFeed; address public paymentAddress; uint256 currentStage; bool public presaleActive = true; mapping(uint256 => uint256) public stagePrice; mapping(uint256 => uint256) public stageEndTime; uint256 public vestingDelayTime; string nativeSymbol; struct Buyer { uint256 token; uint256 endTime; uint256 paid; uint256 price; uint256 time; string symbol; } mapping(address => Buyer) public buyers; address[] public buyerAddresses; // Events event TokensPurchased(address indexed buyer, uint256 amount, string symbol); event TokensClaimed(address indexed buyer, uint256 amount); event PresaleStatusChanged(bool isActive); // modifier to restrict access modifier authorizedOnly() { require( msg.sender == owner() || msg.sender == address(this), "Unauthorized caller" ); _; } // constructor constructor( address _oracle, address _payment, address _token, string memory _symbol, address _usdtToken ) Ownable(msg.sender) { paymentAddress = _payment; token = IERC20(_token); tokenMetadata = IERC20Metadata(_token); usdtToken = IERC20(_usdtToken); usdtTokenMetadata = IERC20Metadata(_usdtToken); priceFeed = AggregatorV3Interface(_oracle); stagePrice[1] = 5 * (10**16); stagePrice[2] = 10 * (10**16); stagePrice[3] = 15 * (10**16); stageEndTime[1] = 1748615106000; stageEndTime[2] = 1748615106000; stageEndTime[3] = 1748615106000; vestingDelayTime = 240 * 24 * 60 * 60 * 1000; currentStage = 1; nativeSymbol = _symbol; } function getNativeTokenUsdPrice() public view returns (uint256) { (, int256 price, , , ) = priceFeed.latestRoundData(); require(price > 0, "Invalid price"); return uint256(price * (10**10)); } function getTokenAmount(uint256 _ethAmount) public view returns (uint256) { uint256 ethPriceInUSD = getNativeTokenUsdPrice(); // Fetch the current ETH/USD price uint256 tokensPerETH = (ethPriceInUSD) / stagePrice[currentStage]; // Calculate tokens per 1 ETH return (_ethAmount * tokensPerETH); // Return token amount based on ETH input } function getTokenAmountForUsdt(uint256 _usdtAmount) public view returns (uint256) { uint256 _tokenAmount = (_usdtAmount / (stagePrice[currentStage] / (10**12))) * (10**18); return _tokenAmount; } function buyToken(address _buyerAddress) public payable nonReentrant { require( block.timestamp < stageEndTime[currentStage], "current presale is ended" ); require( payable(paymentAddress).send(msg.value), "Failed to transfer payment!" ); uint256 _tokenAmount = getTokenAmount(msg.value); Buyer storage buyerInfo = buyers[_buyerAddress]; if (buyerInfo.token > 0) { _tokenAmount += buyerInfo.token; } else { buyerAddresses.push(_buyerAddress); } buyers[_buyerAddress] = Buyer( _tokenAmount, ((block.timestamp * 1000) + vestingDelayTime), msg.value, stagePrice[currentStage], block.timestamp, nativeSymbol ); emit TokensPurchased(_buyerAddress, _tokenAmount, nativeSymbol); } function buyTokenWithUsdt(address _buyerAddress, uint256 _usdtAmount) public nonReentrant { require( block.timestamp < stageEndTime[currentStage], "current presale is ended" ); uint256 _tokenAmount = getTokenAmountForUsdt(_usdtAmount); require( usdtToken.allowance(msg.sender, address(this)) >= _usdtAmount, "Not enough USDT allowance!" ); usdtToken.safeTransferFrom(_buyerAddress, address(this), _usdtAmount); Buyer storage buyerInfo = buyers[_buyerAddress]; if (buyerInfo.token > 0) { _tokenAmount += buyerInfo.token; } else { buyerAddresses.push(_buyerAddress); } buyers[_buyerAddress] = Buyer( _tokenAmount, ((block.timestamp * 1000) + vestingDelayTime), _usdtAmount, stagePrice[currentStage], block.timestamp, "USDT" ); emit TokensPurchased(_buyerAddress, _tokenAmount, "USDT"); } function claimToken() public nonReentrant { Buyer storage buyerInfo = buyers[msg.sender]; require( buyerInfo.endTime < block.timestamp, "You can't claim before vesting end time!" ); require(buyerInfo.token > 0, "You don't have tokens!"); token.safeTransfer(msg.sender, buyerInfo.token); emit TokensClaimed(msg.sender, buyerInfo.token); removeBuyerInternal(msg.sender); } function findBuyerIndex(address _buyerAddress) internal view returns (uint256) { for (uint256 i = 0; i < buyerAddresses.length; i++) { if (buyerAddresses[i] == _buyerAddress) { return i; } } revert("Buyer address not found"); } function removeBuyerInternal(address _buyerAddress) internal { require(buyers[_buyerAddress].token > 0, "Buyer does not exist"); uint256 index = findBuyerIndex(_buyerAddress); delete buyers[_buyerAddress]; buyerAddresses[index] = buyerAddresses[buyerAddresses.length - 1]; buyerAddresses.pop(); } function removeBuyer(address _buyerAddress) public authorizedOnly { removeBuyerInternal(_buyerAddress); } function getAllBuyers() public view returns ( address[] memory, uint256[] memory, uint256[] memory, uint256[] memory, uint256[] memory, uint256[] memory, string[] memory ) { uint256 length = buyerAddresses.length; address[] memory addresses = new address[](length); uint256[] memory tokens = new uint256[](length); uint256[] memory endTimes = new uint256[](length); uint256[] memory paidAmounts = new uint256[](length); uint256[] memory prices = new uint256[](length); uint256[] memory times = new uint256[](length); string[] memory symbols = new string[](length); for (uint256 i = 0; i < length; i++) { address buyerAddress = buyerAddresses[i]; Buyer storage buyer = buyers[buyerAddress]; addresses[i] = buyerAddress; tokens[i] = buyer.token; endTimes[i] = buyer.endTime; paidAmounts[i] = buyer.paid; prices[i] = buyer.price; times[i] = buyer.time; symbols[i] = buyer.symbol; } return ( addresses, tokens, endTimes, paidAmounts, prices, times, symbols ); } function getTotalTokenAmount() public view returns (uint256) { uint256 totalTokenAmount = 0; for (uint256 i = 0; i < buyerAddresses.length; i++) { totalTokenAmount += buyers[buyerAddresses[i]].token; } return totalTokenAmount; } function setToken(address _token) public onlyOwner { require(_token != address(0), "Token is zero address!"); token = IERC20(_token); tokenMetadata = IERC20Metadata(_token); } function setUsdtToken(address _usdtToken) public onlyOwner { require(_usdtToken != address(0), "Token is zero address!"); usdtToken = IERC20(_usdtToken); usdtTokenMetadata = IERC20Metadata(_usdtToken); } function setPaymentAddress(address _paymentAddress) public onlyOwner { paymentAddress = _paymentAddress; } function flipPresaleActive() public onlyOwner { presaleActive = !presaleActive; emit PresaleStatusChanged(presaleActive); } function withdrawFunds() public onlyOwner nonReentrant { require( payable(msg.sender).send(address(this).balance), "Failed withdraw!" ); require(usdtToken.balanceOf(address(this)) > 0, "Insufficient Balance"); usdtToken.safeTransfer( paymentAddress, usdtToken.balanceOf(address(this)) ); } function withdrawTokens(address _to, uint256 _amount) public onlyOwner nonReentrant { uint256 _tokenBalance = token.balanceOf(address(this)); require(_tokenBalance >= _amount, "Exceeds token balance!"); token.safeTransfer(_to, _amount); } function withdrawUsdt(address _to, uint256 _amount) public onlyOwner nonReentrant { uint256 _usdtTokenBalance = usdtToken.balanceOf(address(this)); require(_usdtTokenBalance >= _amount, "Exceeds token balance!"); usdtToken.safeTransfer(_to, _amount); } function getStageEndTime(uint256 _stage) public view returns (uint256) { return stageEndTime[_stage]; } function setStageEndTime(uint256 _stage, uint256 _time) public onlyOwner { require(_time > 0, "invalid value!!!"); require(_stage <= 3, "exceed range"); require(_stage >= 1, "exceed range"); stageEndTime[_stage] = _time; } function getStagePrice(uint256 _stage) public view returns (uint256) { return stagePrice[_stage]; } function setStagePrice(uint256 _stage, uint256 _price) public onlyOwner { require(_price > 0, "invalid value!!!"); require(_stage <= 3, "exceed range"); require(_stage >= 1, "exceed range"); stagePrice[_stage] = _price; } function setVestingTime(uint256 _time) public onlyOwner { vestingDelayTime = _time; } function getVestingTime() public view returns (uint256) { return vestingDelayTime; } function setCurrentStage(uint256 _stage) public onlyOwner { currentStage = _stage; } function getCurrentStage() public view returns (uint256) { return currentStage; } function addBuyer( address _buyerAddress, uint256 _tokenAmount, uint256 _endTime, uint256 _paidAmount, uint256 _stagePrice, uint256 _time, string memory _symbol ) public onlyOwner { require(buyers[_buyerAddress].token == 0, "Buyer already exists!"); buyers[_buyerAddress] = Buyer( _tokenAmount, _endTime, _paidAmount, _stagePrice, _time, _symbol ); buyerAddresses.push(_buyerAddress); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"address","name":"_payment","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_usdtToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"}],"name":"PresaleStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"}],"name":"TokensPurchased","type":"event"},{"inputs":[{"internalType":"address","name":"_buyerAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"},{"internalType":"uint256","name":"_paidAmount","type":"uint256"},{"internalType":"uint256","name":"_stagePrice","type":"uint256"},{"internalType":"uint256","name":"_time","type":"uint256"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"addBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_buyerAddress","type":"address"}],"name":"buyToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_buyerAddress","type":"address"},{"internalType":"uint256","name":"_usdtAmount","type":"uint256"}],"name":"buyTokenWithUsdt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyerAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyers","outputs":[{"internalType":"uint256","name":"token","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"paid","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPresaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentStage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNativeTokenUsdPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stage","type":"uint256"}],"name":"getStageEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stage","type":"uint256"}],"name":"getStagePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethAmount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_usdtAmount","type":"uint256"}],"name":"getTokenAmountForUsdt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVestingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_buyerAddress","type":"address"}],"name":"removeBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stage","type":"uint256"}],"name":"setCurrentStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentAddress","type":"address"}],"name":"setPaymentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stage","type":"uint256"},{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"setStageEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stage","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setStagePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdtToken","type":"address"}],"name":"setUsdtToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"setVestingTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stageEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stagePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenMetadata","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdtToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdtTokenMetadata","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingDelayTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawUsdt","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600160095f6101000a81548160ff0219169083151502179055503480156200002a575f80fd5b50604051620051a0380380620051a08339818101604052810190620000509190620005e8565b335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000c4575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000bb91906200069c565b60405180910390fd5b620000d5816200034160201b60201c565b50600180819055508360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508460065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066b1a2bc2ec50000600a5f600181526020019081526020015f208190555067016345785d8a0000600a5f600281526020019081526020015f2081905550670214e8348c4f0000600a5f600381526020019081526020015f208190555065019721950dd0600b5f600181526020019081526020015f208190555065019721950dd0600b5f600281526020019081526020015f208190555065019721950dd0600b5f600381526020019081526020015f20819055506404d3f64000600c81905550600160088190555081600d9081620003359190620008ee565b505050505050620009d2565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200043e8262000413565b9050919050565b620004508162000432565b81146200045b575f80fd5b50565b5f815190506200046e8162000445565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620004c4826200047c565b810181811067ffffffffffffffff82111715620004e657620004e56200048c565b5b80604052505050565b5f620004fa62000402565b9050620005088282620004b9565b919050565b5f67ffffffffffffffff8211156200052a57620005296200048c565b5b62000535826200047c565b9050602081019050919050565b5f5b838110156200056157808201518184015260208101905062000544565b5f8484015250505050565b5f620005826200057c846200050d565b620004ef565b905082815260208101848484011115620005a157620005a062000478565b5b620005ae84828562000542565b509392505050565b5f82601f830112620005cd57620005cc62000474565b5b8151620005df8482602086016200056c565b91505092915050565b5f805f805f60a086880312156200060457620006036200040b565b5b5f62000613888289016200045e565b955050602062000626888289016200045e565b945050604062000639888289016200045e565b935050606086015167ffffffffffffffff8111156200065d576200065c6200040f565b5b6200066b88828901620005b6565b92505060806200067e888289016200045e565b9150509295509295909350565b620006968162000432565b82525050565b5f602082019050620006b15f8301846200068b565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200070657607f821691505b6020821081036200071c576200071b620006c1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620007807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000743565b6200078c868362000743565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620007d6620007d0620007ca84620007a4565b620007ad565b620007a4565b9050919050565b5f819050919050565b620007f183620007b6565b620008096200080082620007dd565b8484546200074f565b825550505050565b5f90565b6200081f62000811565b6200082c818484620007e6565b505050565b5b818110156200085357620008475f8262000815565b60018101905062000832565b5050565b601f821115620008a2576200086c8162000722565b620008778462000734565b8101602085101562000887578190505b6200089f620008968562000734565b83018262000831565b50505b505050565b5f82821c905092915050565b5f620008c45f1984600802620008a7565b1980831691505092915050565b5f620008de8383620008b3565b9150826002028217905092915050565b620008f982620006b7565b67ffffffffffffffff8111156200091557620009146200048c565b5b620009218254620006ee565b6200092e82828562000857565b5f60209050601f83116001811462000964575f84156200094f578287015190505b6200095b8582620008d1565b865550620009ca565b601f198416620009748662000722565b5f5b828110156200099d5784890151825560018201915060208501945060208101905062000976565b86831015620009bd5784890151620009b9601f891682620008b3565b8355505b6001600288020188555050505b505050505050565b6147c080620009e05f395ff3fe60806040526004361061022f575f3560e01c8063802921601161012d578063d06a98fe116100aa578063eedbe31d1161006e578063eedbe31d146107da578063f2fde38b14610804578063f5b2cad71461082c578063fa0780bf14610856578063fc0c546a146108925761022f565b8063d06a98fe1461070e578063d7f3c66d14610736578063dd1cda621461075e578063ec0f5b6514610788578063ed092451146107b25761022f565b8063a98ad46c116100f1578063a98ad46c1461061a578063ad57329614610644578063b0691ab51461066e578063c2507ac114610696578063c43b7934146106d25761022f565b8063802921601461052d57806386cba22b146105555780638da5cb5b1461058557806397a993aa146105af578063a85e8fcb146105f05761022f565b806344603b49116101bb5780636f75b00c1161017f5780636f75b00c14610481578063715018a6146104a957806374e4156d146104bf57806377311049146104fb5780637e72fb52146105115761022f565b806344603b49146103a157806353135ca0146103c9578063556b790f146103f35780635e1e10041461042f578063633423be146104575761022f565b80632d3fa9dd116102025780632d3fa9dd146102c357806333bb532c146102ff57806338c67b73146103275780633e325cb91461034f5780634451d89f1461038b5761022f565b806306b091f914610233578063144fa6d71461025b5780632127fcc61461028357806324600fc3146102ad575b5f80fd5b34801561023e575f80fd5b506102596004803603810190610254919061300f565b6108bc565b005b348015610266575f80fd5b50610281600480360381019061027c919061304d565b610a04565b005b34801561028e575f80fd5b50610297610afd565b6040516102a49190613087565b60405180910390f35b3480156102b8575f80fd5b506102c1610bec565b005b3480156102ce575f80fd5b506102e960048036038101906102e491906130a0565b610e58565b6040516102f69190613087565b60405180910390f35b34801561030a575f80fd5b50610325600480360381019061032091906130cb565b610e72565b005b348015610332575f80fd5b5061034d600480360381019061034891906130a0565b610f5e565b005b34801561035a575f80fd5b50610375600480360381019061037091906130a0565b610f70565b6040516103829190613087565b60405180910390f35b348015610396575f80fd5b5061039f610f8a565b005b3480156103ac575f80fd5b506103c760048036038101906103c29190613245565b611111565b005b3480156103d4575f80fd5b506103dd6112b6565b6040516103ea9190613318565b60405180910390f35b3480156103fe575f80fd5b50610419600480360381019061041491906130a0565b6112c8565b6040516104269190613340565b60405180910390f35b34801561043a575f80fd5b506104556004803603810190610450919061304d565b611303565b005b348015610462575f80fd5b5061046b61134e565b6040516104789190613340565b60405180910390f35b34801561048c575f80fd5b506104a760048036038101906104a2919061304d565b611373565b005b3480156104b4575f80fd5b506104bd61142a565b005b3480156104ca575f80fd5b506104e560048036038101906104e091906130a0565b61143d565b6040516104f29190613087565b60405180910390f35b348015610506575f80fd5b5061050f611452565b005b61052b6004803603810190610526919061304d565b6114c9565b005b348015610538575f80fd5b50610553600480360381019061054e91906130a0565b61184e565b005b348015610560575f80fd5b50610569611860565b60405161057c97969594939291906135fc565b60405180910390f35b348015610590575f80fd5b50610599611cfc565b6040516105a69190613340565b60405180910390f35b3480156105ba575f80fd5b506105d560048036038101906105d0919061304d565b611d23565b6040516105e7969594939291906136e2565b60405180910390f35b3480156105fb575f80fd5b50610604611de1565b6040516106119190613087565b60405180910390f35b348015610625575f80fd5b5061062e611e98565b60405161063b91906137a3565b60405180910390f35b34801561064f575f80fd5b50610658611ebd565b60405161066591906137dc565b60405180910390f35b348015610679575f80fd5b50610694600480360381019061068f919061300f565b611ee2565b005b3480156106a1575f80fd5b506106bc60048036038101906106b791906130a0565b6122a9565b6040516106c99190613087565b60405180910390f35b3480156106dd575f80fd5b506106f860048036038101906106f391906130a0565b6122ec565b6040516107059190613087565b60405180910390f35b348015610719575f80fd5b50610734600480360381019061072f91906130cb565b612301565b005b348015610741575f80fd5b5061075c6004803603810190610757919061304d565b6123ed565b005b348015610769575f80fd5b506107726124e6565b60405161077f9190613087565b60405180910390f35b348015610793575f80fd5b5061079c6124ef565b6040516107a99190613087565b60405180910390f35b3480156107bd575f80fd5b506107d860048036038101906107d3919061300f565b6124f5565b005b3480156107e5575f80fd5b506107ee61263d565b6040516107fb9190613087565b60405180910390f35b34801561080f575f80fd5b5061082a6004803603810190610825919061304d565b612646565b005b348015610837575f80fd5b506108406126ca565b60405161084d91906137dc565b60405180910390f35b348015610861575f80fd5b5061087c600480360381019061087791906130a0565b6126ef565b6040516108899190613087565b60405180910390f35b34801561089d575f80fd5b506108a661273e565b6040516108b391906137a3565b60405180910390f35b6108c4612763565b6108cc6127ea565b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109279190613340565b602060405180830381865afa158015610942573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109669190613809565b9050818110156109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a29061387e565b60405180910390fd5b6109f7838360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128399092919063ffffffff16565b50610a006128b8565b5050565b610a0c612763565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a71906138e6565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610b69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8d9190613976565b5050509150505f8113610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90613a37565b60405180910390fd5b6402540be40081610be69190613a82565b91505090565b610bf4612763565b610bfc6127ea565b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6690613b42565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cca9190613340565b602060405180830381865afa158015610ce5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d099190613809565b11610d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4090613baa565b60405180910390fd5b610e4e60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610dc89190613340565b602060405180830381865afa158015610de3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e079190613809565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128399092919063ffffffff16565b610e566128b8565b565b5f600a5f8381526020019081526020015f20549050919050565b610e7a612763565b5f8111610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390613c12565b60405180910390fd5b6003821115610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790613c7a565b60405180910390fd5b6001821015610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b90613c7a565b60405180910390fd5b80600a5f8481526020019081526020015f20819055505050565b610f66612763565b8060088190555050565b5f600b5f8381526020019081526020015f20549050919050565b610f926127ea565b5f600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20905042816001015410611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90613d08565b60405180910390fd5b5f815f01541161105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490613d70565b60405180910390fd5b6110ac33825f015460025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128399092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e430825f01546040516110f59190613087565b60405180910390a2611106336128c1565b5061110f6128b8565b565b611119612763565b5f600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01541461119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190613dd8565b60405180910390fd5b6040518060c0016040528087815260200186815260200185815260200184815260200183815260200182815250600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050190816112499190613fe7565b50905050600f87908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b60095f9054906101000a900460ff1681565b600f81815481106112d7575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61130b612763565b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61137b611cfc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113df57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590614100565b60405180910390fd5b611427816128c1565b50565b611432612763565b61143b5f612aad565b565b600b602052805f5260405f205f915090505481565b61145a612763565b60095f9054906101000a900460ff161560095f6101000a81548160ff0219169083151502179055507f1f1a6b0fcc71315f2c3aeddbd1f6d527595d21eea9b73160e78d6fa49b7897a660095f9054906101000a900460ff166040516114bf9190613318565b60405180910390a1565b6114d16127ea565b600b5f60085481526020019081526020015f20544210611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90614168565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f193505050506115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b1906141d0565b60405180910390fd5b5f6115c4346122a9565b90505f600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f0154111561162757805f01548261162091906141ee565b9150611688565b600f83908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6040518060c00160405280838152602001600c546103e8426116aa9190614221565b6116b491906141ee565b8152602001348152602001600a5f60085481526020019081526020015f20548152602001428152602001600d80546116eb90613e23565b80601f016020809104026020016040519081016040528092919081815260200182805461171790613e23565b80156117625780601f1061173957610100808354040283529160200191611762565b820191905f5260205f20905b81548152906001019060200180831161174557829003601f168201915b5050505050815250600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050190816117ec9190613fe7565b509050508273ffffffffffffffffffffffffffffffffffffffff167f9ffc61f9a5071474fc516dd5798d66ef34a007da20386052b5351504c0250cfe83600d6040516118399291906142e3565b60405180910390a2505061184b6128b8565b50565b611856612763565b80600c8190555050565b60608060608060608060605f600f8054905090505f8167ffffffffffffffff81111561188f5761188e613121565b5b6040519080825280602002602001820160405280156118bd5781602001602082028036833780820191505090505b5090505f8267ffffffffffffffff8111156118db576118da613121565b5b6040519080825280602002602001820160405280156119095781602001602082028036833780820191505090505b5090505f8367ffffffffffffffff81111561192757611926613121565b5b6040519080825280602002602001820160405280156119555781602001602082028036833780820191505090505b5090505f8467ffffffffffffffff81111561197357611972613121565b5b6040519080825280602002602001820160405280156119a15781602001602082028036833780820191505090505b5090505f8567ffffffffffffffff8111156119bf576119be613121565b5b6040519080825280602002602001820160405280156119ed5781602001602082028036833780820191505090505b5090505f8667ffffffffffffffff811115611a0b57611a0a613121565b5b604051908082528060200260200182016040528015611a395781602001602082028036833780820191505090505b5090505f8767ffffffffffffffff811115611a5757611a56613121565b5b604051908082528060200260200182016040528015611a8a57816020015b6060815260200190600190039081611a755790505b5090505f5b88811015611cd5575f600f8281548110611aac57611aab614311565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050818a8481518110611b2a57611b29614311565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050805f0154898481518110611b7b57611b7a614311565b5b6020026020010181815250508060010154888481518110611b9f57611b9e614311565b5b6020026020010181815250508060020154878481518110611bc357611bc2614311565b5b6020026020010181815250508060030154868481518110611be757611be6614311565b5b6020026020010181815250508060040154858481518110611c0b57611c0a614311565b5b602002602001018181525050806005018054611c2690613e23565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5290613e23565b8015611c9d5780601f10611c7457610100808354040283529160200191611c9d565b820191905f5260205f20905b815481529060010190602001808311611c8057829003601f168201915b5050505050848481518110611cb557611cb4614311565b5b602002602001018190525050508080611ccd9061433e565b915050611a8f565b50868686868686869e509e509e509e509e509e509e50505050505050505090919293949596565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015490806005018054611d6090613e23565b80601f0160208091040260200160405190810160405280929190818152602001828054611d8c90613e23565b8015611dd75780601f10611dae57610100808354040283529160200191611dd7565b820191905f5260205f20905b815481529060010190602001808311611dba57829003601f168201915b5050505050905086565b5f805f90505f5b600f80549050811015611e9057600e5f600f8381548110611e0c57611e0b614311565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015482611e7b91906141ee565b91508080611e889061433e565b915050611de8565b508091505090565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611eea6127ea565b600b5f60085481526020019081526020015f20544210611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3690614168565b60405180910390fd5b5f611f49826126ef565b90508160045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401611fa8929190614385565b602060405180830381865afa158015611fc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe79190613809565b1015612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f906143f6565b60405180910390fd5b61207683308460045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b6e909392919063ffffffff16565b5f600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f015411156120d757805f0154826120d091906141ee565b9150612138565b600f84908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6040518060c00160405280838152602001600c546103e84261215a9190614221565b61216491906141ee565b8152602001848152602001600a5f60085481526020019081526020015f205481526020014281526020016040518060400160405280600481526020017f5553445400000000000000000000000000000000000000000000000000000000815250815250600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050190816122499190613fe7565b509050508373ffffffffffffffffffffffffffffffffffffffff167f9ffc61f9a5071474fc516dd5798d66ef34a007da20386052b5351504c0250cfe83604051612293919061445e565b60405180910390a250506122a56128b8565b5050565b5f806122b3610afd565b90505f600a5f60085481526020019081526020015f2054826122d591906144b7565b905080846122e39190614221565b92505050919050565b600a602052805f5260405f205f915090505481565b612309612763565b5f811161234b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234290613c12565b60405180910390fd5b600382111561238f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238690613c7a565b60405180910390fd5b60018210156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90613c7a565b60405180910390fd5b80600b5f8481526020019081526020015f20819055505050565b6123f5612763565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245a906138e6565b60405180910390fd5b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f600c54905090565b600c5481565b6124fd612763565b6125056127ea565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125609190613340565b602060405180830381865afa15801561257b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259f9190613809565b9050818110156125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db9061387e565b60405180910390fd5b612630838360045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128399092919063ffffffff16565b506126396128b8565b5050565b5f600854905090565b61264e612763565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126be575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016126b59190613340565b60405180910390fd5b6126c781612aad565b50565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80670de0b6b3a764000064e8d4a51000600a5f60085481526020019081526020015f205461271e91906144b7565b8461272991906144b7565b6127339190614221565b905080915050919050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61276b612bf0565b73ffffffffffffffffffffffffffffffffffffffff16612789611cfc565b73ffffffffffffffffffffffffffffffffffffffff16146127e8576127ac612bf0565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016127df9190613340565b60405180910390fd5b565b60026001540361282f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282690614531565b60405180910390fd5b6002600181905550565b6128b3838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb858560405160240161286c92919061454f565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612bf7565b505050565b60018081905550565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015411612942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612939906145c0565b60405180910390fd5b5f61294c82612c8c565b9050600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8082015f9055600182015f9055600282015f9055600382015f9055600482015f9055600582015f6129bd9190612f19565b5050600f6001600f805490506129d391906145de565b815481106129e4576129e3614311565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f8281548110612a2057612a1f614311565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f805480612a7757612a76614611565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bea848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401612ba39392919061463e565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612bf7565b50505050565b5f33905090565b5f612c21828473ffffffffffffffffffffffffffffffffffffffff16612d6a90919063ffffffff16565b90505f815114158015612c45575080806020019051810190612c43919061469d565b155b15612c8757826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401612c7e9190613340565b60405180910390fd5b505050565b5f805f90505b600f80549050811015612d29578273ffffffffffffffffffffffffffffffffffffffff16600f8281548110612cca57612cc9614311565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612d165780915050612d65565b8080612d219061433e565b915050612c92565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5c90614712565b60405180910390fd5b919050565b6060612d7783835f612d7f565b905092915050565b606081471015612dc657306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401612dbd9190613340565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051612dee9190614774565b5f6040518083038185875af1925050503d805f8114612e28576040519150601f19603f3d011682016040523d82523d5f602084013e612e2d565b606091505b5091509150612e3d868383612e48565b925050509392505050565b606082612e5d57612e5882612ed5565b612ecd565b5f8251148015612e8357505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15612ec557836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401612ebc9190613340565b60405180910390fd5b819050612ece565b5b9392505050565b5f81511115612ee75780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b508054612f2590613e23565b5f825580601f10612f365750612f53565b601f0160209004905f5260205f2090810190612f529190612f56565b5b50565b5b80821115612f6d575f815f905550600101612f57565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612fab82612f82565b9050919050565b612fbb81612fa1565b8114612fc5575f80fd5b50565b5f81359050612fd681612fb2565b92915050565b5f819050919050565b612fee81612fdc565b8114612ff8575f80fd5b50565b5f8135905061300981612fe5565b92915050565b5f806040838503121561302557613024612f7a565b5b5f61303285828601612fc8565b925050602061304385828601612ffb565b9150509250929050565b5f6020828403121561306257613061612f7a565b5b5f61306f84828501612fc8565b91505092915050565b61308181612fdc565b82525050565b5f60208201905061309a5f830184613078565b92915050565b5f602082840312156130b5576130b4612f7a565b5b5f6130c284828501612ffb565b91505092915050565b5f80604083850312156130e1576130e0612f7a565b5b5f6130ee85828601612ffb565b92505060206130ff85828601612ffb565b9150509250929050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61315782613111565b810181811067ffffffffffffffff8211171561317657613175613121565b5b80604052505050565b5f613188612f71565b9050613194828261314e565b919050565b5f67ffffffffffffffff8211156131b3576131b2613121565b5b6131bc82613111565b9050602081019050919050565b828183375f83830152505050565b5f6131e96131e484613199565b61317f565b9050828152602081018484840111156132055761320461310d565b5b6132108482856131c9565b509392505050565b5f82601f83011261322c5761322b613109565b5b813561323c8482602086016131d7565b91505092915050565b5f805f805f805f60e0888a0312156132605761325f612f7a565b5b5f61326d8a828b01612fc8565b975050602061327e8a828b01612ffb565b965050604061328f8a828b01612ffb565b95505060606132a08a828b01612ffb565b94505060806132b18a828b01612ffb565b93505060a06132c28a828b01612ffb565b92505060c088013567ffffffffffffffff8111156132e3576132e2612f7e565b5b6132ef8a828b01613218565b91505092959891949750929550565b5f8115159050919050565b613312816132fe565b82525050565b5f60208201905061332b5f830184613309565b92915050565b61333a81612fa1565b82525050565b5f6020820190506133535f830184613331565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61338b81612fa1565b82525050565b5f61339c8383613382565b60208301905092915050565b5f602082019050919050565b5f6133be82613359565b6133c88185613363565b93506133d383613373565b805f5b838110156134035781516133ea8882613391565b97506133f5836133a8565b9250506001810190506133d6565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61344281612fdc565b82525050565b5f6134538383613439565b60208301905092915050565b5f602082019050919050565b5f61347582613410565b61347f818561341a565b935061348a8361342a565b805f5b838110156134ba5781516134a18882613448565b97506134ac8361345f565b92505060018101905061348d565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561352757808201518184015260208101905061350c565b5f8484015250505050565b5f61353c826134f0565b61354681856134fa565b935061355681856020860161350a565b61355f81613111565b840191505092915050565b5f6135758383613532565b905092915050565b5f602082019050919050565b5f613593826134c7565b61359d81856134d1565b9350836020820285016135af856134e1565b805f5b858110156135ea57848403895281516135cb858261356a565b94506135d68361357d565b925060208a019950506001810190506135b2565b50829750879550505050505092915050565b5f60e0820190508181035f830152613614818a6133b4565b90508181036020830152613628818961346b565b9050818103604083015261363c818861346b565b90508181036060830152613650818761346b565b90508181036080830152613664818661346b565b905081810360a0830152613678818561346b565b905081810360c083015261368c8184613589565b905098975050505050505050565b5f82825260208201905092915050565b5f6136b4826134f0565b6136be818561369a565b93506136ce81856020860161350a565b6136d781613111565b840191505092915050565b5f60c0820190506136f55f830189613078565b6137026020830188613078565b61370f6040830187613078565b61371c6060830186613078565b6137296080830185613078565b81810360a083015261373b81846136aa565b9050979650505050505050565b5f819050919050565b5f61376b61376661376184612f82565b613748565b612f82565b9050919050565b5f61377c82613751565b9050919050565b5f61378d82613772565b9050919050565b61379d81613783565b82525050565b5f6020820190506137b65f830184613794565b92915050565b5f6137c682613772565b9050919050565b6137d6816137bc565b82525050565b5f6020820190506137ef5f8301846137cd565b92915050565b5f8151905061380381612fe5565b92915050565b5f6020828403121561381e5761381d612f7a565b5b5f61382b848285016137f5565b91505092915050565b7f4578636565647320746f6b656e2062616c616e636521000000000000000000005f82015250565b5f61386860168361369a565b915061387382613834565b602082019050919050565b5f6020820190508181035f8301526138958161385c565b9050919050565b7f546f6b656e206973207a65726f206164647265737321000000000000000000005f82015250565b5f6138d060168361369a565b91506138db8261389c565b602082019050919050565b5f6020820190508181035f8301526138fd816138c4565b9050919050565b5f69ffffffffffffffffffff82169050919050565b61392281613904565b811461392c575f80fd5b50565b5f8151905061393d81613919565b92915050565b5f819050919050565b61395581613943565b811461395f575f80fd5b50565b5f815190506139708161394c565b92915050565b5f805f805f60a0868803121561398f5761398e612f7a565b5b5f61399c8882890161392f565b95505060206139ad88828901613962565b94505060406139be888289016137f5565b93505060606139cf888289016137f5565b92505060806139e08882890161392f565b9150509295509295909350565b7f496e76616c6964207072696365000000000000000000000000000000000000005f82015250565b5f613a21600d8361369a565b9150613a2c826139ed565b602082019050919050565b5f6020820190508181035f830152613a4e81613a15565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613a8c82613943565b9150613a9783613943565b9250828202613aa581613943565b91507f800000000000000000000000000000000000000000000000000000000000000084145f84121615613adc57613adb613a55565b5b8282058414831517613af157613af0613a55565b5b5092915050565b7f4661696c656420776974686472617721000000000000000000000000000000005f82015250565b5f613b2c60108361369a565b9150613b3782613af8565b602082019050919050565b5f6020820190508181035f830152613b5981613b20565b9050919050565b7f496e73756666696369656e742042616c616e63650000000000000000000000005f82015250565b5f613b9460148361369a565b9150613b9f82613b60565b602082019050919050565b5f6020820190508181035f830152613bc181613b88565b9050919050565b7f696e76616c69642076616c7565212121000000000000000000000000000000005f82015250565b5f613bfc60108361369a565b9150613c0782613bc8565b602082019050919050565b5f6020820190508181035f830152613c2981613bf0565b9050919050565b7f6578636565642072616e676500000000000000000000000000000000000000005f82015250565b5f613c64600c8361369a565b9150613c6f82613c30565b602082019050919050565b5f6020820190508181035f830152613c9181613c58565b9050919050565b7f596f752063616e277420636c61696d206265666f72652076657374696e6720655f8201527f6e642074696d6521000000000000000000000000000000000000000000000000602082015250565b5f613cf260288361369a565b9150613cfd82613c98565b604082019050919050565b5f6020820190508181035f830152613d1f81613ce6565b9050919050565b7f596f7520646f6e2774206861766520746f6b656e7321000000000000000000005f82015250565b5f613d5a60168361369a565b9150613d6582613d26565b602082019050919050565b5f6020820190508181035f830152613d8781613d4e565b9050919050565b7f427579657220616c7265616479206578697374732100000000000000000000005f82015250565b5f613dc260158361369a565b9150613dcd82613d8e565b602082019050919050565b5f6020820190508181035f830152613def81613db6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e3a57607f821691505b602082108103613e4d57613e4c613df6565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613eaf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613e74565b613eb98683613e74565b95508019841693508086168417925050509392505050565b5f613eeb613ee6613ee184612fdc565b613748565b612fdc565b9050919050565b5f819050919050565b613f0483613ed1565b613f18613f1082613ef2565b848454613e80565b825550505050565b5f90565b613f2c613f20565b613f37818484613efb565b505050565b5b81811015613f5a57613f4f5f82613f24565b600181019050613f3d565b5050565b601f821115613f9f57613f7081613e53565b613f7984613e65565b81016020851015613f88578190505b613f9c613f9485613e65565b830182613f3c565b50505b505050565b5f82821c905092915050565b5f613fbf5f1984600802613fa4565b1980831691505092915050565b5f613fd78383613fb0565b9150826002028217905092915050565b613ff0826134f0565b67ffffffffffffffff81111561400957614008613121565b5b6140138254613e23565b61401e828285613f5e565b5f60209050601f83116001811461404f575f841561403d578287015190505b6140478582613fcc565b8655506140ae565b601f19841661405d86613e53565b5f5b828110156140845784890151825560018201915060208501945060208101905061405f565b868310156140a1578489015161409d601f891682613fb0565b8355505b6001600288020188555050505b505050505050565b7f556e617574686f72697a65642063616c6c6572000000000000000000000000005f82015250565b5f6140ea60138361369a565b91506140f5826140b6565b602082019050919050565b5f6020820190508181035f830152614117816140de565b9050919050565b7f63757272656e742070726573616c6520697320656e64656400000000000000005f82015250565b5f61415260188361369a565b915061415d8261411e565b602082019050919050565b5f6020820190508181035f83015261417f81614146565b9050919050565b7f4661696c656420746f207472616e73666572207061796d656e742100000000005f82015250565b5f6141ba601b8361369a565b91506141c582614186565b602082019050919050565b5f6020820190508181035f8301526141e7816141ae565b9050919050565b5f6141f882612fdc565b915061420383612fdc565b925082820190508082111561421b5761421a613a55565b5b92915050565b5f61422b82612fdc565b915061423683612fdc565b925082820261424481612fdc565b9150828204841483151761425b5761425a613a55565b5b5092915050565b5f815461426e81613e23565b614278818661369a565b9450600182165f811461429257600181146142a8576142da565b60ff1983168652811515602002860193506142da565b6142b185613e53565b5f5b838110156142d2578154818901526001820191506020810190506142b3565b808801955050505b50505092915050565b5f6040820190506142f65f830185613078565b81810360208301526143088184614262565b90509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61434882612fdc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361437a57614379613a55565b5b600182019050919050565b5f6040820190506143985f830185613331565b6143a56020830184613331565b9392505050565b7f4e6f7420656e6f756768205553445420616c6c6f77616e6365210000000000005f82015250565b5f6143e0601a8361369a565b91506143eb826143ac565b602082019050919050565b5f6020820190508181035f83015261440d816143d4565b9050919050565b7f55534454000000000000000000000000000000000000000000000000000000005f82015250565b5f61444860048361369a565b915061445382614414565b602082019050919050565b5f6040820190506144715f830184613078565b81810360208301526144828161443c565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6144c182612fdc565b91506144cc83612fdc565b9250826144dc576144db61448a565b5b828204905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f61451b601f8361369a565b9150614526826144e7565b602082019050919050565b5f6020820190508181035f8301526145488161450f565b9050919050565b5f6040820190506145625f830185613331565b61456f6020830184613078565b9392505050565b7f427579657220646f6573206e6f742065786973740000000000000000000000005f82015250565b5f6145aa60148361369a565b91506145b582614576565b602082019050919050565b5f6020820190508181035f8301526145d78161459e565b9050919050565b5f6145e882612fdc565b91506145f383612fdc565b925082820390508181111561460b5761460a613a55565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f6060820190506146515f830186613331565b61465e6020830185613331565b61466b6040830184613078565b949350505050565b61467c816132fe565b8114614686575f80fd5b50565b5f8151905061469781614673565b92915050565b5f602082840312156146b2576146b1612f7a565b5b5f6146bf84828501614689565b91505092915050565b7f42757965722061646472657373206e6f7420666f756e640000000000000000005f82015250565b5f6146fc60178361369a565b9150614707826146c8565b602082019050919050565b5f6020820190508181035f830152614729816146f0565b9050919050565b5f81519050919050565b5f81905092915050565b5f61474e82614730565b614758818561473a565b935061476881856020860161350a565b80840191505092915050565b5f61477f8284614744565b91508190509291505056fea26469706673582212204e6164d767fac9f9ff7b2190b47fe87e5dd182f9a76eb1622465980ac0bc0b8464736f6c634300081400330000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b841900000000000000000000000008679f04f58299b97c7eda549ed9b5b1c5d925c10000000000000000000000000391ddbeaa28e720b80a46b5770c77ba787abf5400000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000034554480000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061022f575f3560e01c8063802921601161012d578063d06a98fe116100aa578063eedbe31d1161006e578063eedbe31d146107da578063f2fde38b14610804578063f5b2cad71461082c578063fa0780bf14610856578063fc0c546a146108925761022f565b8063d06a98fe1461070e578063d7f3c66d14610736578063dd1cda621461075e578063ec0f5b6514610788578063ed092451146107b25761022f565b8063a98ad46c116100f1578063a98ad46c1461061a578063ad57329614610644578063b0691ab51461066e578063c2507ac114610696578063c43b7934146106d25761022f565b8063802921601461052d57806386cba22b146105555780638da5cb5b1461058557806397a993aa146105af578063a85e8fcb146105f05761022f565b806344603b49116101bb5780636f75b00c1161017f5780636f75b00c14610481578063715018a6146104a957806374e4156d146104bf57806377311049146104fb5780637e72fb52146105115761022f565b806344603b49146103a157806353135ca0146103c9578063556b790f146103f35780635e1e10041461042f578063633423be146104575761022f565b80632d3fa9dd116102025780632d3fa9dd146102c357806333bb532c146102ff57806338c67b73146103275780633e325cb91461034f5780634451d89f1461038b5761022f565b806306b091f914610233578063144fa6d71461025b5780632127fcc61461028357806324600fc3146102ad575b5f80fd5b34801561023e575f80fd5b506102596004803603810190610254919061300f565b6108bc565b005b348015610266575f80fd5b50610281600480360381019061027c919061304d565b610a04565b005b34801561028e575f80fd5b50610297610afd565b6040516102a49190613087565b60405180910390f35b3480156102b8575f80fd5b506102c1610bec565b005b3480156102ce575f80fd5b506102e960048036038101906102e491906130a0565b610e58565b6040516102f69190613087565b60405180910390f35b34801561030a575f80fd5b50610325600480360381019061032091906130cb565b610e72565b005b348015610332575f80fd5b5061034d600480360381019061034891906130a0565b610f5e565b005b34801561035a575f80fd5b50610375600480360381019061037091906130a0565b610f70565b6040516103829190613087565b60405180910390f35b348015610396575f80fd5b5061039f610f8a565b005b3480156103ac575f80fd5b506103c760048036038101906103c29190613245565b611111565b005b3480156103d4575f80fd5b506103dd6112b6565b6040516103ea9190613318565b60405180910390f35b3480156103fe575f80fd5b50610419600480360381019061041491906130a0565b6112c8565b6040516104269190613340565b60405180910390f35b34801561043a575f80fd5b506104556004803603810190610450919061304d565b611303565b005b348015610462575f80fd5b5061046b61134e565b6040516104789190613340565b60405180910390f35b34801561048c575f80fd5b506104a760048036038101906104a2919061304d565b611373565b005b3480156104b4575f80fd5b506104bd61142a565b005b3480156104ca575f80fd5b506104e560048036038101906104e091906130a0565b61143d565b6040516104f29190613087565b60405180910390f35b348015610506575f80fd5b5061050f611452565b005b61052b6004803603810190610526919061304d565b6114c9565b005b348015610538575f80fd5b50610553600480360381019061054e91906130a0565b61184e565b005b348015610560575f80fd5b50610569611860565b60405161057c97969594939291906135fc565b60405180910390f35b348015610590575f80fd5b50610599611cfc565b6040516105a69190613340565b60405180910390f35b3480156105ba575f80fd5b506105d560048036038101906105d0919061304d565b611d23565b6040516105e7969594939291906136e2565b60405180910390f35b3480156105fb575f80fd5b50610604611de1565b6040516106119190613087565b60405180910390f35b348015610625575f80fd5b5061062e611e98565b60405161063b91906137a3565b60405180910390f35b34801561064f575f80fd5b50610658611ebd565b60405161066591906137dc565b60405180910390f35b348015610679575f80fd5b50610694600480360381019061068f919061300f565b611ee2565b005b3480156106a1575f80fd5b506106bc60048036038101906106b791906130a0565b6122a9565b6040516106c99190613087565b60405180910390f35b3480156106dd575f80fd5b506106f860048036038101906106f391906130a0565b6122ec565b6040516107059190613087565b60405180910390f35b348015610719575f80fd5b50610734600480360381019061072f91906130cb565b612301565b005b348015610741575f80fd5b5061075c6004803603810190610757919061304d565b6123ed565b005b348015610769575f80fd5b506107726124e6565b60405161077f9190613087565b60405180910390f35b348015610793575f80fd5b5061079c6124ef565b6040516107a99190613087565b60405180910390f35b3480156107bd575f80fd5b506107d860048036038101906107d3919061300f565b6124f5565b005b3480156107e5575f80fd5b506107ee61263d565b6040516107fb9190613087565b60405180910390f35b34801561080f575f80fd5b5061082a6004803603810190610825919061304d565b612646565b005b348015610837575f80fd5b506108406126ca565b60405161084d91906137dc565b60405180910390f35b348015610861575f80fd5b5061087c600480360381019061087791906130a0565b6126ef565b6040516108899190613087565b60405180910390f35b34801561089d575f80fd5b506108a661273e565b6040516108b391906137a3565b60405180910390f35b6108c4612763565b6108cc6127ea565b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109279190613340565b602060405180830381865afa158015610942573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109669190613809565b9050818110156109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a29061387e565b60405180910390fd5b6109f7838360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128399092919063ffffffff16565b50610a006128b8565b5050565b610a0c612763565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a71906138e6565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610b69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8d9190613976565b5050509150505f8113610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90613a37565b60405180910390fd5b6402540be40081610be69190613a82565b91505090565b610bf4612763565b610bfc6127ea565b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6690613b42565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cca9190613340565b602060405180830381865afa158015610ce5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d099190613809565b11610d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4090613baa565b60405180910390fd5b610e4e60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610dc89190613340565b602060405180830381865afa158015610de3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e079190613809565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128399092919063ffffffff16565b610e566128b8565b565b5f600a5f8381526020019081526020015f20549050919050565b610e7a612763565b5f8111610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390613c12565b60405180910390fd5b6003821115610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790613c7a565b60405180910390fd5b6001821015610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b90613c7a565b60405180910390fd5b80600a5f8481526020019081526020015f20819055505050565b610f66612763565b8060088190555050565b5f600b5f8381526020019081526020015f20549050919050565b610f926127ea565b5f600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20905042816001015410611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90613d08565b60405180910390fd5b5f815f01541161105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490613d70565b60405180910390fd5b6110ac33825f015460025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128399092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e430825f01546040516110f59190613087565b60405180910390a2611106336128c1565b5061110f6128b8565b565b611119612763565b5f600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01541461119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190613dd8565b60405180910390fd5b6040518060c0016040528087815260200186815260200185815260200184815260200183815260200182815250600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050190816112499190613fe7565b50905050600f87908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b60095f9054906101000a900460ff1681565b600f81815481106112d7575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61130b612763565b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61137b611cfc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113df57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590614100565b60405180910390fd5b611427816128c1565b50565b611432612763565b61143b5f612aad565b565b600b602052805f5260405f205f915090505481565b61145a612763565b60095f9054906101000a900460ff161560095f6101000a81548160ff0219169083151502179055507f1f1a6b0fcc71315f2c3aeddbd1f6d527595d21eea9b73160e78d6fa49b7897a660095f9054906101000a900460ff166040516114bf9190613318565b60405180910390a1565b6114d16127ea565b600b5f60085481526020019081526020015f20544210611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90614168565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f193505050506115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b1906141d0565b60405180910390fd5b5f6115c4346122a9565b90505f600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f0154111561162757805f01548261162091906141ee565b9150611688565b600f83908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6040518060c00160405280838152602001600c546103e8426116aa9190614221565b6116b491906141ee565b8152602001348152602001600a5f60085481526020019081526020015f20548152602001428152602001600d80546116eb90613e23565b80601f016020809104026020016040519081016040528092919081815260200182805461171790613e23565b80156117625780601f1061173957610100808354040283529160200191611762565b820191905f5260205f20905b81548152906001019060200180831161174557829003601f168201915b5050505050815250600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050190816117ec9190613fe7565b509050508273ffffffffffffffffffffffffffffffffffffffff167f9ffc61f9a5071474fc516dd5798d66ef34a007da20386052b5351504c0250cfe83600d6040516118399291906142e3565b60405180910390a2505061184b6128b8565b50565b611856612763565b80600c8190555050565b60608060608060608060605f600f8054905090505f8167ffffffffffffffff81111561188f5761188e613121565b5b6040519080825280602002602001820160405280156118bd5781602001602082028036833780820191505090505b5090505f8267ffffffffffffffff8111156118db576118da613121565b5b6040519080825280602002602001820160405280156119095781602001602082028036833780820191505090505b5090505f8367ffffffffffffffff81111561192757611926613121565b5b6040519080825280602002602001820160405280156119555781602001602082028036833780820191505090505b5090505f8467ffffffffffffffff81111561197357611972613121565b5b6040519080825280602002602001820160405280156119a15781602001602082028036833780820191505090505b5090505f8567ffffffffffffffff8111156119bf576119be613121565b5b6040519080825280602002602001820160405280156119ed5781602001602082028036833780820191505090505b5090505f8667ffffffffffffffff811115611a0b57611a0a613121565b5b604051908082528060200260200182016040528015611a395781602001602082028036833780820191505090505b5090505f8767ffffffffffffffff811115611a5757611a56613121565b5b604051908082528060200260200182016040528015611a8a57816020015b6060815260200190600190039081611a755790505b5090505f5b88811015611cd5575f600f8281548110611aac57611aab614311565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050818a8481518110611b2a57611b29614311565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050805f0154898481518110611b7b57611b7a614311565b5b6020026020010181815250508060010154888481518110611b9f57611b9e614311565b5b6020026020010181815250508060020154878481518110611bc357611bc2614311565b5b6020026020010181815250508060030154868481518110611be757611be6614311565b5b6020026020010181815250508060040154858481518110611c0b57611c0a614311565b5b602002602001018181525050806005018054611c2690613e23565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5290613e23565b8015611c9d5780601f10611c7457610100808354040283529160200191611c9d565b820191905f5260205f20905b815481529060010190602001808311611c8057829003601f168201915b5050505050848481518110611cb557611cb4614311565b5b602002602001018190525050508080611ccd9061433e565b915050611a8f565b50868686868686869e509e509e509e509e509e509e50505050505050505090919293949596565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015490806005018054611d6090613e23565b80601f0160208091040260200160405190810160405280929190818152602001828054611d8c90613e23565b8015611dd75780601f10611dae57610100808354040283529160200191611dd7565b820191905f5260205f20905b815481529060010190602001808311611dba57829003601f168201915b5050505050905086565b5f805f90505f5b600f80549050811015611e9057600e5f600f8381548110611e0c57611e0b614311565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015482611e7b91906141ee565b91508080611e889061433e565b915050611de8565b508091505090565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611eea6127ea565b600b5f60085481526020019081526020015f20544210611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3690614168565b60405180910390fd5b5f611f49826126ef565b90508160045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401611fa8929190614385565b602060405180830381865afa158015611fc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe79190613809565b1015612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f906143f6565b60405180910390fd5b61207683308460045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b6e909392919063ffffffff16565b5f600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f015411156120d757805f0154826120d091906141ee565b9150612138565b600f84908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6040518060c00160405280838152602001600c546103e84261215a9190614221565b61216491906141ee565b8152602001848152602001600a5f60085481526020019081526020015f205481526020014281526020016040518060400160405280600481526020017f5553445400000000000000000000000000000000000000000000000000000000815250815250600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050190816122499190613fe7565b509050508373ffffffffffffffffffffffffffffffffffffffff167f9ffc61f9a5071474fc516dd5798d66ef34a007da20386052b5351504c0250cfe83604051612293919061445e565b60405180910390a250506122a56128b8565b5050565b5f806122b3610afd565b90505f600a5f60085481526020019081526020015f2054826122d591906144b7565b905080846122e39190614221565b92505050919050565b600a602052805f5260405f205f915090505481565b612309612763565b5f811161234b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234290613c12565b60405180910390fd5b600382111561238f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238690613c7a565b60405180910390fd5b60018210156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90613c7a565b60405180910390fd5b80600b5f8481526020019081526020015f20819055505050565b6123f5612763565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245a906138e6565b60405180910390fd5b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f600c54905090565b600c5481565b6124fd612763565b6125056127ea565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125609190613340565b602060405180830381865afa15801561257b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259f9190613809565b9050818110156125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db9061387e565b60405180910390fd5b612630838360045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128399092919063ffffffff16565b506126396128b8565b5050565b5f600854905090565b61264e612763565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126be575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016126b59190613340565b60405180910390fd5b6126c781612aad565b50565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80670de0b6b3a764000064e8d4a51000600a5f60085481526020019081526020015f205461271e91906144b7565b8461272991906144b7565b6127339190614221565b905080915050919050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61276b612bf0565b73ffffffffffffffffffffffffffffffffffffffff16612789611cfc565b73ffffffffffffffffffffffffffffffffffffffff16146127e8576127ac612bf0565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016127df9190613340565b60405180910390fd5b565b60026001540361282f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282690614531565b60405180910390fd5b6002600181905550565b6128b3838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb858560405160240161286c92919061454f565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612bf7565b505050565b60018081905550565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015411612942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612939906145c0565b60405180910390fd5b5f61294c82612c8c565b9050600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8082015f9055600182015f9055600282015f9055600382015f9055600482015f9055600582015f6129bd9190612f19565b5050600f6001600f805490506129d391906145de565b815481106129e4576129e3614311565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f8281548110612a2057612a1f614311565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f805480612a7757612a76614611565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bea848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401612ba39392919061463e565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612bf7565b50505050565b5f33905090565b5f612c21828473ffffffffffffffffffffffffffffffffffffffff16612d6a90919063ffffffff16565b90505f815114158015612c45575080806020019051810190612c43919061469d565b155b15612c8757826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401612c7e9190613340565b60405180910390fd5b505050565b5f805f90505b600f80549050811015612d29578273ffffffffffffffffffffffffffffffffffffffff16600f8281548110612cca57612cc9614311565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612d165780915050612d65565b8080612d219061433e565b915050612c92565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5c90614712565b60405180910390fd5b919050565b6060612d7783835f612d7f565b905092915050565b606081471015612dc657306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401612dbd9190613340565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051612dee9190614774565b5f6040518083038185875af1925050503d805f8114612e28576040519150601f19603f3d011682016040523d82523d5f602084013e612e2d565b606091505b5091509150612e3d868383612e48565b925050509392505050565b606082612e5d57612e5882612ed5565b612ecd565b5f8251148015612e8357505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15612ec557836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401612ebc9190613340565b60405180910390fd5b819050612ece565b5b9392505050565b5f81511115612ee75780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b508054612f2590613e23565b5f825580601f10612f365750612f53565b601f0160209004905f5260205f2090810190612f529190612f56565b5b50565b5b80821115612f6d575f815f905550600101612f57565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612fab82612f82565b9050919050565b612fbb81612fa1565b8114612fc5575f80fd5b50565b5f81359050612fd681612fb2565b92915050565b5f819050919050565b612fee81612fdc565b8114612ff8575f80fd5b50565b5f8135905061300981612fe5565b92915050565b5f806040838503121561302557613024612f7a565b5b5f61303285828601612fc8565b925050602061304385828601612ffb565b9150509250929050565b5f6020828403121561306257613061612f7a565b5b5f61306f84828501612fc8565b91505092915050565b61308181612fdc565b82525050565b5f60208201905061309a5f830184613078565b92915050565b5f602082840312156130b5576130b4612f7a565b5b5f6130c284828501612ffb565b91505092915050565b5f80604083850312156130e1576130e0612f7a565b5b5f6130ee85828601612ffb565b92505060206130ff85828601612ffb565b9150509250929050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61315782613111565b810181811067ffffffffffffffff8211171561317657613175613121565b5b80604052505050565b5f613188612f71565b9050613194828261314e565b919050565b5f67ffffffffffffffff8211156131b3576131b2613121565b5b6131bc82613111565b9050602081019050919050565b828183375f83830152505050565b5f6131e96131e484613199565b61317f565b9050828152602081018484840111156132055761320461310d565b5b6132108482856131c9565b509392505050565b5f82601f83011261322c5761322b613109565b5b813561323c8482602086016131d7565b91505092915050565b5f805f805f805f60e0888a0312156132605761325f612f7a565b5b5f61326d8a828b01612fc8565b975050602061327e8a828b01612ffb565b965050604061328f8a828b01612ffb565b95505060606132a08a828b01612ffb565b94505060806132b18a828b01612ffb565b93505060a06132c28a828b01612ffb565b92505060c088013567ffffffffffffffff8111156132e3576132e2612f7e565b5b6132ef8a828b01613218565b91505092959891949750929550565b5f8115159050919050565b613312816132fe565b82525050565b5f60208201905061332b5f830184613309565b92915050565b61333a81612fa1565b82525050565b5f6020820190506133535f830184613331565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61338b81612fa1565b82525050565b5f61339c8383613382565b60208301905092915050565b5f602082019050919050565b5f6133be82613359565b6133c88185613363565b93506133d383613373565b805f5b838110156134035781516133ea8882613391565b97506133f5836133a8565b9250506001810190506133d6565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61344281612fdc565b82525050565b5f6134538383613439565b60208301905092915050565b5f602082019050919050565b5f61347582613410565b61347f818561341a565b935061348a8361342a565b805f5b838110156134ba5781516134a18882613448565b97506134ac8361345f565b92505060018101905061348d565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561352757808201518184015260208101905061350c565b5f8484015250505050565b5f61353c826134f0565b61354681856134fa565b935061355681856020860161350a565b61355f81613111565b840191505092915050565b5f6135758383613532565b905092915050565b5f602082019050919050565b5f613593826134c7565b61359d81856134d1565b9350836020820285016135af856134e1565b805f5b858110156135ea57848403895281516135cb858261356a565b94506135d68361357d565b925060208a019950506001810190506135b2565b50829750879550505050505092915050565b5f60e0820190508181035f830152613614818a6133b4565b90508181036020830152613628818961346b565b9050818103604083015261363c818861346b565b90508181036060830152613650818761346b565b90508181036080830152613664818661346b565b905081810360a0830152613678818561346b565b905081810360c083015261368c8184613589565b905098975050505050505050565b5f82825260208201905092915050565b5f6136b4826134f0565b6136be818561369a565b93506136ce81856020860161350a565b6136d781613111565b840191505092915050565b5f60c0820190506136f55f830189613078565b6137026020830188613078565b61370f6040830187613078565b61371c6060830186613078565b6137296080830185613078565b81810360a083015261373b81846136aa565b9050979650505050505050565b5f819050919050565b5f61376b61376661376184612f82565b613748565b612f82565b9050919050565b5f61377c82613751565b9050919050565b5f61378d82613772565b9050919050565b61379d81613783565b82525050565b5f6020820190506137b65f830184613794565b92915050565b5f6137c682613772565b9050919050565b6137d6816137bc565b82525050565b5f6020820190506137ef5f8301846137cd565b92915050565b5f8151905061380381612fe5565b92915050565b5f6020828403121561381e5761381d612f7a565b5b5f61382b848285016137f5565b91505092915050565b7f4578636565647320746f6b656e2062616c616e636521000000000000000000005f82015250565b5f61386860168361369a565b915061387382613834565b602082019050919050565b5f6020820190508181035f8301526138958161385c565b9050919050565b7f546f6b656e206973207a65726f206164647265737321000000000000000000005f82015250565b5f6138d060168361369a565b91506138db8261389c565b602082019050919050565b5f6020820190508181035f8301526138fd816138c4565b9050919050565b5f69ffffffffffffffffffff82169050919050565b61392281613904565b811461392c575f80fd5b50565b5f8151905061393d81613919565b92915050565b5f819050919050565b61395581613943565b811461395f575f80fd5b50565b5f815190506139708161394c565b92915050565b5f805f805f60a0868803121561398f5761398e612f7a565b5b5f61399c8882890161392f565b95505060206139ad88828901613962565b94505060406139be888289016137f5565b93505060606139cf888289016137f5565b92505060806139e08882890161392f565b9150509295509295909350565b7f496e76616c6964207072696365000000000000000000000000000000000000005f82015250565b5f613a21600d8361369a565b9150613a2c826139ed565b602082019050919050565b5f6020820190508181035f830152613a4e81613a15565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613a8c82613943565b9150613a9783613943565b9250828202613aa581613943565b91507f800000000000000000000000000000000000000000000000000000000000000084145f84121615613adc57613adb613a55565b5b8282058414831517613af157613af0613a55565b5b5092915050565b7f4661696c656420776974686472617721000000000000000000000000000000005f82015250565b5f613b2c60108361369a565b9150613b3782613af8565b602082019050919050565b5f6020820190508181035f830152613b5981613b20565b9050919050565b7f496e73756666696369656e742042616c616e63650000000000000000000000005f82015250565b5f613b9460148361369a565b9150613b9f82613b60565b602082019050919050565b5f6020820190508181035f830152613bc181613b88565b9050919050565b7f696e76616c69642076616c7565212121000000000000000000000000000000005f82015250565b5f613bfc60108361369a565b9150613c0782613bc8565b602082019050919050565b5f6020820190508181035f830152613c2981613bf0565b9050919050565b7f6578636565642072616e676500000000000000000000000000000000000000005f82015250565b5f613c64600c8361369a565b9150613c6f82613c30565b602082019050919050565b5f6020820190508181035f830152613c9181613c58565b9050919050565b7f596f752063616e277420636c61696d206265666f72652076657374696e6720655f8201527f6e642074696d6521000000000000000000000000000000000000000000000000602082015250565b5f613cf260288361369a565b9150613cfd82613c98565b604082019050919050565b5f6020820190508181035f830152613d1f81613ce6565b9050919050565b7f596f7520646f6e2774206861766520746f6b656e7321000000000000000000005f82015250565b5f613d5a60168361369a565b9150613d6582613d26565b602082019050919050565b5f6020820190508181035f830152613d8781613d4e565b9050919050565b7f427579657220616c7265616479206578697374732100000000000000000000005f82015250565b5f613dc260158361369a565b9150613dcd82613d8e565b602082019050919050565b5f6020820190508181035f830152613def81613db6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e3a57607f821691505b602082108103613e4d57613e4c613df6565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613eaf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613e74565b613eb98683613e74565b95508019841693508086168417925050509392505050565b5f613eeb613ee6613ee184612fdc565b613748565b612fdc565b9050919050565b5f819050919050565b613f0483613ed1565b613f18613f1082613ef2565b848454613e80565b825550505050565b5f90565b613f2c613f20565b613f37818484613efb565b505050565b5b81811015613f5a57613f4f5f82613f24565b600181019050613f3d565b5050565b601f821115613f9f57613f7081613e53565b613f7984613e65565b81016020851015613f88578190505b613f9c613f9485613e65565b830182613f3c565b50505b505050565b5f82821c905092915050565b5f613fbf5f1984600802613fa4565b1980831691505092915050565b5f613fd78383613fb0565b9150826002028217905092915050565b613ff0826134f0565b67ffffffffffffffff81111561400957614008613121565b5b6140138254613e23565b61401e828285613f5e565b5f60209050601f83116001811461404f575f841561403d578287015190505b6140478582613fcc565b8655506140ae565b601f19841661405d86613e53565b5f5b828110156140845784890151825560018201915060208501945060208101905061405f565b868310156140a1578489015161409d601f891682613fb0565b8355505b6001600288020188555050505b505050505050565b7f556e617574686f72697a65642063616c6c6572000000000000000000000000005f82015250565b5f6140ea60138361369a565b91506140f5826140b6565b602082019050919050565b5f6020820190508181035f830152614117816140de565b9050919050565b7f63757272656e742070726573616c6520697320656e64656400000000000000005f82015250565b5f61415260188361369a565b915061415d8261411e565b602082019050919050565b5f6020820190508181035f83015261417f81614146565b9050919050565b7f4661696c656420746f207472616e73666572207061796d656e742100000000005f82015250565b5f6141ba601b8361369a565b91506141c582614186565b602082019050919050565b5f6020820190508181035f8301526141e7816141ae565b9050919050565b5f6141f882612fdc565b915061420383612fdc565b925082820190508082111561421b5761421a613a55565b5b92915050565b5f61422b82612fdc565b915061423683612fdc565b925082820261424481612fdc565b9150828204841483151761425b5761425a613a55565b5b5092915050565b5f815461426e81613e23565b614278818661369a565b9450600182165f811461429257600181146142a8576142da565b60ff1983168652811515602002860193506142da565b6142b185613e53565b5f5b838110156142d2578154818901526001820191506020810190506142b3565b808801955050505b50505092915050565b5f6040820190506142f65f830185613078565b81810360208301526143088184614262565b90509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61434882612fdc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361437a57614379613a55565b5b600182019050919050565b5f6040820190506143985f830185613331565b6143a56020830184613331565b9392505050565b7f4e6f7420656e6f756768205553445420616c6c6f77616e6365210000000000005f82015250565b5f6143e0601a8361369a565b91506143eb826143ac565b602082019050919050565b5f6020820190508181035f83015261440d816143d4565b9050919050565b7f55534454000000000000000000000000000000000000000000000000000000005f82015250565b5f61444860048361369a565b915061445382614414565b602082019050919050565b5f6040820190506144715f830184613078565b81810360208301526144828161443c565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6144c182612fdc565b91506144cc83612fdc565b9250826144dc576144db61448a565b5b828204905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f61451b601f8361369a565b9150614526826144e7565b602082019050919050565b5f6020820190508181035f8301526145488161450f565b9050919050565b5f6040820190506145625f830185613331565b61456f6020830184613078565b9392505050565b7f427579657220646f6573206e6f742065786973740000000000000000000000005f82015250565b5f6145aa60148361369a565b91506145b582614576565b602082019050919050565b5f6020820190508181035f8301526145d78161459e565b9050919050565b5f6145e882612fdc565b91506145f383612fdc565b925082820390508181111561460b5761460a613a55565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f6060820190506146515f830186613331565b61465e6020830185613331565b61466b6040830184613078565b949350505050565b61467c816132fe565b8114614686575f80fd5b50565b5f8151905061469781614673565b92915050565b5f602082840312156146b2576146b1612f7a565b5b5f6146bf84828501614689565b91505092915050565b7f42757965722061646472657373206e6f7420666f756e640000000000000000005f82015250565b5f6146fc60178361369a565b9150614707826146c8565b602082019050919050565b5f6020820190508181035f830152614729816146f0565b9050919050565b5f81519050919050565b5f81905092915050565b5f61474e82614730565b614758818561473a565b935061476881856020860161350a565b80840191505092915050565b5f61477f8284614744565b91508190509291505056fea26469706673582212204e6164d767fac9f9ff7b2190b47fe87e5dd182f9a76eb1622465980ac0bc0b8464736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b841900000000000000000000000008679f04f58299b97c7eda549ed9b5b1c5d925c10000000000000000000000000391ddbeaa28e720b80a46b5770c77ba787abf5400000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000034554480000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _oracle (address): 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
Arg [1] : _payment (address): 0x08679F04F58299B97c7eda549ed9B5B1C5d925c1
Arg [2] : _token (address): 0x0391dDBeaA28E720B80a46B5770c77ba787abf54
Arg [3] : _symbol (string): ETH
Arg [4] : _usdtToken (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Arg [1] : 00000000000000000000000008679f04f58299b97c7eda549ed9b5b1c5d925c1
Arg [2] : 0000000000000000000000000391ddbeaa28e720b80a46b5770c77ba787abf54
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [4] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4554480000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
27981:11605:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37167:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36028:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30101:224;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36768:391;;;;;;;;;;;;;:::i;:::-;;38197:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38318:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38801:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37801:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33025:464;;;;;;;;;;;;;:::i;:::-;;39010:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28354:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28784:31;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36486:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28291:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34193:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3396:103;;;;;;;;;;;;;:::i;:::-;;28445:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36614:146;;;;;;;;;;;;;:::i;:::-;;30981:942;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38588:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34320:1410;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;2721:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28738:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;35738:282;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28177:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28207:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31931:1086;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30333:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28393:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37926:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36243:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38695:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28499:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37477:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38907:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3654:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28135:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30710:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28109:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37167:302;2607:13;:11;:13::i;:::-;27008:21:::1;:19;:21::i;:::-;37294::::2;37318:5;;;;;;;;;;;:15;;;37342:4;37318:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37294:54;;37384:7;37367:13;:24;;37359:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;37429:32;37448:3;37453:7;37429:5;;;;;;;;;;;:18;;;;:32;;;;;:::i;:::-;37283:186;27052:20:::1;:18;:20::i;:::-;37167:302:::0;;:::o;36028:207::-;2607:13;:11;:13::i;:::-;36116:1:::1;36098:20;;:6;:20;;::::0;36090:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36171:6;36156:5;;:22;;;;;;;;;;;;;;;;;;36220:6;36189:13;;:38;;;;;;;;;;;;;;;;;;36028:207:::0;:::o;30101:224::-;30156:7;30179:12;30201:9;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30176:52;;;;;;30255:1;30247:5;:9;30239:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;30309:6;30300:5;:16;;;;:::i;:::-;30285:32;;;30101:224;:::o;36768:391::-;2607:13;:11;:13::i;:::-;27008:21:::1;:19;:21::i;:::-;36864:10:::2;36856:24;;:47;36881:21;36856:47;;;;;;;;;;;;;;;;;;;;;;;36834:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;37003:1;36966:9;;;;;;;;;;;:19;;;36994:4;36966:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;36958:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37040:111;37077:14;;;;;;;;;;;37106:9;;;;;;;;;;;:19;;;37134:4;37106:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37040:9;;;;;;;;;;;:22;;;;:111;;;;;:::i;:::-;27052:20:::1;:18;:20::i;:::-;36768:391::o:0;38197:113::-;38257:7;38284:10;:18;38295:6;38284:18;;;;;;;;;;;;38277:25;;38197:113;;;:::o;38318:262::-;2607:13;:11;:13::i;:::-;38418:1:::1;38409:6;:10;38401:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;38469:1;38459:6;:11;;38451:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38516:1;38506:6;:11;;38498:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38566:6;38545:10;:18;38556:6;38545:18;;;;;;;;;;;:27;;;;38318:262:::0;;:::o;38801:98::-;2607:13;:11;:13::i;:::-;38885:6:::1;38870:12;:21;;;;38801:98:::0;:::o;37801:117::-;37863:7;37890:12;:20;37903:6;37890:20;;;;;;;;;;;;37883:27;;37801:117;;;:::o;33025:464::-;27008:21;:19;:21::i;:::-;33078:23:::1;33104:6;:18;33111:10;33104:18;;;;;;;;;;;;;;;33078:44;;33175:15;33155:9;:17;;;:35;33133:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;33295:1;33277:9;:15;;;:19;33269:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;33334:47;33353:10;33365:9;:15;;;33334:5;;;;;;;;;;;:18;;;;:47;;;;;:::i;:::-;33411:10;33397:42;;;33423:9;:15;;;33397:42;;;;;;:::i;:::-;;;;;;;;33450:31;33470:10;33450:19;:31::i;:::-;33067:422;27052:20:::0;:18;:20::i;:::-;33025:464::o;39010:573::-;2607:13;:11;:13::i;:::-;39308:1:::1;39277:6;:21;39284:13;39277:21;;;;;;;;;;;;;;;:27;;;:32;39269:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39370:160;;;;;;;;39390:12;39370:160;;;;39417:8;39370:160;;;;39440:11;39370:160;;;;39466:11;39370:160;;;;39492:5;39370:160;;;;39512:7;39370:160;;::::0;39346:6:::1;:21;39353:13;39346:21;;;;;;;;;;;;;;;:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;39541:14;39561:13;39541:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39010:573:::0;;;;;;;:::o;28354:32::-;;;;;;;;;;;;;:::o;28784:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36486:120::-;2607:13;:11;:13::i;:::-;36583:15:::1;36566:14;;:32;;;;;;;;;;;;;;;;;;36486:120:::0;:::o;28291:29::-;;;;;;;;;;;;;:::o;34193:119::-;29145:7;:5;:7::i;:::-;29131:21;;:10;:21;;;:52;;;;29178:4;29156:27;;:10;:27;;;29131:52;29109:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;34270:34:::1;34290:13;34270:19;:34::i;:::-;34193:119:::0;:::o;3396:103::-;2607:13;:11;:13::i;:::-;3461:30:::1;3488:1;3461:18;:30::i;:::-;3396:103::o:0;28445:47::-;;;;;;;;;;;;;;;;;:::o;36614:146::-;2607:13;:11;:13::i;:::-;36688::::1;;;;;;;;;;;36687:14;36671:13;;:30;;;;;;;;;;;;;;;;;;36717:35;36738:13;;;;;;;;;;;36717:35;;;;;;:::i;:::-;;;;;;;;36614:146::o:0;30981:942::-;27008:21;:19;:21::i;:::-;31101:12:::1;:26;31114:12;;31101:26;;;;;;;;;;;;31083:15;:44;31061:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;31220:14;;;;;;;;;;;31212:28;;:39;31241:9;31212:39;;;;;;;;;;;;;;;;;;;;;;;31190:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;31317:20;31340:25;31355:9;31340:14;:25::i;:::-;31317:48;;31376:23;31402:6;:21;31409:13;31402:21;;;;;;;;;;;;;;;31376:47;;31456:1;31438:9;:15;;;:19;31434:150;;;31490:9;:15;;;31474:31;;;;;:::i;:::-;;;31434:150;;;31538:14;31558:13;31538:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31434:150;31618:223;;;;;;;;31638:12;31618:223;;;;31693:16;;31685:4;31667:15;:22;;;;:::i;:::-;31666:43;;;;:::i;:::-;31618:223;;;;31725:9;31618:223;;;;31749:10;:24;31760:12;;31749:24;;;;;;;;;;;;31618:223;;;;31788:15;31618:223;;;;31818:12;31618:223;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;31594:6:::1;:21;31601:13;31594:21;;;;;;;;;;;;;;;:247;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;31873:13;31857:58;;;31888:12;31902;31857:58;;;;;;;:::i;:::-;;;;;;;;31050:873;;27052:20:::0;:18;:20::i;:::-;30981:942;:::o;38588:99::-;2607:13;:11;:13::i;:::-;38674:5:::1;38655:16;:24;;;;38588:99:::0;:::o;34320:1410::-;34406:16;34437;34468;34499;34530;34561;34592:15;34635:14;34652;:21;;;;34635:38;;34684:26;34727:6;34713:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34684:50;;34745:23;34785:6;34771:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34745:47;;34803:25;34845:6;34831:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34803:49;;34863:28;34908:6;34894:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34863:52;;34926:23;34966:6;34952:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34926:47;;34984:22;35023:6;35009:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34984:46;;35041:23;35080:6;35067:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35041:46;;35103:9;35098:439;35122:6;35118:1;:10;35098:439;;;35150:20;35173:14;35188:1;35173:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35150:40;;35205:19;35227:6;:20;35234:12;35227:20;;;;;;;;;;;;;;;35205:42;;35277:12;35262:9;35272:1;35262:12;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;35316:5;:11;;;35304:6;35311:1;35304:9;;;;;;;;:::i;:::-;;;;;;;:23;;;;;35356:5;:13;;;35342:8;35351:1;35342:11;;;;;;;;:::i;:::-;;;;;;;:27;;;;;35401:5;:10;;;35384:11;35396:1;35384:14;;;;;;;;:::i;:::-;;;;;;;:27;;;;;35438:5;:11;;;35426:6;35433:1;35426:9;;;;;;;;:::i;:::-;;;;;;;:23;;;;;35475:5;:10;;;35464:5;35470:1;35464:8;;;;;;;;:::i;:::-;;;;;;;:21;;;;;35513:5;:12;;35500:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;35508:1;35500:10;;;;;;;;:::i;:::-;;;;;;;:25;;;;35135:402;;35130:3;;;;;:::i;:::-;;;;35098:439;;;;35569:9;35593:6;35614:8;35637:11;35663:6;35684:5;35704:7;35547:175;;;;;;;;;;;;;;;;;;;;;;34320:1410;;;;;;;:::o;2721:87::-;2767:7;2794:6;;;;;;;;;;;2787:13;;2721:87;:::o;28738:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35738:282::-;35790:7;35810:24;35837:1;35810:28;;35854:9;35849:130;35873:14;:21;;;;35869:1;:25;35849:130;;;35936:6;:25;35943:14;35958:1;35943:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35936:25;;;;;;;;;;;;;;;:31;;;35916:51;;;;;:::i;:::-;;;35896:3;;;;;:::i;:::-;;;;35849:130;;;;35996:16;35989:23;;;35738:282;:::o;28177:23::-;;;;;;;;;;;;;:::o;28207:39::-;;;;;;;;;;;;;:::o;31931:1086::-;27008:21;:19;:21::i;:::-;32095:12:::1;:26;32108:12;;32095:26;;;;;;;;;;;;32077:15;:44;32055:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;32184:20;32207:34;32229:11;32207:21;:34::i;:::-;32184:57;;32324:11;32274:9;;;;;;;;;;;:19;;;32294:10;32314:4;32274:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;32252:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;32400:69;32427:13;32450:4;32457:11;32400:9;;;;;;;;;;;:26;;;;:69;;;;;;:::i;:::-;32480:23;32506:6;:21;32513:13;32506:21;;;;;;;;;;;;;;;32480:47;;32560:1;32542:9;:15;;;:19;32538:150;;;32594:9;:15;;;32578:31;;;;;:::i;:::-;;;32538:150;;;32642:14;32662:13;32642:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32538:150;32722:219;;;;;;;;32742:12;32722:219;;;;32797:16;;32789:4;32771:15;:22;;;;:::i;:::-;32770:43;;;;:::i;:::-;32722:219;;;;32829:11;32722:219;;;;32855:10;:24;32866:12;;32855:24;;;;;;;;;;;;32722:219;;;;32894:15;32722:219;;;;;;;;;;;;;;;;;;;;::::0;::::1;;::::0;32698:6:::1;:21;32705:13;32698:21;;;;;;;;;;;;;;;:243;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;32973:13;32957:52;;;32988:12;32957:52;;;;;;:::i;:::-;;;;;;;;32044:973;;27052:20:::0;:18;:20::i;:::-;31931:1086;;:::o;30333:369::-;30398:7;30418:21;30442:24;:22;:24::i;:::-;30418:48;;30512:20;30553:10;:24;30564:12;;30553:24;;;;;;;;;;;;30536:13;30535:42;;;;:::i;:::-;30512:65;;30639:12;30626:10;:25;;;;:::i;:::-;30618:34;;;;30333:369;;;:::o;28393:45::-;;;;;;;;;;;;;;;;;:::o;37926:263::-;2607:13;:11;:13::i;:::-;38026:1:::1;38018:5;:9;38010:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;38077:1;38067:6;:11;;38059:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38124:1;38114:6;:11;;38106:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38176:5;38153:12;:20;38166:6;38153:20;;;;;;;;;;;:28;;;;37926:263:::0;;:::o;36243:235::-;2607:13;:11;:13::i;:::-;36343:1:::1;36321:24;;:10;:24;;::::0;36313:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36402:10;36383:9;;:30;;;;;;;;;;;;;;;;;;36459:10;36424:17;;:46;;;;;;;;;;;;;;;;;;36243:235:::0;:::o;38695:98::-;38742:7;38769:16;;38762:23;;38695:98;:::o;28499:31::-;;;;:::o;37477:316::-;2607:13;:11;:13::i;:::-;27008:21:::1;:19;:21::i;:::-;37602:25:::2;37630:9;;;;;;;;;;;:19;;;37658:4;37630:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37602:62;;37704:7;37683:17;:28;;37675:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37749:36;37772:3;37777:7;37749:9;;;;;;;;;;;:22;;;;:36;;;;;:::i;:::-;37591:202;27052:20:::1;:18;:20::i;:::-;37477:316:::0;;:::o;38907:95::-;38955:7;38982:12;;38975:19;;38907:95;:::o;3654:220::-;2607:13;:11;:13::i;:::-;3759:1:::1;3739:22;;:8;:22;;::::0;3735:93:::1;;3813:1;3785:31;;;;;;;;;;;:::i;:::-;;;;;;;;3735:93;3838:28;3857:8;3838:18;:28::i;:::-;3654:220:::0;:::o;28135:35::-;;;;;;;;;;;;;:::o;30710:263::-;30810:7;30835:20;30928:6;30915;30887:10;:24;30898:12;;30887:24;;;;;;;;;;;;:35;;;;:::i;:::-;30859:11;:64;;;;:::i;:::-;30858:77;;;;:::i;:::-;30835:100;;30953:12;30946:19;;;30710:263;;;:::o;28109:19::-;;;;;;;;;;;;;:::o;2886:166::-;2957:12;:10;:12::i;:::-;2946:23;;:7;:5;:7::i;:::-;:23;;;2942:103;;3020:12;:10;:12::i;:::-;2993:40;;;;;;;;;;;:::i;:::-;;;;;;;;2942:103;2886:166::o;27088:293::-;26490:1;27222:7;;:19;27214:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;26490:1;27355:7;:18;;;;27088:293::o;18731:162::-;18814:71;18834:5;18856;:14;;;18873:2;18877:5;18841:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18814:19;:71::i;:::-;18731:162;;;:::o;27389:213::-;26446:1;27572:7;:22;;;;27389:213::o;33839:346::-;33949:1;33919:6;:21;33926:13;33919:21;;;;;;;;;;;;;;;:27;;;:31;33911:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33986:13;34002:29;34017:13;34002:14;:29::i;:::-;33986:45;;34049:6;:21;34056:13;34049:21;;;;;;;;;;;;;;;;34042:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34105:14;34144:1;34120:14;:21;;;;:25;;;;:::i;:::-;34105:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34081:14;34096:5;34081:21;;;;;;;;:::i;:::-;;;;;;;;;;:65;;;;;;;;;;;;;;;;;;34157:14;:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;33900:285;33839:346;:::o;4034:191::-;4108:16;4127:6;;;;;;;;;;;4108:25;;4153:8;4144:6;;:17;;;;;;;;;;;;;;;;;;4208:8;4177:40;;4198:8;4177:40;;;;;;;;;;;;4097:128;4034:191;:::o;19138:190::-;19239:81;19259:5;19281;:18;;;19302:4;19308:2;19312:5;19266:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19239:19;:81::i;:::-;19138:190;;;;:::o;730:98::-;783:7;810:10;803:17;;730:98;:::o;21542:638::-;21966:23;21992:33;22020:4;22000:5;21992:27;;;;:33;;;;:::i;:::-;21966:59;;22061:1;22040:10;:17;:22;;:57;;;;;22078:10;22067:30;;;;;;;;;;;;:::i;:::-;22066:31;22040:57;22036:137;;;22154:5;22121:40;;;;;;;;;;;:::i;:::-;;;;;;;;22036:137;21612:568;21542:638;;:::o;33497:334::-;33594:7;33624:9;33636:1;33624:13;;33619:161;33643:14;:21;;;;33639:1;:25;33619:161;;;33711:13;33690:34;;:14;33705:1;33690:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:34;;;33686:83;;33752:1;33745:8;;;;;33686:83;33666:3;;;;;:::i;:::-;;;;33619:161;;;;33790:33;;;;;;;;;;:::i;:::-;;;;;;;;33497:334;;;;:::o;13857:153::-;13932:12;13964:38;13986:6;13994:4;14000:1;13964:21;:38::i;:::-;13957:45;;13857:153;;;;:::o;14345:398::-;14444:12;14497:5;14473:21;:29;14469:110;;;14561:4;14526:41;;;;;;;;;;;:::i;:::-;;;;;;;;14469:110;14590:12;14604:23;14631:6;:11;;14650:5;14657:4;14631:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14589:73;;;;14680:55;14707:6;14715:7;14724:10;14680:26;:55::i;:::-;14673:62;;;;14345:398;;;;;:::o;15821:597::-;15969:12;15999:7;15994:417;;16023:19;16031:10;16023:7;:19::i;:::-;15994:417;;;16272:1;16251:10;:17;:22;:49;;;;;16299:1;16277:6;:18;;;:23;16251:49;16247:121;;;16345:6;16328:24;;;;;;;;;;;:::i;:::-;;;;;;;;16247:121;16389:10;16382:17;;;;15994:417;15821:597;;;;;;:::o;16971:528::-;17124:1;17104:10;:17;:21;17100:392;;;17336:10;17330:17;17393:15;17380:10;17376:2;17372:19;17365:44;17100:392;17463:17;;;;;;;;;;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:329::-;1736:6;1785:2;1773:9;1764:7;1760:23;1756:32;1753:119;;;1791:79;;:::i;:::-;1753:119;1911:1;1936:53;1981:7;1972:6;1961:9;1957:22;1936:53;:::i;:::-;1926:63;;1882:117;1677:329;;;;:::o;2012:118::-;2099:24;2117:5;2099:24;:::i;:::-;2094:3;2087:37;2012:118;;:::o;2136:222::-;2229:4;2267:2;2256:9;2252:18;2244:26;;2280:71;2348:1;2337:9;2333:17;2324:6;2280:71;:::i;:::-;2136:222;;;;:::o;2364:329::-;2423:6;2472:2;2460:9;2451:7;2447:23;2443:32;2440:119;;;2478:79;;:::i;:::-;2440:119;2598:1;2623:53;2668:7;2659:6;2648:9;2644:22;2623:53;:::i;:::-;2613:63;;2569:117;2364:329;;;;:::o;2699:474::-;2767:6;2775;2824:2;2812:9;2803:7;2799:23;2795:32;2792:119;;;2830:79;;:::i;:::-;2792:119;2950:1;2975:53;3020:7;3011:6;3000:9;2996:22;2975:53;:::i;:::-;2965:63;;2921:117;3077:2;3103:53;3148:7;3139:6;3128:9;3124:22;3103:53;:::i;:::-;3093:63;;3048:118;2699:474;;;;;:::o;3179:117::-;3288:1;3285;3278:12;3302:117;3411:1;3408;3401:12;3425:102;3466:6;3517:2;3513:7;3508:2;3501:5;3497:14;3493:28;3483:38;;3425:102;;;:::o;3533:180::-;3581:77;3578:1;3571:88;3678:4;3675:1;3668:15;3702:4;3699:1;3692:15;3719:281;3802:27;3824:4;3802:27;:::i;:::-;3794:6;3790:40;3932:6;3920:10;3917:22;3896:18;3884:10;3881:34;3878:62;3875:88;;;3943:18;;:::i;:::-;3875:88;3983:10;3979:2;3972:22;3762:238;3719:281;;:::o;4006:129::-;4040:6;4067:20;;:::i;:::-;4057:30;;4096:33;4124:4;4116:6;4096:33;:::i;:::-;4006:129;;;:::o;4141:308::-;4203:4;4293:18;4285:6;4282:30;4279:56;;;4315:18;;:::i;:::-;4279:56;4353:29;4375:6;4353:29;:::i;:::-;4345:37;;4437:4;4431;4427:15;4419:23;;4141:308;;;:::o;4455:146::-;4552:6;4547:3;4542;4529:30;4593:1;4584:6;4579:3;4575:16;4568:27;4455:146;;;:::o;4607:425::-;4685:5;4710:66;4726:49;4768:6;4726:49;:::i;:::-;4710:66;:::i;:::-;4701:75;;4799:6;4792:5;4785:21;4837:4;4830:5;4826:16;4875:3;4866:6;4861:3;4857:16;4854:25;4851:112;;;4882:79;;:::i;:::-;4851:112;4972:54;5019:6;5014:3;5009;4972:54;:::i;:::-;4691:341;4607:425;;;;;:::o;5052:340::-;5108:5;5157:3;5150:4;5142:6;5138:17;5134:27;5124:122;;5165:79;;:::i;:::-;5124:122;5282:6;5269:20;5307:79;5382:3;5374:6;5367:4;5359:6;5355:17;5307:79;:::i;:::-;5298:88;;5114:278;5052:340;;;;:::o;5398:1383::-;5521:6;5529;5537;5545;5553;5561;5569;5618:3;5606:9;5597:7;5593:23;5589:33;5586:120;;;5625:79;;:::i;:::-;5586:120;5745:1;5770:53;5815:7;5806:6;5795:9;5791:22;5770:53;:::i;:::-;5760:63;;5716:117;5872:2;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5843:118;6000:2;6026:53;6071:7;6062:6;6051:9;6047:22;6026:53;:::i;:::-;6016:63;;5971:118;6128:2;6154:53;6199:7;6190:6;6179:9;6175:22;6154:53;:::i;:::-;6144:63;;6099:118;6256:3;6283:53;6328:7;6319:6;6308:9;6304:22;6283:53;:::i;:::-;6273:63;;6227:119;6385:3;6412:53;6457:7;6448:6;6437:9;6433:22;6412:53;:::i;:::-;6402:63;;6356:119;6542:3;6531:9;6527:19;6514:33;6574:18;6566:6;6563:30;6560:117;;;6596:79;;:::i;:::-;6560:117;6701:63;6756:7;6747:6;6736:9;6732:22;6701:63;:::i;:::-;6691:73;;6485:289;5398:1383;;;;;;;;;;:::o;6787:90::-;6821:7;6864:5;6857:13;6850:21;6839:32;;6787:90;;;:::o;6883:109::-;6964:21;6979:5;6964:21;:::i;:::-;6959:3;6952:34;6883:109;;:::o;6998:210::-;7085:4;7123:2;7112:9;7108:18;7100:26;;7136:65;7198:1;7187:9;7183:17;7174:6;7136:65;:::i;:::-;6998:210;;;;:::o;7214:118::-;7301:24;7319:5;7301:24;:::i;:::-;7296:3;7289:37;7214:118;;:::o;7338:222::-;7431:4;7469:2;7458:9;7454:18;7446:26;;7482:71;7550:1;7539:9;7535:17;7526:6;7482:71;:::i;:::-;7338:222;;;;:::o;7566:114::-;7633:6;7667:5;7661:12;7651:22;;7566:114;;;:::o;7686:184::-;7785:11;7819:6;7814:3;7807:19;7859:4;7854:3;7850:14;7835:29;;7686:184;;;;:::o;7876:132::-;7943:4;7966:3;7958:11;;7996:4;7991:3;7987:14;7979:22;;7876:132;;;:::o;8014:108::-;8091:24;8109:5;8091:24;:::i;:::-;8086:3;8079:37;8014:108;;:::o;8128:179::-;8197:10;8218:46;8260:3;8252:6;8218:46;:::i;:::-;8296:4;8291:3;8287:14;8273:28;;8128:179;;;;:::o;8313:113::-;8383:4;8415;8410:3;8406:14;8398:22;;8313:113;;;:::o;8462:732::-;8581:3;8610:54;8658:5;8610:54;:::i;:::-;8680:86;8759:6;8754:3;8680:86;:::i;:::-;8673:93;;8790:56;8840:5;8790:56;:::i;:::-;8869:7;8900:1;8885:284;8910:6;8907:1;8904:13;8885:284;;;8986:6;8980:13;9013:63;9072:3;9057:13;9013:63;:::i;:::-;9006:70;;9099:60;9152:6;9099:60;:::i;:::-;9089:70;;8945:224;8932:1;8929;8925:9;8920:14;;8885:284;;;8889:14;9185:3;9178:10;;8586:608;;;8462:732;;;;:::o;9200:114::-;9267:6;9301:5;9295:12;9285:22;;9200:114;;;:::o;9320:184::-;9419:11;9453:6;9448:3;9441:19;9493:4;9488:3;9484:14;9469:29;;9320:184;;;;:::o;9510:132::-;9577:4;9600:3;9592:11;;9630:4;9625:3;9621:14;9613:22;;9510:132;;;:::o;9648:108::-;9725:24;9743:5;9725:24;:::i;:::-;9720:3;9713:37;9648:108;;:::o;9762:179::-;9831:10;9852:46;9894:3;9886:6;9852:46;:::i;:::-;9930:4;9925:3;9921:14;9907:28;;9762:179;;;;:::o;9947:113::-;10017:4;10049;10044:3;10040:14;10032:22;;9947:113;;;:::o;10096:732::-;10215:3;10244:54;10292:5;10244:54;:::i;:::-;10314:86;10393:6;10388:3;10314:86;:::i;:::-;10307:93;;10424:56;10474:5;10424:56;:::i;:::-;10503:7;10534:1;10519:284;10544:6;10541:1;10538:13;10519:284;;;10620:6;10614:13;10647:63;10706:3;10691:13;10647:63;:::i;:::-;10640:70;;10733:60;10786:6;10733:60;:::i;:::-;10723:70;;10579:224;10566:1;10563;10559:9;10554:14;;10519:284;;;10523:14;10819:3;10812:10;;10220:608;;;10096:732;;;;:::o;10834:124::-;10911:6;10945:5;10939:12;10929:22;;10834:124;;;:::o;10964:194::-;11073:11;11107:6;11102:3;11095:19;11147:4;11142:3;11138:14;11123:29;;10964:194;;;;:::o;11164:142::-;11241:4;11264:3;11256:11;;11294:4;11289:3;11285:14;11277:22;;11164:142;;;:::o;11312:99::-;11364:6;11398:5;11392:12;11382:22;;11312:99;;;:::o;11417:159::-;11491:11;11525:6;11520:3;11513:19;11565:4;11560:3;11556:14;11541:29;;11417:159;;;;:::o;11582:246::-;11663:1;11673:113;11687:6;11684:1;11681:13;11673:113;;;11772:1;11767:3;11763:11;11757:18;11753:1;11748:3;11744:11;11737:39;11709:2;11706:1;11702:10;11697:15;;11673:113;;;11820:1;11811:6;11806:3;11802:16;11795:27;11644:184;11582:246;;;:::o;11834:357::-;11912:3;11940:39;11973:5;11940:39;:::i;:::-;11995:61;12049:6;12044:3;11995:61;:::i;:::-;11988:68;;12065:65;12123:6;12118:3;12111:4;12104:5;12100:16;12065:65;:::i;:::-;12155:29;12177:6;12155:29;:::i;:::-;12150:3;12146:39;12139:46;;11916:275;11834:357;;;;:::o;12197:196::-;12286:10;12321:66;12383:3;12375:6;12321:66;:::i;:::-;12307:80;;12197:196;;;;:::o;12399:123::-;12479:4;12511;12506:3;12502:14;12494:22;;12399:123;;;:::o;12556:991::-;12695:3;12724:64;12782:5;12724:64;:::i;:::-;12804:96;12893:6;12888:3;12804:96;:::i;:::-;12797:103;;12926:3;12971:4;12963:6;12959:17;12954:3;12950:27;13001:66;13061:5;13001:66;:::i;:::-;13090:7;13121:1;13106:396;13131:6;13128:1;13125:13;13106:396;;;13202:9;13196:4;13192:20;13187:3;13180:33;13253:6;13247:13;13281:84;13360:4;13345:13;13281:84;:::i;:::-;13273:92;;13388:70;13451:6;13388:70;:::i;:::-;13378:80;;13487:4;13482:3;13478:14;13471:21;;13166:336;13153:1;13150;13146:9;13141:14;;13106:396;;;13110:14;13518:4;13511:11;;13538:3;13531:10;;12700:847;;;;;12556:991;;;;:::o;13553:1983::-;14184:4;14222:3;14211:9;14207:19;14199:27;;14272:9;14266:4;14262:20;14258:1;14247:9;14243:17;14236:47;14300:108;14403:4;14394:6;14300:108;:::i;:::-;14292:116;;14455:9;14449:4;14445:20;14440:2;14429:9;14425:18;14418:48;14483:108;14586:4;14577:6;14483:108;:::i;:::-;14475:116;;14638:9;14632:4;14628:20;14623:2;14612:9;14608:18;14601:48;14666:108;14769:4;14760:6;14666:108;:::i;:::-;14658:116;;14821:9;14815:4;14811:20;14806:2;14795:9;14791:18;14784:48;14849:108;14952:4;14943:6;14849:108;:::i;:::-;14841:116;;15005:9;14999:4;14995:20;14989:3;14978:9;14974:19;14967:49;15033:108;15136:4;15127:6;15033:108;:::i;:::-;15025:116;;15189:9;15183:4;15179:20;15173:3;15162:9;15158:19;15151:49;15217:108;15320:4;15311:6;15217:108;:::i;:::-;15209:116;;15373:9;15367:4;15363:20;15357:3;15346:9;15342:19;15335:49;15401:128;15524:4;15515:6;15401:128;:::i;:::-;15393:136;;13553:1983;;;;;;;;;;:::o;15542:169::-;15626:11;15660:6;15655:3;15648:19;15700:4;15695:3;15691:14;15676:29;;15542:169;;;;:::o;15717:377::-;15805:3;15833:39;15866:5;15833:39;:::i;:::-;15888:71;15952:6;15947:3;15888:71;:::i;:::-;15881:78;;15968:65;16026:6;16021:3;16014:4;16007:5;16003:16;15968:65;:::i;:::-;16058:29;16080:6;16058:29;:::i;:::-;16053:3;16049:39;16042:46;;15809:285;15717:377;;;;:::o;16100:866::-;16353:4;16391:3;16380:9;16376:19;16368:27;;16405:71;16473:1;16462:9;16458:17;16449:6;16405:71;:::i;:::-;16486:72;16554:2;16543:9;16539:18;16530:6;16486:72;:::i;:::-;16568;16636:2;16625:9;16621:18;16612:6;16568:72;:::i;:::-;16650;16718:2;16707:9;16703:18;16694:6;16650:72;:::i;:::-;16732:73;16800:3;16789:9;16785:19;16776:6;16732:73;:::i;:::-;16853:9;16847:4;16843:20;16837:3;16826:9;16822:19;16815:49;16881:78;16954:4;16945:6;16881:78;:::i;:::-;16873:86;;16100:866;;;;;;;;;:::o;16972:60::-;17000:3;17021:5;17014:12;;16972:60;;;:::o;17038:142::-;17088:9;17121:53;17139:34;17148:24;17166:5;17148:24;:::i;:::-;17139:34;:::i;:::-;17121:53;:::i;:::-;17108:66;;17038:142;;;:::o;17186:126::-;17236:9;17269:37;17300:5;17269:37;:::i;:::-;17256:50;;17186:126;;;:::o;17318:140::-;17382:9;17415:37;17446:5;17415:37;:::i;:::-;17402:50;;17318:140;;;:::o;17464:159::-;17565:51;17610:5;17565:51;:::i;:::-;17560:3;17553:64;17464:159;;:::o;17629:250::-;17736:4;17774:2;17763:9;17759:18;17751:26;;17787:85;17869:1;17858:9;17854:17;17845:6;17787:85;:::i;:::-;17629:250;;;;:::o;17885:148::-;17957:9;17990:37;18021:5;17990:37;:::i;:::-;17977:50;;17885:148;;;:::o;18039:175::-;18148:59;18201:5;18148:59;:::i;:::-;18143:3;18136:72;18039:175;;:::o;18220:266::-;18335:4;18373:2;18362:9;18358:18;18350:26;;18386:93;18476:1;18465:9;18461:17;18452:6;18386:93;:::i;:::-;18220:266;;;;:::o;18492:143::-;18549:5;18580:6;18574:13;18565:22;;18596:33;18623:5;18596:33;:::i;:::-;18492:143;;;;:::o;18641:351::-;18711:6;18760:2;18748:9;18739:7;18735:23;18731:32;18728:119;;;18766:79;;:::i;:::-;18728:119;18886:1;18911:64;18967:7;18958:6;18947:9;18943:22;18911:64;:::i;:::-;18901:74;;18857:128;18641:351;;;;:::o;18998:172::-;19138:24;19134:1;19126:6;19122:14;19115:48;18998:172;:::o;19176:366::-;19318:3;19339:67;19403:2;19398:3;19339:67;:::i;:::-;19332:74;;19415:93;19504:3;19415:93;:::i;:::-;19533:2;19528:3;19524:12;19517:19;;19176:366;;;:::o;19548:419::-;19714:4;19752:2;19741:9;19737:18;19729:26;;19801:9;19795:4;19791:20;19787:1;19776:9;19772:17;19765:47;19829:131;19955:4;19829:131;:::i;:::-;19821:139;;19548:419;;;:::o;19973:172::-;20113:24;20109:1;20101:6;20097:14;20090:48;19973:172;:::o;20151:366::-;20293:3;20314:67;20378:2;20373:3;20314:67;:::i;:::-;20307:74;;20390:93;20479:3;20390:93;:::i;:::-;20508:2;20503:3;20499:12;20492:19;;20151:366;;;:::o;20523:419::-;20689:4;20727:2;20716:9;20712:18;20704:26;;20776:9;20770:4;20766:20;20762:1;20751:9;20747:17;20740:47;20804:131;20930:4;20804:131;:::i;:::-;20796:139;;20523:419;;;:::o;20948:105::-;20984:7;21024:22;21017:5;21013:34;21002:45;;20948:105;;;:::o;21059:120::-;21131:23;21148:5;21131:23;:::i;:::-;21124:5;21121:34;21111:62;;21169:1;21166;21159:12;21111:62;21059:120;:::o;21185:141::-;21241:5;21272:6;21266:13;21257:22;;21288:32;21314:5;21288:32;:::i;:::-;21185:141;;;;:::o;21332:76::-;21368:7;21397:5;21386:16;;21332:76;;;:::o;21414:120::-;21486:23;21503:5;21486:23;:::i;:::-;21479:5;21476:34;21466:62;;21524:1;21521;21514:12;21466:62;21414:120;:::o;21540:141::-;21596:5;21627:6;21621:13;21612:22;;21643:32;21669:5;21643:32;:::i;:::-;21540:141;;;;:::o;21687:971::-;21790:6;21798;21806;21814;21822;21871:3;21859:9;21850:7;21846:23;21842:33;21839:120;;;21878:79;;:::i;:::-;21839:120;21998:1;22023:63;22078:7;22069:6;22058:9;22054:22;22023:63;:::i;:::-;22013:73;;21969:127;22135:2;22161:63;22216:7;22207:6;22196:9;22192:22;22161:63;:::i;:::-;22151:73;;22106:128;22273:2;22299:64;22355:7;22346:6;22335:9;22331:22;22299:64;:::i;:::-;22289:74;;22244:129;22412:2;22438:64;22494:7;22485:6;22474:9;22470:22;22438:64;:::i;:::-;22428:74;;22383:129;22551:3;22578:63;22633:7;22624:6;22613:9;22609:22;22578:63;:::i;:::-;22568:73;;22522:129;21687:971;;;;;;;;:::o;22664:163::-;22804:15;22800:1;22792:6;22788:14;22781:39;22664:163;:::o;22833:366::-;22975:3;22996:67;23060:2;23055:3;22996:67;:::i;:::-;22989:74;;23072:93;23161:3;23072:93;:::i;:::-;23190:2;23185:3;23181:12;23174:19;;22833:366;;;:::o;23205:419::-;23371:4;23409:2;23398:9;23394:18;23386:26;;23458:9;23452:4;23448:20;23444:1;23433:9;23429:17;23422:47;23486:131;23612:4;23486:131;:::i;:::-;23478:139;;23205:419;;;:::o;23630:180::-;23678:77;23675:1;23668:88;23775:4;23772:1;23765:15;23799:4;23796:1;23789:15;23816:556;23855:7;23878:19;23895:1;23878:19;:::i;:::-;23873:24;;23911:19;23928:1;23911:19;:::i;:::-;23906:24;;23965:1;23962;23958:9;23987:29;24004:11;23987:29;:::i;:::-;23976:40;;24074:66;24071:1;24068:73;24064:1;24061;24057:9;24053:89;24050:115;;;24145:18;;:::i;:::-;24050:115;24315:1;24306:7;24301:16;24298:1;24295:23;24275:1;24268:9;24248:84;24225:140;;24345:18;;:::i;:::-;24225:140;23863:509;23816:556;;;;:::o;24378:166::-;24518:18;24514:1;24506:6;24502:14;24495:42;24378:166;:::o;24550:366::-;24692:3;24713:67;24777:2;24772:3;24713:67;:::i;:::-;24706:74;;24789:93;24878:3;24789:93;:::i;:::-;24907:2;24902:3;24898:12;24891:19;;24550:366;;;:::o;24922:419::-;25088:4;25126:2;25115:9;25111:18;25103:26;;25175:9;25169:4;25165:20;25161:1;25150:9;25146:17;25139:47;25203:131;25329:4;25203:131;:::i;:::-;25195:139;;24922:419;;;:::o;25347:170::-;25487:22;25483:1;25475:6;25471:14;25464:46;25347:170;:::o;25523:366::-;25665:3;25686:67;25750:2;25745:3;25686:67;:::i;:::-;25679:74;;25762:93;25851:3;25762:93;:::i;:::-;25880:2;25875:3;25871:12;25864:19;;25523:366;;;:::o;25895:419::-;26061:4;26099:2;26088:9;26084:18;26076:26;;26148:9;26142:4;26138:20;26134:1;26123:9;26119:17;26112:47;26176:131;26302:4;26176:131;:::i;:::-;26168:139;;25895:419;;;:::o;26320:166::-;26460:18;26456:1;26448:6;26444:14;26437:42;26320:166;:::o;26492:366::-;26634:3;26655:67;26719:2;26714:3;26655:67;:::i;:::-;26648:74;;26731:93;26820:3;26731:93;:::i;:::-;26849:2;26844:3;26840:12;26833:19;;26492:366;;;:::o;26864:419::-;27030:4;27068:2;27057:9;27053:18;27045:26;;27117:9;27111:4;27107:20;27103:1;27092:9;27088:17;27081:47;27145:131;27271:4;27145:131;:::i;:::-;27137:139;;26864:419;;;:::o;27289:162::-;27429:14;27425:1;27417:6;27413:14;27406:38;27289:162;:::o;27457:366::-;27599:3;27620:67;27684:2;27679:3;27620:67;:::i;:::-;27613:74;;27696:93;27785:3;27696:93;:::i;:::-;27814:2;27809:3;27805:12;27798:19;;27457:366;;;:::o;27829:419::-;27995:4;28033:2;28022:9;28018:18;28010:26;;28082:9;28076:4;28072:20;28068:1;28057:9;28053:17;28046:47;28110:131;28236:4;28110:131;:::i;:::-;28102:139;;27829:419;;;:::o;28254:227::-;28394:34;28390:1;28382:6;28378:14;28371:58;28463:10;28458:2;28450:6;28446:15;28439:35;28254:227;:::o;28487:366::-;28629:3;28650:67;28714:2;28709:3;28650:67;:::i;:::-;28643:74;;28726:93;28815:3;28726:93;:::i;:::-;28844:2;28839:3;28835:12;28828:19;;28487:366;;;:::o;28859:419::-;29025:4;29063:2;29052:9;29048:18;29040:26;;29112:9;29106:4;29102:20;29098:1;29087:9;29083:17;29076:47;29140:131;29266:4;29140:131;:::i;:::-;29132:139;;28859:419;;;:::o;29284:172::-;29424:24;29420:1;29412:6;29408:14;29401:48;29284:172;:::o;29462:366::-;29604:3;29625:67;29689:2;29684:3;29625:67;:::i;:::-;29618:74;;29701:93;29790:3;29701:93;:::i;:::-;29819:2;29814:3;29810:12;29803:19;;29462:366;;;:::o;29834:419::-;30000:4;30038:2;30027:9;30023:18;30015:26;;30087:9;30081:4;30077:20;30073:1;30062:9;30058:17;30051:47;30115:131;30241:4;30115:131;:::i;:::-;30107:139;;29834:419;;;:::o;30259:171::-;30399:23;30395:1;30387:6;30383:14;30376:47;30259:171;:::o;30436:366::-;30578:3;30599:67;30663:2;30658:3;30599:67;:::i;:::-;30592:74;;30675:93;30764:3;30675:93;:::i;:::-;30793:2;30788:3;30784:12;30777:19;;30436:366;;;:::o;30808:419::-;30974:4;31012:2;31001:9;30997:18;30989:26;;31061:9;31055:4;31051:20;31047:1;31036:9;31032:17;31025:47;31089:131;31215:4;31089:131;:::i;:::-;31081:139;;30808:419;;;:::o;31233:180::-;31281:77;31278:1;31271:88;31378:4;31375:1;31368:15;31402:4;31399:1;31392:15;31419:320;31463:6;31500:1;31494:4;31490:12;31480:22;;31547:1;31541:4;31537:12;31568:18;31558:81;;31624:4;31616:6;31612:17;31602:27;;31558:81;31686:2;31678:6;31675:14;31655:18;31652:38;31649:84;;31705:18;;:::i;:::-;31649:84;31470:269;31419:320;;;:::o;31745:141::-;31794:4;31817:3;31809:11;;31840:3;31837:1;31830:14;31874:4;31871:1;31861:18;31853:26;;31745:141;;;:::o;31892:93::-;31929:6;31976:2;31971;31964:5;31960:14;31956:23;31946:33;;31892:93;;;:::o;31991:107::-;32035:8;32085:5;32079:4;32075:16;32054:37;;31991:107;;;;:::o;32104:393::-;32173:6;32223:1;32211:10;32207:18;32246:97;32276:66;32265:9;32246:97;:::i;:::-;32364:39;32394:8;32383:9;32364:39;:::i;:::-;32352:51;;32436:4;32432:9;32425:5;32421:21;32412:30;;32485:4;32475:8;32471:19;32464:5;32461:30;32451:40;;32180:317;;32104:393;;;;;:::o;32503:142::-;32553:9;32586:53;32604:34;32613:24;32631:5;32613:24;:::i;:::-;32604:34;:::i;:::-;32586:53;:::i;:::-;32573:66;;32503:142;;;:::o;32651:75::-;32694:3;32715:5;32708:12;;32651:75;;;:::o;32732:269::-;32842:39;32873:7;32842:39;:::i;:::-;32903:91;32952:41;32976:16;32952:41;:::i;:::-;32944:6;32937:4;32931:11;32903:91;:::i;:::-;32897:4;32890:105;32808:193;32732:269;;;:::o;33007:73::-;33052:3;33007:73;:::o;33086:189::-;33163:32;;:::i;:::-;33204:65;33262:6;33254;33248:4;33204:65;:::i;:::-;33139:136;33086:189;;:::o;33281:186::-;33341:120;33358:3;33351:5;33348:14;33341:120;;;33412:39;33449:1;33442:5;33412:39;:::i;:::-;33385:1;33378:5;33374:13;33365:22;;33341:120;;;33281:186;;:::o;33473:543::-;33574:2;33569:3;33566:11;33563:446;;;33608:38;33640:5;33608:38;:::i;:::-;33692:29;33710:10;33692:29;:::i;:::-;33682:8;33678:44;33875:2;33863:10;33860:18;33857:49;;;33896:8;33881:23;;33857:49;33919:80;33975:22;33993:3;33975:22;:::i;:::-;33965:8;33961:37;33948:11;33919:80;:::i;:::-;33578:431;;33563:446;33473:543;;;:::o;34022:117::-;34076:8;34126:5;34120:4;34116:16;34095:37;;34022:117;;;;:::o;34145:169::-;34189:6;34222:51;34270:1;34266:6;34258:5;34255:1;34251:13;34222:51;:::i;:::-;34218:56;34303:4;34297;34293:15;34283:25;;34196:118;34145:169;;;;:::o;34319:295::-;34395:4;34541:29;34566:3;34560:4;34541:29;:::i;:::-;34533:37;;34603:3;34600:1;34596:11;34590:4;34587:21;34579:29;;34319:295;;;;:::o;34619:1395::-;34736:37;34769:3;34736:37;:::i;:::-;34838:18;34830:6;34827:30;34824:56;;;34860:18;;:::i;:::-;34824:56;34904:38;34936:4;34930:11;34904:38;:::i;:::-;34989:67;35049:6;35041;35035:4;34989:67;:::i;:::-;35083:1;35107:4;35094:17;;35139:2;35131:6;35128:14;35156:1;35151:618;;;;35813:1;35830:6;35827:77;;;35879:9;35874:3;35870:19;35864:26;35855:35;;35827:77;35930:67;35990:6;35983:5;35930:67;:::i;:::-;35924:4;35917:81;35786:222;35121:887;;35151:618;35203:4;35199:9;35191:6;35187:22;35237:37;35269:4;35237:37;:::i;:::-;35296:1;35310:208;35324:7;35321:1;35318:14;35310:208;;;35403:9;35398:3;35394:19;35388:26;35380:6;35373:42;35454:1;35446:6;35442:14;35432:24;;35501:2;35490:9;35486:18;35473:31;;35347:4;35344:1;35340:12;35335:17;;35310:208;;;35546:6;35537:7;35534:19;35531:179;;;35604:9;35599:3;35595:19;35589:26;35647:48;35689:4;35681:6;35677:17;35666:9;35647:48;:::i;:::-;35639:6;35632:64;35554:156;35531:179;35756:1;35752;35744:6;35740:14;35736:22;35730:4;35723:36;35158:611;;;35121:887;;34711:1303;;;34619:1395;;:::o;36020:169::-;36160:21;36156:1;36148:6;36144:14;36137:45;36020:169;:::o;36195:366::-;36337:3;36358:67;36422:2;36417:3;36358:67;:::i;:::-;36351:74;;36434:93;36523:3;36434:93;:::i;:::-;36552:2;36547:3;36543:12;36536:19;;36195:366;;;:::o;36567:419::-;36733:4;36771:2;36760:9;36756:18;36748:26;;36820:9;36814:4;36810:20;36806:1;36795:9;36791:17;36784:47;36848:131;36974:4;36848:131;:::i;:::-;36840:139;;36567:419;;;:::o;36992:174::-;37132:26;37128:1;37120:6;37116:14;37109:50;36992:174;:::o;37172:366::-;37314:3;37335:67;37399:2;37394:3;37335:67;:::i;:::-;37328:74;;37411:93;37500:3;37411:93;:::i;:::-;37529:2;37524:3;37520:12;37513:19;;37172:366;;;:::o;37544:419::-;37710:4;37748:2;37737:9;37733:18;37725:26;;37797:9;37791:4;37787:20;37783:1;37772:9;37768:17;37761:47;37825:131;37951:4;37825:131;:::i;:::-;37817:139;;37544:419;;;:::o;37969:177::-;38109:29;38105:1;38097:6;38093:14;38086:53;37969:177;:::o;38152:366::-;38294:3;38315:67;38379:2;38374:3;38315:67;:::i;:::-;38308:74;;38391:93;38480:3;38391:93;:::i;:::-;38509:2;38504:3;38500:12;38493:19;;38152:366;;;:::o;38524:419::-;38690:4;38728:2;38717:9;38713:18;38705:26;;38777:9;38771:4;38767:20;38763:1;38752:9;38748:17;38741:47;38805:131;38931:4;38805:131;:::i;:::-;38797:139;;38524:419;;;:::o;38949:191::-;38989:3;39008:20;39026:1;39008:20;:::i;:::-;39003:25;;39042:20;39060:1;39042:20;:::i;:::-;39037:25;;39085:1;39082;39078:9;39071:16;;39106:3;39103:1;39100:10;39097:36;;;39113:18;;:::i;:::-;39097:36;38949:191;;;;:::o;39146:410::-;39186:7;39209:20;39227:1;39209:20;:::i;:::-;39204:25;;39243:20;39261:1;39243:20;:::i;:::-;39238:25;;39298:1;39295;39291:9;39320:30;39338:11;39320:30;:::i;:::-;39309:41;;39499:1;39490:7;39486:15;39483:1;39480:22;39460:1;39453:9;39433:83;39410:139;;39529:18;;:::i;:::-;39410:139;39194:362;39146:410;;;;:::o;39586:831::-;39671:3;39708:5;39702:12;39737:36;39763:9;39737:36;:::i;:::-;39789:71;39853:6;39848:3;39789:71;:::i;:::-;39782:78;;39891:1;39880:9;39876:17;39907:1;39902:164;;;;40080:1;40075:336;;;;39869:542;;39902:164;39986:4;39982:9;39971;39967:25;39962:3;39955:38;40046:6;40039:14;40032:22;40026:4;40022:33;40017:3;40013:43;40006:50;;39902:164;;40075:336;40142:38;40174:5;40142:38;:::i;:::-;40202:1;40216:154;40230:6;40227:1;40224:13;40216:154;;;40304:7;40298:14;40294:1;40289:3;40285:11;40278:35;40354:1;40345:7;40341:15;40330:26;;40252:4;40249:1;40245:12;40240:17;;40216:154;;;40399:1;40394:3;40390:11;40383:18;;40082:329;;39869:542;;39675:742;;39586:831;;;;:::o;40423:417::-;40561:4;40599:2;40588:9;40584:18;40576:26;;40612:71;40680:1;40669:9;40665:17;40656:6;40612:71;:::i;:::-;40730:9;40724:4;40720:20;40715:2;40704:9;40700:18;40693:48;40758:75;40828:4;40819:6;40758:75;:::i;:::-;40750:83;;40423:417;;;;;:::o;40846:180::-;40894:77;40891:1;40884:88;40991:4;40988:1;40981:15;41015:4;41012:1;41005:15;41032:233;41071:3;41094:24;41112:5;41094:24;:::i;:::-;41085:33;;41140:66;41133:5;41130:77;41127:103;;41210:18;;:::i;:::-;41127:103;41257:1;41250:5;41246:13;41239:20;;41032:233;;;:::o;41271:332::-;41392:4;41430:2;41419:9;41415:18;41407:26;;41443:71;41511:1;41500:9;41496:17;41487:6;41443:71;:::i;:::-;41524:72;41592:2;41581:9;41577:18;41568:6;41524:72;:::i;:::-;41271:332;;;;;:::o;41609:176::-;41749:28;41745:1;41737:6;41733:14;41726:52;41609:176;:::o;41791:366::-;41933:3;41954:67;42018:2;42013:3;41954:67;:::i;:::-;41947:74;;42030:93;42119:3;42030:93;:::i;:::-;42148:2;42143:3;42139:12;42132:19;;41791:366;;;:::o;42163:419::-;42329:4;42367:2;42356:9;42352:18;42344:26;;42416:9;42410:4;42406:20;42402:1;42391:9;42387:17;42380:47;42444:131;42570:4;42444:131;:::i;:::-;42436:139;;42163:419;;;:::o;42588:154::-;42728:6;42724:1;42716:6;42712:14;42705:30;42588:154;:::o;42748:365::-;42890:3;42911:66;42975:1;42970:3;42911:66;:::i;:::-;42904:73;;42986:93;43075:3;42986:93;:::i;:::-;43104:2;43099:3;43095:12;43088:19;;42748:365;;;:::o;43119:529::-;43313:4;43351:2;43340:9;43336:18;43328:26;;43364:71;43432:1;43421:9;43417:17;43408:6;43364:71;:::i;:::-;43482:9;43476:4;43472:20;43467:2;43456:9;43452:18;43445:48;43510:131;43636:4;43510:131;:::i;:::-;43502:139;;43119:529;;;;:::o;43654:180::-;43702:77;43699:1;43692:88;43799:4;43796:1;43789:15;43823:4;43820:1;43813:15;43840:185;43880:1;43897:20;43915:1;43897:20;:::i;:::-;43892:25;;43931:20;43949:1;43931:20;:::i;:::-;43926:25;;43970:1;43960:35;;43975:18;;:::i;:::-;43960:35;44017:1;44014;44010:9;44005:14;;43840:185;;;;:::o;44031:181::-;44171:33;44167:1;44159:6;44155:14;44148:57;44031:181;:::o;44218:366::-;44360:3;44381:67;44445:2;44440:3;44381:67;:::i;:::-;44374:74;;44457:93;44546:3;44457:93;:::i;:::-;44575:2;44570:3;44566:12;44559:19;;44218:366;;;:::o;44590:419::-;44756:4;44794:2;44783:9;44779:18;44771:26;;44843:9;44837:4;44833:20;44829:1;44818:9;44814:17;44807:47;44871:131;44997:4;44871:131;:::i;:::-;44863:139;;44590:419;;;:::o;45015:332::-;45136:4;45174:2;45163:9;45159:18;45151:26;;45187:71;45255:1;45244:9;45240:17;45231:6;45187:71;:::i;:::-;45268:72;45336:2;45325:9;45321:18;45312:6;45268:72;:::i;:::-;45015:332;;;;;:::o;45353:170::-;45493:22;45489:1;45481:6;45477:14;45470:46;45353:170;:::o;45529:366::-;45671:3;45692:67;45756:2;45751:3;45692:67;:::i;:::-;45685:74;;45768:93;45857:3;45768:93;:::i;:::-;45886:2;45881:3;45877:12;45870:19;;45529:366;;;:::o;45901:419::-;46067:4;46105:2;46094:9;46090:18;46082:26;;46154:9;46148:4;46144:20;46140:1;46129:9;46125:17;46118:47;46182:131;46308:4;46182:131;:::i;:::-;46174:139;;45901:419;;;:::o;46326:194::-;46366:4;46386:20;46404:1;46386:20;:::i;:::-;46381:25;;46420:20;46438:1;46420:20;:::i;:::-;46415:25;;46464:1;46461;46457:9;46449:17;;46488:1;46482:4;46479:11;46476:37;;;46493:18;;:::i;:::-;46476:37;46326:194;;;;:::o;46526:180::-;46574:77;46571:1;46564:88;46671:4;46668:1;46661:15;46695:4;46692:1;46685:15;46712:442;46861:4;46899:2;46888:9;46884:18;46876:26;;46912:71;46980:1;46969:9;46965:17;46956:6;46912:71;:::i;:::-;46993:72;47061:2;47050:9;47046:18;47037:6;46993:72;:::i;:::-;47075;47143:2;47132:9;47128:18;47119:6;47075:72;:::i;:::-;46712:442;;;;;;:::o;47160:116::-;47230:21;47245:5;47230:21;:::i;:::-;47223:5;47220:32;47210:60;;47266:1;47263;47256:12;47210:60;47160:116;:::o;47282:137::-;47336:5;47367:6;47361:13;47352:22;;47383:30;47407:5;47383:30;:::i;:::-;47282:137;;;;:::o;47425:345::-;47492:6;47541:2;47529:9;47520:7;47516:23;47512:32;47509:119;;;47547:79;;:::i;:::-;47509:119;47667:1;47692:61;47745:7;47736:6;47725:9;47721:22;47692:61;:::i;:::-;47682:71;;47638:125;47425:345;;;;:::o;47776:173::-;47916:25;47912:1;47904:6;47900:14;47893:49;47776:173;:::o;47955:366::-;48097:3;48118:67;48182:2;48177:3;48118:67;:::i;:::-;48111:74;;48194:93;48283:3;48194:93;:::i;:::-;48312:2;48307:3;48303:12;48296:19;;47955:366;;;:::o;48327:419::-;48493:4;48531:2;48520:9;48516:18;48508:26;;48580:9;48574:4;48570:20;48566:1;48555:9;48551:17;48544:47;48608:131;48734:4;48608:131;:::i;:::-;48600:139;;48327:419;;;:::o;48752:98::-;48803:6;48837:5;48831:12;48821:22;;48752:98;;;:::o;48856:147::-;48957:11;48994:3;48979:18;;48856:147;;;;:::o;49009:386::-;49113:3;49141:38;49173:5;49141:38;:::i;:::-;49195:88;49276:6;49271:3;49195:88;:::i;:::-;49188:95;;49292:65;49350:6;49345:3;49338:4;49331:5;49327:16;49292:65;:::i;:::-;49382:6;49377:3;49373:16;49366:23;;49117:278;49009:386;;;;:::o;49401:271::-;49531:3;49553:93;49642:3;49633:6;49553:93;:::i;:::-;49546:100;;49663:3;49656:10;;49401:271;;;;:::o
Swarm Source
ipfs://4e6164d767fac9f9ff7b2190b47fe87e5dd182f9a76eb1622465980ac0bc0b84
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $1 | 5 | $5 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.