More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,263 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Membership Withd... | 16763318 | 661 days ago | IN | 0 ETH | 0.00205097 | ||||
Transfer Ownersh... | 16672566 | 674 days ago | IN | 0 ETH | 0.00088868 | ||||
Membership Withd... | 16660252 | 675 days ago | IN | 0 ETH | 0.00161406 | ||||
Membership Withd... | 16651672 | 677 days ago | IN | 0 ETH | 0.00220236 | ||||
Membership Withd... | 16592744 | 685 days ago | IN | 0 ETH | 0.00270707 | ||||
Membership Withd... | 16584916 | 686 days ago | IN | 0 ETH | 0.00349999 | ||||
Membership Withd... | 16372792 | 716 days ago | IN | 0 ETH | 0.00202927 | ||||
Membership Withd... | 16271082 | 730 days ago | IN | 0 ETH | 0.00100254 | ||||
Membership Withd... | 16201025 | 740 days ago | IN | 0 ETH | 0.00118989 | ||||
Membership Withd... | 16195093 | 740 days ago | IN | 0 ETH | 0.00099234 | ||||
Membership Withd... | 16158812 | 745 days ago | IN | 0 ETH | 0.00093377 | ||||
Membership Withd... | 16035702 | 763 days ago | IN | 0 ETH | 0.0010791 | ||||
Membership Withd... | 15998640 | 768 days ago | IN | 0 ETH | 0.00082984 | ||||
Membership Withd... | 15979580 | 770 days ago | IN | 0 ETH | 0.00106925 | ||||
Membership Withd... | 15875139 | 785 days ago | IN | 0 ETH | 0.00097481 | ||||
Membership Withd... | 15838893 | 790 days ago | IN | 0 ETH | 0.00076898 | ||||
Membership Withd... | 15700792 | 809 days ago | IN | 0 ETH | 0.00043 | ||||
Membership Withd... | 15641688 | 818 days ago | IN | 0 ETH | 0.00079072 | ||||
Membership Withd... | 15596682 | 824 days ago | IN | 0 ETH | 0.00126887 | ||||
Membership Withd... | 15584966 | 826 days ago | IN | 0 ETH | 0.00070201 | ||||
Membership Withd... | 15581688 | 826 days ago | IN | 0 ETH | 0.0005521 | ||||
Membership Withd... | 15543413 | 831 days ago | IN | 0 ETH | 0.00056364 | ||||
Membership Withd... | 15531507 | 833 days ago | IN | 0 ETH | 0.00037952 | ||||
Membership Withd... | 15509890 | 837 days ago | IN | 0 ETH | 0.00029917 | ||||
Membership Withd... | 15506169 | 837 days ago | IN | 0 ETH | 0.0007085 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
LiquidForge
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-10 */ /** *Submitted for verification at polygonscan.com on 2022-03-06 */ /** *Submitted for verification at polygonscan.com on 2022-03-03 */ // SPDX-License-Identifier: MIT 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); } 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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } 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; } } pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } } 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 make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } } 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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } 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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; contract LiquidForge is Ownable, IERC721Receiver, ReentrancyGuard, Pausable { using EnumerableSet for EnumerableSet.UintSet; uint256 public PAD_DISTRIBUTION_AMOUNT; uint256 public TIGER_DISTRIBUTION_AMOUNT; uint256 public FUNDAE_DISTRIBUTION_AMOUNT; uint256 public LEGENDS_DISTRIBUTION_AMOUNT; uint256 public AZUKI_DISTRIBUTION_AMOUNT; mapping (uint256 => bool) public padClaimed; mapping (uint256 => bool) public tigerClaimed; mapping (uint256 => bool) public fundaeClaimed; mapping (uint256 => bool) public legendsClaimed; mapping (uint256 => bool) public azukiClaimed; //addresses address public legendsAddress; address public padAddress; address public tigerAddress; address public cubsAddress; address public fundaeAddress; address public azukiAddress; address public membershipAddress; address public erc20Address; //uint256's uint256 public expiration; uint256 public minBlockToClaim; //rate governs how often you receive your token uint256 public legendsRate; uint256 public padRate; uint256 public tigerRate; uint256 public cubsRate; uint256 public fundaeRate; uint256 public azukiRate; // mappings mapping(uint256 => uint256) public _legendsForgeBlocks; mapping(uint256 => address) public _legendsTokenForges; mapping(uint256 => uint256) public _padForgeBlocks; mapping(uint256 => address) public _padTokenForges; mapping(uint256 => uint256) public _tigerForgeBlocks; mapping(uint256 => address) public _tigerTokenForges; mapping(uint256 => uint256) public _cubsForgeBlocks; mapping(uint256 => address) public _cubsTokenForges; mapping(uint256 => uint256) public _fundaeForgeBlocks; mapping(uint256 => address) public _fundaeTokenForges; mapping(uint256 => uint256) public _azukiForgeBlocks; mapping(uint256 => address) public _azukiTokenForges; mapping(address => EnumerableSet.UintSet) private _membershipForges; mapping(address => uint256) public _membershipForgeBlocks; constructor( address _padAddress, address _legendsAddress, address _tigerAddress, address _cubsAddress, address _fundaeAddress, address _azukiAddress, address _membershipAddress , address _erc20Address ) { padAddress = _padAddress; padRate = 0; legendsAddress = _legendsAddress; legendsRate = 0; tigerAddress = _tigerAddress; tigerRate = 0; cubsAddress = _cubsAddress; cubsRate = 0; fundaeAddress = _fundaeAddress; fundaeRate = 0; azukiAddress = _azukiAddress; azukiRate = 0; expiration = block.number + 0; erc20Address = _erc20Address; membershipAddress = _membershipAddress; PAD_DISTRIBUTION_AMOUNT = 5000000000000000000; TIGER_DISTRIBUTION_AMOUNT = 5000000000000000000; FUNDAE_DISTRIBUTION_AMOUNT = 5000000000000000000; AZUKI_DISTRIBUTION_AMOUNT = 5000000000000000000; LEGENDS_DISTRIBUTION_AMOUNT = 25000000000000000000; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function revokeLegendReward(uint256[] calldata tokenIds) public onlyOwner { for(uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if(!legendsClaimed[tokenId]) { legendsClaimed[tokenId] = true; } } } // Set this to a expiration block to disable the ability to continue accruing tokens past that block number. which is caclculated as current block plus the parm // Set a multiplier for how many tokens to earn each time a block passes. and the min number of blocks needed to pass to claim rewards function setRates(uint256 _legendsRate,uint256 _cubsRate, uint256 _padRate, uint256 _tigerRate, uint256 _fundaeRate, uint256 _azukiRate, uint256 _minBlockToClaim, uint256 _expiration ) public onlyOwner() { legendsRate = _legendsRate; cubsRate = _cubsRate; padRate = _padRate; tigerRate = _tigerRate; fundaeRate = _fundaeRate; azukiRate = _azukiRate; minBlockToClaim = _minBlockToClaim; expiration = block.number + _expiration; } function rewardClaimable(uint256 tokenId, address nftaddress ) public view returns (bool) { uint256 blockCur = Math.min(block.number, expiration); if(nftaddress == legendsAddress && _legendsForgeBlocks[tokenId] > 0){ return (blockCur - _legendsForgeBlocks[tokenId] > minBlockToClaim); } if(nftaddress == padAddress && _padForgeBlocks[tokenId] > 0){ return (blockCur - _padForgeBlocks[tokenId] > minBlockToClaim); } if(nftaddress == tigerAddress && _tigerForgeBlocks[tokenId] > 0){ return (blockCur - _tigerForgeBlocks[tokenId] > minBlockToClaim); } if(nftaddress == cubsAddress && _cubsForgeBlocks[tokenId] > 0){ return (blockCur - _cubsForgeBlocks[tokenId] > minBlockToClaim); } if(nftaddress == fundaeAddress && _fundaeForgeBlocks[tokenId] > 0){ return (blockCur - _fundaeForgeBlocks[tokenId] > minBlockToClaim); } if(nftaddress == azukiAddress && _azukiForgeBlocks[tokenId] > 0){ return (blockCur - _azukiForgeBlocks[tokenId] > minBlockToClaim); } return false; } //reward amount by address/tokenIds[] function calculateReward(address account, uint256 tokenId,address nftaddress ) public view returns (uint256) { if (nftaddress == legendsAddress){ require(Math.min(block.number, expiration) > _legendsForgeBlocks[tokenId], "Invalid blocks"); return legendsRate * (_legendsTokenForges[tokenId] == account ? 1 : 0) * (Math.min(block.number, expiration) - Math.max(_legendsForgeBlocks[tokenId],_membershipForgeBlocks[account]) ); } if (nftaddress == tigerAddress){ require(Math.min(block.number, expiration) > _tigerForgeBlocks[tokenId], "Invalid blocks"); return tigerRate * (_tigerTokenForges[tokenId] == account ? 1 : 0) * (Math.min(block.number, expiration) - Math.max(_tigerForgeBlocks[tokenId],_membershipForgeBlocks[account]) ); } if (nftaddress == cubsAddress){ require(Math.min(block.number, expiration) > _cubsForgeBlocks[tokenId], "Invalid blocks"); return cubsRate * (_cubsTokenForges[tokenId] == account ? 1 : 0) * (Math.min(block.number, expiration) - Math.max(_cubsForgeBlocks[tokenId],_membershipForgeBlocks[account]) ); } if (nftaddress == padAddress){ require(Math.min(block.number, expiration) > _padForgeBlocks[tokenId], "Invalid blocks"); return padRate * (_padTokenForges[tokenId] == account ? 1 : 0) * (Math.min(block.number, expiration) - Math.max(_padForgeBlocks[tokenId],_membershipForgeBlocks[account]) ); } if (nftaddress == azukiAddress){ require(Math.min(block.number, expiration) > _azukiForgeBlocks[tokenId], "Invalid blocks"); return azukiRate * (_azukiTokenForges[tokenId] == account ? 1 : 0) * (Math.min(block.number, expiration) - Math.max(_azukiForgeBlocks[tokenId],_membershipForgeBlocks[account]) ); } return 0; } //reward claim function function ClaimRewards(uint256[] calldata tokenIds, address nftaddress) public whenNotPaused { uint256 reward; uint256 blockCur = Math.min(block.number, expiration); EnumerableSet.UintSet storage forgeSet = _membershipForges[msg.sender]; require(forgeSet.length() > 0, "No Membership Forged"); if (nftaddress==legendsAddress) { for (uint256 i; i < tokenIds.length; i++) { require(IERC721(legendsAddress).ownerOf(tokenIds[i]) == msg.sender); require(blockCur - _legendsForgeBlocks[tokenIds[i]] > minBlockToClaim); } for (uint256 i; i < tokenIds.length; i++) { reward += calculateReward(msg.sender, tokenIds[i],legendsAddress); _legendsForgeBlocks[tokenIds[i]] = blockCur; } for(uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if(!legendsClaimed[tokenId]) { legendsClaimed[tokenId] = true; reward += LEGENDS_DISTRIBUTION_AMOUNT; } } } if(nftaddress==padAddress) { for (uint256 i; i < tokenIds.length; i++) { require(IERC721(padAddress).ownerOf(tokenIds[i]) == msg.sender); require(blockCur - _padForgeBlocks[tokenIds[i]] > minBlockToClaim); } for (uint256 i; i < tokenIds.length; i++) { reward += calculateReward(msg.sender, tokenIds[i],padAddress); _padForgeBlocks[tokenIds[i]] = blockCur; } for(uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if(!padClaimed[tokenId]) { padClaimed[tokenId] = true; reward += PAD_DISTRIBUTION_AMOUNT; } } } if(nftaddress==tigerAddress){ for (uint256 i; i < tokenIds.length; i++) { require(IERC721(tigerAddress).ownerOf(tokenIds[i]) == msg.sender); require(blockCur - _tigerForgeBlocks[tokenIds[i]] > minBlockToClaim); } for (uint256 i; i < tokenIds.length; i++) { reward += calculateReward(msg.sender, tokenIds[i],tigerAddress); _tigerForgeBlocks[tokenIds[i]] = blockCur; } for(uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if(!tigerClaimed[tokenId]) { tigerClaimed[tokenId] = true; reward += TIGER_DISTRIBUTION_AMOUNT; } } } if(nftaddress==cubsAddress){ for (uint256 i; i < tokenIds.length; i++) { require(IERC721(cubsAddress).ownerOf(tokenIds[i]) == msg.sender); require(blockCur - _cubsForgeBlocks[tokenIds[i]] > minBlockToClaim); } for (uint256 i; i < tokenIds.length; i++) { reward += calculateReward(msg.sender, tokenIds[i],cubsAddress); _cubsForgeBlocks[tokenIds[i]] = blockCur; } } if (nftaddress==fundaeAddress){ for (uint256 i; i < tokenIds.length; i++) { require(IERC721(fundaeAddress).ownerOf(tokenIds[i]) == msg.sender); require(blockCur - _fundaeForgeBlocks[tokenIds[i]] > minBlockToClaim); } for (uint256 i; i < tokenIds.length; i++) { reward += calculateReward(msg.sender, tokenIds[i],fundaeAddress); _fundaeForgeBlocks[tokenIds[i]] = blockCur; } for(uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if(!fundaeClaimed[tokenId]) { fundaeClaimed[tokenId] = true; reward += FUNDAE_DISTRIBUTION_AMOUNT; } } } if(nftaddress==azukiAddress){ for (uint256 i; i < tokenIds.length; i++) { require(IERC721(azukiAddress).ownerOf(tokenIds[i]) == msg.sender); require(blockCur - _azukiForgeBlocks[tokenIds[i]] > minBlockToClaim); } for (uint256 i; i < tokenIds.length; i++) { reward += calculateReward(msg.sender, tokenIds[i],azukiAddress); _azukiForgeBlocks[tokenIds[i]] = blockCur; } for(uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if(!azukiClaimed[tokenId]) { azukiClaimed[tokenId] = true; reward += AZUKI_DISTRIBUTION_AMOUNT; } } } if (reward > 0) { IERC20(erc20Address).transfer(msg.sender, reward); } } //forge function. function Forge(uint256[] calldata tokenIds,address nftaddress) external whenNotPaused { uint256 blockCur = block.number; EnumerableSet.UintSet storage forgeSet = _membershipForges[msg.sender]; require(forgeSet.length() > 0, "No Membership Forged"); for (uint256 i; i < tokenIds.length; i++) { require(IERC721(nftaddress).ownerOf(tokenIds[i]) == msg.sender,"you do not own that NFT"); } if (nftaddress==legendsAddress) { for (uint256 i; i < tokenIds.length; i++) { require(_legendsTokenForges[tokenIds[i]] != msg.sender); } for (uint256 i; i < tokenIds.length; i++) { _legendsTokenForges[tokenIds[i]] = msg.sender; _legendsForgeBlocks[tokenIds[i]] = blockCur; } } if (nftaddress==padAddress) { for (uint256 i; i < tokenIds.length; i++) { require(_padTokenForges[tokenIds[i]] != msg.sender); } for (uint256 i; i < tokenIds.length; i++) { _padTokenForges[tokenIds[i]] = msg.sender; _padForgeBlocks[tokenIds[i]] = blockCur; } } if (nftaddress==tigerAddress){ for (uint256 i; i < tokenIds.length; i++) { require(_tigerTokenForges[tokenIds[i]] != msg.sender); } for (uint256 i; i < tokenIds.length; i++) { _tigerTokenForges[tokenIds[i]] = msg.sender; _tigerForgeBlocks[tokenIds[i]] = blockCur; } } if (nftaddress==cubsAddress){ for (uint256 i; i < tokenIds.length; i++) { require(_cubsTokenForges[tokenIds[i]] != msg.sender); } for (uint256 i; i < tokenIds.length; i++) { _cubsTokenForges[tokenIds[i]] = msg.sender; _cubsForgeBlocks[tokenIds[i]] = blockCur; } } if (nftaddress==fundaeAddress) { for (uint256 i; i < tokenIds.length; i++) { require(_fundaeTokenForges[tokenIds[i]] != msg.sender); } for (uint256 i; i < tokenIds.length; i++) { _fundaeTokenForges[tokenIds[i]] = msg.sender; _fundaeForgeBlocks[tokenIds[i]] = blockCur; } } if (nftaddress==azukiAddress) { for (uint256 i; i < tokenIds.length; i++) { require(_azukiTokenForges[tokenIds[i]] != msg.sender); } for (uint256 i; i < tokenIds.length; i++) { _azukiTokenForges[tokenIds[i]] = msg.sender; _azukiForgeBlocks[tokenIds[i]] = blockCur; } } } //check forge amount. function membershipForgesOf(address account) external view returns (uint256[] memory) { EnumerableSet.UintSet storage forgeSet = _membershipForges[account]; uint256[] memory tokenIds = new uint256[] (forgeSet.length()); for (uint256 i; i < forgeSet.length(); i++) { tokenIds[i] = forgeSet.at(i); } return tokenIds; } //forge function. function membershipForge(uint256[] calldata tokenIds) external whenNotPaused { uint256 blockCur = block.number; require(msg.sender != membershipAddress, "Invalid address"); for (uint256 i; i < tokenIds.length; i++) { IERC721(membershipAddress).safeTransferFrom( msg.sender, address(this), tokenIds[i], "" ); _membershipForges[msg.sender].add(tokenIds[i]); } _membershipForgeBlocks[msg.sender] = blockCur; } //withdrawal function. function membershipWithdraw(uint256[] calldata tokenIds) external whenNotPaused nonReentrant() { for (uint256 i; i < tokenIds.length; i++) { require( _membershipForges[msg.sender].contains(tokenIds[i]), "Staking: token not forgeed" ); _membershipForges[msg.sender].remove(tokenIds[i]); IERC721(membershipAddress).safeTransferFrom( address(this), msg.sender, tokenIds[i], "" ); } } //withdrawal function. function withdrawTokens() external onlyOwner { uint256 tokenSupply = IERC20(erc20Address).balanceOf(address(this)); IERC20(erc20Address).transfer(msg.sender, tokenSupply); } function onERC721Received( address, address, uint256, bytes calldata ) external pure override returns (bytes4) { return IERC721Receiver.onERC721Received.selector; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_padAddress","type":"address"},{"internalType":"address","name":"_legendsAddress","type":"address"},{"internalType":"address","name":"_tigerAddress","type":"address"},{"internalType":"address","name":"_cubsAddress","type":"address"},{"internalType":"address","name":"_fundaeAddress","type":"address"},{"internalType":"address","name":"_azukiAddress","type":"address"},{"internalType":"address","name":"_membershipAddress","type":"address"},{"internalType":"address","name":"_erc20Address","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"AZUKI_DISTRIBUTION_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address","name":"nftaddress","type":"address"}],"name":"ClaimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FUNDAE_DISTRIBUTION_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address","name":"nftaddress","type":"address"}],"name":"Forge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LEGENDS_DISTRIBUTION_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAD_DISTRIBUTION_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIGER_DISTRIBUTION_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_azukiForgeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_azukiTokenForges","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_cubsForgeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_cubsTokenForges","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_fundaeForgeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_fundaeTokenForges","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_legendsForgeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_legendsTokenForges","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_membershipForgeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_padForgeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_padTokenForges","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_tigerForgeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_tigerTokenForges","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"azukiAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"azukiClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"azukiRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"nftaddress","type":"address"}],"name":"calculateReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cubsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cubsRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc20Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expiration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundaeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fundaeClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundaeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legendsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"legendsClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legendsRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"membershipAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"membershipForge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"membershipForgesOf","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"membershipWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minBlockToClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"padAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"padClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"padRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"revokeLegendReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"nftaddress","type":"address"}],"name":"rewardClaimable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_legendsRate","type":"uint256"},{"internalType":"uint256","name":"_cubsRate","type":"uint256"},{"internalType":"uint256","name":"_padRate","type":"uint256"},{"internalType":"uint256","name":"_tigerRate","type":"uint256"},{"internalType":"uint256","name":"_fundaeRate","type":"uint256"},{"internalType":"uint256","name":"_azukiRate","type":"uint256"},{"internalType":"uint256","name":"_minBlockToClaim","type":"uint256"},{"internalType":"uint256","name":"_expiration","type":"uint256"}],"name":"setRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tigerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tigerClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tigerRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200602138038062006021833981810160405281019062000037919062000456565b620000576200004b6200032060201b60201c565b6200032860201b60201c565b600180819055506000600260006101000a81548160ff02191690831515021790555087600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060188190555086600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060178190555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060198190555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601a8190555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601b8190555082601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601c819055506000436200023e919062000558565b60158190555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550674563918244f40000600381905550674563918244f40000600481905550674563918244f40000600581905550674563918244f4000060078190555068015af1d78b58c400006006819055505050505050505050620005b5565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200041e82620003f1565b9050919050565b620004308162000411565b81146200043c57600080fd5b50565b600081519050620004508162000425565b92915050565b600080600080600080600080610100898b0312156200047a5762000479620003ec565b5b60006200048a8b828c016200043f565b98505060206200049d8b828c016200043f565b9750506040620004b08b828c016200043f565b9650506060620004c38b828c016200043f565b9550506080620004d68b828c016200043f565b94505060a0620004e98b828c016200043f565b93505060c0620004fc8b828c016200043f565b92505060e06200050f8b828c016200043f565b9150509295985092959890939650565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000565826200051f565b915062000572836200051f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620005aa57620005a962000529565b5b828201905092915050565b615a5c80620005c56000396000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c806382b875b8116101d3578063b5b4f4b911610104578063c84150a0116100a2578063d6e61d711161007c578063d6e61d7114610aa1578063f28b444414610abf578063f2fde38b14610aef578063fcf5ec9f14610b0b57610378565b8063c84150a014610a25578063d063a1b714610a41578063d4e92e6e14610a7157610378565b8063bc7de05c116100de578063bc7de05c1461098b578063bd8a55bc146109a7578063c0da146a146109d7578063c5e92995146109f557610378565b8063b5b4f4b91461091f578063bb4705281461093d578063bbe25bf31461095b57610378565b806391e139c511610171578063a430990f1161014b578063a430990f14610871578063a58efdbd146108a1578063ab2abf06146108d1578063b1a1e45d1461090157610378565b806391e139c5146107f35780639f85180214610811578063a020ec161461084157610378565b806386f69bed116101ad57806386f69bed1461077d57806387c1ae2f1461079b5780638d8f2adb146107cb5780638da5cb5b146107d557610378565b806382b875b8146107375780638456cb5914610755578063856d788f1461075f57610378565b80634665096d116102ad578063693830e61161024b578063715018a611610225578063715018a6146106c157806371d6209e146106cb5780637d5c92cb146106fb578063809db0c11461071957610378565b8063693830e6146106455780636a576b0c146106755780636f38adb8146106a557610378565b80635c975abb116102875780635c975abb146105bf57806362c56930146105dd578063670652361461060d57806367f637021461062957610378565b80634665096d1461055357806353b0f08a146105715780635c193f741461058f57610378565b80632d9281361161031a5780633eeda24d116102f45780633eeda24d146104df5780633f4ba83a146104fd578063420e950514610507578063432eb1911461052357610378565b80632d928136146104735780632e7bffef146104915780633447fd02146104af57610378565b80631c8a1e20116103565780631c8a1e20146103fb578063276184ae146104195780632821f1e7146104375780632bf87f5a1461045557610378565b80630443165d1461037d578063079872491461039b578063150b7a02146103cb575b600080fd5b610385610b3b565b6040516103929190614c97565b60405180910390f35b6103b560048036038101906103b09190614cf2565b610b61565b6040516103c29190614d3a565b60405180910390f35b6103e560048036038101906103e09190614de6565b610b81565b6040516103f29190614ea9565b60405180910390f35b610403610b96565b6040516104109190614c97565b60405180910390f35b610421610bbc565b60405161042e9190614c97565b60405180910390f35b61043f610be2565b60405161044c9190614c97565b60405180910390f35b61045d610c08565b60405161046a9190614ed3565b60405180910390f35b61047b610c0e565b6040516104889190614ed3565b60405180910390f35b610499610c14565b6040516104a69190614ed3565b60405180910390f35b6104c960048036038101906104c49190614eee565b610c1a565b6040516104d69190614fd9565b60405180910390f35b6104e7610d17565b6040516104f49190614ed3565b60405180910390f35b610505610d1d565b005b610521600480360381019061051c9190615051565b610da3565b005b61053d60048036038101906105389190614cf2565b611001565b60405161054a9190614d3a565b60405180910390f35b61055b611021565b6040516105689190614ed3565b60405180910390f35b610579611027565b6040516105869190614c97565b60405180910390f35b6105a960048036038101906105a4919061509e565b61104d565b6040516105b69190614ed3565b60405180910390f35b6105c76118f8565b6040516105d49190614d3a565b60405180910390f35b6105f760048036038101906105f29190614cf2565b61190f565b6040516106049190614ed3565b60405180910390f35b61062760048036038101906106229190615051565b611927565b005b610643600480360381019061063e9190615051565b611ba8565b005b61065f600480360381019061065a9190614cf2565b611cb9565b60405161066c9190614ed3565b60405180910390f35b61068f600480360381019061068a9190614cf2565b611cd1565b60405161069c9190614c97565b60405180910390f35b6106bf60048036038101906106ba91906150f1565b611d04565b005b6106c9611dcd565b005b6106e560048036038101906106e09190614eee565b611e55565b6040516106f29190614ed3565b60405180910390f35b610703611e6d565b6040516107109190614ed3565b60405180910390f35b610721611e73565b60405161072e9190614c97565b60405180910390f35b61073f611e99565b60405161074c9190614ed3565b60405180910390f35b61075d611e9f565b005b610767611f25565b6040516107749190614ed3565b60405180910390f35b610785611f2b565b6040516107929190614ed3565b60405180910390f35b6107b560048036038101906107b09190614cf2565b611f31565b6040516107c29190614ed3565b60405180910390f35b6107d3611f49565b005b6107dd612127565b6040516107ea9190614c97565b60405180910390f35b6107fb612150565b6040516108089190614ed3565b60405180910390f35b61082b60048036038101906108269190614cf2565b612156565b6040516108389190614d3a565b60405180910390f35b61085b60048036038101906108569190614cf2565b612176565b6040516108689190614d3a565b60405180910390f35b61088b60048036038101906108869190614cf2565b612196565b6040516108989190614ed3565b60405180910390f35b6108bb60048036038101906108b69190614cf2565b6121ae565b6040516108c89190614c97565b60405180910390f35b6108eb60048036038101906108e69190614cf2565b6121e1565b6040516108f89190614c97565b60405180910390f35b610909612214565b6040516109169190614ed3565b60405180910390f35b61092761221a565b6040516109349190614c97565b60405180910390f35b610945612240565b6040516109529190614ed3565b60405180910390f35b61097560048036038101906109709190614cf2565b612246565b6040516109829190614d3a565b60405180910390f35b6109a560048036038101906109a091906151a7565b612266565b005b6109c160048036038101906109bc9190614cf2565b61356e565b6040516109ce9190614c97565b60405180910390f35b6109df6135a1565b6040516109ec9190614c97565b60405180910390f35b610a0f6004803603810190610a0a9190614cf2565b6135c7565b604051610a1c9190614ed3565b60405180910390f35b610a3f6004803603810190610a3a91906151a7565b6135df565b005b610a5b6004803603810190610a569190614cf2565b61425a565b604051610a689190614c97565b60405180910390f35b610a8b6004803603810190610a869190615207565b61428d565b604051610a989190614d3a565b60405180910390f35b610aa961466a565b604051610ab69190614ed3565b60405180910390f35b610ad96004803603810190610ad49190614cf2565b614670565b604051610ae69190614c97565b60405180910390f35b610b096004803603810190610b049190614eee565b6146a2565b005b610b256004803603810190610b209190614cf2565b61479a565b604051610b329190614ed3565b60405180910390f35b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600063150b7a0260e01b905095945050505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b601b5481565b60055481565b60606000602960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000610c6a826147b2565b67ffffffffffffffff811115610c8357610c82615247565b5b604051908082528060200260200182016040528015610cb15781602001602082028036833780820191505090505b50905060005b610cc0836147b2565b811015610d0c57610cda81846147c790919063ffffffff16565b828281518110610ced57610cec615276565b5b6020026020010181815250508080610d04906152d4565b915050610cb7565b508092505050919050565b60035481565b610d256147e1565b73ffffffffffffffffffffffffffffffffffffffff16610d43612127565b73ffffffffffffffffffffffffffffffffffffffff1614610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d909061537a565b60405180910390fd5b610da16147e9565b565b610dab6118f8565b15610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de2906153e6565b60405180910390fd5b6000439050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7890615452565b60405180910390fd5b60005b83839050811015610fb757601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3330878786818110610ee257610ee1615276565b5b905060200201356040518463ffffffff1660e01b8152600401610f07939291906154a9565b600060405180830381600087803b158015610f2157600080fd5b505af1158015610f35573d6000803e3d6000fd5b50505050610fa3848483818110610f4f57610f4e615276565b5b90506020020135602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061488b90919063ffffffff16565b508080610faf906152d4565b915050610e84565b5080602a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b60086020528060005260406000206000915054906101000a900460ff1681565b60155481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561120857601d6000848152602001908152602001600020546110c5436015546148a5565b11611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc9061553f565b60405180910390fd5b611161601d600085815260200190815260200160002054602a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148be565b61116d436015546148a5565b611177919061555f565b8473ffffffffffffffffffffffffffffffffffffffff16601e600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e45760006111e7565b60015b60ff166017546111f79190615593565b6112019190615593565b90506118f1565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113c157602160008481526020019081526020016000205461127e436015546148a5565b116112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b59061553f565b60405180910390fd5b61131a6021600085815260200190815260200160002054602a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148be565b611326436015546148a5565b611330919061555f565b8473ffffffffffffffffffffffffffffffffffffffff166022600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461139d5760006113a0565b60015b60ff166019546113b09190615593565b6113ba9190615593565b90506118f1565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561157a576023600084815260200190815260200160002054611437436015546148a5565b11611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e9061553f565b60405180910390fd5b6114d36023600085815260200190815260200160002054602a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148be565b6114df436015546148a5565b6114e9919061555f565b8473ffffffffffffffffffffffffffffffffffffffff166024600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611556576000611559565b60015b60ff16601a546115699190615593565b6115739190615593565b90506118f1565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561173357601f6000848152602001908152602001600020546115f0436015546148a5565b11611630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116279061553f565b60405180910390fd5b61168c601f600085815260200190815260200160002054602a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148be565b611698436015546148a5565b6116a2919061555f565b8473ffffffffffffffffffffffffffffffffffffffff166020600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170f576000611712565b60015b60ff166018546117229190615593565b61172c9190615593565b90506118f1565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ec5760276000848152602001908152602001600020546117a9436015546148a5565b116117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e09061553f565b60405180910390fd5b6118456027600085815260200190815260200160002054602a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148be565b611851436015546148a5565b61185b919061555f565b8473ffffffffffffffffffffffffffffffffffffffff166028600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c85760006118cb565b60015b60ff16601c546118db9190615593565b6118e59190615593565b90506118f1565b600090505b9392505050565b6000600260009054906101000a900460ff16905090565b60256020528060005260406000206000915090505481565b61192f6118f8565b1561196f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611966906153e6565b60405180910390fd5b600260015414156119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac90615639565b60405180910390fd5b600260018190555060005b82829050811015611b9c57611a358383838181106119e1576119e0615276565b5b90506020020135602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206148d890919063ffffffff16565b611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b906156a5565b60405180910390fd5b611ade838383818110611a8a57611a89615276565b5b90506020020135602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206148f290919063ffffffff16565b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3033868686818110611b3257611b31615276565b5b905060200201356040518463ffffffff1660e01b8152600401611b57939291906154a9565b600060405180830381600087803b158015611b7157600080fd5b505af1158015611b85573d6000803e3d6000fd5b505050508080611b94906152d4565b9150506119c0565b50600180819055505050565b611bb06147e1565b73ffffffffffffffffffffffffffffffffffffffff16611bce612127565b73ffffffffffffffffffffffffffffffffffffffff1614611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b9061537a565b60405180910390fd5b60005b82829050811015611cb4576000838383818110611c4757611c46615276565b5b905060200201359050600b600082815260200190815260200160002060009054906101000a900460ff16611ca2576001600b600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080611cad906152d4565b9050611c27565b505050565b60216020528060005260406000206000915090505481565b60246020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d0c6147e1565b73ffffffffffffffffffffffffffffffffffffffff16611d2a612127565b73ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d779061537a565b60405180910390fd5b8760178190555086601a81905550856018819055508460198190555083601b8190555082601c81905550816016819055508043611dbd91906156c5565b6015819055505050505050505050565b611dd56147e1565b73ffffffffffffffffffffffffffffffffffffffff16611df3612127565b73ffffffffffffffffffffffffffffffffffffffff1614611e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e409061537a565b60405180910390fd5b611e53600061490c565b565b602a6020528060005260406000206000915090505481565b60045481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b611ea76147e1565b73ffffffffffffffffffffffffffffffffffffffff16611ec5612127565b73ffffffffffffffffffffffffffffffffffffffff1614611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f129061537a565b60405180910390fd5b611f236149d0565b565b60185481565b60075481565b601d6020528060005260406000206000915090505481565b611f516147e1565b73ffffffffffffffffffffffffffffffffffffffff16611f6f612127565b73ffffffffffffffffffffffffffffffffffffffff1614611fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbc9061537a565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120229190614c97565b60206040518083038186803b15801561203a57600080fd5b505afa15801561204e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120729190615730565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016120d192919061575d565b602060405180830381600087803b1580156120eb57600080fd5b505af11580156120ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212391906157b2565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a5481565b600b6020528060005260406000206000915054906101000a900460ff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b601f6020528060005260406000206000915090505481565b60226020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60286020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b600a6020528060005260406000206000915054906101000a900460ff1681565b61226e6118f8565b156122ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a5906153e6565b60405180910390fd5b6000806122bd436015546148a5565b90506000602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061230d826147b2565b1161234d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123449061582b565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561264d5760005b86869050811015612504573373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e89898581811061241957612418615276565b5b905060200201356040518263ffffffff1660e01b815260040161243c9190614ed3565b60206040518083038186803b15801561245457600080fd5b505afa158015612468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248c9190615860565b73ffffffffffffffffffffffffffffffffffffffff16146124ac57600080fd5b601654601d60008989858181106124c6576124c5615276565b5b90506020020135815260200190815260200160002054846124e7919061555f565b116124f157600080fd5b80806124fc906152d4565b9150506123a6565b5060005b868690508110156125aa576125593388888481811061252a57612529615276565b5b90506020020135600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661104d565b8461256491906156c5565b935082601d600089898581811061257e5761257d615276565b5b9050602002013581526020019081526020016000208190555080806125a2906152d4565b915050612508565b5060005b8686905081101561264b5760008787838181106125ce576125cd615276565b5b905060200201359050600b600082815260200190815260200160002060009054906101000a900460ff16612639576001600b600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506006548561263691906156c5565b94505b5080612644906152d4565b90506125ae565b505b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561294d5760005b86869050811015612804573373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e89898581811061271957612718615276565b5b905060200201356040518263ffffffff1660e01b815260040161273c9190614ed3565b60206040518083038186803b15801561275457600080fd5b505afa158015612768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278c9190615860565b73ffffffffffffffffffffffffffffffffffffffff16146127ac57600080fd5b601654601f60008989858181106127c6576127c5615276565b5b90506020020135815260200190815260200160002054846127e7919061555f565b116127f157600080fd5b80806127fc906152d4565b9150506126a6565b5060005b868690508110156128aa576128593388888481811061282a57612829615276565b5b90506020020135600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661104d565b8461286491906156c5565b935082601f600089898581811061287e5761287d615276565b5b9050602002013581526020019081526020016000208190555080806128a2906152d4565b915050612808565b5060005b8686905081101561294b5760008787838181106128ce576128cd615276565b5b9050602002013590506008600082815260200190815260200160002060009054906101000a900460ff166129395760016008600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506003548561293691906156c5565b94505b5080612944906152d4565b90506128ae565b505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c4d5760005b86869050811015612b04573373ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e898985818110612a1957612a18615276565b5b905060200201356040518263ffffffff1660e01b8152600401612a3c9190614ed3565b60206040518083038186803b158015612a5457600080fd5b505afa158015612a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8c9190615860565b73ffffffffffffffffffffffffffffffffffffffff1614612aac57600080fd5b60165460216000898985818110612ac657612ac5615276565b5b9050602002013581526020019081526020016000205484612ae7919061555f565b11612af157600080fd5b8080612afc906152d4565b9150506129a6565b5060005b86869050811015612baa57612b5933888884818110612b2a57612b29615276565b5b90506020020135600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661104d565b84612b6491906156c5565b93508260216000898985818110612b7e57612b7d615276565b5b905060200201358152602001908152602001600020819055508080612ba2906152d4565b915050612b08565b5060005b86869050811015612c4b576000878783818110612bce57612bcd615276565b5b9050602002013590506009600082815260200190815260200160002060009054906101000a900460ff16612c395760016009600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060045485612c3691906156c5565b94505b5080612c44906152d4565b9050612bae565b505b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612eac5760005b86869050811015612e04573373ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e898985818110612d1957612d18615276565b5b905060200201356040518263ffffffff1660e01b8152600401612d3c9190614ed3565b60206040518083038186803b158015612d5457600080fd5b505afa158015612d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8c9190615860565b73ffffffffffffffffffffffffffffffffffffffff1614612dac57600080fd5b60165460236000898985818110612dc657612dc5615276565b5b9050602002013581526020019081526020016000205484612de7919061555f565b11612df157600080fd5b8080612dfc906152d4565b915050612ca6565b5060005b86869050811015612eaa57612e5933888884818110612e2a57612e29615276565b5b90506020020135601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661104d565b84612e6491906156c5565b93508260236000898985818110612e7e57612e7d615276565b5b905060200201358152602001908152602001600020819055508080612ea2906152d4565b915050612e08565b505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156131ac5760005b86869050811015613063573373ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e898985818110612f7857612f77615276565b5b905060200201356040518263ffffffff1660e01b8152600401612f9b9190614ed3565b60206040518083038186803b158015612fb357600080fd5b505afa158015612fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612feb9190615860565b73ffffffffffffffffffffffffffffffffffffffff161461300b57600080fd5b6016546025600089898581811061302557613024615276565b5b9050602002013581526020019081526020016000205484613046919061555f565b1161305057600080fd5b808061305b906152d4565b915050612f05565b5060005b86869050811015613109576130b83388888481811061308957613088615276565b5b90506020020135601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661104d565b846130c391906156c5565b935082602560008989858181106130dd576130dc615276565b5b905060200201358152602001908152602001600020819055508080613101906152d4565b915050613067565b5060005b868690508110156131aa57600087878381811061312d5761312c615276565b5b905060200201359050600a600082815260200190815260200160002060009054906101000a900460ff16613198576001600a600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506005548561319591906156c5565b94505b50806131a3906152d4565b905061310d565b505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156134ac5760005b86869050811015613363573373ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e89898581811061327857613277615276565b5b905060200201356040518263ffffffff1660e01b815260040161329b9190614ed3565b60206040518083038186803b1580156132b357600080fd5b505afa1580156132c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132eb9190615860565b73ffffffffffffffffffffffffffffffffffffffff161461330b57600080fd5b6016546027600089898581811061332557613324615276565b5b9050602002013581526020019081526020016000205484613346919061555f565b1161335057600080fd5b808061335b906152d4565b915050613205565b5060005b86869050811015613409576133b83388888481811061338957613388615276565b5b90506020020135601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661104d565b846133c391906156c5565b935082602760008989858181106133dd576133dc615276565b5b905060200201358152602001908152602001600020819055508080613401906152d4565b915050613367565b5060005b868690508110156134aa57600087878381811061342d5761342c615276565b5b905060200201359050600c600082815260200190815260200160002060009054906101000a900460ff16613498576001600c600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506007548561349591906156c5565b94505b50806134a3906152d4565b905061340d565b505b600083111561356657601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b815260040161351292919061575d565b602060405180830381600087803b15801561352c57600080fd5b505af1158015613540573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356491906157b2565b505b505050505050565b601e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60236020528060005260406000206000915090505481565b6135e76118f8565b15613627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361e906153e6565b60405180910390fd5b60004390506000602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061367a826147b2565b116136ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b19061582b565b60405180910390fd5b60005b858590508110156137ea573373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e88888581811061370e5761370d615276565b5b905060200201356040518263ffffffff1660e01b81526004016137319190614ed3565b60206040518083038186803b15801561374957600080fd5b505afa15801561375d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137819190615860565b73ffffffffffffffffffffffffffffffffffffffff16146137d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ce906158d9565b60405180910390fd5b80806137e2906152d4565b9150506136bd565b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139a75760005b858590508110156138e7573373ffffffffffffffffffffffffffffffffffffffff16601e600088888581811061387d5761387c615276565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156138d457600080fd5b80806138df906152d4565b915050613844565b5060005b858590508110156139a55733601e600088888581811061390e5761390d615276565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601d600088888581811061397957613978615276565b5b90506020020135815260200190815260200160002081905550808061399d906152d4565b9150506138eb565b505b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b635760005b85859050811015613aa3573373ffffffffffffffffffffffffffffffffffffffff1660206000888885818110613a3957613a38615276565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613a9057600080fd5b8080613a9b906152d4565b915050613a00565b5060005b85859050811015613b61573360206000888885818110613aca57613ac9615276565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601f6000888885818110613b3557613b34615276565b5b905060200201358152602001908152602001600020819055508080613b59906152d4565b915050613aa7565b505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d1f5760005b85859050811015613c5f573373ffffffffffffffffffffffffffffffffffffffff1660226000888885818110613bf557613bf4615276565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613c4c57600080fd5b8080613c57906152d4565b915050613bbc565b5060005b85859050811015613d1d573360226000888885818110613c8657613c85615276565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260216000888885818110613cf157613cf0615276565b5b905060200201358152602001908152602001600020819055508080613d15906152d4565b915050613c63565b505b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613edb5760005b85859050811015613e1b573373ffffffffffffffffffffffffffffffffffffffff1660246000888885818110613db157613db0615276565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613e0857600080fd5b8080613e13906152d4565b915050613d78565b5060005b85859050811015613ed9573360246000888885818110613e4257613e41615276565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260236000888885818110613ead57613eac615276565b5b905060200201358152602001908152602001600020819055508080613ed1906152d4565b915050613e1f565b505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156140975760005b85859050811015613fd7573373ffffffffffffffffffffffffffffffffffffffff1660266000888885818110613f6d57613f6c615276565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613fc457600080fd5b8080613fcf906152d4565b915050613f34565b5060005b85859050811015614095573360266000888885818110613ffe57613ffd615276565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826025600088888581811061406957614068615276565b5b90506020020135815260200190815260200160002081905550808061408d906152d4565b915050613fdb565b505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156142535760005b85859050811015614193573373ffffffffffffffffffffffffffffffffffffffff166028600088888581811061412957614128615276565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561418057600080fd5b808061418b906152d4565b9150506140f0565b5060005b858590508110156142515733602860008888858181106141ba576141b9615276565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826027600088888581811061422557614224615276565b5b905060200201358152602001908152602001600020819055508080614249906152d4565b915050614197565b505b5050505050565b60266020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061429c436015546148a5565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561430e57506000601d600086815260200190815260200160002054115b1561433e57601654601d60008681526020019081526020016000205482614335919061555f565b11915050614664565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156143ae57506000601f600086815260200190815260200160002054115b156143de57601654601f600086815260200190815260200160002054826143d5919061555f565b11915050614664565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561444e575060006021600086815260200190815260200160002054115b1561447e57601654602160008681526020019081526020016000205482614475919061555f565b11915050614664565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156144ee575060006023600086815260200190815260200160002054115b1561451e57601654602360008681526020019081526020016000205482614515919061555f565b11915050614664565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561458e575060006025600086815260200190815260200160002054115b156145be576016546025600086815260200190815260200160002054826145b5919061555f565b11915050614664565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561462e575060006027600086815260200190815260200160002054115b1561465e57601654602760008681526020019081526020016000205482614655919061555f565b11915050614664565b60009150505b92915050565b60065481565b602080528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6146aa6147e1565b73ffffffffffffffffffffffffffffffffffffffff166146c8612127565b73ffffffffffffffffffffffffffffffffffffffff161461471e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147159061537a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561478e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147859061596b565b60405180910390fd5b6147978161490c565b50565b60276020528060005260406000206000915090505481565b60006147c082600001614a73565b9050919050565b60006147d68360000183614a84565b60001c905092915050565b600033905090565b6147f16118f8565b614830576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614827906159d7565b60405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6148746147e1565b6040516148819190614c97565b60405180910390a1565b600061489d836000018360001b614aaf565b905092915050565b60008183106148b457816148b6565b825b905092915050565b6000818310156148ce57816148d0565b825b905092915050565b60006148ea836000018360001b614b1f565b905092915050565b6000614904836000018360001b614b42565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6149d86118f8565b15614a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a0f906153e6565b60405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614a5c6147e1565b604051614a699190614c97565b60405180910390a1565b600081600001805490509050919050565b6000826000018281548110614a9c57614a9b615276565b5b9060005260206000200154905092915050565b6000614abb8383614b1f565b614b14578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050614b19565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114614c4a576000600182614b74919061555f565b9050600060018660000180549050614b8c919061555f565b9050818114614bfb576000866000018281548110614bad57614bac615276565b5b9060005260206000200154905080876000018481548110614bd157614bd0615276565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480614c0f57614c0e6159f7565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050614c50565b60009150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614c8182614c56565b9050919050565b614c9181614c76565b82525050565b6000602082019050614cac6000830184614c88565b92915050565b600080fd5b600080fd5b6000819050919050565b614ccf81614cbc565b8114614cda57600080fd5b50565b600081359050614cec81614cc6565b92915050565b600060208284031215614d0857614d07614cb2565b5b6000614d1684828501614cdd565b91505092915050565b60008115159050919050565b614d3481614d1f565b82525050565b6000602082019050614d4f6000830184614d2b565b92915050565b614d5e81614c76565b8114614d6957600080fd5b50565b600081359050614d7b81614d55565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614da657614da5614d81565b5b8235905067ffffffffffffffff811115614dc357614dc2614d86565b5b602083019150836001820283011115614ddf57614dde614d8b565b5b9250929050565b600080600080600060808688031215614e0257614e01614cb2565b5b6000614e1088828901614d6c565b9550506020614e2188828901614d6c565b9450506040614e3288828901614cdd565b935050606086013567ffffffffffffffff811115614e5357614e52614cb7565b5b614e5f88828901614d90565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614ea381614e6e565b82525050565b6000602082019050614ebe6000830184614e9a565b92915050565b614ecd81614cbc565b82525050565b6000602082019050614ee86000830184614ec4565b92915050565b600060208284031215614f0457614f03614cb2565b5b6000614f1284828501614d6c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f5081614cbc565b82525050565b6000614f628383614f47565b60208301905092915050565b6000602082019050919050565b6000614f8682614f1b565b614f908185614f26565b9350614f9b83614f37565b8060005b83811015614fcc578151614fb38882614f56565b9750614fbe83614f6e565b925050600181019050614f9f565b5085935050505092915050565b60006020820190508181036000830152614ff38184614f7b565b905092915050565b60008083601f84011261501157615010614d81565b5b8235905067ffffffffffffffff81111561502e5761502d614d86565b5b60208301915083602082028301111561504a57615049614d8b565b5b9250929050565b6000806020838503121561506857615067614cb2565b5b600083013567ffffffffffffffff81111561508657615085614cb7565b5b61509285828601614ffb565b92509250509250929050565b6000806000606084860312156150b7576150b6614cb2565b5b60006150c586828701614d6c565b93505060206150d686828701614cdd565b92505060406150e786828701614d6c565b9150509250925092565b600080600080600080600080610100898b03121561511257615111614cb2565b5b60006151208b828c01614cdd565b98505060206151318b828c01614cdd565b97505060406151428b828c01614cdd565b96505060606151538b828c01614cdd565b95505060806151648b828c01614cdd565b94505060a06151758b828c01614cdd565b93505060c06151868b828c01614cdd565b92505060e06151978b828c01614cdd565b9150509295985092959890939650565b6000806000604084860312156151c0576151bf614cb2565b5b600084013567ffffffffffffffff8111156151de576151dd614cb7565b5b6151ea86828701614ffb565b935093505060206151fd86828701614d6c565b9150509250925092565b6000806040838503121561521e5761521d614cb2565b5b600061522c85828601614cdd565b925050602061523d85828601614d6c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006152df82614cbc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615312576153116152a5565b5b600182019050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061536460208361531d565b915061536f8261532e565b602082019050919050565b6000602082019050818103600083015261539381615357565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006153d060108361531d565b91506153db8261539a565b602082019050919050565b600060208201905081810360008301526153ff816153c3565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b600061543c600f8361531d565b915061544782615406565b602082019050919050565b6000602082019050818103600083015261546b8161542f565b9050919050565b600082825260208201905092915050565b50565b6000615493600083615472565b915061549e82615483565b600082019050919050565b60006080820190506154be6000830186614c88565b6154cb6020830185614c88565b6154d86040830184614ec4565b81810360608301526154e981615486565b9050949350505050565b7f496e76616c696420626c6f636b73000000000000000000000000000000000000600082015250565b6000615529600e8361531d565b9150615534826154f3565b602082019050919050565b600060208201905081810360008301526155588161551c565b9050919050565b600061556a82614cbc565b915061557583614cbc565b925082821015615588576155876152a5565b5b828203905092915050565b600061559e82614cbc565b91506155a983614cbc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156155e2576155e16152a5565b5b828202905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000615623601f8361531d565b915061562e826155ed565b602082019050919050565b6000602082019050818103600083015261565281615616565b9050919050565b7f5374616b696e673a20746f6b656e206e6f7420666f7267656564000000000000600082015250565b600061568f601a8361531d565b915061569a82615659565b602082019050919050565b600060208201905081810360008301526156be81615682565b9050919050565b60006156d082614cbc565b91506156db83614cbc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156157105761570f6152a5565b5b828201905092915050565b60008151905061572a81614cc6565b92915050565b60006020828403121561574657615745614cb2565b5b60006157548482850161571b565b91505092915050565b60006040820190506157726000830185614c88565b61577f6020830184614ec4565b9392505050565b61578f81614d1f565b811461579a57600080fd5b50565b6000815190506157ac81615786565b92915050565b6000602082840312156157c8576157c7614cb2565b5b60006157d68482850161579d565b91505092915050565b7f4e6f204d656d6265727368697020466f72676564000000000000000000000000600082015250565b600061581560148361531d565b9150615820826157df565b602082019050919050565b6000602082019050818103600083015261584481615808565b9050919050565b60008151905061585a81614d55565b92915050565b60006020828403121561587657615875614cb2565b5b60006158848482850161584b565b91505092915050565b7f796f7520646f206e6f74206f776e2074686174204e4654000000000000000000600082015250565b60006158c360178361531d565b91506158ce8261588d565b602082019050919050565b600060208201905081810360008301526158f2816158b6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061595560268361531d565b9150615960826158f9565b604082019050919050565b6000602082019050818103600083015261598481615948565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006159c160148361531d565b91506159cc8261598b565b602082019050919050565b600060208201905081810360008301526159f0816159b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220854e4d919a27fc65953f10ec11ac00f5e4f40630af7042a02e9378cb24a7556964736f6c63430008090033000000000000000000000000d7ac080800566d42ab9789a99b7ed0dd5ecbe594000000000000000000000000372405a6d95628ad14518bfe05165d397f43de1d000000000000000000000000f4744ec5d846f7f1a0c5d389f590cc1344ed3fcf00000000000000000000000098d3cd2f29a4f5464266f925fe177018e6c2f9e6000000000000000000000000c78cd8ab5a99e295d31da3230319ebc2f285514d000000000000000000000000813b5c4ae6b188f4581aa1dfdb7f4aba44aa578b00000000000000000000000061028f622cb6618cac3deb9ef0f0d5b9c6369c72000000000000000000000000fcbe615def610e806bb64427574a2c5c1fb55510
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103785760003560e01c806382b875b8116101d3578063b5b4f4b911610104578063c84150a0116100a2578063d6e61d711161007c578063d6e61d7114610aa1578063f28b444414610abf578063f2fde38b14610aef578063fcf5ec9f14610b0b57610378565b8063c84150a014610a25578063d063a1b714610a41578063d4e92e6e14610a7157610378565b8063bc7de05c116100de578063bc7de05c1461098b578063bd8a55bc146109a7578063c0da146a146109d7578063c5e92995146109f557610378565b8063b5b4f4b91461091f578063bb4705281461093d578063bbe25bf31461095b57610378565b806391e139c511610171578063a430990f1161014b578063a430990f14610871578063a58efdbd146108a1578063ab2abf06146108d1578063b1a1e45d1461090157610378565b806391e139c5146107f35780639f85180214610811578063a020ec161461084157610378565b806386f69bed116101ad57806386f69bed1461077d57806387c1ae2f1461079b5780638d8f2adb146107cb5780638da5cb5b146107d557610378565b806382b875b8146107375780638456cb5914610755578063856d788f1461075f57610378565b80634665096d116102ad578063693830e61161024b578063715018a611610225578063715018a6146106c157806371d6209e146106cb5780637d5c92cb146106fb578063809db0c11461071957610378565b8063693830e6146106455780636a576b0c146106755780636f38adb8146106a557610378565b80635c975abb116102875780635c975abb146105bf57806362c56930146105dd578063670652361461060d57806367f637021461062957610378565b80634665096d1461055357806353b0f08a146105715780635c193f741461058f57610378565b80632d9281361161031a5780633eeda24d116102f45780633eeda24d146104df5780633f4ba83a146104fd578063420e950514610507578063432eb1911461052357610378565b80632d928136146104735780632e7bffef146104915780633447fd02146104af57610378565b80631c8a1e20116103565780631c8a1e20146103fb578063276184ae146104195780632821f1e7146104375780632bf87f5a1461045557610378565b80630443165d1461037d578063079872491461039b578063150b7a02146103cb575b600080fd5b610385610b3b565b6040516103929190614c97565b60405180910390f35b6103b560048036038101906103b09190614cf2565b610b61565b6040516103c29190614d3a565b60405180910390f35b6103e560048036038101906103e09190614de6565b610b81565b6040516103f29190614ea9565b60405180910390f35b610403610b96565b6040516104109190614c97565b60405180910390f35b610421610bbc565b60405161042e9190614c97565b60405180910390f35b61043f610be2565b60405161044c9190614c97565b60405180910390f35b61045d610c08565b60405161046a9190614ed3565b60405180910390f35b61047b610c0e565b6040516104889190614ed3565b60405180910390f35b610499610c14565b6040516104a69190614ed3565b60405180910390f35b6104c960048036038101906104c49190614eee565b610c1a565b6040516104d69190614fd9565b60405180910390f35b6104e7610d17565b6040516104f49190614ed3565b60405180910390f35b610505610d1d565b005b610521600480360381019061051c9190615051565b610da3565b005b61053d60048036038101906105389190614cf2565b611001565b60405161054a9190614d3a565b60405180910390f35b61055b611021565b6040516105689190614ed3565b60405180910390f35b610579611027565b6040516105869190614c97565b60405180910390f35b6105a960048036038101906105a4919061509e565b61104d565b6040516105b69190614ed3565b60405180910390f35b6105c76118f8565b6040516105d49190614d3a565b60405180910390f35b6105f760048036038101906105f29190614cf2565b61190f565b6040516106049190614ed3565b60405180910390f35b61062760048036038101906106229190615051565b611927565b005b610643600480360381019061063e9190615051565b611ba8565b005b61065f600480360381019061065a9190614cf2565b611cb9565b60405161066c9190614ed3565b60405180910390f35b61068f600480360381019061068a9190614cf2565b611cd1565b60405161069c9190614c97565b60405180910390f35b6106bf60048036038101906106ba91906150f1565b611d04565b005b6106c9611dcd565b005b6106e560048036038101906106e09190614eee565b611e55565b6040516106f29190614ed3565b60405180910390f35b610703611e6d565b6040516107109190614ed3565b60405180910390f35b610721611e73565b60405161072e9190614c97565b60405180910390f35b61073f611e99565b60405161074c9190614ed3565b60405180910390f35b61075d611e9f565b005b610767611f25565b6040516107749190614ed3565b60405180910390f35b610785611f2b565b6040516107929190614ed3565b60405180910390f35b6107b560048036038101906107b09190614cf2565b611f31565b6040516107c29190614ed3565b60405180910390f35b6107d3611f49565b005b6107dd612127565b6040516107ea9190614c97565b60405180910390f35b6107fb612150565b6040516108089190614ed3565b60405180910390f35b61082b60048036038101906108269190614cf2565b612156565b6040516108389190614d3a565b60405180910390f35b61085b60048036038101906108569190614cf2565b612176565b6040516108689190614d3a565b60405180910390f35b61088b60048036038101906108869190614cf2565b612196565b6040516108989190614ed3565b60405180910390f35b6108bb60048036038101906108b69190614cf2565b6121ae565b6040516108c89190614c97565b60405180910390f35b6108eb60048036038101906108e69190614cf2565b6121e1565b6040516108f89190614c97565b60405180910390f35b610909612214565b6040516109169190614ed3565b60405180910390f35b61092761221a565b6040516109349190614c97565b60405180910390f35b610945612240565b6040516109529190614ed3565b60405180910390f35b61097560048036038101906109709190614cf2565b612246565b6040516109829190614d3a565b60405180910390f35b6109a560048036038101906109a091906151a7565b612266565b005b6109c160048036038101906109bc9190614cf2565b61356e565b6040516109ce9190614c97565b60405180910390f35b6109df6135a1565b6040516109ec9190614c97565b60405180910390f35b610a0f6004803603810190610a0a9190614cf2565b6135c7565b604051610a1c9190614ed3565b60405180910390f35b610a3f6004803603810190610a3a91906151a7565b6135df565b005b610a5b6004803603810190610a569190614cf2565b61425a565b604051610a689190614c97565b60405180910390f35b610a8b6004803603810190610a869190615207565b61428d565b604051610a989190614d3a565b60405180910390f35b610aa961466a565b604051610ab69190614ed3565b60405180910390f35b610ad96004803603810190610ad49190614cf2565b614670565b604051610ae69190614c97565b60405180910390f35b610b096004803603810190610b049190614eee565b6146a2565b005b610b256004803603810190610b209190614cf2565b61479a565b604051610b329190614ed3565b60405180910390f35b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600063150b7a0260e01b905095945050505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b601b5481565b60055481565b60606000602960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000610c6a826147b2565b67ffffffffffffffff811115610c8357610c82615247565b5b604051908082528060200260200182016040528015610cb15781602001602082028036833780820191505090505b50905060005b610cc0836147b2565b811015610d0c57610cda81846147c790919063ffffffff16565b828281518110610ced57610cec615276565b5b6020026020010181815250508080610d04906152d4565b915050610cb7565b508092505050919050565b60035481565b610d256147e1565b73ffffffffffffffffffffffffffffffffffffffff16610d43612127565b73ffffffffffffffffffffffffffffffffffffffff1614610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d909061537a565b60405180910390fd5b610da16147e9565b565b610dab6118f8565b15610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de2906153e6565b60405180910390fd5b6000439050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7890615452565b60405180910390fd5b60005b83839050811015610fb757601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3330878786818110610ee257610ee1615276565b5b905060200201356040518463ffffffff1660e01b8152600401610f07939291906154a9565b600060405180830381600087803b158015610f2157600080fd5b505af1158015610f35573d6000803e3d6000fd5b50505050610fa3848483818110610f4f57610f4e615276565b5b90506020020135602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061488b90919063ffffffff16565b508080610faf906152d4565b915050610e84565b5080602a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b60086020528060005260406000206000915054906101000a900460ff1681565b60155481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561120857601d6000848152602001908152602001600020546110c5436015546148a5565b11611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc9061553f565b60405180910390fd5b611161601d600085815260200190815260200160002054602a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148be565b61116d436015546148a5565b611177919061555f565b8473ffffffffffffffffffffffffffffffffffffffff16601e600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e45760006111e7565b60015b60ff166017546111f79190615593565b6112019190615593565b90506118f1565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113c157602160008481526020019081526020016000205461127e436015546148a5565b116112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b59061553f565b60405180910390fd5b61131a6021600085815260200190815260200160002054602a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148be565b611326436015546148a5565b611330919061555f565b8473ffffffffffffffffffffffffffffffffffffffff166022600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461139d5760006113a0565b60015b60ff166019546113b09190615593565b6113ba9190615593565b90506118f1565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561157a576023600084815260200190815260200160002054611437436015546148a5565b11611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e9061553f565b60405180910390fd5b6114d36023600085815260200190815260200160002054602a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148be565b6114df436015546148a5565b6114e9919061555f565b8473ffffffffffffffffffffffffffffffffffffffff166024600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611556576000611559565b60015b60ff16601a546115699190615593565b6115739190615593565b90506118f1565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561173357601f6000848152602001908152602001600020546115f0436015546148a5565b11611630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116279061553f565b60405180910390fd5b61168c601f600085815260200190815260200160002054602a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148be565b611698436015546148a5565b6116a2919061555f565b8473ffffffffffffffffffffffffffffffffffffffff166020600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170f576000611712565b60015b60ff166018546117229190615593565b61172c9190615593565b90506118f1565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ec5760276000848152602001908152602001600020546117a9436015546148a5565b116117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e09061553f565b60405180910390fd5b6118456027600085815260200190815260200160002054602a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148be565b611851436015546148a5565b61185b919061555f565b8473ffffffffffffffffffffffffffffffffffffffff166028600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c85760006118cb565b60015b60ff16601c546118db9190615593565b6118e59190615593565b90506118f1565b600090505b9392505050565b6000600260009054906101000a900460ff16905090565b60256020528060005260406000206000915090505481565b61192f6118f8565b1561196f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611966906153e6565b60405180910390fd5b600260015414156119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac90615639565b60405180910390fd5b600260018190555060005b82829050811015611b9c57611a358383838181106119e1576119e0615276565b5b90506020020135602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206148d890919063ffffffff16565b611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b906156a5565b60405180910390fd5b611ade838383818110611a8a57611a89615276565b5b90506020020135602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206148f290919063ffffffff16565b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3033868686818110611b3257611b31615276565b5b905060200201356040518463ffffffff1660e01b8152600401611b57939291906154a9565b600060405180830381600087803b158015611b7157600080fd5b505af1158015611b85573d6000803e3d6000fd5b505050508080611b94906152d4565b9150506119c0565b50600180819055505050565b611bb06147e1565b73ffffffffffffffffffffffffffffffffffffffff16611bce612127565b73ffffffffffffffffffffffffffffffffffffffff1614611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b9061537a565b60405180910390fd5b60005b82829050811015611cb4576000838383818110611c4757611c46615276565b5b905060200201359050600b600082815260200190815260200160002060009054906101000a900460ff16611ca2576001600b600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080611cad906152d4565b9050611c27565b505050565b60216020528060005260406000206000915090505481565b60246020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d0c6147e1565b73ffffffffffffffffffffffffffffffffffffffff16611d2a612127565b73ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d779061537a565b60405180910390fd5b8760178190555086601a81905550856018819055508460198190555083601b8190555082601c81905550816016819055508043611dbd91906156c5565b6015819055505050505050505050565b611dd56147e1565b73ffffffffffffffffffffffffffffffffffffffff16611df3612127565b73ffffffffffffffffffffffffffffffffffffffff1614611e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e409061537a565b60405180910390fd5b611e53600061490c565b565b602a6020528060005260406000206000915090505481565b60045481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b611ea76147e1565b73ffffffffffffffffffffffffffffffffffffffff16611ec5612127565b73ffffffffffffffffffffffffffffffffffffffff1614611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f129061537a565b60405180910390fd5b611f236149d0565b565b60185481565b60075481565b601d6020528060005260406000206000915090505481565b611f516147e1565b73ffffffffffffffffffffffffffffffffffffffff16611f6f612127565b73ffffffffffffffffffffffffffffffffffffffff1614611fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbc9061537a565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120229190614c97565b60206040518083038186803b15801561203a57600080fd5b505afa15801561204e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120729190615730565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016120d192919061575d565b602060405180830381600087803b1580156120eb57600080fd5b505af11580156120ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212391906157b2565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a5481565b600b6020528060005260406000206000915054906101000a900460ff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b601f6020528060005260406000206000915090505481565b60226020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60286020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b600a6020528060005260406000206000915054906101000a900460ff1681565b61226e6118f8565b156122ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a5906153e6565b60405180910390fd5b6000806122bd436015546148a5565b90506000602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061230d826147b2565b1161234d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123449061582b565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561264d5760005b86869050811015612504573373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e89898581811061241957612418615276565b5b905060200201356040518263ffffffff1660e01b815260040161243c9190614ed3565b60206040518083038186803b15801561245457600080fd5b505afa158015612468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248c9190615860565b73ffffffffffffffffffffffffffffffffffffffff16146124ac57600080fd5b601654601d60008989858181106124c6576124c5615276565b5b90506020020135815260200190815260200160002054846124e7919061555f565b116124f157600080fd5b80806124fc906152d4565b9150506123a6565b5060005b868690508110156125aa576125593388888481811061252a57612529615276565b5b90506020020135600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661104d565b8461256491906156c5565b935082601d600089898581811061257e5761257d615276565b5b9050602002013581526020019081526020016000208190555080806125a2906152d4565b915050612508565b5060005b8686905081101561264b5760008787838181106125ce576125cd615276565b5b905060200201359050600b600082815260200190815260200160002060009054906101000a900460ff16612639576001600b600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506006548561263691906156c5565b94505b5080612644906152d4565b90506125ae565b505b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561294d5760005b86869050811015612804573373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e89898581811061271957612718615276565b5b905060200201356040518263ffffffff1660e01b815260040161273c9190614ed3565b60206040518083038186803b15801561275457600080fd5b505afa158015612768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278c9190615860565b73ffffffffffffffffffffffffffffffffffffffff16146127ac57600080fd5b601654601f60008989858181106127c6576127c5615276565b5b90506020020135815260200190815260200160002054846127e7919061555f565b116127f157600080fd5b80806127fc906152d4565b9150506126a6565b5060005b868690508110156128aa576128593388888481811061282a57612829615276565b5b90506020020135600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661104d565b8461286491906156c5565b935082601f600089898581811061287e5761287d615276565b5b9050602002013581526020019081526020016000208190555080806128a2906152d4565b915050612808565b5060005b8686905081101561294b5760008787838181106128ce576128cd615276565b5b9050602002013590506008600082815260200190815260200160002060009054906101000a900460ff166129395760016008600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506003548561293691906156c5565b94505b5080612944906152d4565b90506128ae565b505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c4d5760005b86869050811015612b04573373ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e898985818110612a1957612a18615276565b5b905060200201356040518263ffffffff1660e01b8152600401612a3c9190614ed3565b60206040518083038186803b158015612a5457600080fd5b505afa158015612a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8c9190615860565b73ffffffffffffffffffffffffffffffffffffffff1614612aac57600080fd5b60165460216000898985818110612ac657612ac5615276565b5b9050602002013581526020019081526020016000205484612ae7919061555f565b11612af157600080fd5b8080612afc906152d4565b9150506129a6565b5060005b86869050811015612baa57612b5933888884818110612b2a57612b29615276565b5b90506020020135600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661104d565b84612b6491906156c5565b93508260216000898985818110612b7e57612b7d615276565b5b905060200201358152602001908152602001600020819055508080612ba2906152d4565b915050612b08565b5060005b86869050811015612c4b576000878783818110612bce57612bcd615276565b5b9050602002013590506009600082815260200190815260200160002060009054906101000a900460ff16612c395760016009600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060045485612c3691906156c5565b94505b5080612c44906152d4565b9050612bae565b505b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612eac5760005b86869050811015612e04573373ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e898985818110612d1957612d18615276565b5b905060200201356040518263ffffffff1660e01b8152600401612d3c9190614ed3565b60206040518083038186803b158015612d5457600080fd5b505afa158015612d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8c9190615860565b73ffffffffffffffffffffffffffffffffffffffff1614612dac57600080fd5b60165460236000898985818110612dc657612dc5615276565b5b9050602002013581526020019081526020016000205484612de7919061555f565b11612df157600080fd5b8080612dfc906152d4565b915050612ca6565b5060005b86869050811015612eaa57612e5933888884818110612e2a57612e29615276565b5b90506020020135601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661104d565b84612e6491906156c5565b93508260236000898985818110612e7e57612e7d615276565b5b905060200201358152602001908152602001600020819055508080612ea2906152d4565b915050612e08565b505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156131ac5760005b86869050811015613063573373ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e898985818110612f7857612f77615276565b5b905060200201356040518263ffffffff1660e01b8152600401612f9b9190614ed3565b60206040518083038186803b158015612fb357600080fd5b505afa158015612fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612feb9190615860565b73ffffffffffffffffffffffffffffffffffffffff161461300b57600080fd5b6016546025600089898581811061302557613024615276565b5b9050602002013581526020019081526020016000205484613046919061555f565b1161305057600080fd5b808061305b906152d4565b915050612f05565b5060005b86869050811015613109576130b83388888481811061308957613088615276565b5b90506020020135601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661104d565b846130c391906156c5565b935082602560008989858181106130dd576130dc615276565b5b905060200201358152602001908152602001600020819055508080613101906152d4565b915050613067565b5060005b868690508110156131aa57600087878381811061312d5761312c615276565b5b905060200201359050600a600082815260200190815260200160002060009054906101000a900460ff16613198576001600a600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506005548561319591906156c5565b94505b50806131a3906152d4565b905061310d565b505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156134ac5760005b86869050811015613363573373ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e89898581811061327857613277615276565b5b905060200201356040518263ffffffff1660e01b815260040161329b9190614ed3565b60206040518083038186803b1580156132b357600080fd5b505afa1580156132c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132eb9190615860565b73ffffffffffffffffffffffffffffffffffffffff161461330b57600080fd5b6016546027600089898581811061332557613324615276565b5b9050602002013581526020019081526020016000205484613346919061555f565b1161335057600080fd5b808061335b906152d4565b915050613205565b5060005b86869050811015613409576133b83388888481811061338957613388615276565b5b90506020020135601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661104d565b846133c391906156c5565b935082602760008989858181106133dd576133dc615276565b5b905060200201358152602001908152602001600020819055508080613401906152d4565b915050613367565b5060005b868690508110156134aa57600087878381811061342d5761342c615276565b5b905060200201359050600c600082815260200190815260200160002060009054906101000a900460ff16613498576001600c600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506007548561349591906156c5565b94505b50806134a3906152d4565b905061340d565b505b600083111561356657601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b815260040161351292919061575d565b602060405180830381600087803b15801561352c57600080fd5b505af1158015613540573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356491906157b2565b505b505050505050565b601e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60236020528060005260406000206000915090505481565b6135e76118f8565b15613627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361e906153e6565b60405180910390fd5b60004390506000602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061367a826147b2565b116136ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b19061582b565b60405180910390fd5b60005b858590508110156137ea573373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e88888581811061370e5761370d615276565b5b905060200201356040518263ffffffff1660e01b81526004016137319190614ed3565b60206040518083038186803b15801561374957600080fd5b505afa15801561375d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137819190615860565b73ffffffffffffffffffffffffffffffffffffffff16146137d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ce906158d9565b60405180910390fd5b80806137e2906152d4565b9150506136bd565b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139a75760005b858590508110156138e7573373ffffffffffffffffffffffffffffffffffffffff16601e600088888581811061387d5761387c615276565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156138d457600080fd5b80806138df906152d4565b915050613844565b5060005b858590508110156139a55733601e600088888581811061390e5761390d615276565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601d600088888581811061397957613978615276565b5b90506020020135815260200190815260200160002081905550808061399d906152d4565b9150506138eb565b505b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b635760005b85859050811015613aa3573373ffffffffffffffffffffffffffffffffffffffff1660206000888885818110613a3957613a38615276565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613a9057600080fd5b8080613a9b906152d4565b915050613a00565b5060005b85859050811015613b61573360206000888885818110613aca57613ac9615276565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601f6000888885818110613b3557613b34615276565b5b905060200201358152602001908152602001600020819055508080613b59906152d4565b915050613aa7565b505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d1f5760005b85859050811015613c5f573373ffffffffffffffffffffffffffffffffffffffff1660226000888885818110613bf557613bf4615276565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613c4c57600080fd5b8080613c57906152d4565b915050613bbc565b5060005b85859050811015613d1d573360226000888885818110613c8657613c85615276565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260216000888885818110613cf157613cf0615276565b5b905060200201358152602001908152602001600020819055508080613d15906152d4565b915050613c63565b505b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613edb5760005b85859050811015613e1b573373ffffffffffffffffffffffffffffffffffffffff1660246000888885818110613db157613db0615276565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613e0857600080fd5b8080613e13906152d4565b915050613d78565b5060005b85859050811015613ed9573360246000888885818110613e4257613e41615276565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260236000888885818110613ead57613eac615276565b5b905060200201358152602001908152602001600020819055508080613ed1906152d4565b915050613e1f565b505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156140975760005b85859050811015613fd7573373ffffffffffffffffffffffffffffffffffffffff1660266000888885818110613f6d57613f6c615276565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613fc457600080fd5b8080613fcf906152d4565b915050613f34565b5060005b85859050811015614095573360266000888885818110613ffe57613ffd615276565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826025600088888581811061406957614068615276565b5b90506020020135815260200190815260200160002081905550808061408d906152d4565b915050613fdb565b505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156142535760005b85859050811015614193573373ffffffffffffffffffffffffffffffffffffffff166028600088888581811061412957614128615276565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561418057600080fd5b808061418b906152d4565b9150506140f0565b5060005b858590508110156142515733602860008888858181106141ba576141b9615276565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826027600088888581811061422557614224615276565b5b905060200201358152602001908152602001600020819055508080614249906152d4565b915050614197565b505b5050505050565b60266020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061429c436015546148a5565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561430e57506000601d600086815260200190815260200160002054115b1561433e57601654601d60008681526020019081526020016000205482614335919061555f565b11915050614664565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156143ae57506000601f600086815260200190815260200160002054115b156143de57601654601f600086815260200190815260200160002054826143d5919061555f565b11915050614664565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561444e575060006021600086815260200190815260200160002054115b1561447e57601654602160008681526020019081526020016000205482614475919061555f565b11915050614664565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156144ee575060006023600086815260200190815260200160002054115b1561451e57601654602360008681526020019081526020016000205482614515919061555f565b11915050614664565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561458e575060006025600086815260200190815260200160002054115b156145be576016546025600086815260200190815260200160002054826145b5919061555f565b11915050614664565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561462e575060006027600086815260200190815260200160002054115b1561465e57601654602760008681526020019081526020016000205482614655919061555f565b11915050614664565b60009150505b92915050565b60065481565b602080528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6146aa6147e1565b73ffffffffffffffffffffffffffffffffffffffff166146c8612127565b73ffffffffffffffffffffffffffffffffffffffff161461471e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147159061537a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561478e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147859061596b565b60405180910390fd5b6147978161490c565b50565b60276020528060005260406000206000915090505481565b60006147c082600001614a73565b9050919050565b60006147d68360000183614a84565b60001c905092915050565b600033905090565b6147f16118f8565b614830576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614827906159d7565b60405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6148746147e1565b6040516148819190614c97565b60405180910390a1565b600061489d836000018360001b614aaf565b905092915050565b60008183106148b457816148b6565b825b905092915050565b6000818310156148ce57816148d0565b825b905092915050565b60006148ea836000018360001b614b1f565b905092915050565b6000614904836000018360001b614b42565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6149d86118f8565b15614a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a0f906153e6565b60405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614a5c6147e1565b604051614a699190614c97565b60405180910390a1565b600081600001805490509050919050565b6000826000018281548110614a9c57614a9b615276565b5b9060005260206000200154905092915050565b6000614abb8383614b1f565b614b14578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050614b19565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114614c4a576000600182614b74919061555f565b9050600060018660000180549050614b8c919061555f565b9050818114614bfb576000866000018281548110614bad57614bac615276565b5b9060005260206000200154905080876000018481548110614bd157614bd0615276565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480614c0f57614c0e6159f7565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050614c50565b60009150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614c8182614c56565b9050919050565b614c9181614c76565b82525050565b6000602082019050614cac6000830184614c88565b92915050565b600080fd5b600080fd5b6000819050919050565b614ccf81614cbc565b8114614cda57600080fd5b50565b600081359050614cec81614cc6565b92915050565b600060208284031215614d0857614d07614cb2565b5b6000614d1684828501614cdd565b91505092915050565b60008115159050919050565b614d3481614d1f565b82525050565b6000602082019050614d4f6000830184614d2b565b92915050565b614d5e81614c76565b8114614d6957600080fd5b50565b600081359050614d7b81614d55565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614da657614da5614d81565b5b8235905067ffffffffffffffff811115614dc357614dc2614d86565b5b602083019150836001820283011115614ddf57614dde614d8b565b5b9250929050565b600080600080600060808688031215614e0257614e01614cb2565b5b6000614e1088828901614d6c565b9550506020614e2188828901614d6c565b9450506040614e3288828901614cdd565b935050606086013567ffffffffffffffff811115614e5357614e52614cb7565b5b614e5f88828901614d90565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614ea381614e6e565b82525050565b6000602082019050614ebe6000830184614e9a565b92915050565b614ecd81614cbc565b82525050565b6000602082019050614ee86000830184614ec4565b92915050565b600060208284031215614f0457614f03614cb2565b5b6000614f1284828501614d6c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f5081614cbc565b82525050565b6000614f628383614f47565b60208301905092915050565b6000602082019050919050565b6000614f8682614f1b565b614f908185614f26565b9350614f9b83614f37565b8060005b83811015614fcc578151614fb38882614f56565b9750614fbe83614f6e565b925050600181019050614f9f565b5085935050505092915050565b60006020820190508181036000830152614ff38184614f7b565b905092915050565b60008083601f84011261501157615010614d81565b5b8235905067ffffffffffffffff81111561502e5761502d614d86565b5b60208301915083602082028301111561504a57615049614d8b565b5b9250929050565b6000806020838503121561506857615067614cb2565b5b600083013567ffffffffffffffff81111561508657615085614cb7565b5b61509285828601614ffb565b92509250509250929050565b6000806000606084860312156150b7576150b6614cb2565b5b60006150c586828701614d6c565b93505060206150d686828701614cdd565b92505060406150e786828701614d6c565b9150509250925092565b600080600080600080600080610100898b03121561511257615111614cb2565b5b60006151208b828c01614cdd565b98505060206151318b828c01614cdd565b97505060406151428b828c01614cdd565b96505060606151538b828c01614cdd565b95505060806151648b828c01614cdd565b94505060a06151758b828c01614cdd565b93505060c06151868b828c01614cdd565b92505060e06151978b828c01614cdd565b9150509295985092959890939650565b6000806000604084860312156151c0576151bf614cb2565b5b600084013567ffffffffffffffff8111156151de576151dd614cb7565b5b6151ea86828701614ffb565b935093505060206151fd86828701614d6c565b9150509250925092565b6000806040838503121561521e5761521d614cb2565b5b600061522c85828601614cdd565b925050602061523d85828601614d6c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006152df82614cbc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615312576153116152a5565b5b600182019050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061536460208361531d565b915061536f8261532e565b602082019050919050565b6000602082019050818103600083015261539381615357565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006153d060108361531d565b91506153db8261539a565b602082019050919050565b600060208201905081810360008301526153ff816153c3565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b600061543c600f8361531d565b915061544782615406565b602082019050919050565b6000602082019050818103600083015261546b8161542f565b9050919050565b600082825260208201905092915050565b50565b6000615493600083615472565b915061549e82615483565b600082019050919050565b60006080820190506154be6000830186614c88565b6154cb6020830185614c88565b6154d86040830184614ec4565b81810360608301526154e981615486565b9050949350505050565b7f496e76616c696420626c6f636b73000000000000000000000000000000000000600082015250565b6000615529600e8361531d565b9150615534826154f3565b602082019050919050565b600060208201905081810360008301526155588161551c565b9050919050565b600061556a82614cbc565b915061557583614cbc565b925082821015615588576155876152a5565b5b828203905092915050565b600061559e82614cbc565b91506155a983614cbc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156155e2576155e16152a5565b5b828202905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000615623601f8361531d565b915061562e826155ed565b602082019050919050565b6000602082019050818103600083015261565281615616565b9050919050565b7f5374616b696e673a20746f6b656e206e6f7420666f7267656564000000000000600082015250565b600061568f601a8361531d565b915061569a82615659565b602082019050919050565b600060208201905081810360008301526156be81615682565b9050919050565b60006156d082614cbc565b91506156db83614cbc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156157105761570f6152a5565b5b828201905092915050565b60008151905061572a81614cc6565b92915050565b60006020828403121561574657615745614cb2565b5b60006157548482850161571b565b91505092915050565b60006040820190506157726000830185614c88565b61577f6020830184614ec4565b9392505050565b61578f81614d1f565b811461579a57600080fd5b50565b6000815190506157ac81615786565b92915050565b6000602082840312156157c8576157c7614cb2565b5b60006157d68482850161579d565b91505092915050565b7f4e6f204d656d6265727368697020466f72676564000000000000000000000000600082015250565b600061581560148361531d565b9150615820826157df565b602082019050919050565b6000602082019050818103600083015261584481615808565b9050919050565b60008151905061585a81614d55565b92915050565b60006020828403121561587657615875614cb2565b5b60006158848482850161584b565b91505092915050565b7f796f7520646f206e6f74206f776e2074686174204e4654000000000000000000600082015250565b60006158c360178361531d565b91506158ce8261588d565b602082019050919050565b600060208201905081810360008301526158f2816158b6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061595560268361531d565b9150615960826158f9565b604082019050919050565b6000602082019050818103600083015261598481615948565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006159c160148361531d565b91506159cc8261598b565b602082019050919050565b600060208201905081810360008301526159f0816159b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220854e4d919a27fc65953f10ec11ac00f5e4f40630af7042a02e9378cb24a7556964736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d7ac080800566d42ab9789a99b7ed0dd5ecbe594000000000000000000000000372405a6d95628ad14518bfe05165d397f43de1d000000000000000000000000f4744ec5d846f7f1a0c5d389f590cc1344ed3fcf00000000000000000000000098d3cd2f29a4f5464266f925fe177018e6c2f9e6000000000000000000000000c78cd8ab5a99e295d31da3230319ebc2f285514d000000000000000000000000813b5c4ae6b188f4581aa1dfdb7f4aba44aa578b00000000000000000000000061028f622cb6618cac3deb9ef0f0d5b9c6369c72000000000000000000000000fcbe615def610e806bb64427574a2c5c1fb55510
-----Decoded View---------------
Arg [0] : _padAddress (address): 0xd7AC080800566D42Ab9789a99B7ED0Dd5EcBe594
Arg [1] : _legendsAddress (address): 0x372405A6d95628Ad14518BfE05165D397f43dE1D
Arg [2] : _tigerAddress (address): 0xf4744Ec5D846F7f1a0c5d389F590Cc1344eD3fCf
Arg [3] : _cubsAddress (address): 0x98d3cd2F29a4F5464266f925Fe177018e6c2F9E6
Arg [4] : _fundaeAddress (address): 0xC78cd8AB5a99E295D31dA3230319EBc2f285514D
Arg [5] : _azukiAddress (address): 0x813b5c4aE6b188F4581aa1dfdB7f4Aba44AA578B
Arg [6] : _membershipAddress (address): 0x61028F622CB6618cAC3DeB9ef0f0D5B9c6369C72
Arg [7] : _erc20Address (address): 0xFcbE615dEf610E806BB64427574A2c5c1fB55510
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000d7ac080800566d42ab9789a99b7ed0dd5ecbe594
Arg [1] : 000000000000000000000000372405a6d95628ad14518bfe05165d397f43de1d
Arg [2] : 000000000000000000000000f4744ec5d846f7f1a0c5d389f590cc1344ed3fcf
Arg [3] : 00000000000000000000000098d3cd2f29a4f5464266f925fe177018e6c2f9e6
Arg [4] : 000000000000000000000000c78cd8ab5a99e295d31da3230319ebc2f285514d
Arg [5] : 000000000000000000000000813b5c4ae6b188f4581aa1dfdb7f4aba44aa578b
Arg [6] : 00000000000000000000000061028f622cb6618cac3deb9ef0f0d5b9c6369c72
Arg [7] : 000000000000000000000000fcbe615def610e806bb64427574a2c5c1fb55510
Deployed Bytecode Sourcemap
38654:18151:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39424:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39085:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56574:219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39526:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39567:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39390;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39809:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39872:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38886:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54726:397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38792:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41969:65;;;:::i;:::-;;55157:565;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39035:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39621:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39492:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44423:2041;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10273:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40440:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55758:576;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42042:337;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40202:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40380:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42697:489;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37990:94;;;:::i;:::-;;40756:57;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38838:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39358:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39745:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41900:61;;;:::i;:::-;;39779:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38985:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39961:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56370:196;;;:::i;:::-;;37339:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39841:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39190:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39244:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40085:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40261:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40621;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39905:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39322:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39654:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39137:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46504:5277;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40022:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39457:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40322:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51817:2876;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40500:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43194:1174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38935:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40142:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38239:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40562:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39424:26;;;;;;;;;;;;;:::o;39085:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;56574:219::-;56718:6;56744:41;;;56737:48;;56574:219;;;;;;;:::o;39526:32::-;;;;;;;;;;;;;:::o;39567:27::-;;;;;;;;;;;;;:::o;39390:::-;;;;;;;;;;;;;:::o;39809:24::-;;;;:::o;39872:25::-;;;;:::o;38886:42::-;;;;:::o;54726:397::-;54817:16;54849:38;54890:17;:26;54908:7;54890:26;;;;;;;;;;;;;;;54849:67;;54925:25;54968:17;:8;:15;:17::i;:::-;54953:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54925:61;;55002:9;54997:93;55017:17;:8;:15;:17::i;:::-;55013:1;:21;54997:93;;;55066:14;55078:1;55066:8;:11;;:14;;;;:::i;:::-;55052:8;55061:1;55052:11;;;;;;;;:::i;:::-;;;;;;;:28;;;;;55036:3;;;;;:::i;:::-;;;;54997:93;;;;55107:8;55100:15;;;;54726:397;;;:::o;38792:39::-;;;;:::o;41969:65::-;37570:12;:10;:12::i;:::-;37559:23;;:7;:5;:7::i;:::-;:23;;;37551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42016:10:::1;:8;:10::i;:::-;41969:65::o:0;55157:565::-;10599:8;:6;:8::i;:::-;10598:9;10590:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;55245:16:::1;55264:12;55245:31;;55309:17;;;;;;;;;;;55295:31;;:10;:31;;;;55287:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;55364:9;55359:300;55379:8;;:15;;55375:1;:19;55359:300;;;55424:17;;;;;;;;;;;55416:43;;;55478:10;55515:4;55539:8;;55548:1;55539:11;;;;;;;:::i;:::-;;;;;;;;55416:170;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;55601:46;55635:8;;55644:1;55635:11;;;;;;;:::i;:::-;;;;;;;;55601:17;:29;55619:10;55601:29;;;;;;;;;;;;;;;:33;;:46;;;;:::i;:::-;;55396:3;;;;;:::i;:::-;;;;55359:300;;;;55706:8;55669:22;:34;55692:10;55669:34;;;;;;;;;;;;;;;:45;;;;55234:488;55157:565:::0;;:::o;39035:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;39621:25::-;;;;:::o;39492:27::-;;;;;;;;;;;;;:::o;44423:2041::-;44547:7;44591:14;;;;;;;;;;;44577:28;;:10;:28;;;44573:376;;;44660:19;:28;44680:7;44660:28;;;;;;;;;;;;44623:34;44632:12;44646:10;;44623:8;:34::i;:::-;:65;44615:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;44865:70;44874:19;:28;44894:7;44874:28;;;;;;;;;;;;44903:22;:31;44926:7;44903:31;;;;;;;;;;;;;;;;44865:8;:70::i;:::-;44814:34;44823:12;44837:10;;44814:8;:34::i;:::-;:121;;;;:::i;:::-;44782:7;44750:39;;:19;:28;44770:7;44750:28;;;;;;;;;;;;;;;;;;;;;:39;;;:47;;44796:1;44750:47;;;44792:1;44750:47;44723:75;;:11;;:75;;;;:::i;:::-;:214;;;;:::i;:::-;44716:221;;;;44573:376;44977:12;;;;;;;;;;;44963:26;;:10;:26;;;44959:366;;;45044:17;:26;45062:7;45044:26;;;;;;;;;;;;45007:34;45016:12;45030:10;;45007:8;:34::i;:::-;:63;44999:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;45243:68;45252:17;:26;45270:7;45252:26;;;;;;;;;;;;45279:22;:31;45302:7;45279:31;;;;;;;;;;;;;;;;45243:8;:68::i;:::-;45192:34;45201:12;45215:10;;45192:8;:34::i;:::-;:119;;;;:::i;:::-;45160:7;45130:37;;:17;:26;45148:7;45130:26;;;;;;;;;;;;;;;;;;;;;:37;;;:45;;45174:1;45130:45;;;45170:1;45130:45;45105:71;;:9;;:71;;;;:::i;:::-;:208;;;;:::i;:::-;45098:215;;;;44959:366;45353:11;;;;;;;;;;;45339:25;;:10;:25;;;45335:361;;;45419:16;:25;45436:7;45419:25;;;;;;;;;;;;45382:34;45391:12;45405:10;;45382:8;:34::i;:::-;:62;45374:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;45615:67;45624:16;:25;45641:7;45624:25;;;;;;;;;;;;45650:22;:31;45673:7;45650:31;;;;;;;;;;;;;;;;45615:8;:67::i;:::-;45564:34;45573:12;45587:10;;45564:8;:34::i;:::-;:118;;;;:::i;:::-;45532:7;45503:36;;:16;:25;45520:7;45503:25;;;;;;;;;;;;;;;;;;;;;:36;;;:44;;45546:1;45503:44;;;45542:1;45503:44;45479:69;;:8;;:69;;;;:::i;:::-;:205;;;;:::i;:::-;45472:212;;;;45335:361;45724:10;;;;;;;;;;;45710:24;;:10;:24;;;45706:356;;;45789:15;:24;45805:7;45789:24;;;;;;;;;;;;45752:34;45761:12;45775:10;;45752:8;:34::i;:::-;:61;45744:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;45982:66;45991:15;:24;46007:7;45991:24;;;;;;;;;;;;46016:22;:31;46039:7;46016:31;;;;;;;;;;;;;;;;45982:8;:66::i;:::-;45931:34;45940:12;45954:10;;45931:8;:34::i;:::-;:117;;;;:::i;:::-;45899:7;45871:35;;:15;:24;45887:7;45871:24;;;;;;;;;;;;;;;;;;;;;:35;;;:43;;45913:1;45871:43;;;45909:1;45871:43;45848:67;;:7;;:67;;;;:::i;:::-;:202;;;;:::i;:::-;45841:209;;;;45706:356;46090:12;;;;;;;;;;;46076:26;;:10;:26;;;46072:366;;;46157:17;:26;46175:7;46157:26;;;;;;;;;;;;46120:34;46129:12;46143:10;;46120:8;:34::i;:::-;:63;46112:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;46356:68;46365:17;:26;46383:7;46365:26;;;;;;;;;;;;46392:22;:31;46415:7;46392:31;;;;;;;;;;;;;;;;46356:8;:68::i;:::-;46305:34;46314:12;46328:10;;46305:8;:34::i;:::-;:119;;;;:::i;:::-;46273:7;46243:37;;:17;:26;46261:7;46243:26;;;;;;;;;;;;;;;;;;;;;:37;;;:45;;46287:1;46243:45;;;46283:1;46243:45;46218:71;;:9;;:71;;;;:::i;:::-;:208;;;;:::i;:::-;46211:215;;;;46072:366;46455:1;46448:8;;44423:2041;;;;;;:::o;10273:86::-;10320:4;10344:7;;;;;;;;;;;10337:14;;10273:86;:::o;40440:53::-;;;;;;;;;;;;;;;;;:::o;55758:576::-;10599:8;:6;:8::i;:::-;10598:9;10590:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;14309:1:::1;14905:7;;:19;;14897:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;14309:1;15038:7;:18;;;;55871:9:::2;55866:461;55886:8;;:15;;55882:1;:19;55866:461;;;55949:51;55988:8;;55997:1;55988:11;;;;;;;:::i;:::-;;;;;;;;55949:17;:29;55967:10;55949:29;;;;;;;;;;;;;;;:38;;:51;;;;:::i;:::-;55923:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;56079:49;56116:8;;56125:1;56116:11;;;;;;;:::i;:::-;;;;;;;;56079:17;:29;56097:10;56079:29;;;;;;;;;;;;;;;:36;;:49;;;;:::i;:::-;;56153:17;;;;;;;;;;;56145:43;;;56215:4;56239:10;56268:8;;56277:1;56268:11;;;;;;;:::i;:::-;;;;;;;;56145:170;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;55903:3;;;;;:::i;:::-;;;;55866:461;;;;14265:1:::1;15217:7:::0;:22:::1;;;;55758:576:::0;;:::o;42042:337::-;37570:12;:10;:12::i;:::-;37559:23;;:7;:5;:7::i;:::-;:23;;;37551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42131:9:::1;42127:245;42146:8;;:15;;42142:1;:19;42127:245;;;42191:15;42209:8;;42218:1;42209:11;;;;;;;:::i;:::-;;;;;;;;42191:29;;42247:14;:23;42262:7;42247:23;;;;;;;;;;;;;;;;;;;;;42243:110;;42325:4;42299:14;:23;42314:7;42299:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;42243:110;42168:204;42163:3;;;;:::i;:::-;;;42127:245;;;;42042:337:::0;;:::o;40202:52::-;;;;;;;;;;;;;;;;;:::o;40380:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;42697:489::-;37570:12;:10;:12::i;:::-;37559:23;;:7;:5;:7::i;:::-;:23;;;37551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42924:12:::1;42910:11;:26;;;;42956:9;42945:8;:20;;;;42984:8;42974:7;:18;;;;43013:10;43001:9;:22;;;;43045:11;43032:10;:24;;;;43077:10;43065:9;:22;;;;43114:16;43096:15;:34;;;;43167:11;43152:12;:26;;;;:::i;:::-;43139:10;:39;;;;42697:489:::0;;;;;;;;:::o;37990:94::-;37570:12;:10;:12::i;:::-;37559:23;;:7;:5;:7::i;:::-;:23;;;37551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38055:21:::1;38073:1;38055:9;:21::i;:::-;37990:94::o:0;40756:57::-;;;;;;;;;;;;;;;;;:::o;38838:41::-;;;;:::o;39358:25::-;;;;;;;;;;;;;:::o;39745:26::-;;;;:::o;41900:61::-;37570:12;:10;:12::i;:::-;37559:23;;:7;:5;:7::i;:::-;:23;;;37551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41945:8:::1;:6;:8::i;:::-;41900:61::o:0;39779:22::-;;;;:::o;38985:41::-;;;;:::o;39961:54::-;;;;;;;;;;;;;;;;;:::o;56370:196::-;37570:12;:10;:12::i;:::-;37559:23;;:7;:5;:7::i;:::-;:23;;;37551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56426:19:::1;56455:12;;;;;;;;;;;56448:30;;;56487:4;56448:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56426:67;;56511:12;;;;;;;;;;;56504:29;;;56534:10;56546:11;56504:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;56415:151;56370:196::o:0;37339:87::-;37385:7;37412:6;;;;;;;;;;;37405:13;;37339:87;:::o;39841:23::-;;;;:::o;39190:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;39244:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;40085:50::-;;;;;;;;;;;;;;;;;:::o;40261:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;40621:::-;;;;;;;;;;;;;;;;;;;;;;:::o;39905:24::-;;;;:::o;39322:29::-;;;;;;;;;;;;;:::o;39654:30::-;;;;:::o;39137:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;46504:5277::-;10599:8;:6;:8::i;:::-;10598:9;10590:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;46607:14:::1;46633:16:::0;46652:34:::1;46661:12;46675:10;;46652:8;:34::i;:::-;46633:53;;46697:38;46738:17;:29;46756:10;46738:29;;;;;;;;;;;;;;;46697:70;;46808:1;46788:17;:8;:15;:17::i;:::-;:21;46780:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;46863:14;;;;;;;;;;;46851:26;;:10;:26;;;46847:875;;;46903:9;46898:264;46918:8;;:15;;46914:1;:19;46898:264;;;47019:10;46971:58;;46979:14;;;;;;;;;;;46971:31;;;47003:8;;47012:1;47003:11;;;;;;;:::i;:::-;;;;;;;;46971:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;46963:67;;;::::0;::::1;;47108:15;;47072:19;:32;47092:8;;47101:1;47092:11;;;;;;;:::i;:::-;;;;;;;;47072:32;;;;;;;;;;;;47061:8;:43;;;;:::i;:::-;:62;47053:71;;;::::0;::::1;;46935:3;;;;;:::i;:::-;;;;46898:264;;;;47183:9;47178:204;47198:8;;:15;;47194:1;:19;47178:204;;;47249:55;47265:10;47277:8;;47286:1;47277:11;;;;;;;:::i;:::-;;;;;;;;47289:14;;;;;;;;;;;47249:15;:55::i;:::-;47239:65;;;;;:::i;:::-;;;47358:8;47323:19;:32;47343:8;;47352:1;47343:11;;;;;;;:::i;:::-;;;;;;;;47323:32;;;;;;;;;;;:43;;;;47215:3;;;;;:::i;:::-;;;;47178:204;;;;47406:9;47402:309;47421:8;;:15;;47417:1;:19;47402:309;;;47466:15;47484:8;;47493:1;47484:11;;;;;;;:::i;:::-;;;;;;;;47466:29;;47522:14;:23;47537:7;47522:23;;;;;;;;;;;;;;;;;;;;;47518:174;;47600:4;47574:14;:23;47589:7;47574:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;47641:27;;47631:37;;;;;:::i;:::-;;;47518:174;47443:268;47438:3;;;;:::i;:::-;;;47402:309;;;;46847:875;47749:10;;;;;;;;;;;47737:22;;:10;:22;;;47734:836;;;47781:9;47776:256;47796:8;;:15;;47792:1;:19;47776:256;;;47893:10;47849:54;;47857:10;;;;;;;;;;;47849:27;;;47877:8;;47886:1;47877:11;;;;;;;:::i;:::-;;;;;;;;47849:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;47841:63;;;::::0;::::1;;47978:15;;47946;:28;47962:8;;47971:1;47962:11;;;;;;;:::i;:::-;;;;;;;;47946:28;;;;;;;;;;;;47935:8;:39;;;;:::i;:::-;:58;47927:67;;;::::0;::::1;;47813:3;;;;;:::i;:::-;;;;47776:256;;;;48053:9;48048:196;48068:8;;:15;;48064:1;:19;48048:196;;;48119:51;48135:10;48147:8;;48156:1;48147:11;;;;;;;:::i;:::-;;;;;;;;48159:10;;;;;;;;;;;48119:15;:51::i;:::-;48109:61;;;;;:::i;:::-;;;48220:8;48189:15;:28;48205:8;;48214:1;48205:11;;;;;;;:::i;:::-;;;;;;;;48189:28;;;;;;;;;;;:39;;;;48085:3;;;;;:::i;:::-;;;;48048:196;;;;48264:9;48260:297;48279:8;;:15;;48275:1;:19;48260:297;;;48324:15;48342:8;;48351:1;48342:11;;;;;;;:::i;:::-;;;;;;;;48324:29;;48380:10;:19;48391:7;48380:19;;;;;;;;;;;;;;;;;;;;;48376:162;;48450:4;48428:10;:19;48439:7;48428:19;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;48491:23;;48481:33;;;;;:::i;:::-;;;48376:162;48301:256;48296:3;;;;:::i;:::-;;;48260:297;;;;47734:836;48597:12;;;;;;;;;;;48585:24;;:10;:24;;;48582:829;;;48630:9;48625:240;48645:8;;:15;;48641:1;:19;48625:240;;;48736:10;48690:56;;48698:12;;;;;;;;;;;48690:29;;;48720:8;;48729:1;48720:11;;;;;;;:::i;:::-;;;;;;;;48690:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;48682:65;;;::::0;::::1;;48815:15;;48781:17;:30;48799:8;;48808:1;48799:11;;;;;;;:::i;:::-;;;;;;;;48781:30;;;;;;;;;;;;48770:8;:41;;;;:::i;:::-;:60;48762:69;;;::::0;::::1;;48662:3;;;;;:::i;:::-;;;;48625:240;;;;48886:9;48881:200;48901:8;;:15;;48897:1;:19;48881:200;;;48952:53;48968:10;48980:8;;48989:1;48980:11;;;;;;;:::i;:::-;;;;;;;;48992:12;;;;;;;;;;;48952:15;:53::i;:::-;48942:63;;;;;:::i;:::-;;;49057:8;49024:17;:30;49042:8;;49051:1;49042:11;;;;;;;:::i;:::-;;;;;;;;49024:30;;;;;;;;;;;:41;;;;48918:3;;;;;:::i;:::-;;;;48881:200;;;;49101:9;49097:303;49116:8;;:15;;49112:1;:19;49097:303;;;49161:15;49179:8;;49188:1;49179:11;;;;;;;:::i;:::-;;;;;;;;49161:29;;49217:12;:21;49230:7;49217:21;;;;;;;;;;;;;;;;;;;;;49213:168;;49291:4;49267:12;:21;49280:7;49267:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;49332:25;;49322:35;;;;;:::i;:::-;;;49213:168;49138:262;49133:3;;;;:::i;:::-;;;49097:303;;;;48582:829;49438:11;;;;;;;;;;;49426:23;;:10;:23;;;49423:508;;;49470:9;49465:238;49485:8;;:15;;49481:1;:19;49465:238;;;49575:10;49530:55;;49538:11;;;;;;;;;;;49530:28;;;49559:8;;49568:1;49559:11;;;;;;;:::i;:::-;;;;;;;;49530:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;;49522:64;;;::::0;::::1;;49653:15;;49620:16;:29;49637:8;;49646:1;49637:11;;;;;;;:::i;:::-;;;;;;;;49620:29;;;;;;;;;;;;49609:8;:40;;;;:::i;:::-;:59;49601:68;;;::::0;::::1;;49502:3;;;;;:::i;:::-;;;;49465:238;;;;49725:9;49720:198;49740:8;;:15;;49736:1;:19;49720:198;;;49791:52;49807:10;49819:8;;49828:1;49819:11;;;;;;;:::i;:::-;;;;;;;;49831;;;;;;;;;;;49791:15;:52::i;:::-;49781:62;;;;;:::i;:::-;;;49894:8;49862:16;:29;49879:8;;49888:1;49879:11;;;;;;;:::i;:::-;;;;;;;;49862:29;;;;;;;;;;;:40;;;;49757:3;;;;;:::i;:::-;;;;49720:198;;;;49423:508;49959:13;;;;;;;;;;;49947:25;;:10;:25;;;49943:874;;;49993:9;49988:264;50008:8;;:15;;50004:1;:19;49988:264;;;50108:10;50061:57;;50069:13;;;;;;;;;;;50061:30;;;50092:8;;50101:1;50092:11;;;;;;;:::i;:::-;;;;;;;;50061:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;50053:66;;;::::0;::::1;;50196:15;;50161:18;:31;50180:8;;50189:1;50180:11;;;;;;;:::i;:::-;;;;;;;;50161:31;;;;;;;;;;;;50150:8;:42;;;;:::i;:::-;:61;50142:70;;;::::0;::::1;;50025:3;;;;;:::i;:::-;;;;49988:264;;;;50287:9;50282:202;50302:8;;:15;;50298:1;:19;50282:202;;;50353:54;50369:10;50381:8;;50390:1;50381:11;;;;;;;:::i;:::-;;;;;;;;50393:13;;;;;;;;;;;50353:15;:54::i;:::-;50343:64;;;;;:::i;:::-;;;50460:8;50426:18;:31;50445:8;;50454:1;50445:11;;;;;;;:::i;:::-;;;;;;;;50426:31;;;;;;;;;;;:42;;;;50319:3;;;;;:::i;:::-;;;;50282:202;;;;50504:9;50500:306;50519:8;;:15;;50515:1;:19;50500:306;;;50564:15;50582:8;;50591:1;50582:11;;;;;;;:::i;:::-;;;;;;;;50564:29;;50620:13;:22;50634:7;50620:22;;;;;;;;;;;;;;;;;;;;;50616:171;;50696:4;50671:13;:22;50685:7;50671:22;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;50737:26;;50727:36;;;;;:::i;:::-;;;50616:171;50541:265;50536:3;;;;:::i;:::-;;;50500:306;;;;49943:874;50852:12;;;;;;;;;;;50840:24;;:10;:24;;;50837:841;;;50885:9;50880:242;50900:8;;:15;;50896:1;:19;50880:242;;;50999:10;50953:56;;50961:12;;;;;;;;;;;50953:29;;;50983:8;;50992:1;50983:11;;;;;;;:::i;:::-;;;;;;;;50953:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;50945:65;;;::::0;::::1;;51086:15;;51052:17;:30;51070:8;;51079:1;51070:11;;;;;;;:::i;:::-;;;;;;;;51052:30;;;;;;;;;;;;51041:8;:41;;;;:::i;:::-;:60;51033:69;;;::::0;::::1;;50917:3;;;;;:::i;:::-;;;;50880:242;;;;51153:9;51148:200;51168:8;;:15;;51164:1;:19;51148:200;;;51219:53;51235:10;51247:8;;51256:1;51247:11;;;;;;;:::i;:::-;;;;;;;;51259:12;;;;;;;;;;;51219:15;:53::i;:::-;51209:63;;;;;:::i;:::-;;;51324:8;51291:17;:30;51309:8;;51318:1;51309:11;;;;;;;:::i;:::-;;;;;;;;51291:30;;;;;;;;;;;:41;;;;51185:3;;;;;:::i;:::-;;;;51148:200;;;;51368:9;51364:303;51383:8;;:15;;51379:1;:19;51364:303;;;51428:15;51446:8;;51455:1;51446:11;;;;;;;:::i;:::-;;;;;;;;51428:29;;51484:12;:21;51497:7;51484:21;;;;;;;;;;;;;;;;;;;;;51480:168;;51558:4;51534:12;:21;51547:7;51534:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;51599:25;;51589:35;;;;;:::i;:::-;;;51480:168;51405:262;51400:3;;;;:::i;:::-;;;51364:303;;;;50837:841;51701:1;51692:6;:10;51688:86;;;51722:12;;;;;;;;;;;51715:29;;;51745:10;51757:6;51715:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51688:86;46596:5185;;;46504:5277:::0;;;:::o;40022:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;39457:28::-;;;;;;;;;;;;;:::o;40322:51::-;;;;;;;;;;;;;;;;;:::o;51817:2876::-;10599:8;:6;:8::i;:::-;10598:9;10590:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;51914:16:::1;51933:12;51914:31;;51956:38;51997:17;:29;52015:10;51997:29;;;;;;;;;;;;;;;51956:70;;52065:1;52045:17;:8;:15;:17::i;:::-;:21;52037:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;52107:9;52102:188;52122:8;;:15;;52118:1;:19;52102:188;;;52228:10;52184:54;;52192:10;52184:27;;;52212:8;;52221:1;52212:11;;;;;;;:::i;:::-;;;;;;;;52184:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;52176:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;52139:3;;;;;:::i;:::-;;;;52102:188;;;;52326:14;;;;;;;;;;;52314:26;;:10;:26;;;52310:402;;;52362:9;52357:146;52377:8;;:15;;52373:1;:19;52357:146;;;52464:10;52428:46;;:19;:32;52448:8;;52457:1;52448:11;;;;;;;:::i;:::-;;;;;;;;52428:32;;;;;;;;;;;;;;;;;;;;;:46;;;;52420:55;;;::::0;::::1;;52394:3;;;;;:::i;:::-;;;;52357:146;;;;52522:9;52517:184;52537:8;;:15;;52533:1;:19;52517:184;;;52613:10;52578:19;:32;52598:8;;52607:1;52598:11;;;;;;;:::i;:::-;;;;;;;;52578:32;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;52677:8;52642:19;:32;52662:8;;52671:1;52662:11;;;;;;;:::i;:::-;;;;;;;;52642:32;;;;;;;;;;;:43;;;;52554:3;;;;;:::i;:::-;;;;52517:184;;;;52310:402;52738:10;;;;;;;;;;;52726:22;;:10;:22;;;52722:370;;;52770:9;52765:124;52785:8;;:15;;52781:1;:19;52765:124;;;52862:10;52830:42;;:15;:28;52846:8;;52855:1;52846:11;;;;;;;:::i;:::-;;;;;;;;52830:28;;;;;;;;;;;;;;;;;;;;;:42;;;;52822:51;;;::::0;::::1;;52802:3;;;;;:::i;:::-;;;;52765:124;;;;52910:9;52905:176;52925:8;;:15;;52921:1;:19;52905:176;;;52997:10;52966:15;:28;52982:8;;52991:1;52982:11;;;;;;;:::i;:::-;;;;;;;;52966:28;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;53057:8;53026:15;:28;53042:8;;53051:1;53042:11;;;;;;;:::i;:::-;;;;;;;;53026:28;;;;;;;;;;;:39;;;;52942:3;;;;;:::i;:::-;;;;52905:176;;;;52722:370;53118:12;;;;;;;;;;;53106:24;;:10;:24;;;53102:389;;;53151:9;53146:126;53166:8;;:15;;53162:1;:19;53146:126;;;53245:10;53211:44;;:17;:30;53229:8;;53238:1;53229:11;;;;;;;:::i;:::-;;;;;;;;53211:30;;;;;;;;;;;;;;;;;;;;;:44;;;;53203:53;;;::::0;::::1;;53183:3;;;;;:::i;:::-;;;;53146:126;;;;53305:9;53300:180;53320:8;;:15;;53316:1;:19;53300:180;;;53394:10;53361:17;:30;53379:8;;53388:1;53379:11;;;;;;;:::i;:::-;;;;;;;;53361:30;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;53456:8;53423:17;:30;53441:8;;53450:1;53441:11;;;;;;;:::i;:::-;;;;;;;;53423:30;;;;;;;;;;;:41;;;;53337:3;;;;;:::i;:::-;;;;53300:180;;;;53102:389;53517:11;;;;;;;;;;;53505:23;;:10;:23;;;53501:381;;;53549:9;53544:125;53564:8;;:15;;53560:1;:19;53544:125;;;53642:10;53609:43;;:16;:29;53626:8;;53635:1;53626:11;;;;;;;:::i;:::-;;;;;;;;53609:29;;;;;;;;;;;;;;;;;;;;;:43;;;;53601:52;;;::::0;::::1;;53581:3;;;;;:::i;:::-;;;;53544:125;;;;53698:9;53693:178;53713:8;;:15;;53709:1;:19;53693:178;;;53786:10;53754:16;:29;53771:8;;53780:1;53771:11;;;;;;;:::i;:::-;;;;;;;;53754:29;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;53847:8;53815:16;:29;53832:8;;53841:1;53832:11;;;;;;;:::i;:::-;;;;;;;;53815:29;;;;;;;;;;;:40;;;;53730:3;;;;;:::i;:::-;;;;53693:178;;;;53501:381;53908:13;;;;;;;;;;;53896:25;;:10;:25;;;53892:394;;;53943:9;53938:127;53958:8;;:15;;53954:1;:19;53938:127;;;54038:10;54003:45;;:18;:31;54022:8;;54031:1;54022:11;;;;;;;:::i;:::-;;;;;;;;54003:31;;;;;;;;;;;;;;;;;;;;;:45;;;;53995:54;;;::::0;::::1;;53975:3;;;;;:::i;:::-;;;;53938:127;;;;54098:9;54093:182;54113:8;;:15;;54109:1;:19;54093:182;;;54188:10;54154:18;:31;54173:8;;54182:1;54173:11;;;;;;;:::i;:::-;;;;;;;;54154:31;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;54251:8;54217:18;:31;54236:8;;54245:1;54236:11;;;;;;;:::i;:::-;;;;;;;;54217:31;;;;;;;;;;;:42;;;;54130:3;;;;;:::i;:::-;;;;54093:182;;;;53892:394;54312:12;;;;;;;;;;;54300:24;;:10;:24;;;54296:390;;;54346:9;54341:126;54361:8;;:15;;54357:1;:19;54341:126;;;54440:10;54406:44;;:17;:30;54424:8;;54433:1;54424:11;;;;;;;:::i;:::-;;;;;;;;54406:30;;;;;;;;;;;;;;;;;;;;;:44;;;;54398:53;;;::::0;::::1;;54378:3;;;;;:::i;:::-;;;;54341:126;;;;54500:9;54495:180;54515:8;;:15;;54511:1;:19;54495:180;;;54589:10;54556:17;:30;54574:8;;54583:1;54574:11;;;;;;;:::i;:::-;;;;;;;;54556:30;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;54651:8;54618:17;:30;54636:8;;54645:1;54636:11;;;;;;;:::i;:::-;;;;;;;;54618:30;;;;;;;;;;;:41;;;;54532:3;;;;;:::i;:::-;;;;54495:180;;;;54296:390;51903:2790;;51817:2876:::0;;;:::o;40500:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;43194:1174::-;43278:4;43295:16;43314:34;43323:12;43337:10;;43314:8;:34::i;:::-;43295:53;;43376:14;;;;;;;;;;;43362:28;;:10;:28;;;:64;;;;;43425:1;43394:19;:28;43414:7;43394:28;;;;;;;;;;;;:32;43362:64;43359:161;;;43492:15;;43460:19;:28;43480:7;43460:28;;;;;;;;;;;;43449:8;:39;;;;:::i;:::-;:58;43441:67;;;;;43359:161;43547:10;;;;;;;;;;;43533:24;;:10;:24;;;:56;;;;;43588:1;43561:15;:24;43577:7;43561:24;;;;;;;;;;;;:28;43533:56;43530:149;;;43651:15;;43623;:24;43639:7;43623:24;;;;;;;;;;;;43612:8;:35;;;;:::i;:::-;:54;43604:63;;;;;43530:149;43706:12;;;;;;;;;;;43692:26;;:10;:26;;;:60;;;;;43751:1;43722:17;:26;43740:7;43722:26;;;;;;;;;;;;:30;43692:60;43689:155;;;43816:15;;43786:17;:26;43804:7;43786:26;;;;;;;;;;;;43775:8;:37;;;;:::i;:::-;:56;43767:65;;;;;43689:155;43871:11;;;;;;;;;;;43857:25;;:10;:25;;;:58;;;;;43914:1;43886:16;:25;43903:7;43886:25;;;;;;;;;;;;:29;43857:58;43854:152;;;43978:15;;43949:16;:25;43966:7;43949:25;;;;;;;;;;;;43938:8;:36;;;;:::i;:::-;:55;43930:64;;;;;43854:152;44033:13;;;;;;;;;;;44019:27;;:10;:27;;;:62;;;;;44080:1;44050:18;:27;44069:7;44050:27;;;;;;;;;;;;:31;44019:62;44016:158;;;44146:15;;44115:18;:27;44134:7;44115:27;;;;;;;;;;;;44104:8;:38;;;;:::i;:::-;:57;44096:66;;;;;44016:158;44201:12;;;;;;;;;;;44187:26;;:10;:26;;;:60;;;;;44246:1;44217:17;:26;44235:7;44217:26;;;;;;;;;;;;:30;44187:60;44184:155;;;44311:15;;44281:17;:26;44299:7;44281:26;;;;;;;;;;;;44270:8;:37;;;;:::i;:::-;:56;44262:65;;;;;44184:155;44355:5;44348:12;;;43194:1174;;;;;:::o;38935:43::-;;;;:::o;40142:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;38239:192::-;37570:12;:10;:12::i;:::-;37559:23;;:7;:5;:7::i;:::-;:23;;;37551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38348:1:::1;38328:22;;:8;:22;;;;38320:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38404:19;38414:8;38404:9;:19::i;:::-;38239:192:::0;:::o;40562:52::-;;;;;;;;;;;;;;;;;:::o;26270:114::-;26330:7;26357:19;26365:3;:10;;26357:7;:19::i;:::-;26350:26;;26270:114;;;:::o;26738:137::-;26809:7;26844:22;26848:3;:10;;26860:5;26844:3;:22::i;:::-;26836:31;;26829:38;;26738:137;;;;:::o;6267:98::-;6320:7;6347:10;6340:17;;6267:98;:::o;11332:120::-;10876:8;:6;:8::i;:::-;10868:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;11401:5:::1;11391:7;;:15;;;;;;;;;;;;;;;;;;11422:22;11431:12;:10;:12::i;:::-;11422:22;;;;;;:::i;:::-;;;;;;;;11332:120::o:0;25508:131::-;25575:4;25599:32;25604:3;:10;;25624:5;25616:14;;25599:4;:32::i;:::-;25592:39;;25508:131;;;;:::o;11837:106::-;11895:7;11926:1;11922;:5;:13;;11934:1;11922:13;;;11930:1;11922:13;11915:20;;11837:106;;;;:::o;11654:107::-;11712:7;11744:1;11739;:6;;:14;;11752:1;11739:14;;;11748:1;11739:14;11732:21;;11654:107;;;;:::o;26038:146::-;26115:4;26139:37;26149:3;:10;;26169:5;26161:14;;26139:9;:37::i;:::-;26132:44;;26038:146;;;;:::o;25815:137::-;25885:4;25909:35;25917:3;:10;;25937:5;25929:14;;25909:7;:35::i;:::-;25902:42;;25815:137;;;;:::o;38439:173::-;38495:16;38514:6;;;;;;;;;;;38495:25;;38540:8;38531:6;;:17;;;;;;;;;;;;;;;;;;38595:8;38564:40;;38585:8;38564:40;;;;;;;;;;;;38484:128;38439:173;:::o;11073:118::-;10599:8;:6;:8::i;:::-;10598:9;10590:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11143:4:::1;11133:7;;:14;;;;;;;;;;;;;;;;;;11163:20;11170:12;:10;:12::i;:::-;11163:20;;;;;;:::i;:::-;;;;;;;;11073:118::o:0;19216:109::-;19272:7;19299:3;:11;;:18;;;;19292:25;;19216:109;;;:::o;19679:120::-;19746:7;19773:3;:11;;19785:5;19773:18;;;;;;;;:::i;:::-;;;;;;;;;;19766:25;;19679:120;;;;:::o;16905:414::-;16968:4;16990:21;17000:3;17005:5;16990:9;:21::i;:::-;16985:327;;17028:3;:11;;17045:5;17028:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17211:3;:11;;:18;;;;17189:3;:12;;:19;17202:5;17189:19;;;;;;;;;;;:40;;;;17251:4;17244:11;;;;16985:327;17295:5;17288:12;;16905:414;;;;;:::o;19001:129::-;19074:4;19121:1;19098:3;:12;;:19;19111:5;19098:19;;;;;;;;;;;;:24;;19091:31;;19001:129;;;;:::o;17495:1420::-;17561:4;17679:18;17700:3;:12;;:19;17713:5;17700:19;;;;;;;;;;;;17679:40;;17750:1;17736:10;:15;17732:1176;;18111:21;18148:1;18135:10;:14;;;;:::i;:::-;18111:38;;18164:17;18205:1;18184:3;:11;;:18;;;;:22;;;;:::i;:::-;18164:42;;18240:13;18227:9;:26;18223:405;;18274:17;18294:3;:11;;18306:9;18294:22;;;;;;;;:::i;:::-;;;;;;;;;;18274:42;;18448:9;18419:3;:11;;18431:13;18419:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;18559:10;18533:3;:12;;:23;18546:9;18533:23;;;;;;;;;;;:36;;;;18255:373;18223:405;18709:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18804:3;:12;;:19;18817:5;18804:19;;;;;;;;;;;18797:26;;;18847:4;18840:11;;;;;;;17732:1176;18891:5;18884:12;;;17495:1420;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;674:117::-;783:1;780;773:12;797:117;906:1;903;896:12;920:77;957:7;986:5;975:16;;920:77;;;:::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:90::-;1645:7;1688:5;1681:13;1674:21;1663:32;;1611:90;;;:::o;1707:109::-;1788:21;1803:5;1788:21;:::i;:::-;1783:3;1776:34;1707:109;;:::o;1822:210::-;1909:4;1947:2;1936:9;1932:18;1924:26;;1960:65;2022:1;2011:9;2007:17;1998:6;1960:65;:::i;:::-;1822:210;;;;:::o;2038:122::-;2111:24;2129:5;2111:24;:::i;:::-;2104:5;2101:35;2091:63;;2150:1;2147;2140:12;2091:63;2038:122;:::o;2166:139::-;2212:5;2250:6;2237:20;2228:29;;2266:33;2293:5;2266:33;:::i;:::-;2166:139;;;;:::o;2311:117::-;2420:1;2417;2410:12;2434:117;2543:1;2540;2533:12;2557:117;2666:1;2663;2656:12;2693:552;2750:8;2760:6;2810:3;2803:4;2795:6;2791:17;2787:27;2777:122;;2818:79;;:::i;:::-;2777:122;2931:6;2918:20;2908:30;;2961:18;2953:6;2950:30;2947:117;;;2983:79;;:::i;:::-;2947:117;3097:4;3089:6;3085:17;3073:29;;3151:3;3143:4;3135:6;3131:17;3121:8;3117:32;3114:41;3111:128;;;3158:79;;:::i;:::-;3111:128;2693:552;;;;;:::o;3251:963::-;3348:6;3356;3364;3372;3380;3429:3;3417:9;3408:7;3404:23;3400:33;3397:120;;;3436:79;;:::i;:::-;3397:120;3556:1;3581:53;3626:7;3617:6;3606:9;3602:22;3581:53;:::i;:::-;3571:63;;3527:117;3683:2;3709:53;3754:7;3745:6;3734:9;3730:22;3709:53;:::i;:::-;3699:63;;3654:118;3811:2;3837:53;3882:7;3873:6;3862:9;3858:22;3837:53;:::i;:::-;3827:63;;3782:118;3967:2;3956:9;3952:18;3939:32;3998:18;3990:6;3987:30;3984:117;;;4020:79;;:::i;:::-;3984:117;4133:64;4189:7;4180:6;4169:9;4165:22;4133:64;:::i;:::-;4115:82;;;;3910:297;3251:963;;;;;;;;:::o;4220:149::-;4256:7;4296:66;4289:5;4285:78;4274:89;;4220:149;;;:::o;4375:115::-;4460:23;4477:5;4460:23;:::i;:::-;4455:3;4448:36;4375:115;;:::o;4496:218::-;4587:4;4625:2;4614:9;4610:18;4602:26;;4638:69;4704:1;4693:9;4689:17;4680:6;4638:69;:::i;:::-;4496:218;;;;:::o;4720:118::-;4807:24;4825:5;4807:24;:::i;:::-;4802:3;4795:37;4720:118;;:::o;4844:222::-;4937:4;4975:2;4964:9;4960:18;4952:26;;4988:71;5056:1;5045:9;5041:17;5032:6;4988:71;:::i;:::-;4844:222;;;;:::o;5072:329::-;5131:6;5180:2;5168:9;5159:7;5155:23;5151:32;5148:119;;;5186:79;;:::i;:::-;5148:119;5306:1;5331:53;5376:7;5367:6;5356:9;5352:22;5331:53;:::i;:::-;5321:63;;5277:117;5072:329;;;;:::o;5407:114::-;5474:6;5508:5;5502:12;5492:22;;5407:114;;;:::o;5527:184::-;5626:11;5660:6;5655:3;5648:19;5700:4;5695:3;5691:14;5676:29;;5527:184;;;;:::o;5717:132::-;5784:4;5807:3;5799:11;;5837:4;5832:3;5828:14;5820:22;;5717:132;;;:::o;5855:108::-;5932:24;5950:5;5932:24;:::i;:::-;5927:3;5920:37;5855:108;;:::o;5969:179::-;6038:10;6059:46;6101:3;6093:6;6059:46;:::i;:::-;6137:4;6132:3;6128:14;6114:28;;5969:179;;;;:::o;6154:113::-;6224:4;6256;6251:3;6247:14;6239:22;;6154:113;;;:::o;6303:732::-;6422:3;6451:54;6499:5;6451:54;:::i;:::-;6521:86;6600:6;6595:3;6521:86;:::i;:::-;6514:93;;6631:56;6681:5;6631:56;:::i;:::-;6710:7;6741:1;6726:284;6751:6;6748:1;6745:13;6726:284;;;6827:6;6821:13;6854:63;6913:3;6898:13;6854:63;:::i;:::-;6847:70;;6940:60;6993:6;6940:60;:::i;:::-;6930:70;;6786:224;6773:1;6770;6766:9;6761:14;;6726:284;;;6730:14;7026:3;7019:10;;6427:608;;;6303:732;;;;:::o;7041:373::-;7184:4;7222:2;7211:9;7207:18;7199:26;;7271:9;7265:4;7261:20;7257:1;7246:9;7242:17;7235:47;7299:108;7402:4;7393:6;7299:108;:::i;:::-;7291:116;;7041:373;;;;:::o;7437:568::-;7510:8;7520:6;7570:3;7563:4;7555:6;7551:17;7547:27;7537:122;;7578:79;;:::i;:::-;7537:122;7691:6;7678:20;7668:30;;7721:18;7713:6;7710:30;7707:117;;;7743:79;;:::i;:::-;7707:117;7857:4;7849:6;7845:17;7833:29;;7911:3;7903:4;7895:6;7891:17;7881:8;7877:32;7874:41;7871:128;;;7918:79;;:::i;:::-;7871:128;7437:568;;;;;:::o;8011:559::-;8097:6;8105;8154:2;8142:9;8133:7;8129:23;8125:32;8122:119;;;8160:79;;:::i;:::-;8122:119;8308:1;8297:9;8293:17;8280:31;8338:18;8330:6;8327:30;8324:117;;;8360:79;;:::i;:::-;8324:117;8473:80;8545:7;8536:6;8525:9;8521:22;8473:80;:::i;:::-;8455:98;;;;8251:312;8011:559;;;;;:::o;8576:619::-;8653:6;8661;8669;8718:2;8706:9;8697:7;8693:23;8689:32;8686:119;;;8724:79;;:::i;:::-;8686:119;8844:1;8869:53;8914:7;8905:6;8894:9;8890:22;8869:53;:::i;:::-;8859:63;;8815:117;8971:2;8997:53;9042:7;9033:6;9022:9;9018:22;8997:53;:::i;:::-;8987:63;;8942:118;9099:2;9125:53;9170:7;9161:6;9150:9;9146:22;9125:53;:::i;:::-;9115:63;;9070:118;8576:619;;;;;:::o;9201:1349::-;9323:6;9331;9339;9347;9355;9363;9371;9379;9428:3;9416:9;9407:7;9403:23;9399:33;9396:120;;;9435:79;;:::i;:::-;9396:120;9555:1;9580:53;9625:7;9616:6;9605:9;9601:22;9580:53;:::i;:::-;9570:63;;9526:117;9682:2;9708:53;9753:7;9744:6;9733:9;9729:22;9708:53;:::i;:::-;9698:63;;9653:118;9810:2;9836:53;9881:7;9872:6;9861:9;9857:22;9836:53;:::i;:::-;9826:63;;9781:118;9938:2;9964:53;10009:7;10000:6;9989:9;9985:22;9964:53;:::i;:::-;9954:63;;9909:118;10066:3;10093:53;10138:7;10129:6;10118:9;10114:22;10093:53;:::i;:::-;10083:63;;10037:119;10195:3;10222:53;10267:7;10258:6;10247:9;10243:22;10222:53;:::i;:::-;10212:63;;10166:119;10324:3;10351:53;10396:7;10387:6;10376:9;10372:22;10351:53;:::i;:::-;10341:63;;10295:119;10453:3;10480:53;10525:7;10516:6;10505:9;10501:22;10480:53;:::i;:::-;10470:63;;10424:119;9201:1349;;;;;;;;;;;:::o;10556:704::-;10651:6;10659;10667;10716:2;10704:9;10695:7;10691:23;10687:32;10684:119;;;10722:79;;:::i;:::-;10684:119;10870:1;10859:9;10855:17;10842:31;10900:18;10892:6;10889:30;10886:117;;;10922:79;;:::i;:::-;10886:117;11035:80;11107:7;11098:6;11087:9;11083:22;11035:80;:::i;:::-;11017:98;;;;10813:312;11164:2;11190:53;11235:7;11226:6;11215:9;11211:22;11190:53;:::i;:::-;11180:63;;11135:118;10556:704;;;;;:::o;11266:474::-;11334:6;11342;11391:2;11379:9;11370:7;11366:23;11362:32;11359:119;;;11397:79;;:::i;:::-;11359:119;11517:1;11542:53;11587:7;11578:6;11567:9;11563:22;11542:53;:::i;:::-;11532:63;;11488:117;11644:2;11670:53;11715:7;11706:6;11695:9;11691:22;11670:53;:::i;:::-;11660:63;;11615:118;11266:474;;;;;:::o;11746:180::-;11794:77;11791:1;11784:88;11891:4;11888:1;11881:15;11915:4;11912:1;11905:15;11932:180;11980:77;11977:1;11970:88;12077:4;12074:1;12067:15;12101:4;12098:1;12091:15;12118:180;12166:77;12163:1;12156:88;12263:4;12260:1;12253:15;12287:4;12284:1;12277:15;12304:233;12343:3;12366:24;12384:5;12366:24;:::i;:::-;12357:33;;12412:66;12405:5;12402:77;12399:103;;;12482:18;;:::i;:::-;12399:103;12529:1;12522:5;12518:13;12511:20;;12304:233;;;:::o;12543:169::-;12627:11;12661:6;12656:3;12649:19;12701:4;12696:3;12692:14;12677:29;;12543:169;;;;:::o;12718:182::-;12858:34;12854:1;12846:6;12842:14;12835:58;12718:182;:::o;12906:366::-;13048:3;13069:67;13133:2;13128:3;13069:67;:::i;:::-;13062:74;;13145:93;13234:3;13145:93;:::i;:::-;13263:2;13258:3;13254:12;13247:19;;12906:366;;;:::o;13278:419::-;13444:4;13482:2;13471:9;13467:18;13459:26;;13531:9;13525:4;13521:20;13517:1;13506:9;13502:17;13495:47;13559:131;13685:4;13559:131;:::i;:::-;13551:139;;13278:419;;;:::o;13703:166::-;13843:18;13839:1;13831:6;13827:14;13820:42;13703:166;:::o;13875:366::-;14017:3;14038:67;14102:2;14097:3;14038:67;:::i;:::-;14031:74;;14114:93;14203:3;14114:93;:::i;:::-;14232:2;14227:3;14223:12;14216:19;;13875:366;;;:::o;14247:419::-;14413:4;14451:2;14440:9;14436:18;14428:26;;14500:9;14494:4;14490:20;14486:1;14475:9;14471:17;14464:47;14528:131;14654:4;14528:131;:::i;:::-;14520:139;;14247:419;;;:::o;14672:165::-;14812:17;14808:1;14800:6;14796:14;14789:41;14672:165;:::o;14843:366::-;14985:3;15006:67;15070:2;15065:3;15006:67;:::i;:::-;14999:74;;15082:93;15171:3;15082:93;:::i;:::-;15200:2;15195:3;15191:12;15184:19;;14843:366;;;:::o;15215:419::-;15381:4;15419:2;15408:9;15404:18;15396:26;;15468:9;15462:4;15458:20;15454:1;15443:9;15439:17;15432:47;15496:131;15622:4;15496:131;:::i;:::-;15488:139;;15215:419;;;:::o;15640:168::-;15723:11;15757:6;15752:3;15745:19;15797:4;15792:3;15788:14;15773:29;;15640:168;;;;:::o;15814:114::-;;:::o;15934:362::-;16075:3;16096:65;16159:1;16154:3;16096:65;:::i;:::-;16089:72;;16170:93;16259:3;16170:93;:::i;:::-;16288:1;16283:3;16279:11;16272:18;;15934:362;;;:::o;16302:748::-;16551:4;16589:3;16578:9;16574:19;16566:27;;16603:71;16671:1;16660:9;16656:17;16647:6;16603:71;:::i;:::-;16684:72;16752:2;16741:9;16737:18;16728:6;16684:72;:::i;:::-;16766;16834:2;16823:9;16819:18;16810:6;16766:72;:::i;:::-;16885:9;16879:4;16875:20;16870:2;16859:9;16855:18;16848:48;16913:130;17038:4;16913:130;:::i;:::-;16905:138;;16302:748;;;;;;:::o;17056:164::-;17196:16;17192:1;17184:6;17180:14;17173:40;17056:164;:::o;17226:366::-;17368:3;17389:67;17453:2;17448:3;17389:67;:::i;:::-;17382:74;;17465:93;17554:3;17465:93;:::i;:::-;17583:2;17578:3;17574:12;17567:19;;17226:366;;;:::o;17598:419::-;17764:4;17802:2;17791:9;17787:18;17779:26;;17851:9;17845:4;17841:20;17837:1;17826:9;17822:17;17815:47;17879:131;18005:4;17879:131;:::i;:::-;17871:139;;17598:419;;;:::o;18023:191::-;18063:4;18083:20;18101:1;18083:20;:::i;:::-;18078:25;;18117:20;18135:1;18117:20;:::i;:::-;18112:25;;18156:1;18153;18150:8;18147:34;;;18161:18;;:::i;:::-;18147:34;18206:1;18203;18199:9;18191:17;;18023:191;;;;:::o;18220:348::-;18260:7;18283:20;18301:1;18283:20;:::i;:::-;18278:25;;18317:20;18335:1;18317:20;:::i;:::-;18312:25;;18505:1;18437:66;18433:74;18430:1;18427:81;18422:1;18415:9;18408:17;18404:105;18401:131;;;18512:18;;:::i;:::-;18401:131;18560:1;18557;18553:9;18542:20;;18220:348;;;;:::o;18574:181::-;18714:33;18710:1;18702:6;18698:14;18691:57;18574:181;:::o;18761:366::-;18903:3;18924:67;18988:2;18983:3;18924:67;:::i;:::-;18917:74;;19000:93;19089:3;19000:93;:::i;:::-;19118:2;19113:3;19109:12;19102:19;;18761:366;;;:::o;19133:419::-;19299:4;19337:2;19326:9;19322:18;19314:26;;19386:9;19380:4;19376:20;19372:1;19361:9;19357:17;19350:47;19414:131;19540:4;19414:131;:::i;:::-;19406:139;;19133:419;;;:::o;19558:176::-;19698:28;19694:1;19686:6;19682:14;19675:52;19558:176;:::o;19740:366::-;19882:3;19903:67;19967:2;19962:3;19903:67;:::i;:::-;19896:74;;19979:93;20068:3;19979:93;:::i;:::-;20097:2;20092:3;20088:12;20081:19;;19740:366;;;:::o;20112:419::-;20278:4;20316:2;20305:9;20301:18;20293:26;;20365:9;20359:4;20355:20;20351:1;20340:9;20336:17;20329:47;20393:131;20519:4;20393:131;:::i;:::-;20385:139;;20112:419;;;:::o;20537:305::-;20577:3;20596:20;20614:1;20596:20;:::i;:::-;20591:25;;20630:20;20648:1;20630:20;:::i;:::-;20625:25;;20784:1;20716:66;20712:74;20709:1;20706:81;20703:107;;;20790:18;;:::i;:::-;20703:107;20834:1;20831;20827:9;20820:16;;20537:305;;;;:::o;20848:143::-;20905:5;20936:6;20930:13;20921:22;;20952:33;20979:5;20952:33;:::i;:::-;20848:143;;;;:::o;20997:351::-;21067:6;21116:2;21104:9;21095:7;21091:23;21087:32;21084:119;;;21122:79;;:::i;:::-;21084:119;21242:1;21267:64;21323:7;21314:6;21303:9;21299:22;21267:64;:::i;:::-;21257:74;;21213:128;20997:351;;;;:::o;21354:332::-;21475:4;21513:2;21502:9;21498:18;21490:26;;21526:71;21594:1;21583:9;21579:17;21570:6;21526:71;:::i;:::-;21607:72;21675:2;21664:9;21660:18;21651:6;21607:72;:::i;:::-;21354:332;;;;;:::o;21692:116::-;21762:21;21777:5;21762:21;:::i;:::-;21755:5;21752:32;21742:60;;21798:1;21795;21788:12;21742:60;21692:116;:::o;21814:137::-;21868:5;21899:6;21893:13;21884:22;;21915:30;21939:5;21915:30;:::i;:::-;21814:137;;;;:::o;21957:345::-;22024:6;22073:2;22061:9;22052:7;22048:23;22044:32;22041:119;;;22079:79;;:::i;:::-;22041:119;22199:1;22224:61;22277:7;22268:6;22257:9;22253:22;22224:61;:::i;:::-;22214:71;;22170:125;21957:345;;;;:::o;22308:170::-;22448:22;22444:1;22436:6;22432:14;22425:46;22308:170;:::o;22484:366::-;22626:3;22647:67;22711:2;22706:3;22647:67;:::i;:::-;22640:74;;22723:93;22812:3;22723:93;:::i;:::-;22841:2;22836:3;22832:12;22825:19;;22484:366;;;:::o;22856:419::-;23022:4;23060:2;23049:9;23045:18;23037:26;;23109:9;23103:4;23099:20;23095:1;23084:9;23080:17;23073:47;23137:131;23263:4;23137:131;:::i;:::-;23129:139;;22856:419;;;:::o;23281:143::-;23338:5;23369:6;23363:13;23354:22;;23385:33;23412:5;23385:33;:::i;:::-;23281:143;;;;:::o;23430:351::-;23500:6;23549:2;23537:9;23528:7;23524:23;23520:32;23517:119;;;23555:79;;:::i;:::-;23517:119;23675:1;23700:64;23756:7;23747:6;23736:9;23732:22;23700:64;:::i;:::-;23690:74;;23646:128;23430:351;;;;:::o;23787:173::-;23927:25;23923:1;23915:6;23911:14;23904:49;23787:173;:::o;23966:366::-;24108:3;24129:67;24193:2;24188:3;24129:67;:::i;:::-;24122:74;;24205:93;24294:3;24205:93;:::i;:::-;24323:2;24318:3;24314:12;24307:19;;23966:366;;;:::o;24338:419::-;24504:4;24542:2;24531:9;24527:18;24519:26;;24591:9;24585:4;24581:20;24577:1;24566:9;24562:17;24555:47;24619:131;24745:4;24619:131;:::i;:::-;24611:139;;24338:419;;;:::o;24763:225::-;24903:34;24899:1;24891:6;24887:14;24880:58;24972:8;24967:2;24959:6;24955:15;24948:33;24763:225;:::o;24994:366::-;25136:3;25157:67;25221:2;25216:3;25157:67;:::i;:::-;25150:74;;25233:93;25322:3;25233:93;:::i;:::-;25351:2;25346:3;25342:12;25335:19;;24994:366;;;:::o;25366:419::-;25532:4;25570:2;25559:9;25555:18;25547:26;;25619:9;25613:4;25609:20;25605:1;25594:9;25590:17;25583:47;25647:131;25773:4;25647:131;:::i;:::-;25639:139;;25366:419;;;:::o;25791:170::-;25931:22;25927:1;25919:6;25915:14;25908:46;25791:170;:::o;25967:366::-;26109:3;26130:67;26194:2;26189:3;26130:67;:::i;:::-;26123:74;;26206:93;26295:3;26206:93;:::i;:::-;26324:2;26319:3;26315:12;26308:19;;25967:366;;;:::o;26339:419::-;26505:4;26543:2;26532:9;26528:18;26520:26;;26592:9;26586:4;26582:20;26578:1;26567:9;26563:17;26556:47;26620:131;26746:4;26620:131;:::i;:::-;26612:139;;26339:419;;;:::o;26764:180::-;26812:77;26809:1;26802:88;26909:4;26906:1;26899:15;26933:4;26930:1;26923:15
Swarm Source
ipfs://854e4d919a27fc65953f10ec11ac00f5e4f40630af7042a02e9378cb24a75569
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.