More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,165 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Claim Lock | 19942238 | 34 days ago | IN | 0 ETH | 0.00030873 | ||||
Claim Lock | 19942235 | 34 days ago | IN | 0 ETH | 0.00160872 | ||||
Claim Lock | 19849182 | 47 days ago | IN | 0 ETH | 0.00059929 | ||||
Un Lock Nft | 19838267 | 49 days ago | IN | 0 ETH | 0.00035339 | ||||
Claim Lock | 19815675 | 52 days ago | IN | 0 ETH | 0.00020492 | ||||
Claim Lock | 19815674 | 52 days ago | IN | 0 ETH | 0.00095102 | ||||
Un Lock Nft | 19798597 | 54 days ago | IN | 0 ETH | 0.00044468 | ||||
Claim Lock | 19798441 | 54 days ago | IN | 0 ETH | 0.00073588 | ||||
Claim Lock | 19774140 | 58 days ago | IN | 0 ETH | 0.00266819 | ||||
Claim Lock | 19774131 | 58 days ago | IN | 0 ETH | 0.00295059 | ||||
Claim Lock | 19684844 | 70 days ago | IN | 0 ETH | 0.00135192 | ||||
Claim Lock | 19619271 | 79 days ago | IN | 0 ETH | 0.00649727 | ||||
Claim Lock | 19558506 | 88 days ago | IN | 0 ETH | 0.00272738 | ||||
Claim Lock | 19499514 | 96 days ago | IN | 0 ETH | 0.00060643 | ||||
Claim Lock | 19499514 | 96 days ago | IN | 0 ETH | 0.00311362 | ||||
Withdraw ETH | 19482926 | 98 days ago | IN | 0 ETH | 0.00075463 | ||||
Un Lock Nft | 19482915 | 98 days ago | IN | 0 ETH | 0.00257065 | ||||
Claim Lock | 19403021 | 110 days ago | IN | 0 ETH | 0.00926989 | ||||
Claim Lock | 19357258 | 116 days ago | IN | 0 ETH | 0.0106843 | ||||
Claim Lock | 19307287 | 123 days ago | IN | 0 ETH | 0.00620254 | ||||
Claim Lock | 19303437 | 124 days ago | IN | 0 ETH | 0.00400624 | ||||
Claim Lock | 19258463 | 130 days ago | IN | 0 ETH | 0.00337748 | ||||
Claim Lock | 19257449 | 130 days ago | IN | 0 ETH | 0.00295951 | ||||
Claim Lock | 19246295 | 132 days ago | IN | 0 ETH | 0.00305909 | ||||
Claim Lock | 19242600 | 132 days ago | IN | 0 ETH | 0.00319153 |
Latest 11 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
18844288 | 188 days ago | 0.00011108 ETH | ||||
18232293 | 274 days ago | 0.00065824 ETH | ||||
17450707 | 383 days ago | 0.00092434 ETH | ||||
17061571 | 438 days ago | 0.00030267 ETH | ||||
16388030 | 533 days ago | 0.00007145 ETH | ||||
16319761 | 542 days ago | 0.00011982 ETH | ||||
16188142 | 561 days ago | 0.00619124 ETH | ||||
16158153 | 565 days ago | 0.00000191 ETH | ||||
16137354 | 568 days ago | 0.00001272 ETH | ||||
15158083 | 712 days ago | 0.02261904 ETH | ||||
15149860 | 713 days ago | 0.04166666 ETH |
Loading...
Loading
Contract Name:
NekoProfitShares
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-15 */ // Sources flattened with hardhat v2.10.0 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/security/[email protected] // OpenZeppelin Contracts v4.4.1 (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() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File contracts/NekoProfitShares.sol // SPDX-License-Identifier: MIT /// @author Mr D /// @title NEKO ProfitShares pragma solidity >=0.8.11; contract NekoProfitShares is Ownable, ReentrancyGuard, IERC721Receiver { using SafeERC20 for IERC20; IERC20 public token; IERC721 public nftContract; /* @dev team wallet should be a multi-sig wallet, used to transfer ETH out of the contract for a migration, or EOL of the contract */ address public teamWallet; // global flag to set staking and depositing active bool public isActive; // flag to turn off only deposits bool public depositsActive; // total points to allocate rewards uint256 public totalSharePoints; uint256 private lockDuration = 14 days; struct UserLock { uint256 tokenAmount; // total amount they currently have locked uint256 claimedAmount; // total amount they have withdrawn uint256 startTime; // start of the lock uint256 endTime; // when the lock ends } struct UserNftLock { uint256 nftId; // nft id they have staked uint256 amount; // amount they have locked uint256 startTime; // start of the lock uint256 endTime; // when the lock ends } struct NftInfo { uint256 lockDuration; // how long this nft needs is locked uint256 shareMultiplier; // multiply users shares by this number 1x = 10 uint256 lockedNfts; // how many nfts are currently locked for this ID bool isDisabled; // so we can hide ones we don't want } mapping(address => UserLock) public userLocks; mapping(address => UserNftLock) public userNftLocks; NftInfo public nftInfo; mapping(address => uint256) public currentMultiplier; mapping(address => uint256) public sharePoints; uint256 public constant MAX_MULTIPLIER = 30; // 3x //Multiplier to add some accuracy to profitPerShare uint256 private constant DistributionMultiplier = 2**64; //profit for each share a holder holds, a share equals a decimal. uint256 public profitPerShare; //the total reward distributed through the vault, for tracking purposes uint256 public totalShareRewards; //the total payout through the vault, for tracking purposes uint256 public totalPayouts; //Mapping of the already paid out(or missed) shares of each staker mapping(address => uint256) private alreadyPaidShares; //Mapping of shares that are reserved for payout mapping(address => uint256) private toBePaid; event Locked(address indexed account, uint256 unlock ); event WithdrawTokens(address indexed account, uint256 amount); event NftLocked(address indexed account, uint256 nftId, uint256 unlock); event ClaimNative(address claimAddress, uint256 amount); event NftUnLocked(address indexed account, uint256 nftId); constructor ( IERC20 _token, IERC721 _nftContract, address _teamWallet ) { token = _token; nftContract = _nftContract; teamWallet = _teamWallet; } function setToken(IERC20 _token) public onlyOwner { token = _token; } function setActive(bool _isActive) public onlyOwner { isActive = _isActive; } function setDepositsActive(bool _depositsActive) public onlyOwner { depositsActive = _depositsActive; } function setLockDuration(uint256 _lockDuration) public onlyOwner { lockDuration = _lockDuration; } function setNftContract( IERC721 _nftContract ) public onlyOwner { nftContract = _nftContract; } function setNftInfo( uint256 _lockDuration, uint256 _shareMultiplier) public onlyOwner { require(_shareMultiplier <= MAX_MULTIPLIER, 'Multiplier too high'); nftInfo.lockDuration = _lockDuration; nftInfo.shareMultiplier = _shareMultiplier; } function setNftDisabled(bool _isDisabled) public onlyOwner { nftInfo.isDisabled = _isDisabled; } function lock(uint256 _amount) public nonReentrant { require(isActive && depositsActive,'Not active'); require(token.balanceOf(msg.sender) >= _amount, 'Not enough tokens'); userLocks[msg.sender].tokenAmount = userLocks[msg.sender].tokenAmount + _amount; userLocks[msg.sender].startTime = block.timestamp; userLocks[msg.sender].endTime = block.timestamp + lockDuration; // move the tokens token.safeTransferFrom(address(msg.sender), address(this), _amount); // multiply existing shares by the multiplier uint256 shares = _amount; if(currentMultiplier[msg.sender] > 0) { shares = (_amount * currentMultiplier[msg.sender])/10; } // give the shares _addShares(msg.sender,shares); emit Locked( msg.sender,userLocks[msg.sender].endTime ); } function claimLock(uint256 _amount) public nonReentrant { require(isActive,'Not active'); require(userLocks[msg.sender].endTime <= block.timestamp,'Tokens Locked'); require(userLocks[msg.sender].tokenAmount > 0 && userLocks[msg.sender].tokenAmount >= _amount, 'Not enough tokens Locked'); userLocks[msg.sender].claimedAmount = userLocks[msg.sender].claimedAmount + _amount; userLocks[msg.sender].tokenAmount = userLocks[msg.sender].tokenAmount - _amount; // multiply existing shares by the multiplier uint256 shares = _amount; if(currentMultiplier[msg.sender] > 0) { shares = (_amount * currentMultiplier[msg.sender])/10; } // remove the shares _removeShares(msg.sender, shares); // move the tokens token.safeTransfer(address(msg.sender), _amount); emit WithdrawTokens(msg.sender, _amount); } // locks an NFT for the amount of time and give shares function lockNft(uint256 _nftId) public nonReentrant { require( isActive && depositsActive && nftInfo.shareMultiplier > 0 && !nftInfo.isDisabled && nftContract.ownerOf(_nftId) == msg.sender && userNftLocks[msg.sender].startTime == 0, "Can't Lock"); userNftLocks[msg.sender].nftId = _nftId; userNftLocks[msg.sender].startTime = block.timestamp; userNftLocks[msg.sender].endTime = block.timestamp + nftInfo.lockDuration; userNftLocks[msg.sender].amount = userNftLocks[msg.sender].amount + 1; // update the locked count nftInfo.lockedNfts = nftInfo.lockedNfts + 1; // assing the multiplier currentMultiplier[msg.sender] = nftInfo.shareMultiplier; uint256 currentShares = getShares(msg.sender); // multiply existing shares by the multiplier and give them the difference uint256 shares = ((currentShares * nftInfo.shareMultiplier)/10) - currentShares; _addShares(msg.sender, shares); // send the NFT nftContract.safeTransferFrom( msg.sender, address(this), _nftId); emit NftLocked( msg.sender, _nftId, userNftLocks[msg.sender].endTime); } // unlocks and claims an NFT if allowed and removes the shares function unLockNft(uint256 _nftId) public nonReentrant { require(isActive && userNftLocks[msg.sender].amount > 0, 'Not Locked'); require(block.timestamp >= userNftLocks[msg.sender].endTime, 'Still Locked'); uint256 currentShares = getShares(msg.sender); uint256 shares; if(currentMultiplier[msg.sender] > 0) { // divide existing shares by the multiplier and remove the difference shares = currentShares - ((currentShares*10)/currentMultiplier[msg.sender]); } // reset the multiplier currentMultiplier[msg.sender] = 0; // remove the shares _removeShares(msg.sender, shares); uint256 amount = userNftLocks[msg.sender].amount; delete userNftLocks[msg.sender]; // update the locked count nftInfo.lockedNfts = nftInfo.lockedNfts - amount; // send the NFT nftContract.safeTransferFrom( address(this), msg.sender, _nftId); emit NftUnLocked( msg.sender, _nftId); } //gets shares of an address function getShares(address _addr) public view returns(uint256){ return (sharePoints[_addr]); } //gets locks of an address function getLocked(address _addr) public view returns(uint256){ return userLocks[_addr].tokenAmount; } //Returns the not paid out dividends of an address in wei function getDividends(address _addr) public view returns (uint256){ return _getDividendsOf(_addr) + toBePaid[_addr]; } function claimNative() public nonReentrant { require(isActive,'Not active'); uint256 amount = getDividends(msg.sender); require(amount!=0,"=0"); //Substracts the amount from the dividends _updateClaimedDividends(msg.sender, amount); totalPayouts+=amount; (bool sent,) =msg.sender.call{value: (amount)}(""); require(sent,"withdraw failed"); emit ClaimNative(msg.sender,amount); } //adds Token to balances, adds new Native to the toBePaid mapping and resets staking function _addShares(address _addr, uint256 _amount) private { // the new amount of points uint256 newAmount = sharePoints[_addr] + _amount; // update the total points totalSharePoints+=_amount; //gets the payout before the change uint256 payment = _getDividendsOf(_addr); //resets dividends to 0 for newAmount alreadyPaidShares[_addr] = profitPerShare * newAmount; //adds dividends to the toBePaid mapping toBePaid[_addr]+=payment; //sets newBalance sharePoints[_addr]=newAmount; } //removes shares, adds Native to the toBePaid mapping and resets staking function _removeShares(address _addr, uint256 _amount) private { //the amount of token after transfer uint256 newAmount=sharePoints[_addr] - _amount; totalSharePoints -= _amount; //gets the payout before the change uint256 payment =_getDividendsOf(_addr); //sets newBalance sharePoints[_addr]=newAmount; //resets dividendss to 0 for newAmount alreadyPaidShares[_addr] = profitPerShare * sharePoints[_addr]; //adds dividendss to the toBePaid mapping toBePaid[_addr] += payment; } //gets the dividends of an address that aren't in the toBePaid mapping function _getDividendsOf(address _addr) private view returns (uint256) { uint256 fullPayout = profitPerShare * sharePoints[_addr]; //if excluded from staking or some error return 0 if(fullPayout<=alreadyPaidShares[_addr]) return 0; return (fullPayout - alreadyPaidShares[_addr])/DistributionMultiplier; } //adjust the profit share with the new amount function _updateProfitPerShare(uint256 _amount) private { totalShareRewards += _amount; if (totalSharePoints > 0) { //Increases profit per share based on current total shares profitPerShare += ((_amount * DistributionMultiplier)/totalSharePoints); } } //Substracts the amount from dividends, fails if amount exceeds dividends function _updateClaimedDividends(address _addr,uint256 _amount) private { uint256 newAmount = _getDividendsOf(_addr); //sets payout mapping to current amount alreadyPaidShares[_addr] = profitPerShare * sharePoints[_addr]; //the amount to be paid toBePaid[_addr]+=newAmount; toBePaid[_addr]-=_amount; } event OnProfitSharesReceive(address indexed sender, uint256 amount); receive() external payable { if(msg.value > 0 && totalSharePoints > 0){ _updateProfitPerShare(msg.value); } emit OnProfitSharesReceive(msg.sender, msg.value); } event TeamWalletChange(address oldTeamWallet, address newTeamWallet); function setTeamWallet(address _teamWallet) public { require(msg.sender == teamWallet,'Not allowed'); address prevWallet = teamWallet; teamWallet = _teamWallet; emit TeamWalletChange(prevWallet, _teamWallet); } // pull all the ETH out of the contract to the owner, needed for migrations/emergencies/EOL // the team wallet should be set to a multi-sig wallet event AdminEthWithdraw(address account, uint256 amount); function withdrawETH() public { require(msg.sender == teamWallet,'Not allowed'); uint256 amount = address(this).balance; (bool sent,) =address(owner()).call{value: (amount)}(""); require(sent,"withdraw failed"); emit AdminEthWithdraw(msg.sender, amount); } function onERC721Received(address operator, address, uint256, bytes calldata) external view returns(bytes4) { require(operator == address(this), "can not directly transfer"); return bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"contract IERC721","name":"_nftContract","type":"address"},{"internalType":"address","name":"_teamWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AdminEthWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"claimAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"unlock","type":"uint256"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unlock","type":"uint256"}],"name":"NftLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"NftUnLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OnProfitSharesReceive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldTeamWallet","type":"address"},{"indexed":false,"internalType":"address","name":"newTeamWallet","type":"address"}],"name":"TeamWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawTokens","type":"event"},{"inputs":[],"name":"MAX_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"claimLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"currentMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getLocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"lockNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nftContract","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftInfo","outputs":[{"internalType":"uint256","name":"lockDuration","type":"uint256"},{"internalType":"uint256","name":"shareMultiplier","type":"uint256"},{"internalType":"uint256","name":"lockedNfts","type":"uint256"},{"internalType":"bool","name":"isDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"profitPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_depositsActive","type":"bool"}],"name":"setDepositsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockDuration","type":"uint256"}],"name":"setLockDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"_nftContract","type":"address"}],"name":"setNftContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isDisabled","type":"bool"}],"name":"setNftDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockDuration","type":"uint256"},{"internalType":"uint256","name":"_shareMultiplier","type":"uint256"}],"name":"setNftInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamWallet","type":"address"}],"name":"setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sharePoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSharePoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShareRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"unLockNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLocks","outputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userNftLocks","outputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052621275006006553480156200001857600080fd5b506040516200450d3803806200450d83398181016040528101906200003e9190620002f1565b6200005e620000526200013160201b60201c565b6200013960201b60201c565b6001808190555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200034d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022f8262000202565b9050919050565b6000620002438262000222565b9050919050565b620002558162000236565b81146200026157600080fd5b50565b60008151905062000275816200024a565b92915050565b6000620002888262000222565b9050919050565b6200029a816200027b565b8114620002a657600080fd5b50565b600081519050620002ba816200028f565b92915050565b620002cb8162000222565b8114620002d757600080fd5b50565b600081519050620002eb81620002c0565b92915050565b6000806000606084860312156200030d576200030c620001fd565b5b60006200031d8682870162000264565b93505060206200033086828701620002a9565b92505060406200034386828701620002da565b9150509250925092565b6141b0806200035d6000396000f3fe6080604052600436106102135760003560e01c80638920f2c411610118578063cec8928c116100a0578063f04da65b1161006f578063f04da65b1461080a578063f275c0ce14610847578063f2fde38b14610872578063f48562301461089b578063fc0c546a146108b257610289565b8063cec8928c14610776578063d56d229d1461079f578063dd467064146107ca578063e086e5ec146107f357610289565b8063b553fe1e116100e7578063b553fe1e14610665578063bc22fd1b14610693578063c65fb04b146106d0578063c7514de21461070d578063c9a973581461074d57610289565b80638920f2c4146105bf5780638da5cb5b146105e8578063a98bc3c114610613578063acec338a1461063c57610289565b806341bbf57c1161019b57806352f5ad771161016a57806352f5ad77146104fe57806359927044146105275780635d6a618d14610552578063715018a61461057d5780638650e92a1461059457610289565b806341bbf57c146104325780634634d81c1461046f5780634dcbc739146104ac5780634eb665af146104d557610289565b80631525ff7d116101e25780631525ff7d1461035d57806322f3e2d41461038657806331149001146103b15780634089b170146103dc57806340fbbf781461040757610289565b80630259ef581461028e57806307377545146102ce578063144fa6d7146102f7578063150b7a021461032057610289565b366102895760003411801561022a57506000600554115b1561023957610238346108dd565b5b3373ffffffffffffffffffffffffffffffffffffffff167f6fa3129c3427fe3116695c8a76419550ec8cfe2b8ea978a4e588fb15241b838c3460405161027f9190612fd6565b60405180910390a2005b600080fd5b34801561029a57600080fd5b506102b560048036038101906102b09190613059565b61093f565b6040516102c59493929190613086565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613103565b61096f565b005b34801561030357600080fd5b5061031e6004803603810190610319919061316e565b610997565b005b34801561032c57600080fd5b506103476004803603810190610342919061322c565b6109e3565b60405161035491906132ef565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f9190613059565b610a7f565b005b34801561039257600080fd5b5061039b610bb4565b6040516103a89190613319565b60405180910390f35b3480156103bd57600080fd5b506103c6610bc7565b6040516103d39190612fd6565b60405180910390f35b3480156103e857600080fd5b506103f1610bcd565b6040516103fe9190612fd6565b60405180910390f35b34801561041357600080fd5b5061041c610bd3565b6040516104299190612fd6565b60405180910390f35b34801561043e57600080fd5b5061045960048036038101906104549190613059565b610bd9565b6040516104669190612fd6565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613059565b610bf1565b6040516104a39190612fd6565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613334565b610c4d565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190613334565b61119f565b005b34801561050a57600080fd5b506105256004803603810190610520919061339f565b6111b1565b005b34801561053357600080fd5b5061053c6111fd565b60405161054991906133db565b60405180910390f35b34801561055e57600080fd5b50610567611223565b6040516105749190612fd6565b60405180910390f35b34801561058957600080fd5b50610592611228565b005b3480156105a057600080fd5b506105a961123c565b6040516105b69190612fd6565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190613334565b611242565b005b3480156105f457600080fd5b506105fd6116b6565b60405161060a91906133db565b60405180910390f35b34801561061f57600080fd5b5061063a60048036038101906106359190613334565b6116df565b005b34801561064857600080fd5b50610663600480360381019061065e9190613103565b611b08565b005b34801561067157600080fd5b5061067a611b2d565b60405161068a94939291906133f6565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613059565b611b58565b6040516106c79190612fd6565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190613059565b611ba4565b6040516107049190612fd6565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190613059565b611bbc565b6040516107449493929190613086565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613103565b611bec565b005b34801561078257600080fd5b5061079d6004803603810190610798919061343b565b611c11565b005b3480156107ab57600080fd5b506107b4611c75565b6040516107c191906134da565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613334565b611c9b565b005b3480156107ff57600080fd5b506108086120f8565b005b34801561081657600080fd5b50610831600480360381019061082c9190613059565b61227d565b60405161083e9190612fd6565b60405180910390f35b34801561085357600080fd5b5061085c6122c6565b6040516108699190613319565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190613059565b6122d9565b005b3480156108a757600080fd5b506108b061235d565b005b3480156108be57600080fd5b506108c761255e565b6040516108d49190613516565b60405180910390f35b80601060008282546108ef9190613560565b925050819055506000600554111561093c57600554680100000000000000008261091991906135b6565b610923919061363f565b600f60008282546109349190613560565b925050819055505b50565b60076020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b610977612584565b80600960030160006101000a81548160ff02191690831515021790555050565b61099f612584565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60003073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a906136cd565b60405180910390fd5b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f905095945050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0690613739565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f9af38faf7802f8eedae816f2ecbc75160e774b4d08ff3fa4277096ffe52d2bc58183604051610ba8929190613759565b60405180910390a15050565b600460149054906101000a900460ff1681565b60055481565b60115481565b60105481565b600e6020528060005260406000206000915090505481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c3c83612602565b610c469190613560565b9050919050565b60026001541415610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a906137ce565b60405180910390fd5b6002600181905550600460149054906101000a900460ff168015610cc35750600460159054906101000a900460ff165b8015610cd457506000600960010154115b8015610cf05750600960030160009054906101000a900460ff16155b8015610dc257503373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610d699190612fd6565b602060405180830381865afa158015610d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610daa9190613803565b73ffffffffffffffffffffffffffffffffffffffff16145b8015610e1057506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154145b610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e469061387c565b60405180910390fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060096000015442610eee9190613560565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154610f839190613560565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506001600960020154610fdb9190613560565b600960020181905550600960010154600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006110383361227d565b9050600081600a6009600101548461105091906135b6565b61105a919061363f565b611064919061389c565b9050611070338261270c565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330866040518463ffffffff1660e01b81526004016110cf939291906138d0565b600060405180830381600087803b1580156110e957600080fd5b505af11580156110fd573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f5f2ba8f249a9bc781edba2d1ae02d0d3a87e35fa46b05873b0a7deff5c858a0584600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015460405161118b929190613907565b60405180910390a250506001808190555050565b6111a7612584565b8060068190555050565b6111b9612584565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e81565b611230612584565b61123a6000612872565b565b600f5481565b60026001541415611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f906137ce565b60405180910390fd5b6002600181905550600460149054906101000a900460ff166112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d69061397c565b60405180910390fd5b42600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541115611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b906139e8565b60405180910390fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541180156113f8575080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015410155b611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e90613a54565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546114859190613560565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611519919061389c565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555060008190506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561160657600a600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836115f991906135b6565b611603919061363f565b90505b6116103382612936565b61165d3383600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612adb9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c836040516116a39190612fd6565b60405180910390a2506001808190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60026001541415611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c906137ce565b60405180910390fd5b6002600181905550600460149054906101000a900460ff16801561178b57506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154115b6117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190613ac0565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015442101561184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184690613b2c565b60405180910390fd5b600061185a3361227d565b9050600080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561190a57600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a836118f291906135b6565b6118fc919061363f565b82611907919061389c565b90505b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119593382612936565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160009055600182016000905560028201600090556003820160009055505080600960020154611a13919061389c565b600960020181905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033876040518463ffffffff1660e01b8152600401611a7b939291906138d0565b600060405180830381600087803b158015611a9557600080fd5b505af1158015611aa9573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f5fc5b660d04a86970f88955f337ea24b9293dbdae1e744f39e121598560bb92f85604051611af39190612fd6565b60405180910390a25050506001808190555050565b611b10612584565b80600460146101000a81548160ff02191690831515021790555050565b60098060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600d6020528060005260406000206000915090505481565b60086020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b611bf4612584565b80600460156101000a81548160ff02191690831515021790555050565b611c19612584565b601e811115611c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5490613b98565b60405180910390fd5b81600960000181905550806009600101819055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026001541415611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd8906137ce565b60405180910390fd5b6002600181905550600460149054906101000a900460ff168015611d115750600460159054906101000a900460ff165b611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d479061397c565b60405180910390fd5b80600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611dac91906133db565b602060405180830381865afa158015611dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ded9190613bcd565b1015611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590613c46565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611e7c9190613560565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060065442611f179190613560565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550611fac333083600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b61909392919063ffffffff16565b60008190506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561205357600a600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361204691906135b6565b612050919061363f565b90505b61205d338261270c565b3373ffffffffffffffffffffffffffffffffffffffff167f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd60008600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546040516120e59190612fd6565b60405180910390a2506001808190555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f90613739565b60405180910390fd5b600047905060006121976116b6565b73ffffffffffffffffffffffffffffffffffffffff16826040516121ba90613c97565b60006040518083038185875af1925050503d80600081146121f7576040519150601f19603f3d011682016040523d82523d6000602084013e6121fc565b606091505b5050905080612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790613cf8565b60405180910390fd5b7fbe5820a007b9cafd2d9f9e7944f87cef04b1358e94b83249451fcdf5730d0f3c3383604051612271929190613d18565b60405180910390a15050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460159054906101000a900460ff1681565b6122e1612584565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234890613db3565b60405180910390fd5b61235a81612872565b50565b600260015414156123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a906137ce565b60405180910390fd5b6002600181905550600460149054906101000a900460ff166123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f19061397c565b60405180910390fd5b600061240533610bf1565b9050600081141561244b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244290613e1f565b60405180910390fd5b6124553382612bea565b80601160008282546124679190613560565b9250508190555060003373ffffffffffffffffffffffffffffffffffffffff168260405161249490613c97565b60006040518083038185875af1925050503d80600081146124d1576040519150601f19603f3d011682016040523d82523d6000602084013e6124d6565b606091505b505090508061251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190613cf8565b60405180910390fd5b7f71ef1bda272b61b452433fab6f7847cfd8d3e527aca53310782d4763e80e3235338360405161254b929190613d18565b60405180910390a1505060018081905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61258c612d38565b73ffffffffffffffffffffffffffffffffffffffff166125aa6116b6565b73ffffffffffffffffffffffffffffffffffffffff1614612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f790613e8b565b60405180910390fd5b565b600080600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f5461265291906135b6565b9050601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481116126a4576000915050612707565b68010000000000000000601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826126f9919061389c565b612703919061363f565b9150505b919050565b600081600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127599190613560565b9050816005600082825461276d9190613560565b92505081905550600061277f84612602565b905081600f5461278f91906135b6565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128219190613560565b9250508190555081600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612983919061389c565b90508160056000828254612997919061389c565b9250508190555060006129a984612602565b905081600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f54612a3c91906135b6565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ace9190613560565b9250508190555050505050565b612b5c8363a9059cbb60e01b8484604051602401612afa929190613d18565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d40565b505050565b612be4846323b872dd60e01b858585604051602401612b82939291906138d0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d40565b50505050565b6000612bf583612602565b9050600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f54612c4491906135b6565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cd69190613560565b9250508190555081601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d2c919061389c565b92505081905550505050565b600033905090565b6000612da2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612e079092919063ffffffff16565b9050600081511115612e025780806020019051810190612dc29190613ec0565b612e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df890613f5f565b60405180910390fd5b5b505050565b6060612e168484600085612e1f565b90509392505050565b606082471015612e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5b90613ff1565b60405180910390fd5b612e6d85612f33565b612eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea39061405d565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ed591906140ec565b60006040518083038185875af1925050503d8060008114612f12576040519150601f19603f3d011682016040523d82523d6000602084013e612f17565b606091505b5091509150612f27828286612f56565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315612f6657829050612fb6565b600083511115612f795782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fad9190614158565b60405180910390fd5b9392505050565b6000819050919050565b612fd081612fbd565b82525050565b6000602082019050612feb6000830184612fc7565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061302682612ffb565b9050919050565b6130368161301b565b811461304157600080fd5b50565b6000813590506130538161302d565b92915050565b60006020828403121561306f5761306e612ff1565b5b600061307d84828501613044565b91505092915050565b600060808201905061309b6000830187612fc7565b6130a86020830186612fc7565b6130b56040830185612fc7565b6130c26060830184612fc7565b95945050505050565b60008115159050919050565b6130e0816130cb565b81146130eb57600080fd5b50565b6000813590506130fd816130d7565b92915050565b60006020828403121561311957613118612ff1565b5b6000613127848285016130ee565b91505092915050565b600061313b8261301b565b9050919050565b61314b81613130565b811461315657600080fd5b50565b60008135905061316881613142565b92915050565b60006020828403121561318457613183612ff1565b5b600061319284828501613159565b91505092915050565b6131a481612fbd565b81146131af57600080fd5b50565b6000813590506131c18161319b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126131ec576131eb6131c7565b5b8235905067ffffffffffffffff811115613209576132086131cc565b5b602083019150836001820283011115613225576132246131d1565b5b9250929050565b60008060008060006080868803121561324857613247612ff1565b5b600061325688828901613044565b955050602061326788828901613044565b9450506040613278888289016131b2565b935050606086013567ffffffffffffffff81111561329957613298612ff6565b5b6132a5888289016131d6565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132e9816132b4565b82525050565b600060208201905061330460008301846132e0565b92915050565b613313816130cb565b82525050565b600060208201905061332e600083018461330a565b92915050565b60006020828403121561334a57613349612ff1565b5b6000613358848285016131b2565b91505092915050565b600061336c8261301b565b9050919050565b61337c81613361565b811461338757600080fd5b50565b60008135905061339981613373565b92915050565b6000602082840312156133b5576133b4612ff1565b5b60006133c38482850161338a565b91505092915050565b6133d58161301b565b82525050565b60006020820190506133f060008301846133cc565b92915050565b600060808201905061340b6000830187612fc7565b6134186020830186612fc7565b6134256040830185612fc7565b613432606083018461330a565b95945050505050565b6000806040838503121561345257613451612ff1565b5b6000613460858286016131b2565b9250506020613471858286016131b2565b9150509250929050565b6000819050919050565b60006134a061349b61349684612ffb565b61347b565b612ffb565b9050919050565b60006134b282613485565b9050919050565b60006134c4826134a7565b9050919050565b6134d4816134b9565b82525050565b60006020820190506134ef60008301846134cb565b92915050565b6000613500826134a7565b9050919050565b613510816134f5565b82525050565b600060208201905061352b6000830184613507565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061356b82612fbd565b915061357683612fbd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135ab576135aa613531565b5b828201905092915050565b60006135c182612fbd565b91506135cc83612fbd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561360557613604613531565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061364a82612fbd565b915061365583612fbd565b92508261366557613664613610565b5b828204905092915050565b600082825260208201905092915050565b7f63616e206e6f74206469726563746c79207472616e7366657200000000000000600082015250565b60006136b7601983613670565b91506136c282613681565b602082019050919050565b600060208201905081810360008301526136e6816136aa565b9050919050565b7f4e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b6000613723600b83613670565b915061372e826136ed565b602082019050919050565b6000602082019050818103600083015261375281613716565b9050919050565b600060408201905061376e60008301856133cc565b61377b60208301846133cc565b9392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006137b8601f83613670565b91506137c382613782565b602082019050919050565b600060208201905081810360008301526137e7816137ab565b9050919050565b6000815190506137fd8161302d565b92915050565b60006020828403121561381957613818612ff1565b5b6000613827848285016137ee565b91505092915050565b7f43616e2774204c6f636b00000000000000000000000000000000000000000000600082015250565b6000613866600a83613670565b915061387182613830565b602082019050919050565b6000602082019050818103600083015261389581613859565b9050919050565b60006138a782612fbd565b91506138b283612fbd565b9250828210156138c5576138c4613531565b5b828203905092915050565b60006060820190506138e560008301866133cc565b6138f260208301856133cc565b6138ff6040830184612fc7565b949350505050565b600060408201905061391c6000830185612fc7565b6139296020830184612fc7565b9392505050565b7f4e6f742061637469766500000000000000000000000000000000000000000000600082015250565b6000613966600a83613670565b915061397182613930565b602082019050919050565b6000602082019050818103600083015261399581613959565b9050919050565b7f546f6b656e73204c6f636b656400000000000000000000000000000000000000600082015250565b60006139d2600d83613670565b91506139dd8261399c565b602082019050919050565b60006020820190508181036000830152613a01816139c5565b9050919050565b7f4e6f7420656e6f75676820746f6b656e73204c6f636b65640000000000000000600082015250565b6000613a3e601883613670565b9150613a4982613a08565b602082019050919050565b60006020820190508181036000830152613a6d81613a31565b9050919050565b7f4e6f74204c6f636b656400000000000000000000000000000000000000000000600082015250565b6000613aaa600a83613670565b9150613ab582613a74565b602082019050919050565b60006020820190508181036000830152613ad981613a9d565b9050919050565b7f5374696c6c204c6f636b65640000000000000000000000000000000000000000600082015250565b6000613b16600c83613670565b9150613b2182613ae0565b602082019050919050565b60006020820190508181036000830152613b4581613b09565b9050919050565b7f4d756c7469706c69657220746f6f206869676800000000000000000000000000600082015250565b6000613b82601383613670565b9150613b8d82613b4c565b602082019050919050565b60006020820190508181036000830152613bb181613b75565b9050919050565b600081519050613bc78161319b565b92915050565b600060208284031215613be357613be2612ff1565b5b6000613bf184828501613bb8565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e73000000000000000000000000000000600082015250565b6000613c30601183613670565b9150613c3b82613bfa565b602082019050919050565b60006020820190508181036000830152613c5f81613c23565b9050919050565b600081905092915050565b50565b6000613c81600083613c66565b9150613c8c82613c71565b600082019050919050565b6000613ca282613c74565b9150819050919050565b7f7769746864726177206661696c65640000000000000000000000000000000000600082015250565b6000613ce2600f83613670565b9150613ced82613cac565b602082019050919050565b60006020820190508181036000830152613d1181613cd5565b9050919050565b6000604082019050613d2d60008301856133cc565b613d3a6020830184612fc7565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d9d602683613670565b9150613da882613d41565b604082019050919050565b60006020820190508181036000830152613dcc81613d90565b9050919050565b7f3d30000000000000000000000000000000000000000000000000000000000000600082015250565b6000613e09600283613670565b9150613e1482613dd3565b602082019050919050565b60006020820190508181036000830152613e3881613dfc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e75602083613670565b9150613e8082613e3f565b602082019050919050565b60006020820190508181036000830152613ea481613e68565b9050919050565b600081519050613eba816130d7565b92915050565b600060208284031215613ed657613ed5612ff1565b5b6000613ee484828501613eab565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613f49602a83613670565b9150613f5482613eed565b604082019050919050565b60006020820190508181036000830152613f7881613f3c565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000613fdb602683613670565b9150613fe682613f7f565b604082019050919050565b6000602082019050818103600083015261400a81613fce565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614047601d83613670565b915061405282614011565b602082019050919050565b600060208201905081810360008301526140768161403a565b9050919050565b600081519050919050565b60005b838110156140a657808201518184015260208101905061408b565b838111156140b5576000848401525b50505050565b60006140c68261407d565b6140d08185613c66565b93506140e0818560208601614088565b80840191505092915050565b60006140f882846140bb565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b600061412a82614103565b6141348185613670565b9350614144818560208601614088565b61414d8161410e565b840191505092915050565b60006020820190508181036000830152614172818461411f565b90509291505056fea26469706673582212200c3c3485409fe02a18b51e851af67e4ea4ada49c35608f340ba51ad79cb7d79c64736f6c634300080b00330000000000000000000000001e9d0bb190ac34492aa11b80d28c1c86487a341f000000000000000000000000826554269261bfc10af100c524231ed7e661d0fa00000000000000000000000051f0f6790dd7795bd8e7c0ab68854898eb1ff9b5
Deployed Bytecode
0x6080604052600436106102135760003560e01c80638920f2c411610118578063cec8928c116100a0578063f04da65b1161006f578063f04da65b1461080a578063f275c0ce14610847578063f2fde38b14610872578063f48562301461089b578063fc0c546a146108b257610289565b8063cec8928c14610776578063d56d229d1461079f578063dd467064146107ca578063e086e5ec146107f357610289565b8063b553fe1e116100e7578063b553fe1e14610665578063bc22fd1b14610693578063c65fb04b146106d0578063c7514de21461070d578063c9a973581461074d57610289565b80638920f2c4146105bf5780638da5cb5b146105e8578063a98bc3c114610613578063acec338a1461063c57610289565b806341bbf57c1161019b57806352f5ad771161016a57806352f5ad77146104fe57806359927044146105275780635d6a618d14610552578063715018a61461057d5780638650e92a1461059457610289565b806341bbf57c146104325780634634d81c1461046f5780634dcbc739146104ac5780634eb665af146104d557610289565b80631525ff7d116101e25780631525ff7d1461035d57806322f3e2d41461038657806331149001146103b15780634089b170146103dc57806340fbbf781461040757610289565b80630259ef581461028e57806307377545146102ce578063144fa6d7146102f7578063150b7a021461032057610289565b366102895760003411801561022a57506000600554115b1561023957610238346108dd565b5b3373ffffffffffffffffffffffffffffffffffffffff167f6fa3129c3427fe3116695c8a76419550ec8cfe2b8ea978a4e588fb15241b838c3460405161027f9190612fd6565b60405180910390a2005b600080fd5b34801561029a57600080fd5b506102b560048036038101906102b09190613059565b61093f565b6040516102c59493929190613086565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613103565b61096f565b005b34801561030357600080fd5b5061031e6004803603810190610319919061316e565b610997565b005b34801561032c57600080fd5b506103476004803603810190610342919061322c565b6109e3565b60405161035491906132ef565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f9190613059565b610a7f565b005b34801561039257600080fd5b5061039b610bb4565b6040516103a89190613319565b60405180910390f35b3480156103bd57600080fd5b506103c6610bc7565b6040516103d39190612fd6565b60405180910390f35b3480156103e857600080fd5b506103f1610bcd565b6040516103fe9190612fd6565b60405180910390f35b34801561041357600080fd5b5061041c610bd3565b6040516104299190612fd6565b60405180910390f35b34801561043e57600080fd5b5061045960048036038101906104549190613059565b610bd9565b6040516104669190612fd6565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613059565b610bf1565b6040516104a39190612fd6565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613334565b610c4d565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190613334565b61119f565b005b34801561050a57600080fd5b506105256004803603810190610520919061339f565b6111b1565b005b34801561053357600080fd5b5061053c6111fd565b60405161054991906133db565b60405180910390f35b34801561055e57600080fd5b50610567611223565b6040516105749190612fd6565b60405180910390f35b34801561058957600080fd5b50610592611228565b005b3480156105a057600080fd5b506105a961123c565b6040516105b69190612fd6565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190613334565b611242565b005b3480156105f457600080fd5b506105fd6116b6565b60405161060a91906133db565b60405180910390f35b34801561061f57600080fd5b5061063a60048036038101906106359190613334565b6116df565b005b34801561064857600080fd5b50610663600480360381019061065e9190613103565b611b08565b005b34801561067157600080fd5b5061067a611b2d565b60405161068a94939291906133f6565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613059565b611b58565b6040516106c79190612fd6565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190613059565b611ba4565b6040516107049190612fd6565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190613059565b611bbc565b6040516107449493929190613086565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613103565b611bec565b005b34801561078257600080fd5b5061079d6004803603810190610798919061343b565b611c11565b005b3480156107ab57600080fd5b506107b4611c75565b6040516107c191906134da565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613334565b611c9b565b005b3480156107ff57600080fd5b506108086120f8565b005b34801561081657600080fd5b50610831600480360381019061082c9190613059565b61227d565b60405161083e9190612fd6565b60405180910390f35b34801561085357600080fd5b5061085c6122c6565b6040516108699190613319565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190613059565b6122d9565b005b3480156108a757600080fd5b506108b061235d565b005b3480156108be57600080fd5b506108c761255e565b6040516108d49190613516565b60405180910390f35b80601060008282546108ef9190613560565b925050819055506000600554111561093c57600554680100000000000000008261091991906135b6565b610923919061363f565b600f60008282546109349190613560565b925050819055505b50565b60076020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b610977612584565b80600960030160006101000a81548160ff02191690831515021790555050565b61099f612584565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60003073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a906136cd565b60405180910390fd5b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f905095945050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0690613739565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f9af38faf7802f8eedae816f2ecbc75160e774b4d08ff3fa4277096ffe52d2bc58183604051610ba8929190613759565b60405180910390a15050565b600460149054906101000a900460ff1681565b60055481565b60115481565b60105481565b600e6020528060005260406000206000915090505481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c3c83612602565b610c469190613560565b9050919050565b60026001541415610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a906137ce565b60405180910390fd5b6002600181905550600460149054906101000a900460ff168015610cc35750600460159054906101000a900460ff165b8015610cd457506000600960010154115b8015610cf05750600960030160009054906101000a900460ff16155b8015610dc257503373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610d699190612fd6565b602060405180830381865afa158015610d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610daa9190613803565b73ffffffffffffffffffffffffffffffffffffffff16145b8015610e1057506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154145b610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e469061387c565b60405180910390fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060096000015442610eee9190613560565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154610f839190613560565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506001600960020154610fdb9190613560565b600960020181905550600960010154600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006110383361227d565b9050600081600a6009600101548461105091906135b6565b61105a919061363f565b611064919061389c565b9050611070338261270c565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330866040518463ffffffff1660e01b81526004016110cf939291906138d0565b600060405180830381600087803b1580156110e957600080fd5b505af11580156110fd573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f5f2ba8f249a9bc781edba2d1ae02d0d3a87e35fa46b05873b0a7deff5c858a0584600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015460405161118b929190613907565b60405180910390a250506001808190555050565b6111a7612584565b8060068190555050565b6111b9612584565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e81565b611230612584565b61123a6000612872565b565b600f5481565b60026001541415611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f906137ce565b60405180910390fd5b6002600181905550600460149054906101000a900460ff166112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d69061397c565b60405180910390fd5b42600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541115611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b906139e8565b60405180910390fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541180156113f8575080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015410155b611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e90613a54565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546114859190613560565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611519919061389c565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555060008190506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561160657600a600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836115f991906135b6565b611603919061363f565b90505b6116103382612936565b61165d3383600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612adb9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c836040516116a39190612fd6565b60405180910390a2506001808190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60026001541415611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c906137ce565b60405180910390fd5b6002600181905550600460149054906101000a900460ff16801561178b57506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154115b6117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190613ac0565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015442101561184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184690613b2c565b60405180910390fd5b600061185a3361227d565b9050600080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561190a57600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a836118f291906135b6565b6118fc919061363f565b82611907919061389c565b90505b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119593382612936565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160009055600182016000905560028201600090556003820160009055505080600960020154611a13919061389c565b600960020181905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033876040518463ffffffff1660e01b8152600401611a7b939291906138d0565b600060405180830381600087803b158015611a9557600080fd5b505af1158015611aa9573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f5fc5b660d04a86970f88955f337ea24b9293dbdae1e744f39e121598560bb92f85604051611af39190612fd6565b60405180910390a25050506001808190555050565b611b10612584565b80600460146101000a81548160ff02191690831515021790555050565b60098060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600d6020528060005260406000206000915090505481565b60086020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b611bf4612584565b80600460156101000a81548160ff02191690831515021790555050565b611c19612584565b601e811115611c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5490613b98565b60405180910390fd5b81600960000181905550806009600101819055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026001541415611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd8906137ce565b60405180910390fd5b6002600181905550600460149054906101000a900460ff168015611d115750600460159054906101000a900460ff165b611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d479061397c565b60405180910390fd5b80600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611dac91906133db565b602060405180830381865afa158015611dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ded9190613bcd565b1015611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590613c46565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611e7c9190613560565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060065442611f179190613560565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550611fac333083600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b61909392919063ffffffff16565b60008190506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561205357600a600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361204691906135b6565b612050919061363f565b90505b61205d338261270c565b3373ffffffffffffffffffffffffffffffffffffffff167f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd60008600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546040516120e59190612fd6565b60405180910390a2506001808190555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f90613739565b60405180910390fd5b600047905060006121976116b6565b73ffffffffffffffffffffffffffffffffffffffff16826040516121ba90613c97565b60006040518083038185875af1925050503d80600081146121f7576040519150601f19603f3d011682016040523d82523d6000602084013e6121fc565b606091505b5050905080612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790613cf8565b60405180910390fd5b7fbe5820a007b9cafd2d9f9e7944f87cef04b1358e94b83249451fcdf5730d0f3c3383604051612271929190613d18565b60405180910390a15050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460159054906101000a900460ff1681565b6122e1612584565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234890613db3565b60405180910390fd5b61235a81612872565b50565b600260015414156123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a906137ce565b60405180910390fd5b6002600181905550600460149054906101000a900460ff166123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f19061397c565b60405180910390fd5b600061240533610bf1565b9050600081141561244b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244290613e1f565b60405180910390fd5b6124553382612bea565b80601160008282546124679190613560565b9250508190555060003373ffffffffffffffffffffffffffffffffffffffff168260405161249490613c97565b60006040518083038185875af1925050503d80600081146124d1576040519150601f19603f3d011682016040523d82523d6000602084013e6124d6565b606091505b505090508061251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190613cf8565b60405180910390fd5b7f71ef1bda272b61b452433fab6f7847cfd8d3e527aca53310782d4763e80e3235338360405161254b929190613d18565b60405180910390a1505060018081905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61258c612d38565b73ffffffffffffffffffffffffffffffffffffffff166125aa6116b6565b73ffffffffffffffffffffffffffffffffffffffff1614612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f790613e8b565b60405180910390fd5b565b600080600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f5461265291906135b6565b9050601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481116126a4576000915050612707565b68010000000000000000601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826126f9919061389c565b612703919061363f565b9150505b919050565b600081600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127599190613560565b9050816005600082825461276d9190613560565b92505081905550600061277f84612602565b905081600f5461278f91906135b6565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128219190613560565b9250508190555081600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612983919061389c565b90508160056000828254612997919061389c565b9250508190555060006129a984612602565b905081600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f54612a3c91906135b6565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ace9190613560565b9250508190555050505050565b612b5c8363a9059cbb60e01b8484604051602401612afa929190613d18565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d40565b505050565b612be4846323b872dd60e01b858585604051602401612b82939291906138d0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d40565b50505050565b6000612bf583612602565b9050600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f54612c4491906135b6565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cd69190613560565b9250508190555081601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d2c919061389c565b92505081905550505050565b600033905090565b6000612da2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612e079092919063ffffffff16565b9050600081511115612e025780806020019051810190612dc29190613ec0565b612e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df890613f5f565b60405180910390fd5b5b505050565b6060612e168484600085612e1f565b90509392505050565b606082471015612e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5b90613ff1565b60405180910390fd5b612e6d85612f33565b612eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea39061405d565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ed591906140ec565b60006040518083038185875af1925050503d8060008114612f12576040519150601f19603f3d011682016040523d82523d6000602084013e612f17565b606091505b5091509150612f27828286612f56565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315612f6657829050612fb6565b600083511115612f795782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fad9190614158565b60405180910390fd5b9392505050565b6000819050919050565b612fd081612fbd565b82525050565b6000602082019050612feb6000830184612fc7565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061302682612ffb565b9050919050565b6130368161301b565b811461304157600080fd5b50565b6000813590506130538161302d565b92915050565b60006020828403121561306f5761306e612ff1565b5b600061307d84828501613044565b91505092915050565b600060808201905061309b6000830187612fc7565b6130a86020830186612fc7565b6130b56040830185612fc7565b6130c26060830184612fc7565b95945050505050565b60008115159050919050565b6130e0816130cb565b81146130eb57600080fd5b50565b6000813590506130fd816130d7565b92915050565b60006020828403121561311957613118612ff1565b5b6000613127848285016130ee565b91505092915050565b600061313b8261301b565b9050919050565b61314b81613130565b811461315657600080fd5b50565b60008135905061316881613142565b92915050565b60006020828403121561318457613183612ff1565b5b600061319284828501613159565b91505092915050565b6131a481612fbd565b81146131af57600080fd5b50565b6000813590506131c18161319b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126131ec576131eb6131c7565b5b8235905067ffffffffffffffff811115613209576132086131cc565b5b602083019150836001820283011115613225576132246131d1565b5b9250929050565b60008060008060006080868803121561324857613247612ff1565b5b600061325688828901613044565b955050602061326788828901613044565b9450506040613278888289016131b2565b935050606086013567ffffffffffffffff81111561329957613298612ff6565b5b6132a5888289016131d6565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132e9816132b4565b82525050565b600060208201905061330460008301846132e0565b92915050565b613313816130cb565b82525050565b600060208201905061332e600083018461330a565b92915050565b60006020828403121561334a57613349612ff1565b5b6000613358848285016131b2565b91505092915050565b600061336c8261301b565b9050919050565b61337c81613361565b811461338757600080fd5b50565b60008135905061339981613373565b92915050565b6000602082840312156133b5576133b4612ff1565b5b60006133c38482850161338a565b91505092915050565b6133d58161301b565b82525050565b60006020820190506133f060008301846133cc565b92915050565b600060808201905061340b6000830187612fc7565b6134186020830186612fc7565b6134256040830185612fc7565b613432606083018461330a565b95945050505050565b6000806040838503121561345257613451612ff1565b5b6000613460858286016131b2565b9250506020613471858286016131b2565b9150509250929050565b6000819050919050565b60006134a061349b61349684612ffb565b61347b565b612ffb565b9050919050565b60006134b282613485565b9050919050565b60006134c4826134a7565b9050919050565b6134d4816134b9565b82525050565b60006020820190506134ef60008301846134cb565b92915050565b6000613500826134a7565b9050919050565b613510816134f5565b82525050565b600060208201905061352b6000830184613507565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061356b82612fbd565b915061357683612fbd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135ab576135aa613531565b5b828201905092915050565b60006135c182612fbd565b91506135cc83612fbd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561360557613604613531565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061364a82612fbd565b915061365583612fbd565b92508261366557613664613610565b5b828204905092915050565b600082825260208201905092915050565b7f63616e206e6f74206469726563746c79207472616e7366657200000000000000600082015250565b60006136b7601983613670565b91506136c282613681565b602082019050919050565b600060208201905081810360008301526136e6816136aa565b9050919050565b7f4e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b6000613723600b83613670565b915061372e826136ed565b602082019050919050565b6000602082019050818103600083015261375281613716565b9050919050565b600060408201905061376e60008301856133cc565b61377b60208301846133cc565b9392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006137b8601f83613670565b91506137c382613782565b602082019050919050565b600060208201905081810360008301526137e7816137ab565b9050919050565b6000815190506137fd8161302d565b92915050565b60006020828403121561381957613818612ff1565b5b6000613827848285016137ee565b91505092915050565b7f43616e2774204c6f636b00000000000000000000000000000000000000000000600082015250565b6000613866600a83613670565b915061387182613830565b602082019050919050565b6000602082019050818103600083015261389581613859565b9050919050565b60006138a782612fbd565b91506138b283612fbd565b9250828210156138c5576138c4613531565b5b828203905092915050565b60006060820190506138e560008301866133cc565b6138f260208301856133cc565b6138ff6040830184612fc7565b949350505050565b600060408201905061391c6000830185612fc7565b6139296020830184612fc7565b9392505050565b7f4e6f742061637469766500000000000000000000000000000000000000000000600082015250565b6000613966600a83613670565b915061397182613930565b602082019050919050565b6000602082019050818103600083015261399581613959565b9050919050565b7f546f6b656e73204c6f636b656400000000000000000000000000000000000000600082015250565b60006139d2600d83613670565b91506139dd8261399c565b602082019050919050565b60006020820190508181036000830152613a01816139c5565b9050919050565b7f4e6f7420656e6f75676820746f6b656e73204c6f636b65640000000000000000600082015250565b6000613a3e601883613670565b9150613a4982613a08565b602082019050919050565b60006020820190508181036000830152613a6d81613a31565b9050919050565b7f4e6f74204c6f636b656400000000000000000000000000000000000000000000600082015250565b6000613aaa600a83613670565b9150613ab582613a74565b602082019050919050565b60006020820190508181036000830152613ad981613a9d565b9050919050565b7f5374696c6c204c6f636b65640000000000000000000000000000000000000000600082015250565b6000613b16600c83613670565b9150613b2182613ae0565b602082019050919050565b60006020820190508181036000830152613b4581613b09565b9050919050565b7f4d756c7469706c69657220746f6f206869676800000000000000000000000000600082015250565b6000613b82601383613670565b9150613b8d82613b4c565b602082019050919050565b60006020820190508181036000830152613bb181613b75565b9050919050565b600081519050613bc78161319b565b92915050565b600060208284031215613be357613be2612ff1565b5b6000613bf184828501613bb8565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e73000000000000000000000000000000600082015250565b6000613c30601183613670565b9150613c3b82613bfa565b602082019050919050565b60006020820190508181036000830152613c5f81613c23565b9050919050565b600081905092915050565b50565b6000613c81600083613c66565b9150613c8c82613c71565b600082019050919050565b6000613ca282613c74565b9150819050919050565b7f7769746864726177206661696c65640000000000000000000000000000000000600082015250565b6000613ce2600f83613670565b9150613ced82613cac565b602082019050919050565b60006020820190508181036000830152613d1181613cd5565b9050919050565b6000604082019050613d2d60008301856133cc565b613d3a6020830184612fc7565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d9d602683613670565b9150613da882613d41565b604082019050919050565b60006020820190508181036000830152613dcc81613d90565b9050919050565b7f3d30000000000000000000000000000000000000000000000000000000000000600082015250565b6000613e09600283613670565b9150613e1482613dd3565b602082019050919050565b60006020820190508181036000830152613e3881613dfc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e75602083613670565b9150613e8082613e3f565b602082019050919050565b60006020820190508181036000830152613ea481613e68565b9050919050565b600081519050613eba816130d7565b92915050565b600060208284031215613ed657613ed5612ff1565b5b6000613ee484828501613eab565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613f49602a83613670565b9150613f5482613eed565b604082019050919050565b60006020820190508181036000830152613f7881613f3c565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000613fdb602683613670565b9150613fe682613f7f565b604082019050919050565b6000602082019050818103600083015261400a81613fce565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614047601d83613670565b915061405282614011565b602082019050919050565b600060208201905081810360008301526140768161403a565b9050919050565b600081519050919050565b60005b838110156140a657808201518184015260208101905061408b565b838111156140b5576000848401525b50505050565b60006140c68261407d565b6140d08185613c66565b93506140e0818560208601614088565b80840191505092915050565b60006140f882846140bb565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b600061412a82614103565b6141348185613670565b9350614144818560208601614088565b61414d8161410e565b840191505092915050565b60006020820190508181036000830152614172818461411f565b90509291505056fea26469706673582212200c3c3485409fe02a18b51e851af67e4ea4ada49c35608f340ba51ad79cb7d79c64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001e9d0bb190ac34492aa11b80d28c1c86487a341f000000000000000000000000826554269261bfc10af100c524231ed7e661d0fa00000000000000000000000051f0f6790dd7795bd8e7c0ab68854898eb1ff9b5
-----Decoded View---------------
Arg [0] : _token (address): 0x1E9D0bB190Ac34492aa11B80D28c1C86487a341F
Arg [1] : _nftContract (address): 0x826554269261bFc10Af100C524231Ed7E661D0Fa
Arg [2] : _teamWallet (address): 0x51F0f6790dd7795bD8e7C0Ab68854898Eb1FF9b5
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001e9d0bb190ac34492aa11b80d28c1c86487a341f
Arg [1] : 000000000000000000000000826554269261bfc10af100c524231ed7e661d0fa
Arg [2] : 00000000000000000000000051f0f6790dd7795bd8e7c0ab68854898eb1ff9b5
Deployed Bytecode Sourcemap
31748:13519:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43951:1;43939:9;:13;:37;;;;;43975:1;43956:16;;:20;43939:37;43936:100;;;43992:32;44014:9;43992:21;:32::i;:::-;43936:100;44075:10;44053:44;;;44087:9;44053:44;;;;;;:::i;:::-;;;;;;;;31748:13519;;;;;33225:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35693:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34818:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44988:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44188:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32162:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32309:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33971:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33861:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33431:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40572:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37756:1291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35135:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35255:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32071:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33486:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2845:103;;;;;;;;;;;;;:::i;:::-;;33746:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36732:956;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2197:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39123:1073;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34911:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33341:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;40385:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33370:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33277:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35010:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35379:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31891:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35819:905;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44671:309;;;;;;;;;;;;;:::i;:::-;;40237:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32230:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3103:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40712:480;;;;;;;;;;;;;:::i;:::-;;31865:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43051:311;43141:7;43120:17;;:28;;;;;;;:::i;:::-;;;;;;;;43182:1;43163:16;;:20;43159:196;;;43326:16;;33657:5;43292:7;:32;;;;:::i;:::-;43291:51;;;;:::i;:::-;43272:14;;:71;;;;;;;:::i;:::-;;;;;;;;43159:196;43051:311;:::o;33225:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35693:118::-;2083:13;:11;:13::i;:::-;35784:11:::1;35763:7;:18;;;:32;;;;;;;;;;;;;;;;;;35693:118:::0;:::o;34818:83::-;2083:13;:11;:13::i;:::-;34887:6:::1;34879:5;;:14;;;;;;;;;;;;;;;;;;34818:83:::0;:::o;44988:276::-;45088:6;45135:4;45115:25;;:8;:25;;;45107:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45195:60;45181:75;;44988:276;;;;;;;:::o;44188:255::-;44272:10;;;;;;;;;;;44258:24;;:10;:24;;;44250:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;44310:18;44331:10;;;;;;;;;;;44310:31;;44365:11;44352:10;;:24;;;;;;;;;;;;;;;;;;44394:41;44411:10;44423:11;44394:41;;;;;;;:::i;:::-;;;;;;;;44239:204;44188:255;:::o;32162:20::-;;;;;;;;;;;;;:::o;32309:31::-;;;;:::o;33971:27::-;;;;:::o;33861:32::-;;;;:::o;33431:46::-;;;;;;;;;;;;;;;;;:::o;40572:132::-;40630:7;40681:8;:15;40690:5;40681:15;;;;;;;;;;;;;;;;40656:22;40672:5;40656:15;:22::i;:::-;:40;;;;:::i;:::-;40649:47;;40572:132;;;:::o;37756:1291::-;5478:1;6076:7;;:19;;6068:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5478:1;6209:7;:18;;;;37842:8:::1;;;;;;;;;;;:39;;;;;37867:14;;;;;;;;;;;37842:39;:83;;;;;37924:1;37898:7;:23;;;:27;37842:83;:121;;;;;37945:7;:18;;;;;;;;;;;;37944:19;37842:121;:180;;;;;38012:10;37981:41;;:11;;;;;;;;;;;:19;;;38001:6;37981:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;37842:180;:236;;;;;38077:1;38039:12;:24;38052:10;38039:24;;;;;;;;;;;;;;;:34;;;:39;37842:236;37820:273;;;;;;;;;;;;:::i;:::-;;;;;;;;;38139:6;38106:12;:24;38119:10;38106:24;;;;;;;;;;;;;;;:30;;:39;;;;38193:15;38156:12;:24;38169:10;38156:24;;;;;;;;;;;;;;;:34;;:52;;;;38273:7;:20;;;38255:15;:38;;;;:::i;:::-;38220:12;:24;38233:10;38220:24;;;;;;;;;;;;;;;:32;;:73;;;;38373:1;38339:12;:24;38352:10;38339:24;;;;;;;;;;;;;;;:31;;;:35;;;;:::i;:::-;38305:12;:24;38318:10;38305:24;;;;;;;;;;;;;;;:31;;:69;;;;38474:1;38453:7;:18;;;:22;;;;:::i;:::-;38432:7;:18;;:43;;;;38554:7;:23;;;38522:17;:29;38540:10;38522:29;;;;;;;;;;;;;;;:55;;;;38590:21;38614;38624:10;38614:9;:21::i;:::-;38590:45;;38731:14;38797:13;38791:2;38766:7;:23;;;38750:13;:39;;;;:::i;:::-;38749:44;;;;:::i;:::-;38748:62;;;;:::i;:::-;38731:79;;38823:30;38834:10;38846:6;38823:10;:30::i;:::-;38891:11;;;;;;;;;;;:28;;;38921:10;38941:4;38948:6;38891:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38984:10;38973:64;;;38996:6;39004:12;:24;39017:10;39004:24;;;;;;;;;;;;;;;:32;;;38973:64;;;;;;;:::i;:::-;;;;;;;;37809:1238;;5434:1:::0;6388:7;:22;;;;37756:1291;:::o;35135:112::-;2083:13;:11;:13::i;:::-;35226::::1;35211:12;:28;;;;35135:112:::0;:::o;35255:116::-;2083:13;:11;:13::i;:::-;35345:12:::1;35331:11;;:26;;;;;;;;;;;;;;;;;;35255:116:::0;:::o;32071:25::-;;;;;;;;;;;;;:::o;33486:43::-;33527:2;33486:43;:::o;2845:103::-;2083:13;:11;:13::i;:::-;2910:30:::1;2937:1;2910:18;:30::i;:::-;2845:103::o:0;33746:29::-;;;;:::o;36732:956::-;5478:1;6076:7;;:19;;6068:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5478:1;6209:7;:18;;;;36807:8:::1;;;;;;;;;;;36799:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;36881:15;36848:9;:21;36858:10;36848:21;;;;;;;;;;;;;;;:29;;;:48;;36840:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36968:1;36932:9;:21;36942:10;36932:21;;;;;;;;;;;;;;;:33;;;:37;:85;;;;;37010:7;36973:9;:21;36983:10;36973:21;;;;;;;;;;;;;;;:33;;;:44;;36932:85;36924:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;37135:7;37097:9;:21;37107:10;37097:21;;;;;;;;;;;;;;;:35;;;:45;;;;:::i;:::-;37059:9;:21;37069:10;37059:21;;;;;;;;;;;;;;;:35;;:83;;;;37225:7;37189:9;:21;37199:10;37189:21;;;;;;;;;;;;;;;:33;;;:43;;;;:::i;:::-;37153:9;:21;37163:10;37153:21;;;;;;;;;;;;;;;:33;;:79;;;;37301:14;37318:7;37301:24;;37374:1;37342:17;:29;37360:10;37342:29;;;;;;;;;;;;;;;;:33;37339:116;;;37441:2;37410:17;:29;37428:10;37410:29;;;;;;;;;;;;;;;;37400:7;:39;;;;:::i;:::-;37399:44;;;;:::i;:::-;37390:53;;37339:116;37497:33;37511:10;37523:6;37497:13;:33::i;:::-;37571:48;37598:10;37611:7;37571:5;;;;;;;;;;;:18;;;;:48;;;;;:::i;:::-;37650:10;37635:35;;;37662:7;37635:35;;;;;;:::i;:::-;;;;;;;;36788:900;5434:1:::0;6388:7;:22;;;;36732:956;:::o;2197:87::-;2243:7;2270:6;;;;;;;;;;;2263:13;;2197:87;:::o;39123:1073::-;5478:1;6076:7;;:19;;6068:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5478:1;6209:7;:18;;;;39197:8:::1;;;;;;;;;;;:47;;;;;39243:1;39209:12;:24;39222:10;39209:24;;;;;;;;;;;;;;;:31;;;:35;39197:47;39189:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;39297:12;:24;39310:10;39297:24;;;;;;;;;;;;;;;:32;;;39278:15;:51;;39270:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;39360:21;39384;39394:10;39384:9;:21::i;:::-;39360:45;;39417:14;39477:1:::0;39445:17:::1;:29;39463:10;39445:29;;;;;;;;;;;;;;;;:33;39442:223;;;39623:17;:29;39641:10;39623:29;;;;;;;;;;;;;;;;39619:2;39605:13;:16;;;;:::i;:::-;39604:48;;;;:::i;:::-;39587:13;:66;;;;:::i;:::-;39578:75;;39442:223;39750:1;39718:17;:29;39736:10;39718:29;;;;;;;;;;;;;;;:33;;;;39794;39808:10;39820:6;39794:13;:33::i;:::-;39840:14;39857:12;:24;39870:10;39857:24;;;;;;;;;;;;;;;:31;;;39840:48;;39906:12;:24;39919:10;39906:24;;;;;;;;;;;;;;;;39899:31:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;40021:6;40000:7;:18;;;:27;;;;:::i;:::-;39979:7;:18;;:48;;;;40073:11;;;;;;;;;;;:28;;;40112:4;40119:10;40131:6;40073:65;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40169:10;40156:32;;;40181:6;40156:32;;;;;;:::i;:::-;;;;;;;;39178:1018;;;5434:1:::0;6388:7;:22;;;;39123:1073;:::o;34911:91::-;2083:13;:11;:13::i;:::-;34985:9:::1;34974:8;;:20;;;;;;;;;;;;;;;;;;34911:91:::0;:::o;33341:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40385:116::-;40439:7;40465:9;:16;40475:5;40465:16;;;;;;;;;;;;;;;:28;;;40458:35;;40385:116;;;:::o;33370:52::-;;;;;;;;;;;;;;;;;:::o;33277:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35010:117::-;2083:13;:11;:13::i;:::-;35104:15:::1;35087:14;;:32;;;;;;;;;;;;;;;;;;35010:117:::0;:::o;35379:306::-;2083:13;:11;:13::i;:::-;33527:2:::1;35514:16;:34;;35506:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35608:13;35585:7;:20;;:36;;;;35658:16;35632:7;:23;;:42;;;;35379:306:::0;;:::o;31891:26::-;;;;;;;;;;;;;:::o;35819:905::-;5478:1;6076:7;;:19;;6068:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5478:1;6209:7;:18;;;;35889:8:::1;;;;;;;;;;;:26;;;;;35901:14;;;;;;;;;;;35889:26;35881:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;35979:7;35948:5;;;;;;;;;;;:15;;;35964:10;35948:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;35940:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36093:7;36057:9;:21;36067:10;36057:21;;;;;;;;;;;;;;;:33;;;:43;;;;:::i;:::-;36021:9;:21;36031:10;36021:21;;;;;;;;;;;;;;;:33;;:79;;;;36145:15;36111:9;:21;36121:10;36111:21;;;;;;;;;;;;;;;:31;;:49;;;;36222:12;;36204:15;:30;;;;:::i;:::-;36172:9;:21;36182:10;36172:21;;;;;;;;;;;;;;;:29;;:62;;;;36286:67;36317:10;36338:4;36345:7;36286:5;;;;;;;;;;;:22;;;;:67;;;;;;:::i;:::-;36422:14;36439:7;36422:24;;36495:1;36463:17;:29;36481:10;36463:29;;;;;;;;;;;;;;;;:33;36460:116;;;36562:2;36531:17;:29;36549:10;36531:29;;;;;;;;;;;;;;;;36521:7;:39;;;;:::i;:::-;36520:44;;;;:::i;:::-;36511:53;;36460:116;36617:29;36628:10;36639:6;36617:10;:29::i;:::-;36672:10;36664:50;;;36683:9;:21;36693:10;36683:21;;;;;;;;;;;;;;;:29;;;36664:50;;;;;;:::i;:::-;;;;;;;;35870:854;5434:1:::0;6388:7;:22;;;;35819:905;:::o;44671:309::-;44734:10;;;;;;;;;;;44720:24;;:10;:24;;;44712:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;44770:14;44787:21;44770:38;;44821:9;44842:7;:5;:7::i;:::-;44834:21;;44864:6;44834:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44820:56;;;44897:4;44889:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;44936:36;44953:10;44965:6;44936:36;;;;;;;:::i;:::-;;;;;;;;44701:279;;44671:309::o;40237:108::-;40291:7;40318:11;:18;40330:5;40318:18;;;;;;;;;;;;;;;;40310:27;;40237:108;;;:::o;32230:26::-;;;;;;;;;;;;;:::o;3103:201::-;2083:13;:11;:13::i;:::-;3212:1:::1;3192:22;;:8;:22;;;;3184:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3268:28;3287:8;3268:18;:28::i;:::-;3103:201:::0;:::o;40712:480::-;5478:1;6076:7;;:19;;6068:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5478:1;6209:7;:18;;;;40774:8:::1;;;;;;;;;;;40766:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;40820:14;40837:24;40850:10;40837:12;:24::i;:::-;40820:41;;40888:1;40880:6;:9;;40872:23;;;;;;;;;;;;:::i;:::-;;;;;;;;;40959:43;40983:10;40995:6;40959:23;:43::i;:::-;41027:6;41013:12;;:20;;;;;;;:::i;:::-;;;;;;;;41045:9;41058:10;:15;;41082:6;41058:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41044:50;;;41113:4;41105:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;41152:30;41164:10;41175:6;41152:30;;;;;;;:::i;:::-;;;;;;;;40755:437;;5434:1:::0;6388:7;:22;;;;40712:480::o;31865:19::-;;;;;;;;;;;;;:::o;2362:132::-;2437:12;:10;:12::i;:::-;2426:23;;:7;:5;:7::i;:::-;:23;;;2418:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2362:132::o;42647:345::-;42709:7;42729:18;42767:11;:18;42779:5;42767:18;;;;;;;;;;;;;;;;42750:14;;:35;;;;:::i;:::-;42729:56;;42870:17;:24;42888:5;42870:24;;;;;;;;;;;;;;;;42858:10;:36;42855:49;;42903:1;42896:8;;;;;42855:49;33657:5;42936:17;:24;42954:5;42936:24;;;;;;;;;;;;;;;;42923:10;:37;;;;:::i;:::-;42922:62;;;;:::i;:::-;42915:69;;;42647:345;;;;:::o;41290:601::-;41398:17;41439:7;41418:11;:18;41430:5;41418:18;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;41398:48;;41513:7;41495:16;;:25;;;;;;;:::i;:::-;;;;;;;;41578:15;41596:22;41612:5;41596:15;:22::i;:::-;41578:40;;41722:9;41705:14;;:26;;;;:::i;:::-;41678:17;:24;41696:5;41678:24;;;;;;;;;;;;;;;:53;;;;41809:7;41792:8;:15;41801:5;41792:15;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;41874:9;41855:11;:18;41867:5;41855:18;;;;;;;;;;;;;;;:28;;;;41350:541;;41290:601;;:::o;3464:191::-;3538:16;3557:6;;;;;;;;;;;3538:25;;3583:8;3574:6;;:17;;;;;;;;;;;;;;;;;;3638:8;3607:40;;3628:8;3607:40;;;;;;;;;;;;3527:128;3464:191;:::o;41977:585::-;42097:17;42136:7;42115:11;:18;42127:5;42115:18;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;42097:46;;42174:7;42154:16;;:27;;;;;;;:::i;:::-;;;;;;;;42239:15;42256:22;42272:5;42256:15;:22::i;:::-;42239:39;;42335:9;42316:11;:18;42328:5;42316:18;;;;;;;;;;;;;;;:28;;;;42447:11;:18;42459:5;42447:18;;;;;;;;;;;;;;;;42430:14;;:35;;;;:::i;:::-;42403:17;:24;42421:5;42403:24;;;;;;;;;;;;;;;:62;;;;42546:7;42527:8;:15;42536:5;42527:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;42040:522;;41977:585;;:::o;27805:211::-;27922:86;27942:5;27972:23;;;27997:2;28001:5;27949:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27922:19;:86::i;:::-;27805:211;;;:::o;28024:248::-;28168:96;28188:5;28218:27;;;28247:4;28253:2;28257:5;28195:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28168:19;:96::i;:::-;28024:248;;;;:::o;43449:365::-;43534:17;43554:22;43570:5;43554:15;:22::i;:::-;43534:42;;43682:11;:18;43694:5;43682:18;;;;;;;;;;;;;;;;43665:14;;:35;;;;:::i;:::-;43638:17;:24;43656:5;43638:24;;;;;;;;;;;;;;;:62;;;;43762:9;43745:8;:15;43754:5;43745:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;43799:7;43782:8;:15;43791:5;43782:15;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;43521:293;43449:365;;:::o;746:98::-;799:7;826:10;819:17;;746:98;:::o;30872:716::-;31296:23;31322:69;31350:4;31322:69;;;;;;;;;;;;;;;;;31330:5;31322:27;;;;:69;;;;;:::i;:::-;31296:95;;31426:1;31406:10;:17;:21;31402:179;;;31503:10;31492:30;;;;;;;;;;;;:::i;:::-;31484:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31402:179;30942:646;30872:716;;:::o;22514:229::-;22651:12;22683:52;22705:6;22713:4;22719:1;22722:12;22683:21;:52::i;:::-;22676:59;;22514:229;;;;;:::o;23634:510::-;23804:12;23862:5;23837:21;:30;;23829:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;23929:18;23940:6;23929:10;:18::i;:::-;23921:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23995:12;24009:23;24036:6;:11;;24055:5;24062:4;24036:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23994:73;;;;24085:51;24102:7;24111:10;24123:12;24085:16;:51::i;:::-;24078:58;;;;23634:510;;;;;;:::o;19769:326::-;19829:4;20086:1;20064:7;:19;;;:23;20057:30;;19769:326;;;:::o;26320:762::-;26470:12;26499:7;26495:580;;;26530:10;26523:17;;;;26495:580;26664:1;26644:10;:17;:21;26640:424;;;26892:10;26886:17;26953:15;26940:10;26936:2;26932:19;26925:44;26640:424;27035:12;27028:20;;;;;;;;;;;:::i;:::-;;;;;;;;26320:762;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:553::-;1788:4;1826:3;1815:9;1811:19;1803:27;;1840:71;1908:1;1897:9;1893:17;1884:6;1840:71;:::i;:::-;1921:72;1989:2;1978:9;1974:18;1965:6;1921:72;:::i;:::-;2003;2071:2;2060:9;2056:18;2047:6;2003:72;:::i;:::-;2085;2153:2;2142:9;2138:18;2129:6;2085:72;:::i;:::-;1611:553;;;;;;;:::o;2170:90::-;2204:7;2247:5;2240:13;2233:21;2222:32;;2170:90;;;:::o;2266:116::-;2336:21;2351:5;2336:21;:::i;:::-;2329:5;2326:32;2316:60;;2372:1;2369;2362:12;2316:60;2266:116;:::o;2388:133::-;2431:5;2469:6;2456:20;2447:29;;2485:30;2509:5;2485:30;:::i;:::-;2388:133;;;;:::o;2527:323::-;2583:6;2632:2;2620:9;2611:7;2607:23;2603:32;2600:119;;;2638:79;;:::i;:::-;2600:119;2758:1;2783:50;2825:7;2816:6;2805:9;2801:22;2783:50;:::i;:::-;2773:60;;2729:114;2527:323;;;;:::o;2856:110::-;2907:7;2936:24;2954:5;2936:24;:::i;:::-;2925:35;;2856:110;;;:::o;2972:150::-;3059:38;3091:5;3059:38;:::i;:::-;3052:5;3049:49;3039:77;;3112:1;3109;3102:12;3039:77;2972:150;:::o;3128:167::-;3188:5;3226:6;3213:20;3204:29;;3242:47;3283:5;3242:47;:::i;:::-;3128:167;;;;:::o;3301:357::-;3374:6;3423:2;3411:9;3402:7;3398:23;3394:32;3391:119;;;3429:79;;:::i;:::-;3391:119;3549:1;3574:67;3633:7;3624:6;3613:9;3609:22;3574:67;:::i;:::-;3564:77;;3520:131;3301:357;;;;:::o;3664:122::-;3737:24;3755:5;3737:24;:::i;:::-;3730:5;3727:35;3717:63;;3776:1;3773;3766:12;3717:63;3664:122;:::o;3792:139::-;3838:5;3876:6;3863:20;3854:29;;3892:33;3919:5;3892:33;:::i;:::-;3792:139;;;;:::o;3937:117::-;4046:1;4043;4036:12;4060:117;4169:1;4166;4159:12;4183:117;4292:1;4289;4282:12;4319:552;4376:8;4386:6;4436:3;4429:4;4421:6;4417:17;4413:27;4403:122;;4444:79;;:::i;:::-;4403:122;4557:6;4544:20;4534:30;;4587:18;4579:6;4576:30;4573:117;;;4609:79;;:::i;:::-;4573:117;4723:4;4715:6;4711:17;4699:29;;4777:3;4769:4;4761:6;4757:17;4747:8;4743:32;4740:41;4737:128;;;4784:79;;:::i;:::-;4737:128;4319:552;;;;;:::o;4877:963::-;4974:6;4982;4990;4998;5006;5055:3;5043:9;5034:7;5030:23;5026:33;5023:120;;;5062:79;;:::i;:::-;5023:120;5182:1;5207:53;5252:7;5243:6;5232:9;5228:22;5207:53;:::i;:::-;5197:63;;5153:117;5309:2;5335:53;5380:7;5371:6;5360:9;5356:22;5335:53;:::i;:::-;5325:63;;5280:118;5437:2;5463:53;5508:7;5499:6;5488:9;5484:22;5463:53;:::i;:::-;5453:63;;5408:118;5593:2;5582:9;5578:18;5565:32;5624:18;5616:6;5613:30;5610:117;;;5646:79;;:::i;:::-;5610:117;5759:64;5815:7;5806:6;5795:9;5791:22;5759:64;:::i;:::-;5741:82;;;;5536:297;4877:963;;;;;;;;:::o;5846:149::-;5882:7;5922:66;5915:5;5911:78;5900:89;;5846:149;;;:::o;6001:115::-;6086:23;6103:5;6086:23;:::i;:::-;6081:3;6074:36;6001:115;;:::o;6122:218::-;6213:4;6251:2;6240:9;6236:18;6228:26;;6264:69;6330:1;6319:9;6315:17;6306:6;6264:69;:::i;:::-;6122:218;;;;:::o;6346:109::-;6427:21;6442:5;6427:21;:::i;:::-;6422:3;6415:34;6346:109;;:::o;6461:210::-;6548:4;6586:2;6575:9;6571:18;6563:26;;6599:65;6661:1;6650:9;6646:17;6637:6;6599:65;:::i;:::-;6461:210;;;;:::o;6677:329::-;6736:6;6785:2;6773:9;6764:7;6760:23;6756:32;6753:119;;;6791:79;;:::i;:::-;6753:119;6911:1;6936:53;6981:7;6972:6;6961:9;6957:22;6936:53;:::i;:::-;6926:63;;6882:117;6677:329;;;;:::o;7012:111::-;7064:7;7093:24;7111:5;7093:24;:::i;:::-;7082:35;;7012:111;;;:::o;7129:152::-;7217:39;7250:5;7217:39;:::i;:::-;7210:5;7207:50;7197:78;;7271:1;7268;7261:12;7197:78;7129:152;:::o;7287:169::-;7348:5;7386:6;7373:20;7364:29;;7402:48;7444:5;7402:48;:::i;:::-;7287:169;;;;:::o;7462:359::-;7536:6;7585:2;7573:9;7564:7;7560:23;7556:32;7553:119;;;7591:79;;:::i;:::-;7553:119;7711:1;7736:68;7796:7;7787:6;7776:9;7772:22;7736:68;:::i;:::-;7726:78;;7682:132;7462:359;;;;:::o;7827:118::-;7914:24;7932:5;7914:24;:::i;:::-;7909:3;7902:37;7827:118;;:::o;7951:222::-;8044:4;8082:2;8071:9;8067:18;8059:26;;8095:71;8163:1;8152:9;8148:17;8139:6;8095:71;:::i;:::-;7951:222;;;;:::o;8179:541::-;8350:4;8388:3;8377:9;8373:19;8365:27;;8402:71;8470:1;8459:9;8455:17;8446:6;8402:71;:::i;:::-;8483:72;8551:2;8540:9;8536:18;8527:6;8483:72;:::i;:::-;8565;8633:2;8622:9;8618:18;8609:6;8565:72;:::i;:::-;8647:66;8709:2;8698:9;8694:18;8685:6;8647:66;:::i;:::-;8179:541;;;;;;;:::o;8726:474::-;8794:6;8802;8851:2;8839:9;8830:7;8826:23;8822:32;8819:119;;;8857:79;;:::i;:::-;8819:119;8977:1;9002:53;9047:7;9038:6;9027:9;9023:22;9002:53;:::i;:::-;8992:63;;8948:117;9104:2;9130:53;9175:7;9166:6;9155:9;9151:22;9130:53;:::i;:::-;9120:63;;9075:118;8726:474;;;;;:::o;9206:60::-;9234:3;9255:5;9248:12;;9206:60;;;:::o;9272:142::-;9322:9;9355:53;9373:34;9382:24;9400:5;9382:24;:::i;:::-;9373:34;:::i;:::-;9355:53;:::i;:::-;9342:66;;9272:142;;;:::o;9420:126::-;9470:9;9503:37;9534:5;9503:37;:::i;:::-;9490:50;;9420:126;;;:::o;9552:141::-;9617:9;9650:37;9681:5;9650:37;:::i;:::-;9637:50;;9552:141;;;:::o;9699:161::-;9801:52;9847:5;9801:52;:::i;:::-;9796:3;9789:65;9699:161;;:::o;9866:252::-;9974:4;10012:2;10001:9;9997:18;9989:26;;10025:86;10108:1;10097:9;10093:17;10084:6;10025:86;:::i;:::-;9866:252;;;;:::o;10124:140::-;10188:9;10221:37;10252:5;10221:37;:::i;:::-;10208:50;;10124:140;;;:::o;10270:159::-;10371:51;10416:5;10371:51;:::i;:::-;10366:3;10359:64;10270:159;;:::o;10435:250::-;10542:4;10580:2;10569:9;10565:18;10557:26;;10593:85;10675:1;10664:9;10660:17;10651:6;10593:85;:::i;:::-;10435:250;;;;:::o;10691:180::-;10739:77;10736:1;10729:88;10836:4;10833:1;10826:15;10860:4;10857:1;10850:15;10877:305;10917:3;10936:20;10954:1;10936:20;:::i;:::-;10931:25;;10970:20;10988:1;10970:20;:::i;:::-;10965:25;;11124:1;11056:66;11052:74;11049:1;11046:81;11043:107;;;11130:18;;:::i;:::-;11043:107;11174:1;11171;11167:9;11160:16;;10877:305;;;;:::o;11188:348::-;11228:7;11251:20;11269:1;11251:20;:::i;:::-;11246:25;;11285:20;11303:1;11285:20;:::i;:::-;11280:25;;11473:1;11405:66;11401:74;11398:1;11395:81;11390:1;11383:9;11376:17;11372:105;11369:131;;;11480:18;;:::i;:::-;11369:131;11528:1;11525;11521:9;11510:20;;11188:348;;;;:::o;11542:180::-;11590:77;11587:1;11580:88;11687:4;11684:1;11677:15;11711:4;11708:1;11701:15;11728:185;11768:1;11785:20;11803:1;11785:20;:::i;:::-;11780:25;;11819:20;11837:1;11819:20;:::i;:::-;11814:25;;11858:1;11848:35;;11863:18;;:::i;:::-;11848:35;11905:1;11902;11898:9;11893:14;;11728:185;;;;:::o;11919:169::-;12003:11;12037:6;12032:3;12025:19;12077:4;12072:3;12068:14;12053:29;;11919:169;;;;:::o;12094:175::-;12234:27;12230:1;12222:6;12218:14;12211:51;12094:175;:::o;12275:366::-;12417:3;12438:67;12502:2;12497:3;12438:67;:::i;:::-;12431:74;;12514:93;12603:3;12514:93;:::i;:::-;12632:2;12627:3;12623:12;12616:19;;12275:366;;;:::o;12647:419::-;12813:4;12851:2;12840:9;12836:18;12828:26;;12900:9;12894:4;12890:20;12886:1;12875:9;12871:17;12864:47;12928:131;13054:4;12928:131;:::i;:::-;12920:139;;12647:419;;;:::o;13072:161::-;13212:13;13208:1;13200:6;13196:14;13189:37;13072:161;:::o;13239:366::-;13381:3;13402:67;13466:2;13461:3;13402:67;:::i;:::-;13395:74;;13478:93;13567:3;13478:93;:::i;:::-;13596:2;13591:3;13587:12;13580:19;;13239:366;;;:::o;13611:419::-;13777:4;13815:2;13804:9;13800:18;13792:26;;13864:9;13858:4;13854:20;13850:1;13839:9;13835:17;13828:47;13892:131;14018:4;13892:131;:::i;:::-;13884:139;;13611:419;;;:::o;14036:332::-;14157:4;14195:2;14184:9;14180:18;14172:26;;14208:71;14276:1;14265:9;14261:17;14252:6;14208:71;:::i;:::-;14289:72;14357:2;14346:9;14342:18;14333:6;14289:72;:::i;:::-;14036:332;;;;;:::o;14374:181::-;14514:33;14510:1;14502:6;14498:14;14491:57;14374:181;:::o;14561:366::-;14703:3;14724:67;14788:2;14783:3;14724:67;:::i;:::-;14717:74;;14800:93;14889:3;14800:93;:::i;:::-;14918:2;14913:3;14909:12;14902:19;;14561:366;;;:::o;14933:419::-;15099:4;15137:2;15126:9;15122:18;15114:26;;15186:9;15180:4;15176:20;15172:1;15161:9;15157:17;15150:47;15214:131;15340:4;15214:131;:::i;:::-;15206:139;;14933:419;;;:::o;15358:143::-;15415:5;15446:6;15440:13;15431:22;;15462:33;15489:5;15462:33;:::i;:::-;15358:143;;;;:::o;15507:351::-;15577:6;15626:2;15614:9;15605:7;15601:23;15597:32;15594:119;;;15632:79;;:::i;:::-;15594:119;15752:1;15777:64;15833:7;15824:6;15813:9;15809:22;15777:64;:::i;:::-;15767:74;;15723:128;15507:351;;;;:::o;15864:160::-;16004:12;16000:1;15992:6;15988:14;15981:36;15864:160;:::o;16030:366::-;16172:3;16193:67;16257:2;16252:3;16193:67;:::i;:::-;16186:74;;16269:93;16358:3;16269:93;:::i;:::-;16387:2;16382:3;16378:12;16371:19;;16030:366;;;:::o;16402:419::-;16568:4;16606:2;16595:9;16591:18;16583:26;;16655:9;16649:4;16645:20;16641:1;16630:9;16626:17;16619:47;16683:131;16809:4;16683:131;:::i;:::-;16675:139;;16402:419;;;:::o;16827:191::-;16867:4;16887:20;16905:1;16887:20;:::i;:::-;16882:25;;16921:20;16939:1;16921:20;:::i;:::-;16916:25;;16960:1;16957;16954:8;16951:34;;;16965:18;;:::i;:::-;16951:34;17010:1;17007;17003:9;16995:17;;16827:191;;;;:::o;17024:442::-;17173:4;17211:2;17200:9;17196:18;17188:26;;17224:71;17292:1;17281:9;17277:17;17268:6;17224:71;:::i;:::-;17305:72;17373:2;17362:9;17358:18;17349:6;17305:72;:::i;:::-;17387;17455:2;17444:9;17440:18;17431:6;17387:72;:::i;:::-;17024:442;;;;;;:::o;17472:332::-;17593:4;17631:2;17620:9;17616:18;17608:26;;17644:71;17712:1;17701:9;17697:17;17688:6;17644:71;:::i;:::-;17725:72;17793:2;17782:9;17778:18;17769:6;17725:72;:::i;:::-;17472:332;;;;;:::o;17810:160::-;17950:12;17946:1;17938:6;17934:14;17927:36;17810:160;:::o;17976:366::-;18118:3;18139:67;18203:2;18198:3;18139:67;:::i;:::-;18132:74;;18215:93;18304:3;18215:93;:::i;:::-;18333:2;18328:3;18324:12;18317:19;;17976:366;;;:::o;18348:419::-;18514:4;18552:2;18541:9;18537:18;18529:26;;18601:9;18595:4;18591:20;18587:1;18576:9;18572:17;18565:47;18629:131;18755:4;18629:131;:::i;:::-;18621:139;;18348:419;;;:::o;18773:163::-;18913:15;18909:1;18901:6;18897:14;18890:39;18773:163;:::o;18942:366::-;19084:3;19105:67;19169:2;19164:3;19105:67;:::i;:::-;19098:74;;19181:93;19270:3;19181:93;:::i;:::-;19299:2;19294:3;19290:12;19283:19;;18942:366;;;:::o;19314:419::-;19480:4;19518:2;19507:9;19503:18;19495:26;;19567:9;19561:4;19557:20;19553:1;19542:9;19538:17;19531:47;19595:131;19721:4;19595:131;:::i;:::-;19587:139;;19314:419;;;:::o;19739:174::-;19879:26;19875:1;19867:6;19863:14;19856:50;19739:174;:::o;19919:366::-;20061:3;20082:67;20146:2;20141:3;20082:67;:::i;:::-;20075:74;;20158:93;20247:3;20158:93;:::i;:::-;20276:2;20271:3;20267:12;20260:19;;19919:366;;;:::o;20291:419::-;20457:4;20495:2;20484:9;20480:18;20472:26;;20544:9;20538:4;20534:20;20530:1;20519:9;20515:17;20508:47;20572:131;20698:4;20572:131;:::i;:::-;20564:139;;20291:419;;;:::o;20716:160::-;20856:12;20852:1;20844:6;20840:14;20833:36;20716:160;:::o;20882:366::-;21024:3;21045:67;21109:2;21104:3;21045:67;:::i;:::-;21038:74;;21121:93;21210:3;21121:93;:::i;:::-;21239:2;21234:3;21230:12;21223:19;;20882:366;;;:::o;21254:419::-;21420:4;21458:2;21447:9;21443:18;21435:26;;21507:9;21501:4;21497:20;21493:1;21482:9;21478:17;21471:47;21535:131;21661:4;21535:131;:::i;:::-;21527:139;;21254:419;;;:::o;21679:162::-;21819:14;21815:1;21807:6;21803:14;21796:38;21679:162;:::o;21847:366::-;21989:3;22010:67;22074:2;22069:3;22010:67;:::i;:::-;22003:74;;22086:93;22175:3;22086:93;:::i;:::-;22204:2;22199:3;22195:12;22188:19;;21847:366;;;:::o;22219:419::-;22385:4;22423:2;22412:9;22408:18;22400:26;;22472:9;22466:4;22462:20;22458:1;22447:9;22443:17;22436:47;22500:131;22626:4;22500:131;:::i;:::-;22492:139;;22219:419;;;:::o;22644:169::-;22784:21;22780:1;22772:6;22768:14;22761:45;22644:169;:::o;22819:366::-;22961:3;22982:67;23046:2;23041:3;22982:67;:::i;:::-;22975:74;;23058:93;23147:3;23058:93;:::i;:::-;23176:2;23171:3;23167:12;23160:19;;22819:366;;;:::o;23191:419::-;23357:4;23395:2;23384:9;23380:18;23372:26;;23444:9;23438:4;23434:20;23430:1;23419:9;23415:17;23408:47;23472:131;23598:4;23472:131;:::i;:::-;23464:139;;23191:419;;;:::o;23616:143::-;23673:5;23704:6;23698:13;23689:22;;23720:33;23747:5;23720:33;:::i;:::-;23616:143;;;;:::o;23765:351::-;23835:6;23884:2;23872:9;23863:7;23859:23;23855:32;23852:119;;;23890:79;;:::i;:::-;23852:119;24010:1;24035:64;24091:7;24082:6;24071:9;24067:22;24035:64;:::i;:::-;24025:74;;23981:128;23765:351;;;;:::o;24122:167::-;24262:19;24258:1;24250:6;24246:14;24239:43;24122:167;:::o;24295:366::-;24437:3;24458:67;24522:2;24517:3;24458:67;:::i;:::-;24451:74;;24534:93;24623:3;24534:93;:::i;:::-;24652:2;24647:3;24643:12;24636:19;;24295:366;;;:::o;24667:419::-;24833:4;24871:2;24860:9;24856:18;24848:26;;24920:9;24914:4;24910:20;24906:1;24895:9;24891:17;24884:47;24948:131;25074:4;24948:131;:::i;:::-;24940:139;;24667:419;;;:::o;25092:147::-;25193:11;25230:3;25215:18;;25092:147;;;;:::o;25245:114::-;;:::o;25365:398::-;25524:3;25545:83;25626:1;25621:3;25545:83;:::i;:::-;25538:90;;25637:93;25726:3;25637:93;:::i;:::-;25755:1;25750:3;25746:11;25739:18;;25365:398;;;:::o;25769:379::-;25953:3;25975:147;26118:3;25975:147;:::i;:::-;25968:154;;26139:3;26132:10;;25769:379;;;:::o;26154:165::-;26294:17;26290:1;26282:6;26278:14;26271:41;26154:165;:::o;26325:366::-;26467:3;26488:67;26552:2;26547:3;26488:67;:::i;:::-;26481:74;;26564:93;26653:3;26564:93;:::i;:::-;26682:2;26677:3;26673:12;26666:19;;26325:366;;;:::o;26697:419::-;26863:4;26901:2;26890:9;26886:18;26878:26;;26950:9;26944:4;26940:20;26936:1;26925:9;26921:17;26914:47;26978:131;27104:4;26978:131;:::i;:::-;26970:139;;26697:419;;;:::o;27122:332::-;27243:4;27281:2;27270:9;27266:18;27258:26;;27294:71;27362:1;27351:9;27347:17;27338:6;27294:71;:::i;:::-;27375:72;27443:2;27432:9;27428:18;27419:6;27375:72;:::i;:::-;27122:332;;;;;:::o;27460:225::-;27600:34;27596:1;27588:6;27584:14;27577:58;27669:8;27664:2;27656:6;27652:15;27645:33;27460:225;:::o;27691:366::-;27833:3;27854:67;27918:2;27913:3;27854:67;:::i;:::-;27847:74;;27930:93;28019:3;27930:93;:::i;:::-;28048:2;28043:3;28039:12;28032:19;;27691:366;;;:::o;28063:419::-;28229:4;28267:2;28256:9;28252:18;28244:26;;28316:9;28310:4;28306:20;28302:1;28291:9;28287:17;28280:47;28344:131;28470:4;28344:131;:::i;:::-;28336:139;;28063:419;;;:::o;28488:152::-;28628:4;28624:1;28616:6;28612:14;28605:28;28488:152;:::o;28646:365::-;28788:3;28809:66;28873:1;28868:3;28809:66;:::i;:::-;28802:73;;28884:93;28973:3;28884:93;:::i;:::-;29002:2;28997:3;28993:12;28986:19;;28646:365;;;:::o;29017:419::-;29183:4;29221:2;29210:9;29206:18;29198:26;;29270:9;29264:4;29260:20;29256:1;29245:9;29241:17;29234:47;29298:131;29424:4;29298:131;:::i;:::-;29290:139;;29017:419;;;:::o;29442:182::-;29582:34;29578:1;29570:6;29566:14;29559:58;29442:182;:::o;29630:366::-;29772:3;29793:67;29857:2;29852:3;29793:67;:::i;:::-;29786:74;;29869:93;29958:3;29869:93;:::i;:::-;29987:2;29982:3;29978:12;29971:19;;29630:366;;;:::o;30002:419::-;30168:4;30206:2;30195:9;30191:18;30183:26;;30255:9;30249:4;30245:20;30241:1;30230:9;30226:17;30219:47;30283:131;30409:4;30283:131;:::i;:::-;30275:139;;30002:419;;;:::o;30427:137::-;30481:5;30512:6;30506:13;30497:22;;30528:30;30552:5;30528:30;:::i;:::-;30427:137;;;;:::o;30570:345::-;30637:6;30686:2;30674:9;30665:7;30661:23;30657:32;30654:119;;;30692:79;;:::i;:::-;30654:119;30812:1;30837:61;30890:7;30881:6;30870:9;30866:22;30837:61;:::i;:::-;30827:71;;30783:125;30570:345;;;;:::o;30921:229::-;31061:34;31057:1;31049:6;31045:14;31038:58;31130:12;31125:2;31117:6;31113:15;31106:37;30921:229;:::o;31156:366::-;31298:3;31319:67;31383:2;31378:3;31319:67;:::i;:::-;31312:74;;31395:93;31484:3;31395:93;:::i;:::-;31513:2;31508:3;31504:12;31497:19;;31156:366;;;:::o;31528:419::-;31694:4;31732:2;31721:9;31717:18;31709:26;;31781:9;31775:4;31771:20;31767:1;31756:9;31752:17;31745:47;31809:131;31935:4;31809:131;:::i;:::-;31801:139;;31528:419;;;:::o;31953:225::-;32093:34;32089:1;32081:6;32077:14;32070:58;32162:8;32157:2;32149:6;32145:15;32138:33;31953:225;:::o;32184:366::-;32326:3;32347:67;32411:2;32406:3;32347:67;:::i;:::-;32340:74;;32423:93;32512:3;32423:93;:::i;:::-;32541:2;32536:3;32532:12;32525:19;;32184:366;;;:::o;32556:419::-;32722:4;32760:2;32749:9;32745:18;32737:26;;32809:9;32803:4;32799:20;32795:1;32784:9;32780:17;32773:47;32837:131;32963:4;32837:131;:::i;:::-;32829:139;;32556:419;;;:::o;32981:179::-;33121:31;33117:1;33109:6;33105:14;33098:55;32981:179;:::o;33166:366::-;33308:3;33329:67;33393:2;33388:3;33329:67;:::i;:::-;33322:74;;33405:93;33494:3;33405:93;:::i;:::-;33523:2;33518:3;33514:12;33507:19;;33166:366;;;:::o;33538:419::-;33704:4;33742:2;33731:9;33727:18;33719:26;;33791:9;33785:4;33781:20;33777:1;33766:9;33762:17;33755:47;33819:131;33945:4;33819:131;:::i;:::-;33811:139;;33538:419;;;:::o;33963:98::-;34014:6;34048:5;34042:12;34032:22;;33963:98;;;:::o;34067:307::-;34135:1;34145:113;34159:6;34156:1;34153:13;34145:113;;;34244:1;34239:3;34235:11;34229:18;34225:1;34220:3;34216:11;34209:39;34181:2;34178:1;34174:10;34169:15;;34145:113;;;34276:6;34273:1;34270:13;34267:101;;;34356:1;34347:6;34342:3;34338:16;34331:27;34267:101;34116:258;34067:307;;;:::o;34380:373::-;34484:3;34512:38;34544:5;34512:38;:::i;:::-;34566:88;34647:6;34642:3;34566:88;:::i;:::-;34559:95;;34663:52;34708:6;34703:3;34696:4;34689:5;34685:16;34663:52;:::i;:::-;34740:6;34735:3;34731:16;34724:23;;34488:265;34380:373;;;;:::o;34759:271::-;34889:3;34911:93;35000:3;34991:6;34911:93;:::i;:::-;34904:100;;35021:3;35014:10;;34759:271;;;;:::o;35036:99::-;35088:6;35122:5;35116:12;35106:22;;35036:99;;;:::o;35141:102::-;35182:6;35233:2;35229:7;35224:2;35217:5;35213:14;35209:28;35199:38;;35141:102;;;:::o;35249:364::-;35337:3;35365:39;35398:5;35365:39;:::i;:::-;35420:71;35484:6;35479:3;35420:71;:::i;:::-;35413:78;;35500:52;35545:6;35540:3;35533:4;35526:5;35522:16;35500:52;:::i;:::-;35577:29;35599:6;35577:29;:::i;:::-;35572:3;35568:39;35561:46;;35341:272;35249:364;;;;:::o;35619:313::-;35732:4;35770:2;35759:9;35755:18;35747:26;;35819:9;35813:4;35809:20;35805:1;35794:9;35790:17;35783:47;35847:78;35920:4;35911:6;35847:78;:::i;:::-;35839:86;;35619:313;;;;:::o
Swarm Source
ipfs://0c3c3485409fe02a18b51e851af67e4ea4ada49c35608f340ba51ad79cb7d79c
Loading...
Loading
Loading...
Loading
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.