ERC-721
Overview
Max Total Supply
1,390 LDPCWS
Holders
252
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 LDPCWSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LDPCWildside
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-05 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165Upgradeable { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts-upgradeable/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155Upgradeable is IERC165Upgradeable { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle( address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value ); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll( address indexed account, address indexed operator, bool approved ); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf( address account, uint256 id ) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll( address account, address operator ) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/interfaces/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.0; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. */ function royaltyInfo( uint256 tokenId, uint256 salePrice ) external view returns (address receiver, uint256 royaltyAmount); } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface( bytes4 interfaceId ) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/common/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/common/ERC2981.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information. * * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. * * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the * fee is specified in basis points by default. * * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported. * * _Available since v4.5._ */ abstract contract ERC2981 is IERC2981, ERC165 { struct RoyaltyInfo { address receiver; uint96 royaltyFraction; } RoyaltyInfo private _defaultRoyaltyInfo; mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface( bytes4 interfaceId ) public view virtual override(IERC165, ERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } /** * @inheritdoc IERC2981 */ function royaltyInfo( uint256 _tokenId, uint256 _salePrice ) public view virtual override returns (address, uint256) { RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId]; if (royalty.receiver == address(0)) { royalty = _defaultRoyaltyInfo; } uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator(); return (royalty.receiver, royaltyAmount); } /** * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an * override. */ function _feeDenominator() internal pure virtual returns (uint96) { return 10000; } /** * @dev Sets the royalty information that all ids in this contract will default to. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setDefaultRoyalty( address receiver, uint96 feeNumerator ) internal virtual { require( feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice" ); require(receiver != address(0), "ERC2981: invalid receiver"); _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Removes default royalty information. */ function _deleteDefaultRoyalty() internal virtual { delete _defaultRoyaltyInfo; } /** * @dev Sets the royalty information for a specific token id, overriding the global default. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setTokenRoyalty( uint256 tokenId, address receiver, uint96 feeNumerator ) internal virtual { require( feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice" ); require(receiver != address(0), "ERC2981: Invalid parameters"); _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Resets royalty information for the token id back to the global default. */ function _resetTokenRoyalty(uint256 tokenId) internal virtual { delete _tokenRoyaltyInfo[tokenId]; } } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle( address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value ); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll( address indexed account, address indexed operator, bool approved ); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf( address account, uint256 id ) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll( address account, address operator ) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File @openzeppelin/contracts/utils/math/[email protected] // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @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 == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt( uint256 a, Rounding rounding ) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2( uint256 value, Rounding rounding ) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10( uint256 value, Rounding rounding ) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256( uint256 value, Rounding rounding ) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString( uint256 value, uint256 length ) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File contracts/interfaces/ILDPCLionade.sol pragma solidity ^0.8.0; interface ILDPCLionade is IERC1155Upgradeable { function airdrop(address _toAddress, uint256[] calldata itemIds) external; function burnItemForOwnerAddress( address _materialOwnerAddress, uint256 _typeId, uint256 _quantity ) external; function mintItemToAddress( address _toAddress, uint256 _typeId, uint256 _quantity ) external; function mintBatchItemsToAddress( address _toAddress, uint256[] memory _typeIds, uint256[] memory _quantities ) external; function bulkSafeTransfer( address[] calldata recipients, uint256 _typeId, uint256 _quantityPerRecipient ) external; } // File @openzeppelin/contracts/security/[email protected] // OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File erc721a/contracts/[email protected] // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of ERC721A. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the * ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); /** * The `quantity` minted with ERC2309 exceeds the safety limit. */ error MintERC2309QuantityExceedsLimit(); /** * The `extraData` cannot be set on an unintialized ownership slot. */ error OwnershipNotInitializedForExtraData(); // ============================================================= // STRUCTS // ============================================================= struct TokenOwnership { // The address of the owner. address addr; // Stores the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}. uint24 extraData; } // ============================================================= // TOKEN COUNTERS // ============================================================= /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see {_totalMinted}. */ function totalSupply() external view returns (uint256); // ============================================================= // IERC165 // ============================================================= /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================================================= // IERC721 // ============================================================= /** * @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, bytes calldata data ) external payable; /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external payable; /** * @dev Transfers `tokenId` 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 payable; /** * @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 payable; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} * for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved( uint256 tokenId ) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll}. */ function isApprovedForAll( address owner, address operator ) external view returns (bool); // ============================================================= // IERC721Metadata // ============================================================= /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); // ============================================================= // IERC2309 // ============================================================= /** * @dev Emitted when tokens in `fromTokenId` to `toTokenId` * (inclusive) is transferred from `from` to `to`, as defined in the * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309) standard. * * See {_mintERC2309} for more details. */ event ConsecutiveTransfer( uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to ); } // File erc721a/contracts/[email protected] // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of ERC721 token receiver. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @title ERC721A * * @dev Implementation of the [ERC721](https://eips.ethereum.org/EIPS/eip-721) * Non-Fungible Token Standard, including the Metadata extension. * Optimized for lower gas during batch mints. * * Token IDs are minted in sequential order (e.g. 0, 1, 2, 3, ...) * starting from `_startTokenId()`. * * Assumptions: * * - An owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * - The maximum token ID cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // Bypass for a `--via-ir` bug (https://github.com/chiru-labs/ERC721A/pull/364). struct TokenApprovalRef { address value; } // ============================================================= // CONSTANTS // ============================================================= // Mask of an entry in packed address data. uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant _BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant _BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant _BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant _BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant _BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant _BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225; // The bit position of `extraData` in packed ownership. uint256 private constant _BITPOS_EXTRA_DATA = 232; // Mask of all 256 bits in a packed ownership except the 24 bits for `extraData`. uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1; // The mask of the lower 160 bits for addresses. uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1; // The maximum `quantity` that can be minted with {_mintERC2309}. // This limit is to prevent overflows on the address data entries. // For a limit of 5000, a total of 3.689e15 calls to {_mintERC2309} // is required to cause an overflow, which is unrealistic. uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000; // The `Transfer` event signature is given by: // `keccak256(bytes("Transfer(address,address,uint256)"))`. bytes32 private constant _TRANSFER_EVENT_SIGNATURE = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef; // ============================================================= // STORAGE // ============================================================= // The next token ID to be minted. uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. // See {_packedOwnershipOf} implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` // - [232..255] `extraData` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // Mapping from token ID to approved address. mapping(uint256 => TokenApprovalRef) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // ============================================================= // CONSTRUCTOR // ============================================================= constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } // ============================================================= // TOKEN COUNTING OPERATIONS // ============================================================= /** * @dev Returns the starting token ID. * To change the starting token ID, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Returns the next token ID to be minted. */ function _nextTokenId() internal view virtual returns (uint256) { return _currentIndex; } /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see {_totalMinted}. */ function totalSupply() public view virtual override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * @dev Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view virtual returns (uint256) { // Counter underflow is impossible as `_currentIndex` does not decrement, // and it is initialized to `_startTokenId()`. unchecked { return _currentIndex - _startTokenId(); } } /** * @dev Returns the total number of tokens burned. */ function _totalBurned() internal view virtual returns (uint256) { return _burnCounter; } // ============================================================= // ADDRESS DATA OPERATIONS // ============================================================= /** * @dev Returns the number of tokens in `owner`'s account. */ function balanceOf( address owner ) public view virtual override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the auxiliary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> _BITPOS_AUX); } /** * Sets the auxiliary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal virtual { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; // Cast `aux` with assembly to avoid redundant masking. assembly { auxCasted := aux } packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX); _packedAddressData[owner] = packed; } // ============================================================= // IERC165 // ============================================================= /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30000 gas. */ function supportsInterface( bytes4 interfaceId ) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes // of the XOR of all function selectors in the interface. // See: [ERC165](https://eips.ethereum.org/EIPS/eip-165) // (e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`) return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } // ============================================================= // IERC721Metadata // ============================================================= /** * @dev Returns the token collection name. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the token collection symbol. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI( uint256 tokenId ) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, it can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } // ============================================================= // OWNERSHIPS OPERATIONS // ============================================================= /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf( uint256 tokenId ) public view virtual override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @dev Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around over time. */ function _ownershipOf( uint256 tokenId ) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt( uint256 index ) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal virtual { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf( uint256 tokenId ) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & _BITMASK_BURNED == 0) { // Invariant: // There will always be an initialized ownership slot // (i.e. `ownership.addr != address(0) && ownership.burned == false`) // before an unintialized ownership slot // (i.e. `ownership.addr == address(0) && ownership.burned == false`) // Hence, `curr` will not underflow. // // We can directly compare the packed value. // If the address is zero, packed will be zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * @dev Returns the unpacked `TokenOwnership` struct from `packed`. */ function _unpackedOwnership( uint256 packed ) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP); ownership.burned = packed & _BITMASK_BURNED != 0; ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA); } /** * @dev Packs ownership data into a single uint256. */ function _packOwnershipData( address owner, uint256 flags ) private view returns (uint256 result) { assembly { // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean. owner := and(owner, _BITMASK_ADDRESS) // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`. result := or( owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags) ) } } /** * @dev Returns the `nextInitialized` flag set if `quantity` equals 1. */ function _nextInitializedFlag( uint256 quantity ) private pure returns (uint256 result) { // For branchless setting of the `nextInitialized` flag. assembly { // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`. result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1)) } } // ============================================================= // APPROVAL OPERATIONS // ============================================================= /** * @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 ) public payable virtual override { address owner = ownerOf(tokenId); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId].value = to; emit Approval(owner, to, tokenId); } /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved( uint256 tokenId ) public view virtual override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId].value; } /** * @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 ) public virtual override { _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll}. */ function isApprovedForAll( address owner, address operator ) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted. See {_mint}. */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned. } /** * @dev Returns whether `msgSender` is equal to `approvedAddress` or `owner`. */ function _isSenderApprovedOrOwner( address approvedAddress, address owner, address msgSender ) private pure returns (bool result) { assembly { // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean. owner := and(owner, _BITMASK_ADDRESS) // Mask `msgSender` to the lower 160 bits, in case the upper bits somehow aren't clean. msgSender := and(msgSender, _BITMASK_ADDRESS) // `msgSender == owner || msgSender == approvedAddress`. result := or(eq(msgSender, owner), eq(msgSender, approvedAddress)) } } /** * @dev Returns the storage slot and value for the approved address of `tokenId`. */ function _getApprovedSlotAndAddress( uint256 tokenId ) private view returns (uint256 approvedAddressSlot, address approvedAddress) { TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId]; // The following is equivalent to `approvedAddress = _tokenApprovals[tokenId].value`. assembly { approvedAddressSlot := tokenApproval.slot approvedAddress := sload(approvedAddressSlot) } } // ============================================================= // TRANSFER OPERATIONS // ============================================================= /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) public payable virtual override { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); ( uint256 approvedAddressSlot, address approvedAddress ) = _getApprovedSlotAndAddress(tokenId); // The nested ifs save around 20+ gas over a compound boolean condition. if ( !_isSenderApprovedOrOwner( approvedAddress, from, _msgSenderERC721A() ) ) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. assembly { if approvedAddress { // This is equivalent to `delete _tokenApprovals[tokenId]`. sstore(approvedAddressSlot, 0) } } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as `tokenId` would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _packOwnershipData( to, _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked) ); // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public payable virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @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 memory _data ) public payable virtual override { transferFrom(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Hook that is called before a set of serially-ordered token IDs * are about to be transferred. This includes minting. * And also called before burning one token. * * `startTokenId` - the first token ID to be transferred. * `quantity` - the amount to be transferred. * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token IDs * have been transferred. This includes minting. * And also called after one token has been burned. * * `startTokenId` - the first token ID to be transferred. * `quantity` - the amount to be transferred. * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Private function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * `from` - Previous owner of the given token ID. * `to` - Target address that will receive the token. * `tokenId` - Token ID to be transferred. * `_data` - Optional data to send along with the call. * * Returns whether the call correctly returned the expected magic value. */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received( _msgSenderERC721A(), from, tokenId, _data ) returns (bytes4 retval) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } // ============================================================= // MINT OPERATIONS // ============================================================= /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event for each mint. */ function _mint(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // `balance` and `numberMinted` have a maximum limit of 2**64. // `tokenId` has a maximum limit of 2**256. unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the `balance` and `numberMinted`. _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); uint256 toMasked; uint256 end = startTokenId + quantity; // Use assembly to loop and emit the `Transfer` event for gas savings. // The duplicated `log4` removes an extra check and reduces stack juggling. // The assembly, together with the surrounding Solidity code, have been // delicately arranged to nudge the compiler into producing optimized opcodes. assembly { // Mask `to` to the lower 160 bits, in case the upper bits somehow aren't clean. toMasked := and(to, _BITMASK_ADDRESS) // Emit the `Transfer` event. log4( 0, // Start of data (0, since no data). 0, // End of data (0, since no data). _TRANSFER_EVENT_SIGNATURE, // Signature. 0, // `address(0)`. toMasked, // `to`. startTokenId // `tokenId`. ) // The `iszero(eq(,))` check ensures that large values of `quantity` // that overflows uint256 will make the loop run out of gas. // The compiler will optimize the `iszero` away for performance. for { let tokenId := add(startTokenId, 1) } iszero(eq(tokenId, end)) { tokenId := add(tokenId, 1) } { // Emit the `Transfer` event. Similar to above. log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId) } } if (toMasked == 0) revert MintToZeroAddress(); _currentIndex = end; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * This function is intended for efficient minting only during contract creation. * * It emits only one {ConsecutiveTransfer} as defined in * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309), * instead of a sequence of {Transfer} event(s). * * Calling this function outside of contract creation WILL make your contract * non-compliant with the ERC721 standard. * For full ERC721 compliance, substituting ERC721 {Transfer} event(s) with the ERC2309 * {ConsecutiveTransfer} event is only permissible during contract creation. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {ConsecutiveTransfer} event. */ function _mintERC2309(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are unrealistic due to the above check for `quantity` to be below the limit. unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the `balance` and `numberMinted`. _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); emit ConsecutiveTransfer( startTokenId, startTokenId + quantity - 1, address(0), to ); _currentIndex = startTokenId + quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * See {_mint}. * * Emits a {Transfer} event for each mint. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal virtual { _mint(to, quantity); unchecked { if (to.code.length != 0) { uint256 end = _currentIndex; uint256 index = end - quantity; do { if ( !_checkContractOnERC721Received( address(0), to, index++, _data ) ) { revert TransferToNonERC721ReceiverImplementer(); } } while (index < end); // Reentrancy protection. if (_currentIndex != end) revert(); } } } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal virtual { _safeMint(to, quantity, ""); } // ============================================================= // BURN OPERATIONS // ============================================================= /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); ( uint256 approvedAddressSlot, address approvedAddress ) = _getApprovedSlotAndAddress(tokenId); if (approvalCheck) { // The nested ifs save around 20+ gas over a compound boolean condition. if ( !_isSenderApprovedOrOwner( approvedAddress, from, _msgSenderERC721A() ) ) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. assembly { if approvedAddress { // This is equivalent to `delete _tokenApprovals[tokenId]`. sstore(approvedAddressSlot, 0) } } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as `tokenId` would have to be 2**256. unchecked { // Updates: // - `balance -= 1`. // - `numberBurned += 1`. // // We can directly decrement the balance, and increment the number burned. // This is equivalent to `packed -= 1; packed += 1 << _BITPOS_NUMBER_BURNED;`. _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1; // Updates: // - `address` to the last owner. // - `startTimestamp` to the timestamp of burning. // - `burned` to `true`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _packOwnershipData( from, (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked) ); // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } // ============================================================= // EXTRA DATA OPERATIONS // ============================================================= /** * @dev Directly sets the extra data for the ownership data `index`. */ function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual { uint256 packed = _packedOwnerships[index]; if (packed == 0) revert OwnershipNotInitializedForExtraData(); uint256 extraDataCasted; // Cast `extraData` with assembly to avoid redundant masking. assembly { extraDataCasted := extraData } packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA); _packedOwnerships[index] = packed; } /** * @dev Called during each token transfer to set the 24bit `extraData` field. * Intended to be overridden by the cosumer contract. * * `previousExtraData` - the value of `extraData` before transfer. * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _extraData( address from, address to, uint24 previousExtraData ) internal view virtual returns (uint24) {} /** * @dev Returns the next extra data for the packed ownership data. * The returned result is shifted into position. */ function _nextExtraData( address from, address to, uint256 prevOwnershipPacked ) private view returns (uint256) { uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA); return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA; } // ============================================================= // OTHER OPERATIONS // ============================================================= /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a uint256 to its ASCII string decimal representation. */ function _toString( uint256 value ) internal pure virtual returns (string memory str) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), but // we allocate 0xa0 bytes to keep the free memory pointer 32-byte word aligned. // We will need 1 word for the trailing zeros padding, 1 word for the length, // and 3 words for a maximum of 78 digits. Total: 5 * 0x20 = 0xa0. let m := add(mload(0x40), 0xa0) // Update the free memory pointer to allocate. mstore(0x40, m) // Assign the `str` to the end. str := sub(m, 0x20) // Zeroize the slot after the string. mstore(str, 0) // Cache the end of the memory to calculate the length later. let end := str // We write the string from rightmost digit to leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // prettier-ignore for { let temp := value } 1 {} { str := sub(str, 1) // Write the character to the pointer. // The ASCII index of the '0' character is 48. mstore8(str, add(48, mod(temp, 10))) // Keep dividing `temp` until zero. temp := div(temp, 10) // prettier-ignore if iszero(temp) { break } } let length := sub(end, str) // Move the pointer 32 bytes leftwards to make room for the length. str := sub(str, 0x20) // Store the length. mstore(str, length) } } } // File erc721a/contracts/extensions/[email protected] // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of ERC721ABurnable. */ interface IERC721ABurnable is IERC721A { /** * @dev Burns `tokenId`. See {ERC721A-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) external; } // File erc721a/contracts/extensions/[email protected] // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @title ERC721ABurnable. * * @dev ERC721A token that can be irreversibly burned (destroyed). */ abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable { /** * @dev Burns `tokenId`. See {ERC721A-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual override { _burn(tokenId, true); } } // File erc721a/contracts/extensions/[email protected] // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of ERC721AQueryable. */ interface IERC721AQueryable is IERC721A { /** * Invalid query range (`start` >= `stop`). */ error InvalidQueryRange(); /** * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting. * * If the `tokenId` is out of bounds: * * - `addr = address(0)` * - `startTimestamp = 0` * - `burned = false` * - `extraData = 0` * * If the `tokenId` is burned: * * - `addr = <Address of owner before token was burned>` * - `startTimestamp = <Timestamp when token was burned>` * - `burned = true` * - `extraData = <Extra data when token was burned>` * * Otherwise: * * - `addr = <Address of owner>` * - `startTimestamp = <Timestamp of start of ownership>` * - `burned = false` * - `extraData = <Extra data at start of ownership>` */ function explicitOwnershipOf( uint256 tokenId ) external view returns (TokenOwnership memory); /** * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order. * See {ERC721AQueryable-explicitOwnershipOf} */ function explicitOwnershipsOf( uint256[] memory tokenIds ) external view returns (TokenOwnership[] memory); /** * @dev Returns an array of token IDs owned by `owner`, * in the range [`start`, `stop`) * (i.e. `start <= tokenId < stop`). * * This function allows for tokens to be queried if the collection * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}. * * Requirements: * * - `start < stop` */ function tokensOfOwnerIn( address owner, uint256 start, uint256 stop ) external view returns (uint256[] memory); /** * @dev Returns an array of token IDs owned by `owner`. * * This function scans the ownership mapping and is O(`totalSupply`) in complexity. * It is meant to be called off-chain. * * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into * multiple smaller scans if the collection is large enough to cause * an out-of-gas error (10K collections should be fine). */ function tokensOfOwner( address owner ) external view returns (uint256[] memory); } // File erc721a/contracts/extensions/[email protected] // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @title ERC721AQueryable. * * @dev ERC721A subclass with convenience query functions. */ abstract contract ERC721AQueryable is ERC721A, IERC721AQueryable { /** * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting. * * If the `tokenId` is out of bounds: * * - `addr = address(0)` * - `startTimestamp = 0` * - `burned = false` * - `extraData = 0` * * If the `tokenId` is burned: * * - `addr = <Address of owner before token was burned>` * - `startTimestamp = <Timestamp when token was burned>` * - `burned = true` * - `extraData = <Extra data when token was burned>` * * Otherwise: * * - `addr = <Address of owner>` * - `startTimestamp = <Timestamp of start of ownership>` * - `burned = false` * - `extraData = <Extra data at start of ownership>` */ function explicitOwnershipOf( uint256 tokenId ) public view virtual override returns (TokenOwnership memory) { TokenOwnership memory ownership; if (tokenId < _startTokenId() || tokenId >= _nextTokenId()) { return ownership; } ownership = _ownershipAt(tokenId); if (ownership.burned) { return ownership; } return _ownershipOf(tokenId); } /** * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order. * See {ERC721AQueryable-explicitOwnershipOf} */ function explicitOwnershipsOf( uint256[] calldata tokenIds ) external view virtual override returns (TokenOwnership[] memory) { unchecked { uint256 tokenIdsLength = tokenIds.length; TokenOwnership[] memory ownerships = new TokenOwnership[]( tokenIdsLength ); for (uint256 i; i != tokenIdsLength; ++i) { ownerships[i] = explicitOwnershipOf(tokenIds[i]); } return ownerships; } } /** * @dev Returns an array of token IDs owned by `owner`, * in the range [`start`, `stop`) * (i.e. `start <= tokenId < stop`). * * This function allows for tokens to be queried if the collection * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}. * * Requirements: * * - `start < stop` */ function tokensOfOwnerIn( address owner, uint256 start, uint256 stop ) external view virtual override returns (uint256[] memory) { unchecked { if (start >= stop) revert InvalidQueryRange(); uint256 tokenIdsIdx; uint256 stopLimit = _nextTokenId(); // Set `start = max(start, _startTokenId())`. if (start < _startTokenId()) { start = _startTokenId(); } // Set `stop = min(stop, stopLimit)`. if (stop > stopLimit) { stop = stopLimit; } uint256 tokenIdsMaxLength = balanceOf(owner); // Set `tokenIdsMaxLength = min(balanceOf(owner), stop - start)`, // to cater for cases where `balanceOf(owner)` is too big. if (start < stop) { uint256 rangeLength = stop - start; if (rangeLength < tokenIdsMaxLength) { tokenIdsMaxLength = rangeLength; } } else { tokenIdsMaxLength = 0; } uint256[] memory tokenIds = new uint256[](tokenIdsMaxLength); if (tokenIdsMaxLength == 0) { return tokenIds; } // We need to call `explicitOwnershipOf(start)`, // because the slot at `start` may not be initialized. TokenOwnership memory ownership = explicitOwnershipOf(start); address currOwnershipAddr; // If the starting slot exists (i.e. not burned), initialize `currOwnershipAddr`. // `ownership.address` will not be zero, as `start` is clamped to the valid token ID range. if (!ownership.burned) { currOwnershipAddr = ownership.addr; } for ( uint256 i = start; i != stop && tokenIdsIdx != tokenIdsMaxLength; ++i ) { ownership = _ownershipAt(i); if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { tokenIds[tokenIdsIdx++] = i; } } // Downsize the array to fit. assembly { mstore(tokenIds, tokenIdsIdx) } return tokenIds; } } /** * @dev Returns an array of token IDs owned by `owner`. * * This function scans the ownership mapping and is O(`totalSupply`) in complexity. * It is meant to be called off-chain. * * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into * multiple smaller scans if the collection is large enough to cause * an out-of-gas error (10K collections should be fine). */ function tokensOfOwner( address owner ) external view virtual override returns (uint256[] memory) { unchecked { uint256 tokenIdsIdx; address currOwnershipAddr; uint256 tokenIdsLength = balanceOf(owner); uint256[] memory tokenIds = new uint256[](tokenIdsLength); TokenOwnership memory ownership; for ( uint256 i = _startTokenId(); tokenIdsIdx != tokenIdsLength; ++i ) { ownership = _ownershipAt(i); if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { tokenIds[tokenIdsIdx++] = i; } } return tokenIds; } } } // File operator-filter-registry/src/[email protected] pragma solidity ^0.8.13; interface IOperatorFilterRegistry { function isOperatorAllowed( address registrant, address operator ) external view returns (bool); function register(address registrant) external; function registerAndSubscribe( address registrant, address subscription ) external; function registerAndCopyEntries( address registrant, address registrantToCopy ) external; function unregister(address addr) external; function updateOperator( address registrant, address operator, bool filtered ) external; function updateOperators( address registrant, address[] calldata operators, bool filtered ) external; function updateCodeHash( address registrant, bytes32 codehash, bool filtered ) external; function updateCodeHashes( address registrant, bytes32[] calldata codeHashes, bool filtered ) external; function subscribe( address registrant, address registrantToSubscribe ) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers( address registrant ) external returns (address[] memory); function subscriberAt( address registrant, uint256 index ) external returns (address); function copyEntriesOf( address registrant, address registrantToCopy ) external; function isOperatorFiltered( address registrant, address operator ) external returns (bool); function isCodeHashOfFiltered( address registrant, address operatorWithCode ) external returns (bool); function isCodeHashFiltered( address registrant, bytes32 codeHash ) external returns (bool); function filteredOperators( address addr ) external returns (address[] memory); function filteredCodeHashes( address addr ) external returns (bytes32[] memory); function filteredOperatorAt( address registrant, uint256 index ) external returns (address); function filteredCodeHashAt( address registrant, uint256 index ) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } // File operator-filter-registry/src/[email protected] pragma solidity ^0.8.13; /** * @title OperatorFilterer * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another * registrant's entries in the OperatorFilterRegistry. * @dev This smart contract is meant to be inherited by token contracts so they can use the following: * - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods. * - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods. */ abstract contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { // If an inheriting token contract is deployed to a network without the registry deployed, the modifier // will not revert, but the contract will need to be registered with the registry once it is deployed in // order for the modifier to filter addresses. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (subscribe) { OPERATOR_FILTER_REGISTRY.registerAndSubscribe( address(this), subscriptionOrRegistrantToCopy ); } else { if (subscriptionOrRegistrantToCopy != address(0)) { OPERATOR_FILTER_REGISTRY.registerAndCopyEntries( address(this), subscriptionOrRegistrantToCopy ); } else { OPERATOR_FILTER_REGISTRY.register(address(this)); } } } } modifier onlyAllowedOperator(address from) virtual { // Allow spending tokens from addresses with balance // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred // from an EOA. if (from != msg.sender) { _checkFilterOperator(msg.sender); } _; } modifier onlyAllowedOperatorApproval(address operator) virtual { _checkFilterOperator(operator); _; } function _checkFilterOperator(address operator) internal view virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if ( !OPERATOR_FILTER_REGISTRY.isOperatorAllowed( address(this), operator ) ) { revert OperatorNotAllowed(operator); } } } } // File operator-filter-registry/src/[email protected] pragma solidity ^0.8.13; /** * @title DefaultOperatorFilterer * @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription. */ abstract contract DefaultOperatorFilterer is OperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} } // File contracts/LDPCWildside.sol pragma solidity ^0.8.17; /** * @title LDPC Wildside * @custom:website https://lionsdenpoker.io/ * @author https://twitter.com/lionsdenpoker * @notice The Lions Den Poker Club is more than just an NFT project – it’s a community of like-minded individuals who share a passion for poker and the opportunities that the blockchain provides. */ contract LDPCWildside is DefaultOperatorFilterer, ERC2981, ERC721AQueryable, ERC721ABurnable, Ownable, ReentrancyGuard { using Strings for uint256; struct MintState { bool isPublicOpen; uint256 liveAt; uint256 expiresAt; uint256 maxSupply; uint256 totalSupply; uint256 price; uint256 minted; } /// @dev Treasury address public treasury = payable(0x021b8329B4A2a659a1Ff78aB8A8Ed5e975320fdC); // @dev Base uri for the nft string private baseURI = "ipfs://cid/"; // @dev Hidden uri for the nft string private hiddenURI = "ipfs://bafybeicmao57ukowuazilgwnri6tpom5ai3jzxic6fpvcpboilmk65z66y/"; /// @dev The total supply of the collection (n-1) uint256 public maxSupply = 2501; /// @dev The max per wallet (n-1) uint256 public maxPerWallet = 20; /// @dev The max per tx (n-1) uint256 public maxPerTransaction = 6; /// @notice ETH mint price uint256 public price = 0.075 ether; /// @notice Live timestamp uint256 public liveAt = 1678035600; /// @notice Expires timestamp uint256 public expiresAt = 1680710400; /// @notice Mint Pass contract ILDPCLionade public lionadeContract; uint256 private LIONADE_ID = 1; /// @notice Public mint bool public isPublicOpen = true; /// @notice Is Revealed bool public isRevealed = false; /// @notice An address mapping mints mapping(address => uint256) public addressToMinted; constructor( address _lionadeContract, address[] memory _addresses, uint256[] memory _amounts ) ERC721A("LDPCWildside", "LDPCWS") { _setDefaultRoyalty(treasury, 1000); lionadeContract = ILDPCLionade(_lionadeContract); // Airdrop OGs for (uint256 i = 0; i < _addresses.length; i++) { _mintERC2309(_addresses[i], _amounts[i]); } } function _startTokenId() internal view virtual override returns (uint256) { return 1; } /** * @notice Sets the hidden URI of the NFT * @param _hiddenURI A base uri */ function setHiddenURI(string calldata _hiddenURI) external onlyOwner { hiddenURI = _hiddenURI; } /** * @notice Sets the base URI of the NFT * @param _baseURI A base uri */ function setBaseURI(string calldata _baseURI) external onlyOwner { baseURI = _baseURI; } modifier withinThreshold(uint256 _amount) { require(_amount < maxPerTransaction, "Max per transaction reached."); require(totalSupply() + _amount < maxSupply, "Max mint reached."); require( addressToMinted[_msgSenderERC721A()] + _amount < maxPerWallet, "Already minted max." ); _; } modifier canMintPublic() { require(isLive() && isPublicOpen, "Public mint is not active."); _; } modifier isCorrectPrice(uint256 _amount, uint256 _price) { require(msg.value >= _amount * _price, "Not enough funds."); _; } /************************************************************************** * Minting *************************************************************************/ /** * @dev Airdrop lionades * @param _addresses The addresses to mint * @param _amounts The amounts to mint */ function airdropOG( address[] memory _addresses, uint256[] memory _amounts ) external onlyOwner { for (uint256 i = 0; i < _addresses.length; i++) { lionadeContract.mintItemToAddress( _addresses[i], LIONADE_ID, _amounts[i] ); } } /** * @dev Public mint function * @param _amount The amount to mint */ function mint( uint256 _amount ) external payable canMintPublic isCorrectPrice(_amount, price) withinThreshold(_amount) { address sender = _msgSenderERC721A(); addressToMinted[sender] += _amount; _mint(sender, _amount); lionadeContract.mintItemToAddress(sender, LIONADE_ID, _amount); } /// @dev Check if mint is live function isLive() public view returns (bool) { return block.timestamp >= liveAt && block.timestamp <= expiresAt; } /** * @notice Returns current mint state for a particular address * @param _address The address */ function getMintState( address _address ) external view returns (MintState memory) { return MintState({ isPublicOpen: isPublicOpen, liveAt: liveAt, expiresAt: expiresAt, maxSupply: maxSupply, totalSupply: totalSupply(), price: price, minted: addressToMinted[_address] }); } /** * @notice Returns the URI for a given token id * @param _tokenId A tokenId */ function tokenURI( uint256 _tokenId ) public view override(IERC721A, ERC721A) returns (string memory) { if (!_exists(_tokenId)) revert OwnerQueryForNonexistentToken(); if (!isRevealed) return string(abi.encodePacked(hiddenURI, "prereveal.json")); return string( abi.encodePacked(baseURI, Strings.toString(_tokenId), ".json") ); } /************************************************************************** * Admin *************************************************************************/ /** * @notice Sets the reveal state * @param _isRevealed The reveal state */ function setIsRevealed(bool _isRevealed) external onlyOwner { isRevealed = _isRevealed; } /** * @notice Sets the collection max supply * @param _maxSupply The max supply of the collection */ function setMaxSupply(uint256 _maxSupply) external onlyOwner { maxSupply = _maxSupply; } /** * @notice Sets the collection max per transaction * @param _maxPerTransaction The max per transaction */ function setMaxPerTransaction( uint256 _maxPerTransaction ) external onlyOwner { maxPerTransaction = _maxPerTransaction; } /** * @notice Sets the collection max per wallet * @param _maxPerWallet The max per wallet */ function setMaxPerWallet(uint256 _maxPerWallet) external onlyOwner { maxPerWallet = _maxPerWallet; } /** * @notice Sets eth price * @param _price The price in wei */ function setPrice(uint256 _price) external onlyOwner { price = _price; } /** * @notice Sets the treasury recipient * @param _treasury The treasury address */ function setTreasury(address _treasury) public onlyOwner { treasury = payable(_treasury); } /** * @notice Sets the lionade contract * @param _lionadeContract The contract address */ function setLionadeContracts(address _lionadeContract) public onlyOwner { lionadeContract = ILDPCLionade(_lionadeContract); } /** * @notice Sets the mint states * @param _isPublicMintOpen The public mint is open */ function setMintStates(bool _isPublicMintOpen) external onlyOwner { isPublicOpen = _isPublicMintOpen; } /** * @notice Sets timestamps for live and expires timeframe * @param _liveAt A unix timestamp for live date * @param _expiresAt A unix timestamp for expiration date */ function setMintWindow( uint256 _liveAt, uint256 _expiresAt ) external onlyOwner { liveAt = _liveAt; expiresAt = _expiresAt; } /** * @notice Changes the contract defined royalty * @param _receiver - The receiver of royalties * @param _feeNumerator - The numerator that represents a percent out of 10,000 */ function setDefaultRoyalty( address _receiver, uint96 _feeNumerator ) public onlyOwner { _setDefaultRoyalty(_receiver, _feeNumerator); } /// @notice Withdraws funds from contract function withdraw() public onlyOwner { uint256 balance = address(this).balance; (bool success, ) = treasury.call{value: balance}(""); require(success, "Unable to withdraw ETH"); } /** * @dev Airdrop function * @param _to The address to mint to * @param _amount The amount to mint */ function airdrop(address _to, uint256 _amount) external onlyOwner { require(totalSupply() + _amount < maxSupply, "Max mint reached."); _mint(_to, _amount); } /************************************************************************** * Royalties *************************************************************************/ function supportsInterface( bytes4 interfaceId ) public view virtual override(IERC721A, ERC721A, ERC2981) returns (bool) { return ERC721A.supportsInterface(interfaceId) || ERC2981.supportsInterface(interfaceId); } function setApprovalForAll( address operator, bool approved ) public override(IERC721A, ERC721A) onlyAllowedOperatorApproval(operator) { super.setApprovalForAll(operator, approved); } function approve( address operator, uint256 tokenId ) public payable override(IERC721A, ERC721A) onlyAllowedOperatorApproval(operator) { super.approve(operator, tokenId); } function transferFrom( address from, address to, uint256 tokenId ) public payable override(IERC721A, ERC721A) onlyAllowedOperator(from) { super.transferFrom(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public payable override(IERC721A, ERC721A) onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public payable override(IERC721A, ERC721A) onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_lionadeContract","type":"address"},{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"InvalidQueryRange","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"airdropOG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"expiresAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"explicitOwnershipOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"},{"internalType":"uint24","name":"extraData","type":"uint24"}],"internalType":"struct IERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"explicitOwnershipsOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"},{"internalType":"uint24","name":"extraData","type":"uint24"}],"internalType":"struct IERC721A.TokenOwnership[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getMintState","outputs":[{"components":[{"internalType":"bool","name":"isPublicOpen","type":"bool"},{"internalType":"uint256","name":"liveAt","type":"uint256"},{"internalType":"uint256","name":"expiresAt","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"minted","type":"uint256"}],"internalType":"struct LDPCWildside.MintState","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lionadeContract","outputs":[{"internalType":"contract ILDPCLionade","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liveAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint96","name":"_feeNumerator","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenURI","type":"string"}],"name":"setHiddenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isRevealed","type":"bool"}],"name":"setIsRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lionadeContract","type":"address"}],"name":"setLionadeContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerTransaction","type":"uint256"}],"name":"setMaxPerTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerWallet","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPublicMintOpen","type":"bool"}],"name":"setMintStates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liveAt","type":"uint256"},{"internalType":"uint256","name":"_expiresAt","type":"uint256"}],"name":"setMintWindow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"stop","type":"uint256"}],"name":"tokensOfOwnerIn","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
600c80546001600160a01b03191673021b8329b4a2a659a1ff78ab8a8ed5e975320fdc17905560c0604052600b60809081526a697066733a2f2f6369642f60a81b60a052600d9062000052908262000663565b50604051806080016040528060438152602001620039f460439139600e906200007c908262000663565b506109c5600f5560146010819055600660115567010a741a46278000601255636404ca9060135563642d9b009055600160168190556017805461ffff19169091179055348015620000cc57600080fd5b5060405162003a3738038062003a37833981016040819052620000ef9162000818565b604080518082018252600c81526b4c44504357696c647369646560a01b602080830191909152825180840190935260068352654c445043575360d01b9083015290733cc6cdda760b79bafa08df41ecfa224f810dceb660016daaeb6d7670e522a718067333cd4e3b156200028c578015620001da57604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b158015620001bb57600080fd5b505af1158015620001d0573d6000803e3d6000fd5b505050506200028c565b6001600160a01b038216156200022b5760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401620001a0565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b1580156200027257600080fd5b505af115801562000287573d6000803e3d6000fd5b505050505b50600490506200029d838262000663565b506005620002ac828262000663565b5050600160025550620002bf336200036f565b6001600b55600c54620002de906001600160a01b03166103e8620003c1565b601580546001600160a01b0319166001600160a01b03851617905560005b82518110156200036557620003508382815181106200031f576200031f620008fc565b60200260200101518383815181106200033c576200033c620008fc565b6020026020010151620004c660201b60201c565b806200035c8162000912565b915050620002fc565b505050506200093a565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127106001600160601b0382161115620004355760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b0382166200048d5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016200042c565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b6002546001600160a01b038316620004f057604051622e076360e81b815260040160405180910390fd5b81600003620005125760405163b562e8dd60e01b815260040160405180910390fd5b6113888211156200053657604051633db1f9af60e01b815260040160405180910390fd5b6001600160a01b03831660008181526007602090815260408083208054680100000000000000018802019055848352600682528083206001871460e11b4260a01b17851790558051600019868801018152905185927fdeaa91b6123d068f5821d0fb0678463d1a8a6079fe8af5de3ce5e896dcf9133d928290030190a48082016002555b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005ea57607f821691505b6020821081036200060b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005ba57600081815260208120601f850160051c810160208610156200063a5750805b601f850160051c820191505b818110156200065b5782815560010162000646565b505050505050565b81516001600160401b038111156200067f576200067f620005bf565b6200069781620006908454620005d5565b8462000611565b602080601f831160018114620006cf5760008415620006b65750858301515b600019600386901b1c1916600185901b1785556200065b565b600085815260208120601f198616915b828110156200070057888601518255948401946001909101908401620006df565b50858210156200071f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b03811681146200074757600080fd5b919050565b604051601f8201601f191681016001600160401b0381118282101715620007775762000777620005bf565b604052919050565b60006001600160401b038211156200079b576200079b620005bf565b5060051b60200190565b600082601f830112620007b757600080fd5b81516020620007d0620007ca836200077f565b6200074c565b82815260059290921b84018101918181019086841115620007f057600080fd5b8286015b848110156200080d5780518352918301918301620007f4565b509695505050505050565b6000806000606084860312156200082e57600080fd5b62000839846200072f565b602085810151919450906001600160401b03808211156200085957600080fd5b818701915087601f8301126200086e57600080fd5b81516200087f620007ca826200077f565b81815260059190911b8301840190848101908a8311156200089f57600080fd5b938501935b82851015620008c857620008b8856200072f565b82529385019390850190620008a4565b60408a01519097509450505080831115620008e257600080fd5b5050620008f286828701620007a5565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b6000600182016200093357634e487b7160e01b600052601160045260246000fd5b5060010190565b6130aa806200094a6000396000f3fe60806040526004361061034a5760003560e01c8063715018a6116101bb578063b5a288c7116100f7578063d5abeb0111610095578063e8c396051161006f578063e8c396051461094a578063e985e9c5146109c2578063f0f4426014610a0b578063f2fde38b14610a2b57600080fd5b8063d5abeb01146108f4578063e20a91ac1461090a578063e268e4d31461092a57600080fd5b8063bbaac02f116100d1578063bbaac02f14610867578063c23dc68f14610887578063c87b56dd146108b4578063ccfdd2f8146108d457600080fd5b8063b5a288c71461081f578063b88d4fde1461083f578063b8f7a6651461085257600080fd5b806395d89b41116101645780639ec00c951161013e5780639ec00c95146107a9578063a035b1fe146107d6578063a0712d68146107ec578063a22cb465146107ff57600080fd5b806395d89b411461075457806399a2557a146107695780639e58f9441461078957600080fd5b80638ba4cc3c116101955780638ba4cc3c146106f65780638da5cb5b1461071657806391b7f5ed1461073457600080fd5b8063715018a61461069e5780638462151c146106b35780638622a689146106e057600080fd5b806342842e0e1161028a57806354214f691161023357806361d027b31161020d57806361d027b31461061e5780636352211e1461063e5780636f8b44b01461065e57806370a082311461067e57600080fd5b806354214f69146105b257806355f804b3146105d15780635bbb2177146105f157600080fd5b806349a5980a1161026457806349a5980a146105665780634b980d671461058657806353f8bb9a1461059c57600080fd5b806342842e0e1461051d57806342966c6814610530578063453c23101461055057600080fd5b806311c67efc116102f757806323b872dd116102d157806323b872dd146104945780632a55205a146104a75780633ccfd60b146104e657806341f43434146104fb57600080fd5b806311c67efc1461043357806318160ddd1461044d5780631f88b0281461047457600080fd5b8063081812fc11610328578063081812fc146103c8578063095ea7b3146104005780630f8677511461041357600080fd5b806301ffc9a71461034f57806304634d8d1461038457806306fdde03146103a6575b600080fd5b34801561035b57600080fd5b5061036f61036a3660046126b2565b610a4b565b60405190151581526020015b60405180910390f35b34801561039057600080fd5b506103a461039f3660046126eb565b610a6b565b005b3480156103b257600080fd5b506103bb610a81565b60405161037b9190612783565b3480156103d457600080fd5b506103e86103e3366004612796565b610b13565b6040516001600160a01b03909116815260200161037b565b6103a461040e3660046127af565b610b70565b34801561041f57600080fd5b506103a461042e3660046127d9565b610b89565b34801561043f57600080fd5b5060175461036f9060ff1681565b34801561045957600080fd5b5060035460025403600019015b60405190815260200161037b565b34801561048057600080fd5b506103a461048f3660046127fb565b610b9c565b6103a46104a2366004612816565b610bd3565b3480156104b357600080fd5b506104c76104c23660046127d9565b610bfe565b604080516001600160a01b03909316835260208301919091520161037b565b3480156104f257600080fd5b506103a4610cb9565b34801561050757600080fd5b506103e86daaeb6d7670e522a718067333cd4e81565b6103a461052b366004612816565b610d6d565b34801561053c57600080fd5b506103a461054b366004612796565b610d92565b34801561055c57600080fd5b5061046660105481565b34801561057257600080fd5b506103a4610581366004612860565b610da0565b34801561059257600080fd5b5061046660115481565b3480156105a857600080fd5b5061046660135481565b3480156105be57600080fd5b5060175461036f90610100900460ff1681565b3480156105dd57600080fd5b506103a46105ec36600461287d565b610dc2565b3480156105fd57600080fd5b5061061161060c3660046128ef565b610dd7565b60405161037b9190612952565b34801561062a57600080fd5b50600c546103e8906001600160a01b031681565b34801561064a57600080fd5b506103e8610659366004612796565b610ea3565b34801561066a57600080fd5b506103a4610679366004612796565b610eae565b34801561068a57600080fd5b506104666106993660046127fb565b610ebb565b3480156106aa57600080fd5b506103a4610f23565b3480156106bf57600080fd5b506106d36106ce3660046127fb565b610f37565b60405161037b91906129cf565b3480156106ec57600080fd5b5061046660145481565b34801561070257600080fd5b506103a46107113660046127af565b61103b565b34801561072257600080fd5b50600a546001600160a01b03166103e8565b34801561074057600080fd5b506103a461074f366004612796565b6110b5565b34801561076057600080fd5b506103bb6110c2565b34801561077557600080fd5b506106d3610784366004612a07565b6110d1565b34801561079557600080fd5b506103a46107a4366004612b10565b611272565b3480156107b557600080fd5b506104666107c43660046127fb565b60186020526000908152604090205481565b3480156107e257600080fd5b5061046660125481565b6103a46107fa366004612796565b611350565b34801561080b57600080fd5b506103a461081a366004612bd0565b6115f4565b34801561082b57600080fd5b506015546103e8906001600160a01b031681565b6103a461084d366004612bfc565b611608565b34801561085e57600080fd5b5061036f611635565b34801561087357600080fd5b506103a461088236600461287d565b611650565b34801561089357600080fd5b506108a76108a2366004612796565b611665565b60405161037b9190612cbc565b3480156108c057600080fd5b506103bb6108cf366004612796565b6116ed565b3480156108e057600080fd5b506103a46108ef366004612796565b611768565b34801561090057600080fd5b50610466600f5481565b34801561091657600080fd5b506103a4610925366004612860565b611775565b34801561093657600080fd5b506103a4610945366004612796565b611790565b34801561095657600080fd5b5061096a6109653660046127fb565b61179d565b60405161037b9190600060e0820190508251151582526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b3480156109ce57600080fd5b5061036f6109dd366004612d01565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b348015610a1757600080fd5b506103a4610a263660046127fb565b611848565b348015610a3757600080fd5b506103a4610a463660046127fb565b61187f565b6000610a568261190c565b80610a655750610a658261198c565b92915050565b610a736119da565b610a7d8282611a34565b5050565b606060048054610a9090612d34565b80601f0160208091040260200160405190810160405280929190818152602001828054610abc90612d34565b8015610b095780601f10610ade57610100808354040283529160200191610b09565b820191906000526020600020905b815481529060010190602001808311610aec57829003601f168201915b5050505050905090565b6000610b1e82611b4e565b610b54576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600860205260409020546001600160a01b031690565b81610b7a81611b83565b610b848383611c6e565b505050565b610b916119da565b601391909155601455565b610ba46119da565b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b826001600160a01b0381163314610bed57610bed33611b83565b610bf8848484611d34565b50505050565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff16928201929092528291610c7d5750604080518082019091526000546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b602081015160009061271090610ca1906bffffffffffffffffffffffff1687612d84565b610cab9190612d9b565b915196919550909350505050565b610cc16119da565b600c5460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610d12576040519150601f19603f3d011682016040523d82523d6000602084013e610d17565b606091505b5050905080610a7d5760405162461bcd60e51b815260206004820152601660248201527f556e61626c6520746f207769746864726177204554480000000000000000000060448201526064015b60405180910390fd5b826001600160a01b0381163314610d8757610d8733611b83565b610bf8848484611f0a565b610d9d816001611f25565b50565b610da86119da565b601780549115156101000261ff0019909216919091179055565b610dca6119da565b600d610b84828483612e03565b60608160008167ffffffffffffffff811115610df557610df5612a3a565b604051908082528060200260200182016040528015610e4757816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610e135790505b50905060005b828114610e9a57610e75868683818110610e6957610e69612ec3565b90506020020135611665565b828281518110610e8757610e87612ec3565b6020908102919091010152600101610e4d565b50949350505050565b6000610a6582612089565b610eb66119da565b600f55565b60006001600160a01b038216610efd576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526007602052604090205467ffffffffffffffff1690565b610f2b6119da565b610f3560006120f8565b565b60606000806000610f4785610ebb565b905060008167ffffffffffffffff811115610f6457610f64612a3a565b604051908082528060200260200182016040528015610f8d578160200160208202803683370190505b5060408051608081018252600080825260208201819052918101829052606081019190915290915060015b83861461102f57610fc881612157565b915081604001516110275781516001600160a01b031615610fe857815194505b876001600160a01b0316856001600160a01b031603611027578083878060010198508151811061101a5761101a612ec3565b6020026020010181815250505b600101610fb8565b50909695505050505050565b6110436119da565b600f54600354600254839190036000190161105e9190612ed9565b106110ab5760405162461bcd60e51b815260206004820152601160248201527f4d6178206d696e7420726561636865642e0000000000000000000000000000006044820152606401610d64565b610a7d82826121d6565b6110bd6119da565b601255565b606060058054610a9090612d34565b606081831061110c576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061111860025490565b9050600185101561112857600194505b80841115611134578093505b600061113f87610ebb565b90508486101561115e5785850381811015611158578091505b50611162565b5060005b60008167ffffffffffffffff81111561117d5761117d612a3a565b6040519080825280602002602001820160405280156111a6578160200160208202803683370190505b509050816000036111bc57935061126b92505050565b60006111c788611665565b9050600081604001516111d8575080515b885b8881141580156111ea5750848714155b1561125f576111f881612157565b925082604001516112575782516001600160a01b03161561121857825191505b8a6001600160a01b0316826001600160a01b031603611257578084888060010199508151811061124a5761124a612ec3565b6020026020010181815250505b6001016111da565b50505092835250909150505b9392505050565b61127a6119da565b60005b8251811015610b845760155483516001600160a01b039091169063638faecf908590849081106112af576112af612ec3565b60200260200101516016548585815181106112cc576112cc612ec3565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401600060405180830381600087803b15801561132557600080fd5b505af1158015611339573d6000803e3d6000fd5b50505050808061134890612eec565b91505061127d565b611358611635565b8015611366575060175460ff165b6113b25760405162461bcd60e51b815260206004820152601a60248201527f5075626c6963206d696e74206973206e6f74206163746976652e0000000000006044820152606401610d64565b60125481906113c18183612d84565b3410156114105760405162461bcd60e51b815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e0000000000000000000000000000006044820152606401610d64565b8260115481106114625760405162461bcd60e51b815260206004820152601c60248201527f4d617820706572207472616e73616374696f6e20726561636865642e000000006044820152606401610d64565b600f54600354600254839190036000190161147d9190612ed9565b106114ca5760405162461bcd60e51b815260206004820152601160248201527f4d6178206d696e7420726561636865642e0000000000000000000000000000006044820152606401610d64565b601054336000908152601860205260409020546114e8908390612ed9565b106115355760405162461bcd60e51b815260206004820152601360248201527f416c7265616479206d696e746564206d61782e000000000000000000000000006044820152606401610d64565b3360008181526018602052604081208054879290611554908490612ed9565b90915550611564905081866121d6565b6015546016546040517f638faecf0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201929092526044810188905291169063638faecf90606401600060405180830381600087803b1580156115d557600080fd5b505af11580156115e9573d6000803e3d6000fd5b505050505050505050565b816115fe81611b83565b610b848383612307565b836001600160a01b03811633146116225761162233611b83565b61162e85858585612373565b5050505050565b6000601354421015801561164b57506014544211155b905090565b6116586119da565b600e610b84828483612e03565b60408051608081018252600080825260208201819052918101829052606081019190915260408051608081018252600080825260208201819052918101829052606081019190915260018310806116be57506002548310155b156116c95792915050565b6116d283612157565b90508060400151156116e45792915050565b61126b836123b7565b60606116f882611b4e565b61171557604051636f96cda160e11b815260040160405180910390fd5b601754610100900460ff1661174c57600e6040516020016117369190612f78565b6040516020818303038152906040529050919050565b600d6117578361242f565b604051602001611736929190612fb1565b6117706119da565b601155565b61177d6119da565b6017805460ff1916911515919091179055565b6117986119da565b601055565b6117df6040518060e001604052806000151581526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506040805160e08101825260175460ff161515815260135460208083019190915260145482840152600f5460608301526003546002540360001901608083015260125460a08301526001600160a01b03939093166000908152601890935291205460c082015290565b6118506119da565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6118876119da565b6001600160a01b0381166119035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d64565b610d9d816120f8565b60006301ffc9a760e01b6001600160e01b03198316148061195657507f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b80610a655750506001600160e01b0319167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60006001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001480610a6557506301ffc9a760e01b6001600160e01b0319831614610a65565b600a546001600160a01b03163314610f355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d64565b6127106bffffffffffffffffffffffff82161115611aba5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610d64565b6001600160a01b038216611b105760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610d64565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff9091166020909201829052600160a01b90910217600055565b600081600111158015611b62575060025482105b8015610a65575050600090815260066020526040902054600160e01b161590565b6daaeb6d7670e522a718067333cd4e3b15610d9d576040517fc61711340000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2d9190612ffe565b610d9d576040517fede71dcc0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610d64565b6000611c7982610ea3565b9050336001600160a01b03821614611ccb57611c9581336109dd565b611ccb576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260086020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611d3f82612089565b9050836001600160a01b0316816001600160a01b031614611d8c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526008602052604090208054611db88187335b6001600160a01b039081169116811491141790565b611de357611dc686336109dd565b611de357604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516611e23576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015611e2e57600082555b6001600160a01b038681166000908152600760205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260066020526040812091909155600160e11b84169003611ec057600184016000818152600660205260408120549003611ebe576002548114611ebe5760008181526006602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b610b8483838360405180602001604052806000815250611608565b6000611f3083612089565b905080600080611f4e86600090815260086020526040902080549091565b915091508415611f8e57611f63818433611da3565b611f8e57611f7183336109dd565b611f8e57604051632ce44b5f60e11b815260040160405180910390fd5b8015611f9957600082555b6001600160a01b038316600081815260076020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c030000000000000000000000000000000000000000000000000000000017600087815260066020526040812091909155600160e11b851690036120405760018601600081815260066020526040812054900361203e57600254811461203e5760008181526006602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505060038054600101905550505050565b600081806001116120df576002548110156120df5760008181526006602052604081205490600160e01b821690036120dd575b8060000361126b5750600019016000818152600660205260409020546120bc565b505b604051636f96cda160e11b815260040160405180910390fd5b600a80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516080810182526000808252602082018190529181018290526060810191909152600082815260066020526040902054610a6590604080516080810182526001600160a01b038316815260a083901c67ffffffffffffffff166020820152600160e01b831615159181019190915260e89190911c606082015290565b6002546000829003612214576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831660008181526007602090815260408083208054680100000000000000018802019055848352600690915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146122c357808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460010161228b565b50816000036122fe576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025550505050565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61237e848484610bd3565b6001600160a01b0383163b15610bf85761239a848484846124cf565b610bf8576040516368d2bf6b60e11b815260040160405180910390fd5b604080516080810182526000808252602082018190529181018290526060810191909152610a656123e783612089565b604080516080810182526001600160a01b038316815260a083901c67ffffffffffffffff166020820152600160e01b831615159181019190915260e89190911c606082015290565b6060600061243c836125ba565b600101905060008167ffffffffffffffff81111561245c5761245c612a3a565b6040519080825280601f01601f191660200182016040528015612486576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461249057509392505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061250490339089908890889060040161301b565b6020604051808303816000875af192505050801561253f575060408051601f3d908101601f1916820190925261253c91810190613057565b60015b61259d573d80801561256d576040519150601f19603f3d011682016040523d82523d6000602084013e612572565b606091505b508051600003612595576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612603577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061262f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061264d57662386f26fc10000830492506010015b6305f5e1008310612665576305f5e100830492506008015b612710831061267957612710830492506004015b6064831061268b576064830492506002015b600a8310610a655760010192915050565b6001600160e01b031981168114610d9d57600080fd5b6000602082840312156126c457600080fd5b813561126b8161269c565b80356001600160a01b03811681146126e657600080fd5b919050565b600080604083850312156126fe57600080fd5b612707836126cf565b915060208301356bffffffffffffffffffffffff8116811461272857600080fd5b809150509250929050565b60005b8381101561274e578181015183820152602001612736565b50506000910152565b6000815180845261276f816020860160208601612733565b601f01601f19169290920160200192915050565b60208152600061126b6020830184612757565b6000602082840312156127a857600080fd5b5035919050565b600080604083850312156127c257600080fd5b6127cb836126cf565b946020939093013593505050565b600080604083850312156127ec57600080fd5b50508035926020909101359150565b60006020828403121561280d57600080fd5b61126b826126cf565b60008060006060848603121561282b57600080fd5b612834846126cf565b9250612842602085016126cf565b9150604084013590509250925092565b8015158114610d9d57600080fd5b60006020828403121561287257600080fd5b813561126b81612852565b6000806020838503121561289057600080fd5b823567ffffffffffffffff808211156128a857600080fd5b818501915085601f8301126128bc57600080fd5b8135818111156128cb57600080fd5b8660208285010111156128dd57600080fd5b60209290920196919550909350505050565b6000806020838503121561290257600080fd5b823567ffffffffffffffff8082111561291a57600080fd5b818501915085601f83011261292e57600080fd5b81358181111561293d57600080fd5b8660208260051b85010111156128dd57600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561102f576129bc8385516001600160a01b03815116825267ffffffffffffffff602082015116602083015260408101511515604083015262ffffff60608201511660608301525050565b928401926080929092019160010161296e565b6020808252825182820181905260009190848201906040850190845b8181101561102f578351835292840192918401916001016129eb565b600080600060608486031215612a1c57600080fd5b612a25846126cf565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612a7957612a79612a3a565b604052919050565b600067ffffffffffffffff821115612a9b57612a9b612a3a565b5060051b60200190565b600082601f830112612ab657600080fd5b81356020612acb612ac683612a81565b612a50565b82815260059290921b84018101918181019086841115612aea57600080fd5b8286015b84811015612b055780358352918301918301612aee565b509695505050505050565b60008060408385031215612b2357600080fd5b823567ffffffffffffffff80821115612b3b57600080fd5b818501915085601f830112612b4f57600080fd5b81356020612b5f612ac683612a81565b82815260059290921b84018101918181019089841115612b7e57600080fd5b948201945b83861015612ba357612b94866126cf565b82529482019490820190612b83565b96505086013592505080821115612bb957600080fd5b50612bc685828601612aa5565b9150509250929050565b60008060408385031215612be357600080fd5b612bec836126cf565b9150602083013561272881612852565b60008060008060808587031215612c1257600080fd5b612c1b856126cf565b93506020612c2a8187016126cf565b935060408601359250606086013567ffffffffffffffff80821115612c4e57600080fd5b818801915088601f830112612c6257600080fd5b813581811115612c7457612c74612a3a565b612c86601f8201601f19168501612a50565b91508082528984828501011115612c9c57600080fd5b808484018584013760008482840101525080935050505092959194509250565b81516001600160a01b0316815260208083015167ffffffffffffffff169082015260408083015115159082015260608083015162ffffff169082015260808101610a65565b60008060408385031215612d1457600080fd5b612d1d836126cf565b9150612d2b602084016126cf565b90509250929050565b600181811c90821680612d4857607f821691505b602082108103612d6857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a6557610a65612d6e565b600082612db857634e487b7160e01b600052601260045260246000fd5b500490565b601f821115610b8457600081815260208120601f850160051c81016020861015612de45750805b601f850160051c820191505b81811015611f0257828155600101612df0565b67ffffffffffffffff831115612e1b57612e1b612a3a565b612e2f83612e298354612d34565b83612dbd565b6000601f841160018114612e635760008515612e4b5750838201355b600019600387901b1c1916600186901b17835561162e565b600083815260209020601f19861690835b82811015612e945786850135825560209485019460019092019101612e74565b5086821015612eb15760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b80820180821115610a6557610a65612d6e565b600060018201612efe57612efe612d6e565b5060010190565b60008154612f1281612d34565b60018281168015612f2a5760018114612f3f57612f6e565b60ff1984168752821515830287019450612f6e565b8560005260208060002060005b85811015612f655781548a820152908401908201612f4c565b50505082870194505b5050505092915050565b6000612f848284612f05565b7f70726572657665616c2e6a736f6e0000000000000000000000000000000000008152600e019392505050565b6000612fbd8285612f05565b8351612fcd818360208801612733565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000009101908152600501949350505050565b60006020828403121561301057600080fd5b815161126b81612852565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261304d6080830184612757565b9695505050505050565b60006020828403121561306957600080fd5b815161126b8161269c56fea2646970667358221220bd1297fab88abc9e3495545fde3aec0a86b2ada7d524a4094d927a4763220d6464736f6c63430008110033697066733a2f2f62616679626569636d616f3537756b6f7775617a696c67776e72693674706f6d356169336a7a786963366670766370626f696c6d6b36357a3636792f000000000000000000000000764e3596e4b99525fbb415983904aa1f6938742700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001dc000000000000000000000000000000000000000000000000000000000000000ea0000000000000000000000001d02909ce8115570135da8391b21df493ecbaa19000000000000000000000000715bcf849e9612f69a8ae75db25a7cff387acc6100000000000000000000000070abe91f46009c7c3c062dc35b25f7fc29a5e2aa000000000000000000000000789249f44590c2e809bd8ee06370d189cc1c8a03000000000000000000000000e10a5479fa63eba70b54dff6fa26ae93a6c250e6000000000000000000000000206a716cd6500e3315c164f22ad660e4e5adb6c600000000000000000000000018f936f419ba4e03329159e45fccf787bf29329000000000000000000000000003a909ee4b6d8d410ff9983770a0ca3d84f87827000000000000000000000000634fff01fedb195e913f8b82cf8f5e96c11f4aa4000000000000000000000000ec6f735e3284b2d7f7ee34e429242790d38f1e510000000000000000000000004e701ab1fe9bc53e9ff538c16479d272aa0baf3200000000000000000000000056c2aa7e0f8918c2e81d9a4dadf2b4f8b62a16870000000000000000000000008a4ba4b018bf0f843219bc46404f6b9bb035cf97000000000000000000000000cd3be77d3287900f0835ca5f4450acfa1ff7913400000000000000000000000020cd63d1886fb8c89cb358b537365c161ea3c2c30000000000000000000000001e68729477b169b8e0b25e64a3f1545d4d20021d000000000000000000000000785423440d5b4d799df9f0c439921801d881f19100000000000000000000000009c4e72d7c1d208b05709d5f3f411347c6fdd5bf0000000000000000000000000f7255c6f5d72f670f37b642f56f425a9e40740b0000000000000000000000003c4e47b1be41100b8fd839334fe840469c722ab90000000000000000000000007c987c415671d213e8f81100835b6be82953b9680000000000000000000000003da7d11db053cf797e9db587f0b130993def2ead0000000000000000000000002190195093d5229e513c53cf54b1f41bc691ef500000000000000000000000009f81bb2c894ec9358cc25d937a2a50c70664b8600000000000000000000000006e47a768206673169ec07544544e37749dfa8b0d0000000000000000000000007a270111feb64180b5dfc74fb536889f2fd7009100000000000000000000000024af492e982df6692473b383d24cd5878b130c8d000000000000000000000000c004dcba87c2bac561b312880645bd37591a241c000000000000000000000000a442540f7365ccd43848c4b25576706a95fd35590000000000000000000000001444fedea6cd0fd7c78fb2d0caf803f486b86cbe000000000000000000000000947cff0068d16fade45208bbc3137c1fc1f905a50000000000000000000000006e4efc631bf2d85fa978544813280d2988a5d2ee000000000000000000000000cc9d3dd3f433de6c14e8881b13d4bcfe1a3e59f5000000000000000000000000f385d707f91293eef7195ae26ec752838619f73c00000000000000000000000040dc541924d4529b5bb5bb668b802d610fcc8adc0000000000000000000000006c1ae7447928271145d740745ae3c0f59838765600000000000000000000000077a4741b9949957c380be1ef4f3c74b16c0f9cc0000000000000000000000000315014d50459d218d3294a888897ca12b6ce694b0000000000000000000000005f71e69487b30c36d856e8a4be874d1c1841f01b00000000000000000000000010bbad85b0d79f279edbb10b3db5444c2e222c800000000000000000000000000c93f7e8a1bf0b865f605e2f2522bb5136613f05000000000000000000000000ecedfe638f467d4b7429f2d945b2b68bc8bdeed700000000000000000000000017383b85ff7bc7f06f339984a13365cb5f1cbac0000000000000000000000000ceb15608171581bf456de5eba152740b8df72eba0000000000000000000000004a3024cd2736287752b65545c835af153b15cdb300000000000000000000000025e0ce7cf653ae768a5b70d8d46d2745dfc983660000000000000000000000009139142a40c48bfeb5c53e250b73f0ab4d69ec0c000000000000000000000000af745d70f2a9a7d4b8554c99e085535c85278c800000000000000000000000003b2d1d962cdd7ce0dbcade2a65de0912faf909da0000000000000000000000003711eee7dc43a7cd2e8de94fa6f707495bc47c50000000000000000000000000597fdef2a75c3887f38cd6ccdcf1c9e68bf8fca800000000000000000000000070cea7a5b6dab49af0d71ed1176c7e40d5dc05a90000000000000000000000005f626416a4a62b1932ac90498871e63e752dd1a8000000000000000000000000c37dc5b1f5462e6af48c8aeb7c56ea926bdc723d0000000000000000000000001ed8093e27db0c6aed7e628c157715c10665e906000000000000000000000000bcac39b7d41c92ee746aefa2ea195cb57cba5ab90000000000000000000000007ad1c4737c79ac9cf6fb3581b725a0139fe3f92900000000000000000000000006d143b42a3b314ece47b09e393e1713ef4f6e5c0000000000000000000000005a8cff947c3eec654eb96f4614374854a985b8ff0000000000000000000000007a3268611cc569025fe0fdecf4660f25df7f8a74000000000000000000000000d44acfbd49af9a3bcbfa9505fe8f8b0c5a5fa873000000000000000000000000ba771d99a792151bff0cb6032f85f94a883c39d7000000000000000000000000c7e5ba0c7a71cdc297090fe95388548362daa0b80000000000000000000000008244465045c2e6a12813696bd1ba3fd198412e360000000000000000000000004be7cce4a8781382f17b04be7aca5e9d1b4aad2d000000000000000000000000c8694c7fd004bbdb8554c88e2ce54e71f464da0f00000000000000000000000023331268398fe4fee365d25723444bfe2658ce12000000000000000000000000141e3822c900b0582eafa4cbf94da13706a0be78000000000000000000000000dadc55b8ab58ae10ac3c5e8b2d759ae6c41f0def00000000000000000000000085e87aeb35dc8e6cefe09729d9586b222f1ee005000000000000000000000000b4024efe4c5fccee804905b4904b40e5d19e6b7e000000000000000000000000ba6719e33977d8d0f7a1a28f02af99beaffa7985000000000000000000000000d44d25b80ce176e2be4d389b2fdd0fd066318f350000000000000000000000007d02b87b5f66113c22872bafe34b5aa858795d65000000000000000000000000e360ff0e1dc3bd26dd6057ca2a589720d514988e000000000000000000000000523ebe1917385109c003ba0a617cd0fc3e4be864000000000000000000000000becd56fee44debc76749ad182881d169e17ae0f9000000000000000000000000f935c2b9a7206eecd1c86d1bfa50fb5ba6fd25360000000000000000000000002a9961aa2b35a992026304a7b92fba073a85ee910000000000000000000000002ce55667462e85b5d7a7a28bfaf5772199dcb6660000000000000000000000003be77efccda5b6e728ef8a7467add8f7d0e74cf500000000000000000000000072689911a038941693c5ae52ba2cb76244d0e40b0000000000000000000000004495eef8161621ac8b9cf734f68505c4998e3616000000000000000000000000d6d27c78be6ee9d9ffcab3846fb50025bb06891e00000000000000000000000003082cb78376c275393e1efbf8ade4ddc658d5ac000000000000000000000000f71032876c7fb13c81e9ca096ec8f21afa6a21d10000000000000000000000004c60ce0de0dffa44621ce8e9ed9e94d6303f3bbf0000000000000000000000008b99a15305cbb728461eff6cd7b7584aed42f11f0000000000000000000000003e675970c5db1fe34fd9466811f322996d4e6d8d000000000000000000000000c0421899db0572b0f5143595cb198b1a8620fb9000000000000000000000000042139ecb38bf21070daebd0ca7913a001d9f5650000000000000000000000000c9b18a89b015ff53c531f258028f0e0d872badab0000000000000000000000005f0fa985de985f7674f4e6fd53661fb70fb2112e00000000000000000000000058d64598b29441297ad93611e91a71836ff517ed000000000000000000000000e5259c5b1535d96f6aafca55f8d8a69ab7464c7d000000000000000000000000c3e821f2fb28435330783c5b72b875163d386b150000000000000000000000004f7cc18927b0b973fa11e8861e9a9beeab7f4e65000000000000000000000000f7da642039568a2fa98d9ef02d388d9f8e286f75000000000000000000000000a5016d2c1a007d1bd18667d788ab2a1f23d2af46000000000000000000000000f211ba25a6584cde4469789bdd671f8fc57efb6e00000000000000000000000061b879393817fc292452df3606e0056a25cdaed2000000000000000000000000d87884250b9927509b7d36d02b9d102be61903b3000000000000000000000000782703274dba50573ff7233f7f5bc5896f0e4c83000000000000000000000000b96d3299e3dfb357599668e68183d7e7edf17f67000000000000000000000000664d05e8bbbcdae57b022681b125218d2e9cef1100000000000000000000000021c473a42c5ff5264f20924c074f470132df88e9000000000000000000000000628e8030fc72c7ae9bd1a009acee04e6909010230000000000000000000000005c5c7f55f6a4bd3d4a42b878c9dfcbbe67f957430000000000000000000000008bf79babf23256874bd04621d0ad2934dcddb443000000000000000000000000230ce5822fa92fced8d894dede262932e9d61774000000000000000000000000d064f9f7d9d307f92098c985ef75bb34e4ee6708000000000000000000000000b0d2f7319cf769cc3cfb73c73baf64dac82016b00000000000000000000000009d4979cd1861a73c62a6dcaf698f7b812318cf29000000000000000000000000116be73b5c8a0ecf72f3b2a0cc7e1bcd0e5287ba000000000000000000000000c7d8b51fd379946fe8089f7698d6ae1ec75f59e4000000000000000000000000c1753a280adc4ec35aa9fa299d8f3eb722b4cf470000000000000000000000005f33799ef96b20594e05bc58f26c289b4990283900000000000000000000000084f2c998cb6c5055b1dbdc3acd52710cfd0fcc25000000000000000000000000c948ac8e38a552ee6f73ce4198e544280eebf0ee000000000000000000000000efa50d8a2725cd4d37767065b23df239dad41c46000000000000000000000000b5bb09ecaecb7fca6c837ab706ce321b3a3dd94900000000000000000000000092de4f25753a4ee6690461e64dd839f68c2b0447000000000000000000000000fee57ad345688607bfa946f6a9d68b952661ae7d000000000000000000000000d8cfee883012941c548015f3fa8767c96985c074000000000000000000000000304b739ebf7ccd2bed1650cd495a91c3d4ef0286000000000000000000000000c34ea8edc1159524ac98a1bfe12cd4e31772e8b900000000000000000000000099b9e273dbb3842d967b2115650a7b32ffbd8915000000000000000000000000f5d2539690562f9cb7cc228422500bcaa7d7b981000000000000000000000000eed301b1e3c9e9f09728ffd261a806c42207b44e000000000000000000000000871cef1953c6f66d67b9c539a597f8d380a90897000000000000000000000000af0aaf2f53802e69c6d4c4f32323662f64ccd33e000000000000000000000000f669bbd49681f2561d75c6b58d7cc6e5f04889c3000000000000000000000000b8aef48f5eb4d442dbaa2ff4a5ff6eb304b1549300000000000000000000000057f016d7f5a400b70055230f5e956dc3af93a42400000000000000000000000059a58f0f2002f2f3231799b2b929dc6e1950b647000000000000000000000000040278be662cdddfdb17b04df4b4c7dc857c6b7a00000000000000000000000026bc82516f6f05fdb9d422b43fb441363397c15600000000000000000000000086f05a9ef008aadc1ccaecf73ac9f2e22fe03987000000000000000000000000c1b207faa6ab72f14ed407f3db7d98d559fd7046000000000000000000000000aedf586246957e5417ff23fbf61cd338d1b5e7e9000000000000000000000000a29efbe892e9c76fd41f3848f811db0bf0793dde0000000000000000000000008e68cf584f1057ded1d673003e0d1e8aefb1b12c0000000000000000000000000dd11c2a71ca194f7bcfcac806988b580eb3ba8a0000000000000000000000004fa9a4979cb6cf683f77412160d85f555de7a6be000000000000000000000000559826b989d0e9abd9bbfdfcb75f57c1d16a3ebe0000000000000000000000005e71da5e8e3df9f2ec6ad6ec73893fa04de7b3f6000000000000000000000000a9a4a3a03514e58cd59a13bb54230d588ff58f620000000000000000000000002e0a86c23066134b7ba0079f0419d00852048df10000000000000000000000001ca360ff207a34372f66c588497911bac1f488fd00000000000000000000000014fd36dcd9de887fec7cca981c2296a23b79bee0000000000000000000000000777c29cd351111f4bdb394bf1530a7510fa2f46a0000000000000000000000009a60c087a268d5b70a4711972ce990705f645bd8000000000000000000000000c5790e43bcf59cebde21c2abcf3cd587371697c4000000000000000000000000eb77d696055f5dd0bd30e4adf3a15ff5dc4ad4d70000000000000000000000005664bcf74f5d4040a49802ae4ca7848bd4838b28000000000000000000000000d56cb5f700f378152f2c116cc7710947609771f0000000000000000000000000a3f55c32a40160569acf4a7a2aabac830f37ff2d000000000000000000000000b16c9b933ec5fbb7888e50fafeee62169e70b894000000000000000000000000ce337ec901a6c31c6b41232e1cb0b943e4811fb7000000000000000000000000db5c6e2196dd0c636c5de83980cf43fe55f65d970000000000000000000000002ee886b33c322b3fd8726d6e5b3e0879a28b0d9e000000000000000000000000c2b19caec5cfb90c215765fe70dca9d0088cd44d0000000000000000000000002b6733fb161a3dbcb869700f697faa54d055a702000000000000000000000000cf5431a0919a5294b2cb813a4fcf6b1712e1d5e10000000000000000000000000b84ab28eab48db8d9a8fb62115336a821c71e8a000000000000000000000000f2c4dcdc031a4a2722d340ab14ee7fb4f05d1e63000000000000000000000000ffb687d37721532994663b8e55609854b3d6ae89000000000000000000000000118ad9e93accbc52772b94ab3db2256eab56b71f000000000000000000000000edc0f30d965476921359c055821411fc3c3f3e75000000000000000000000000213106b72a0f05aca94e764803242a27abe955c6000000000000000000000000ad3b696cf4ec30bb57fba90e887f7cb15d033d8f000000000000000000000000525b81ba93fd8dbbdf7ae439c6726e32a1df119b000000000000000000000000f8a8ef9429a0b9bb886ae83ffadecfaed2fe11cd00000000000000000000000009d520c793dd698bd910984adb4c4718bb20beda0000000000000000000000000dd64fba327e14c404a70c4b4111f495fdd84acb0000000000000000000000003c8c92e442677f9cf043ee404dfc55eed30a0000000000000000000000000000406f7c2caaf82fb67d60108ed9cb76399ef4fc9b0000000000000000000000003e49b455221b6a9fd22aa7310c06797042c880c7000000000000000000000000e808a1474cc9ab087b93da9a909d6e9b028611a7000000000000000000000000af4a1eefcb37a0d159d3a7745163261b1ea9089600000000000000000000000094e581171c04e9774257a85624f5849e647badf6000000000000000000000000bd85d42f8f78df7d332ac14d49b24bdec4a1ba45000000000000000000000000a2a19a9846111f38bb548232cbd9649a5f59e489000000000000000000000000aac4548a187ab30269a64bbf16116d453a7841430000000000000000000000002bcc3e54b12de0a1c1109b69b190993466f90151000000000000000000000000b8630c44d6ae7d5394384854d84d42cc74ab12ee0000000000000000000000007c5745f55e2b7f7397d4e9ce514b643b08540f5f0000000000000000000000008e96141e044ef562f12d888ab7d339a0d763f75b000000000000000000000000e8228a7d86ae5b94d656ecec560c7b560af7bf080000000000000000000000007f2a1ada49bb63ff1b8f8f28a310c2d59c53ee41000000000000000000000000155b74d878eeb12cd2e09bf08c33cd0ada3ba08a000000000000000000000000bc4cd122195a489f20c362cda9733d26459241460000000000000000000000004600df0a2ee713b30e8d950877813f89ba53b369000000000000000000000000db75d14117e7802e0596baf2c92b90c0f0ab1aa500000000000000000000000059db27a34980b740d00d90120276d61b0a7e0fbc00000000000000000000000048029df6ca91b99793f8f084b9695f6a1309e5890000000000000000000000007a600c045ef72ce5483f7e76d4fe5beffcdee6ac000000000000000000000000955679d217d2c0adb9c34aa09fc1566443177bdd0000000000000000000000002e6d4fc5837b315da0e4b66d1891589a77d3ac95000000000000000000000000e5ed87054cb0664ac2ae312a7315864b31125a6300000000000000000000000039301c28137f44827202902fb414e4ca778f921d00000000000000000000000099058bc91f089f7803e1b7a692baf0c689ce491a0000000000000000000000001cbd7f3c6f51bd1bb20ad13eb4ae2dab39b49050000000000000000000000000ff0777f5412dbe89ec398816c3915b40c27dbd81000000000000000000000000946fefe407283e9dd00ac8d00a2829a694693e22000000000000000000000000572ba86d37600ebde4a437bfb456894a8dc56176000000000000000000000000409f66331a0d5d53df7dc8b6d75159cba7dc1e040000000000000000000000005aa01e6c2efe08844927d05c6d2ae0f61a2e2ea9000000000000000000000000fc6c3e8a64fb250c1d7019c003e6ee8c13bac8500000000000000000000000007f546d7563645c622cf0fca99bb8a7c785968dd40000000000000000000000009c7e26a65a7d6e59e041115b373906fdc65bcb0c000000000000000000000000799400e2d21af84b1a0f8569cf23e89d75828b18000000000000000000000000eeb4a68edcaab3a392389ead5b51a54acb843cb50000000000000000000000008ed68b7368c182686be51dbbba9410e629079b77000000000000000000000000b62b934448917e0ca6a91d9b6fc63a0fd13151c2000000000000000000000000a17b76cc0b2d1b64a42d8e8c503773cedd361dd0000000000000000000000000ad3f070c46a8699ebd31cac24cbba7b1ffa72456000000000000000000000000a544dc85c67964bb6ce10cc281fc3228f9fa4eda000000000000000000000000b63e2759d473c85610906db0e2c8359850b03b7000000000000000000000000030bc82c05da98599c705d89e04bf718f716eb52c0000000000000000000000008e490c166bd821a49a2b1983f5d632d9ad1bc20b00000000000000000000000078c6d24ccd5aadcece9ba4055ce82bd85d713007000000000000000000000000e81c2cb8e7bdf0f36829c25981b6b78c0f794bc50000000000000000000000003c73973aec34d7c596251b68fb26d3a8f33205d200000000000000000000000026ccf273a1f5eae3b7fbf30c9db7a551c6a44864000000000000000000000000cd570093780c1f271bfec54e40df03a652732e760000000000000000000000007c5625b3104c6cf224a4b522c37eeeb3092e1cf0000000000000000000000000c1f0b8d8cf6f5913a8f63d0ac9ef4d734791b32a000000000000000000000000290633e9d8bd4550a3402f45014845ac0fdbd470000000000000000000000000d7d428cdccdc1b569c7bf95538e0dec20bb44ba4000000000000000000000000dc45c3059edbacc0e495daf59390b5a617fb3cb6000000000000000000000000de7e3e355ce8162a43ea922df5a0a300970c4d08000000000000000000000000b67fb947e0c12eaa32d79c165ce60a57712a1dd5000000000000000000000000d0423e62d0f835b02c6902be5d2d22544c51544800000000000000000000000000000000000000000000000000000000000000ea00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000002f0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000001300000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x60806040526004361061034a5760003560e01c8063715018a6116101bb578063b5a288c7116100f7578063d5abeb0111610095578063e8c396051161006f578063e8c396051461094a578063e985e9c5146109c2578063f0f4426014610a0b578063f2fde38b14610a2b57600080fd5b8063d5abeb01146108f4578063e20a91ac1461090a578063e268e4d31461092a57600080fd5b8063bbaac02f116100d1578063bbaac02f14610867578063c23dc68f14610887578063c87b56dd146108b4578063ccfdd2f8146108d457600080fd5b8063b5a288c71461081f578063b88d4fde1461083f578063b8f7a6651461085257600080fd5b806395d89b41116101645780639ec00c951161013e5780639ec00c95146107a9578063a035b1fe146107d6578063a0712d68146107ec578063a22cb465146107ff57600080fd5b806395d89b411461075457806399a2557a146107695780639e58f9441461078957600080fd5b80638ba4cc3c116101955780638ba4cc3c146106f65780638da5cb5b1461071657806391b7f5ed1461073457600080fd5b8063715018a61461069e5780638462151c146106b35780638622a689146106e057600080fd5b806342842e0e1161028a57806354214f691161023357806361d027b31161020d57806361d027b31461061e5780636352211e1461063e5780636f8b44b01461065e57806370a082311461067e57600080fd5b806354214f69146105b257806355f804b3146105d15780635bbb2177146105f157600080fd5b806349a5980a1161026457806349a5980a146105665780634b980d671461058657806353f8bb9a1461059c57600080fd5b806342842e0e1461051d57806342966c6814610530578063453c23101461055057600080fd5b806311c67efc116102f757806323b872dd116102d157806323b872dd146104945780632a55205a146104a75780633ccfd60b146104e657806341f43434146104fb57600080fd5b806311c67efc1461043357806318160ddd1461044d5780631f88b0281461047457600080fd5b8063081812fc11610328578063081812fc146103c8578063095ea7b3146104005780630f8677511461041357600080fd5b806301ffc9a71461034f57806304634d8d1461038457806306fdde03146103a6575b600080fd5b34801561035b57600080fd5b5061036f61036a3660046126b2565b610a4b565b60405190151581526020015b60405180910390f35b34801561039057600080fd5b506103a461039f3660046126eb565b610a6b565b005b3480156103b257600080fd5b506103bb610a81565b60405161037b9190612783565b3480156103d457600080fd5b506103e86103e3366004612796565b610b13565b6040516001600160a01b03909116815260200161037b565b6103a461040e3660046127af565b610b70565b34801561041f57600080fd5b506103a461042e3660046127d9565b610b89565b34801561043f57600080fd5b5060175461036f9060ff1681565b34801561045957600080fd5b5060035460025403600019015b60405190815260200161037b565b34801561048057600080fd5b506103a461048f3660046127fb565b610b9c565b6103a46104a2366004612816565b610bd3565b3480156104b357600080fd5b506104c76104c23660046127d9565b610bfe565b604080516001600160a01b03909316835260208301919091520161037b565b3480156104f257600080fd5b506103a4610cb9565b34801561050757600080fd5b506103e86daaeb6d7670e522a718067333cd4e81565b6103a461052b366004612816565b610d6d565b34801561053c57600080fd5b506103a461054b366004612796565b610d92565b34801561055c57600080fd5b5061046660105481565b34801561057257600080fd5b506103a4610581366004612860565b610da0565b34801561059257600080fd5b5061046660115481565b3480156105a857600080fd5b5061046660135481565b3480156105be57600080fd5b5060175461036f90610100900460ff1681565b3480156105dd57600080fd5b506103a46105ec36600461287d565b610dc2565b3480156105fd57600080fd5b5061061161060c3660046128ef565b610dd7565b60405161037b9190612952565b34801561062a57600080fd5b50600c546103e8906001600160a01b031681565b34801561064a57600080fd5b506103e8610659366004612796565b610ea3565b34801561066a57600080fd5b506103a4610679366004612796565b610eae565b34801561068a57600080fd5b506104666106993660046127fb565b610ebb565b3480156106aa57600080fd5b506103a4610f23565b3480156106bf57600080fd5b506106d36106ce3660046127fb565b610f37565b60405161037b91906129cf565b3480156106ec57600080fd5b5061046660145481565b34801561070257600080fd5b506103a46107113660046127af565b61103b565b34801561072257600080fd5b50600a546001600160a01b03166103e8565b34801561074057600080fd5b506103a461074f366004612796565b6110b5565b34801561076057600080fd5b506103bb6110c2565b34801561077557600080fd5b506106d3610784366004612a07565b6110d1565b34801561079557600080fd5b506103a46107a4366004612b10565b611272565b3480156107b557600080fd5b506104666107c43660046127fb565b60186020526000908152604090205481565b3480156107e257600080fd5b5061046660125481565b6103a46107fa366004612796565b611350565b34801561080b57600080fd5b506103a461081a366004612bd0565b6115f4565b34801561082b57600080fd5b506015546103e8906001600160a01b031681565b6103a461084d366004612bfc565b611608565b34801561085e57600080fd5b5061036f611635565b34801561087357600080fd5b506103a461088236600461287d565b611650565b34801561089357600080fd5b506108a76108a2366004612796565b611665565b60405161037b9190612cbc565b3480156108c057600080fd5b506103bb6108cf366004612796565b6116ed565b3480156108e057600080fd5b506103a46108ef366004612796565b611768565b34801561090057600080fd5b50610466600f5481565b34801561091657600080fd5b506103a4610925366004612860565b611775565b34801561093657600080fd5b506103a4610945366004612796565b611790565b34801561095657600080fd5b5061096a6109653660046127fb565b61179d565b60405161037b9190600060e0820190508251151582526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b3480156109ce57600080fd5b5061036f6109dd366004612d01565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b348015610a1757600080fd5b506103a4610a263660046127fb565b611848565b348015610a3757600080fd5b506103a4610a463660046127fb565b61187f565b6000610a568261190c565b80610a655750610a658261198c565b92915050565b610a736119da565b610a7d8282611a34565b5050565b606060048054610a9090612d34565b80601f0160208091040260200160405190810160405280929190818152602001828054610abc90612d34565b8015610b095780601f10610ade57610100808354040283529160200191610b09565b820191906000526020600020905b815481529060010190602001808311610aec57829003601f168201915b5050505050905090565b6000610b1e82611b4e565b610b54576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600860205260409020546001600160a01b031690565b81610b7a81611b83565b610b848383611c6e565b505050565b610b916119da565b601391909155601455565b610ba46119da565b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b826001600160a01b0381163314610bed57610bed33611b83565b610bf8848484611d34565b50505050565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff16928201929092528291610c7d5750604080518082019091526000546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b602081015160009061271090610ca1906bffffffffffffffffffffffff1687612d84565b610cab9190612d9b565b915196919550909350505050565b610cc16119da565b600c5460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610d12576040519150601f19603f3d011682016040523d82523d6000602084013e610d17565b606091505b5050905080610a7d5760405162461bcd60e51b815260206004820152601660248201527f556e61626c6520746f207769746864726177204554480000000000000000000060448201526064015b60405180910390fd5b826001600160a01b0381163314610d8757610d8733611b83565b610bf8848484611f0a565b610d9d816001611f25565b50565b610da86119da565b601780549115156101000261ff0019909216919091179055565b610dca6119da565b600d610b84828483612e03565b60608160008167ffffffffffffffff811115610df557610df5612a3a565b604051908082528060200260200182016040528015610e4757816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610e135790505b50905060005b828114610e9a57610e75868683818110610e6957610e69612ec3565b90506020020135611665565b828281518110610e8757610e87612ec3565b6020908102919091010152600101610e4d565b50949350505050565b6000610a6582612089565b610eb66119da565b600f55565b60006001600160a01b038216610efd576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526007602052604090205467ffffffffffffffff1690565b610f2b6119da565b610f3560006120f8565b565b60606000806000610f4785610ebb565b905060008167ffffffffffffffff811115610f6457610f64612a3a565b604051908082528060200260200182016040528015610f8d578160200160208202803683370190505b5060408051608081018252600080825260208201819052918101829052606081019190915290915060015b83861461102f57610fc881612157565b915081604001516110275781516001600160a01b031615610fe857815194505b876001600160a01b0316856001600160a01b031603611027578083878060010198508151811061101a5761101a612ec3565b6020026020010181815250505b600101610fb8565b50909695505050505050565b6110436119da565b600f54600354600254839190036000190161105e9190612ed9565b106110ab5760405162461bcd60e51b815260206004820152601160248201527f4d6178206d696e7420726561636865642e0000000000000000000000000000006044820152606401610d64565b610a7d82826121d6565b6110bd6119da565b601255565b606060058054610a9090612d34565b606081831061110c576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061111860025490565b9050600185101561112857600194505b80841115611134578093505b600061113f87610ebb565b90508486101561115e5785850381811015611158578091505b50611162565b5060005b60008167ffffffffffffffff81111561117d5761117d612a3a565b6040519080825280602002602001820160405280156111a6578160200160208202803683370190505b509050816000036111bc57935061126b92505050565b60006111c788611665565b9050600081604001516111d8575080515b885b8881141580156111ea5750848714155b1561125f576111f881612157565b925082604001516112575782516001600160a01b03161561121857825191505b8a6001600160a01b0316826001600160a01b031603611257578084888060010199508151811061124a5761124a612ec3565b6020026020010181815250505b6001016111da565b50505092835250909150505b9392505050565b61127a6119da565b60005b8251811015610b845760155483516001600160a01b039091169063638faecf908590849081106112af576112af612ec3565b60200260200101516016548585815181106112cc576112cc612ec3565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401600060405180830381600087803b15801561132557600080fd5b505af1158015611339573d6000803e3d6000fd5b50505050808061134890612eec565b91505061127d565b611358611635565b8015611366575060175460ff165b6113b25760405162461bcd60e51b815260206004820152601a60248201527f5075626c6963206d696e74206973206e6f74206163746976652e0000000000006044820152606401610d64565b60125481906113c18183612d84565b3410156114105760405162461bcd60e51b815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e0000000000000000000000000000006044820152606401610d64565b8260115481106114625760405162461bcd60e51b815260206004820152601c60248201527f4d617820706572207472616e73616374696f6e20726561636865642e000000006044820152606401610d64565b600f54600354600254839190036000190161147d9190612ed9565b106114ca5760405162461bcd60e51b815260206004820152601160248201527f4d6178206d696e7420726561636865642e0000000000000000000000000000006044820152606401610d64565b601054336000908152601860205260409020546114e8908390612ed9565b106115355760405162461bcd60e51b815260206004820152601360248201527f416c7265616479206d696e746564206d61782e000000000000000000000000006044820152606401610d64565b3360008181526018602052604081208054879290611554908490612ed9565b90915550611564905081866121d6565b6015546016546040517f638faecf0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201929092526044810188905291169063638faecf90606401600060405180830381600087803b1580156115d557600080fd5b505af11580156115e9573d6000803e3d6000fd5b505050505050505050565b816115fe81611b83565b610b848383612307565b836001600160a01b03811633146116225761162233611b83565b61162e85858585612373565b5050505050565b6000601354421015801561164b57506014544211155b905090565b6116586119da565b600e610b84828483612e03565b60408051608081018252600080825260208201819052918101829052606081019190915260408051608081018252600080825260208201819052918101829052606081019190915260018310806116be57506002548310155b156116c95792915050565b6116d283612157565b90508060400151156116e45792915050565b61126b836123b7565b60606116f882611b4e565b61171557604051636f96cda160e11b815260040160405180910390fd5b601754610100900460ff1661174c57600e6040516020016117369190612f78565b6040516020818303038152906040529050919050565b600d6117578361242f565b604051602001611736929190612fb1565b6117706119da565b601155565b61177d6119da565b6017805460ff1916911515919091179055565b6117986119da565b601055565b6117df6040518060e001604052806000151581526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506040805160e08101825260175460ff161515815260135460208083019190915260145482840152600f5460608301526003546002540360001901608083015260125460a08301526001600160a01b03939093166000908152601890935291205460c082015290565b6118506119da565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6118876119da565b6001600160a01b0381166119035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d64565b610d9d816120f8565b60006301ffc9a760e01b6001600160e01b03198316148061195657507f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b80610a655750506001600160e01b0319167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60006001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001480610a6557506301ffc9a760e01b6001600160e01b0319831614610a65565b600a546001600160a01b03163314610f355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d64565b6127106bffffffffffffffffffffffff82161115611aba5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610d64565b6001600160a01b038216611b105760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610d64565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff9091166020909201829052600160a01b90910217600055565b600081600111158015611b62575060025482105b8015610a65575050600090815260066020526040902054600160e01b161590565b6daaeb6d7670e522a718067333cd4e3b15610d9d576040517fc61711340000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2d9190612ffe565b610d9d576040517fede71dcc0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610d64565b6000611c7982610ea3565b9050336001600160a01b03821614611ccb57611c9581336109dd565b611ccb576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260086020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611d3f82612089565b9050836001600160a01b0316816001600160a01b031614611d8c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526008602052604090208054611db88187335b6001600160a01b039081169116811491141790565b611de357611dc686336109dd565b611de357604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516611e23576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015611e2e57600082555b6001600160a01b038681166000908152600760205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260066020526040812091909155600160e11b84169003611ec057600184016000818152600660205260408120549003611ebe576002548114611ebe5760008181526006602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b610b8483838360405180602001604052806000815250611608565b6000611f3083612089565b905080600080611f4e86600090815260086020526040902080549091565b915091508415611f8e57611f63818433611da3565b611f8e57611f7183336109dd565b611f8e57604051632ce44b5f60e11b815260040160405180910390fd5b8015611f9957600082555b6001600160a01b038316600081815260076020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c030000000000000000000000000000000000000000000000000000000017600087815260066020526040812091909155600160e11b851690036120405760018601600081815260066020526040812054900361203e57600254811461203e5760008181526006602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505060038054600101905550505050565b600081806001116120df576002548110156120df5760008181526006602052604081205490600160e01b821690036120dd575b8060000361126b5750600019016000818152600660205260409020546120bc565b505b604051636f96cda160e11b815260040160405180910390fd5b600a80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516080810182526000808252602082018190529181018290526060810191909152600082815260066020526040902054610a6590604080516080810182526001600160a01b038316815260a083901c67ffffffffffffffff166020820152600160e01b831615159181019190915260e89190911c606082015290565b6002546000829003612214576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831660008181526007602090815260408083208054680100000000000000018802019055848352600690915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146122c357808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460010161228b565b50816000036122fe576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025550505050565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61237e848484610bd3565b6001600160a01b0383163b15610bf85761239a848484846124cf565b610bf8576040516368d2bf6b60e11b815260040160405180910390fd5b604080516080810182526000808252602082018190529181018290526060810191909152610a656123e783612089565b604080516080810182526001600160a01b038316815260a083901c67ffffffffffffffff166020820152600160e01b831615159181019190915260e89190911c606082015290565b6060600061243c836125ba565b600101905060008167ffffffffffffffff81111561245c5761245c612a3a565b6040519080825280601f01601f191660200182016040528015612486576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461249057509392505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061250490339089908890889060040161301b565b6020604051808303816000875af192505050801561253f575060408051601f3d908101601f1916820190925261253c91810190613057565b60015b61259d573d80801561256d576040519150601f19603f3d011682016040523d82523d6000602084013e612572565b606091505b508051600003612595576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612603577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061262f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061264d57662386f26fc10000830492506010015b6305f5e1008310612665576305f5e100830492506008015b612710831061267957612710830492506004015b6064831061268b576064830492506002015b600a8310610a655760010192915050565b6001600160e01b031981168114610d9d57600080fd5b6000602082840312156126c457600080fd5b813561126b8161269c565b80356001600160a01b03811681146126e657600080fd5b919050565b600080604083850312156126fe57600080fd5b612707836126cf565b915060208301356bffffffffffffffffffffffff8116811461272857600080fd5b809150509250929050565b60005b8381101561274e578181015183820152602001612736565b50506000910152565b6000815180845261276f816020860160208601612733565b601f01601f19169290920160200192915050565b60208152600061126b6020830184612757565b6000602082840312156127a857600080fd5b5035919050565b600080604083850312156127c257600080fd5b6127cb836126cf565b946020939093013593505050565b600080604083850312156127ec57600080fd5b50508035926020909101359150565b60006020828403121561280d57600080fd5b61126b826126cf565b60008060006060848603121561282b57600080fd5b612834846126cf565b9250612842602085016126cf565b9150604084013590509250925092565b8015158114610d9d57600080fd5b60006020828403121561287257600080fd5b813561126b81612852565b6000806020838503121561289057600080fd5b823567ffffffffffffffff808211156128a857600080fd5b818501915085601f8301126128bc57600080fd5b8135818111156128cb57600080fd5b8660208285010111156128dd57600080fd5b60209290920196919550909350505050565b6000806020838503121561290257600080fd5b823567ffffffffffffffff8082111561291a57600080fd5b818501915085601f83011261292e57600080fd5b81358181111561293d57600080fd5b8660208260051b85010111156128dd57600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561102f576129bc8385516001600160a01b03815116825267ffffffffffffffff602082015116602083015260408101511515604083015262ffffff60608201511660608301525050565b928401926080929092019160010161296e565b6020808252825182820181905260009190848201906040850190845b8181101561102f578351835292840192918401916001016129eb565b600080600060608486031215612a1c57600080fd5b612a25846126cf565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612a7957612a79612a3a565b604052919050565b600067ffffffffffffffff821115612a9b57612a9b612a3a565b5060051b60200190565b600082601f830112612ab657600080fd5b81356020612acb612ac683612a81565b612a50565b82815260059290921b84018101918181019086841115612aea57600080fd5b8286015b84811015612b055780358352918301918301612aee565b509695505050505050565b60008060408385031215612b2357600080fd5b823567ffffffffffffffff80821115612b3b57600080fd5b818501915085601f830112612b4f57600080fd5b81356020612b5f612ac683612a81565b82815260059290921b84018101918181019089841115612b7e57600080fd5b948201945b83861015612ba357612b94866126cf565b82529482019490820190612b83565b96505086013592505080821115612bb957600080fd5b50612bc685828601612aa5565b9150509250929050565b60008060408385031215612be357600080fd5b612bec836126cf565b9150602083013561272881612852565b60008060008060808587031215612c1257600080fd5b612c1b856126cf565b93506020612c2a8187016126cf565b935060408601359250606086013567ffffffffffffffff80821115612c4e57600080fd5b818801915088601f830112612c6257600080fd5b813581811115612c7457612c74612a3a565b612c86601f8201601f19168501612a50565b91508082528984828501011115612c9c57600080fd5b808484018584013760008482840101525080935050505092959194509250565b81516001600160a01b0316815260208083015167ffffffffffffffff169082015260408083015115159082015260608083015162ffffff169082015260808101610a65565b60008060408385031215612d1457600080fd5b612d1d836126cf565b9150612d2b602084016126cf565b90509250929050565b600181811c90821680612d4857607f821691505b602082108103612d6857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a6557610a65612d6e565b600082612db857634e487b7160e01b600052601260045260246000fd5b500490565b601f821115610b8457600081815260208120601f850160051c81016020861015612de45750805b601f850160051c820191505b81811015611f0257828155600101612df0565b67ffffffffffffffff831115612e1b57612e1b612a3a565b612e2f83612e298354612d34565b83612dbd565b6000601f841160018114612e635760008515612e4b5750838201355b600019600387901b1c1916600186901b17835561162e565b600083815260209020601f19861690835b82811015612e945786850135825560209485019460019092019101612e74565b5086821015612eb15760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b80820180821115610a6557610a65612d6e565b600060018201612efe57612efe612d6e565b5060010190565b60008154612f1281612d34565b60018281168015612f2a5760018114612f3f57612f6e565b60ff1984168752821515830287019450612f6e565b8560005260208060002060005b85811015612f655781548a820152908401908201612f4c565b50505082870194505b5050505092915050565b6000612f848284612f05565b7f70726572657665616c2e6a736f6e0000000000000000000000000000000000008152600e019392505050565b6000612fbd8285612f05565b8351612fcd818360208801612733565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000009101908152600501949350505050565b60006020828403121561301057600080fd5b815161126b81612852565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261304d6080830184612757565b9695505050505050565b60006020828403121561306957600080fd5b815161126b8161269c56fea2646970667358221220bd1297fab88abc9e3495545fde3aec0a86b2ada7d524a4094d927a4763220d6464736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000764e3596e4b99525fbb415983904aa1f6938742700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001dc000000000000000000000000000000000000000000000000000000000000000ea0000000000000000000000001d02909ce8115570135da8391b21df493ecbaa19000000000000000000000000715bcf849e9612f69a8ae75db25a7cff387acc6100000000000000000000000070abe91f46009c7c3c062dc35b25f7fc29a5e2aa000000000000000000000000789249f44590c2e809bd8ee06370d189cc1c8a03000000000000000000000000e10a5479fa63eba70b54dff6fa26ae93a6c250e6000000000000000000000000206a716cd6500e3315c164f22ad660e4e5adb6c600000000000000000000000018f936f419ba4e03329159e45fccf787bf29329000000000000000000000000003a909ee4b6d8d410ff9983770a0ca3d84f87827000000000000000000000000634fff01fedb195e913f8b82cf8f5e96c11f4aa4000000000000000000000000ec6f735e3284b2d7f7ee34e429242790d38f1e510000000000000000000000004e701ab1fe9bc53e9ff538c16479d272aa0baf3200000000000000000000000056c2aa7e0f8918c2e81d9a4dadf2b4f8b62a16870000000000000000000000008a4ba4b018bf0f843219bc46404f6b9bb035cf97000000000000000000000000cd3be77d3287900f0835ca5f4450acfa1ff7913400000000000000000000000020cd63d1886fb8c89cb358b537365c161ea3c2c30000000000000000000000001e68729477b169b8e0b25e64a3f1545d4d20021d000000000000000000000000785423440d5b4d799df9f0c439921801d881f19100000000000000000000000009c4e72d7c1d208b05709d5f3f411347c6fdd5bf0000000000000000000000000f7255c6f5d72f670f37b642f56f425a9e40740b0000000000000000000000003c4e47b1be41100b8fd839334fe840469c722ab90000000000000000000000007c987c415671d213e8f81100835b6be82953b9680000000000000000000000003da7d11db053cf797e9db587f0b130993def2ead0000000000000000000000002190195093d5229e513c53cf54b1f41bc691ef500000000000000000000000009f81bb2c894ec9358cc25d937a2a50c70664b8600000000000000000000000006e47a768206673169ec07544544e37749dfa8b0d0000000000000000000000007a270111feb64180b5dfc74fb536889f2fd7009100000000000000000000000024af492e982df6692473b383d24cd5878b130c8d000000000000000000000000c004dcba87c2bac561b312880645bd37591a241c000000000000000000000000a442540f7365ccd43848c4b25576706a95fd35590000000000000000000000001444fedea6cd0fd7c78fb2d0caf803f486b86cbe000000000000000000000000947cff0068d16fade45208bbc3137c1fc1f905a50000000000000000000000006e4efc631bf2d85fa978544813280d2988a5d2ee000000000000000000000000cc9d3dd3f433de6c14e8881b13d4bcfe1a3e59f5000000000000000000000000f385d707f91293eef7195ae26ec752838619f73c00000000000000000000000040dc541924d4529b5bb5bb668b802d610fcc8adc0000000000000000000000006c1ae7447928271145d740745ae3c0f59838765600000000000000000000000077a4741b9949957c380be1ef4f3c74b16c0f9cc0000000000000000000000000315014d50459d218d3294a888897ca12b6ce694b0000000000000000000000005f71e69487b30c36d856e8a4be874d1c1841f01b00000000000000000000000010bbad85b0d79f279edbb10b3db5444c2e222c800000000000000000000000000c93f7e8a1bf0b865f605e2f2522bb5136613f05000000000000000000000000ecedfe638f467d4b7429f2d945b2b68bc8bdeed700000000000000000000000017383b85ff7bc7f06f339984a13365cb5f1cbac0000000000000000000000000ceb15608171581bf456de5eba152740b8df72eba0000000000000000000000004a3024cd2736287752b65545c835af153b15cdb300000000000000000000000025e0ce7cf653ae768a5b70d8d46d2745dfc983660000000000000000000000009139142a40c48bfeb5c53e250b73f0ab4d69ec0c000000000000000000000000af745d70f2a9a7d4b8554c99e085535c85278c800000000000000000000000003b2d1d962cdd7ce0dbcade2a65de0912faf909da0000000000000000000000003711eee7dc43a7cd2e8de94fa6f707495bc47c50000000000000000000000000597fdef2a75c3887f38cd6ccdcf1c9e68bf8fca800000000000000000000000070cea7a5b6dab49af0d71ed1176c7e40d5dc05a90000000000000000000000005f626416a4a62b1932ac90498871e63e752dd1a8000000000000000000000000c37dc5b1f5462e6af48c8aeb7c56ea926bdc723d0000000000000000000000001ed8093e27db0c6aed7e628c157715c10665e906000000000000000000000000bcac39b7d41c92ee746aefa2ea195cb57cba5ab90000000000000000000000007ad1c4737c79ac9cf6fb3581b725a0139fe3f92900000000000000000000000006d143b42a3b314ece47b09e393e1713ef4f6e5c0000000000000000000000005a8cff947c3eec654eb96f4614374854a985b8ff0000000000000000000000007a3268611cc569025fe0fdecf4660f25df7f8a74000000000000000000000000d44acfbd49af9a3bcbfa9505fe8f8b0c5a5fa873000000000000000000000000ba771d99a792151bff0cb6032f85f94a883c39d7000000000000000000000000c7e5ba0c7a71cdc297090fe95388548362daa0b80000000000000000000000008244465045c2e6a12813696bd1ba3fd198412e360000000000000000000000004be7cce4a8781382f17b04be7aca5e9d1b4aad2d000000000000000000000000c8694c7fd004bbdb8554c88e2ce54e71f464da0f00000000000000000000000023331268398fe4fee365d25723444bfe2658ce12000000000000000000000000141e3822c900b0582eafa4cbf94da13706a0be78000000000000000000000000dadc55b8ab58ae10ac3c5e8b2d759ae6c41f0def00000000000000000000000085e87aeb35dc8e6cefe09729d9586b222f1ee005000000000000000000000000b4024efe4c5fccee804905b4904b40e5d19e6b7e000000000000000000000000ba6719e33977d8d0f7a1a28f02af99beaffa7985000000000000000000000000d44d25b80ce176e2be4d389b2fdd0fd066318f350000000000000000000000007d02b87b5f66113c22872bafe34b5aa858795d65000000000000000000000000e360ff0e1dc3bd26dd6057ca2a589720d514988e000000000000000000000000523ebe1917385109c003ba0a617cd0fc3e4be864000000000000000000000000becd56fee44debc76749ad182881d169e17ae0f9000000000000000000000000f935c2b9a7206eecd1c86d1bfa50fb5ba6fd25360000000000000000000000002a9961aa2b35a992026304a7b92fba073a85ee910000000000000000000000002ce55667462e85b5d7a7a28bfaf5772199dcb6660000000000000000000000003be77efccda5b6e728ef8a7467add8f7d0e74cf500000000000000000000000072689911a038941693c5ae52ba2cb76244d0e40b0000000000000000000000004495eef8161621ac8b9cf734f68505c4998e3616000000000000000000000000d6d27c78be6ee9d9ffcab3846fb50025bb06891e00000000000000000000000003082cb78376c275393e1efbf8ade4ddc658d5ac000000000000000000000000f71032876c7fb13c81e9ca096ec8f21afa6a21d10000000000000000000000004c60ce0de0dffa44621ce8e9ed9e94d6303f3bbf0000000000000000000000008b99a15305cbb728461eff6cd7b7584aed42f11f0000000000000000000000003e675970c5db1fe34fd9466811f322996d4e6d8d000000000000000000000000c0421899db0572b0f5143595cb198b1a8620fb9000000000000000000000000042139ecb38bf21070daebd0ca7913a001d9f5650000000000000000000000000c9b18a89b015ff53c531f258028f0e0d872badab0000000000000000000000005f0fa985de985f7674f4e6fd53661fb70fb2112e00000000000000000000000058d64598b29441297ad93611e91a71836ff517ed000000000000000000000000e5259c5b1535d96f6aafca55f8d8a69ab7464c7d000000000000000000000000c3e821f2fb28435330783c5b72b875163d386b150000000000000000000000004f7cc18927b0b973fa11e8861e9a9beeab7f4e65000000000000000000000000f7da642039568a2fa98d9ef02d388d9f8e286f75000000000000000000000000a5016d2c1a007d1bd18667d788ab2a1f23d2af46000000000000000000000000f211ba25a6584cde4469789bdd671f8fc57efb6e00000000000000000000000061b879393817fc292452df3606e0056a25cdaed2000000000000000000000000d87884250b9927509b7d36d02b9d102be61903b3000000000000000000000000782703274dba50573ff7233f7f5bc5896f0e4c83000000000000000000000000b96d3299e3dfb357599668e68183d7e7edf17f67000000000000000000000000664d05e8bbbcdae57b022681b125218d2e9cef1100000000000000000000000021c473a42c5ff5264f20924c074f470132df88e9000000000000000000000000628e8030fc72c7ae9bd1a009acee04e6909010230000000000000000000000005c5c7f55f6a4bd3d4a42b878c9dfcbbe67f957430000000000000000000000008bf79babf23256874bd04621d0ad2934dcddb443000000000000000000000000230ce5822fa92fced8d894dede262932e9d61774000000000000000000000000d064f9f7d9d307f92098c985ef75bb34e4ee6708000000000000000000000000b0d2f7319cf769cc3cfb73c73baf64dac82016b00000000000000000000000009d4979cd1861a73c62a6dcaf698f7b812318cf29000000000000000000000000116be73b5c8a0ecf72f3b2a0cc7e1bcd0e5287ba000000000000000000000000c7d8b51fd379946fe8089f7698d6ae1ec75f59e4000000000000000000000000c1753a280adc4ec35aa9fa299d8f3eb722b4cf470000000000000000000000005f33799ef96b20594e05bc58f26c289b4990283900000000000000000000000084f2c998cb6c5055b1dbdc3acd52710cfd0fcc25000000000000000000000000c948ac8e38a552ee6f73ce4198e544280eebf0ee000000000000000000000000efa50d8a2725cd4d37767065b23df239dad41c46000000000000000000000000b5bb09ecaecb7fca6c837ab706ce321b3a3dd94900000000000000000000000092de4f25753a4ee6690461e64dd839f68c2b0447000000000000000000000000fee57ad345688607bfa946f6a9d68b952661ae7d000000000000000000000000d8cfee883012941c548015f3fa8767c96985c074000000000000000000000000304b739ebf7ccd2bed1650cd495a91c3d4ef0286000000000000000000000000c34ea8edc1159524ac98a1bfe12cd4e31772e8b900000000000000000000000099b9e273dbb3842d967b2115650a7b32ffbd8915000000000000000000000000f5d2539690562f9cb7cc228422500bcaa7d7b981000000000000000000000000eed301b1e3c9e9f09728ffd261a806c42207b44e000000000000000000000000871cef1953c6f66d67b9c539a597f8d380a90897000000000000000000000000af0aaf2f53802e69c6d4c4f32323662f64ccd33e000000000000000000000000f669bbd49681f2561d75c6b58d7cc6e5f04889c3000000000000000000000000b8aef48f5eb4d442dbaa2ff4a5ff6eb304b1549300000000000000000000000057f016d7f5a400b70055230f5e956dc3af93a42400000000000000000000000059a58f0f2002f2f3231799b2b929dc6e1950b647000000000000000000000000040278be662cdddfdb17b04df4b4c7dc857c6b7a00000000000000000000000026bc82516f6f05fdb9d422b43fb441363397c15600000000000000000000000086f05a9ef008aadc1ccaecf73ac9f2e22fe03987000000000000000000000000c1b207faa6ab72f14ed407f3db7d98d559fd7046000000000000000000000000aedf586246957e5417ff23fbf61cd338d1b5e7e9000000000000000000000000a29efbe892e9c76fd41f3848f811db0bf0793dde0000000000000000000000008e68cf584f1057ded1d673003e0d1e8aefb1b12c0000000000000000000000000dd11c2a71ca194f7bcfcac806988b580eb3ba8a0000000000000000000000004fa9a4979cb6cf683f77412160d85f555de7a6be000000000000000000000000559826b989d0e9abd9bbfdfcb75f57c1d16a3ebe0000000000000000000000005e71da5e8e3df9f2ec6ad6ec73893fa04de7b3f6000000000000000000000000a9a4a3a03514e58cd59a13bb54230d588ff58f620000000000000000000000002e0a86c23066134b7ba0079f0419d00852048df10000000000000000000000001ca360ff207a34372f66c588497911bac1f488fd00000000000000000000000014fd36dcd9de887fec7cca981c2296a23b79bee0000000000000000000000000777c29cd351111f4bdb394bf1530a7510fa2f46a0000000000000000000000009a60c087a268d5b70a4711972ce990705f645bd8000000000000000000000000c5790e43bcf59cebde21c2abcf3cd587371697c4000000000000000000000000eb77d696055f5dd0bd30e4adf3a15ff5dc4ad4d70000000000000000000000005664bcf74f5d4040a49802ae4ca7848bd4838b28000000000000000000000000d56cb5f700f378152f2c116cc7710947609771f0000000000000000000000000a3f55c32a40160569acf4a7a2aabac830f37ff2d000000000000000000000000b16c9b933ec5fbb7888e50fafeee62169e70b894000000000000000000000000ce337ec901a6c31c6b41232e1cb0b943e4811fb7000000000000000000000000db5c6e2196dd0c636c5de83980cf43fe55f65d970000000000000000000000002ee886b33c322b3fd8726d6e5b3e0879a28b0d9e000000000000000000000000c2b19caec5cfb90c215765fe70dca9d0088cd44d0000000000000000000000002b6733fb161a3dbcb869700f697faa54d055a702000000000000000000000000cf5431a0919a5294b2cb813a4fcf6b1712e1d5e10000000000000000000000000b84ab28eab48db8d9a8fb62115336a821c71e8a000000000000000000000000f2c4dcdc031a4a2722d340ab14ee7fb4f05d1e63000000000000000000000000ffb687d37721532994663b8e55609854b3d6ae89000000000000000000000000118ad9e93accbc52772b94ab3db2256eab56b71f000000000000000000000000edc0f30d965476921359c055821411fc3c3f3e75000000000000000000000000213106b72a0f05aca94e764803242a27abe955c6000000000000000000000000ad3b696cf4ec30bb57fba90e887f7cb15d033d8f000000000000000000000000525b81ba93fd8dbbdf7ae439c6726e32a1df119b000000000000000000000000f8a8ef9429a0b9bb886ae83ffadecfaed2fe11cd00000000000000000000000009d520c793dd698bd910984adb4c4718bb20beda0000000000000000000000000dd64fba327e14c404a70c4b4111f495fdd84acb0000000000000000000000003c8c92e442677f9cf043ee404dfc55eed30a0000000000000000000000000000406f7c2caaf82fb67d60108ed9cb76399ef4fc9b0000000000000000000000003e49b455221b6a9fd22aa7310c06797042c880c7000000000000000000000000e808a1474cc9ab087b93da9a909d6e9b028611a7000000000000000000000000af4a1eefcb37a0d159d3a7745163261b1ea9089600000000000000000000000094e581171c04e9774257a85624f5849e647badf6000000000000000000000000bd85d42f8f78df7d332ac14d49b24bdec4a1ba45000000000000000000000000a2a19a9846111f38bb548232cbd9649a5f59e489000000000000000000000000aac4548a187ab30269a64bbf16116d453a7841430000000000000000000000002bcc3e54b12de0a1c1109b69b190993466f90151000000000000000000000000b8630c44d6ae7d5394384854d84d42cc74ab12ee0000000000000000000000007c5745f55e2b7f7397d4e9ce514b643b08540f5f0000000000000000000000008e96141e044ef562f12d888ab7d339a0d763f75b000000000000000000000000e8228a7d86ae5b94d656ecec560c7b560af7bf080000000000000000000000007f2a1ada49bb63ff1b8f8f28a310c2d59c53ee41000000000000000000000000155b74d878eeb12cd2e09bf08c33cd0ada3ba08a000000000000000000000000bc4cd122195a489f20c362cda9733d26459241460000000000000000000000004600df0a2ee713b30e8d950877813f89ba53b369000000000000000000000000db75d14117e7802e0596baf2c92b90c0f0ab1aa500000000000000000000000059db27a34980b740d00d90120276d61b0a7e0fbc00000000000000000000000048029df6ca91b99793f8f084b9695f6a1309e5890000000000000000000000007a600c045ef72ce5483f7e76d4fe5beffcdee6ac000000000000000000000000955679d217d2c0adb9c34aa09fc1566443177bdd0000000000000000000000002e6d4fc5837b315da0e4b66d1891589a77d3ac95000000000000000000000000e5ed87054cb0664ac2ae312a7315864b31125a6300000000000000000000000039301c28137f44827202902fb414e4ca778f921d00000000000000000000000099058bc91f089f7803e1b7a692baf0c689ce491a0000000000000000000000001cbd7f3c6f51bd1bb20ad13eb4ae2dab39b49050000000000000000000000000ff0777f5412dbe89ec398816c3915b40c27dbd81000000000000000000000000946fefe407283e9dd00ac8d00a2829a694693e22000000000000000000000000572ba86d37600ebde4a437bfb456894a8dc56176000000000000000000000000409f66331a0d5d53df7dc8b6d75159cba7dc1e040000000000000000000000005aa01e6c2efe08844927d05c6d2ae0f61a2e2ea9000000000000000000000000fc6c3e8a64fb250c1d7019c003e6ee8c13bac8500000000000000000000000007f546d7563645c622cf0fca99bb8a7c785968dd40000000000000000000000009c7e26a65a7d6e59e041115b373906fdc65bcb0c000000000000000000000000799400e2d21af84b1a0f8569cf23e89d75828b18000000000000000000000000eeb4a68edcaab3a392389ead5b51a54acb843cb50000000000000000000000008ed68b7368c182686be51dbbba9410e629079b77000000000000000000000000b62b934448917e0ca6a91d9b6fc63a0fd13151c2000000000000000000000000a17b76cc0b2d1b64a42d8e8c503773cedd361dd0000000000000000000000000ad3f070c46a8699ebd31cac24cbba7b1ffa72456000000000000000000000000a544dc85c67964bb6ce10cc281fc3228f9fa4eda000000000000000000000000b63e2759d473c85610906db0e2c8359850b03b7000000000000000000000000030bc82c05da98599c705d89e04bf718f716eb52c0000000000000000000000008e490c166bd821a49a2b1983f5d632d9ad1bc20b00000000000000000000000078c6d24ccd5aadcece9ba4055ce82bd85d713007000000000000000000000000e81c2cb8e7bdf0f36829c25981b6b78c0f794bc50000000000000000000000003c73973aec34d7c596251b68fb26d3a8f33205d200000000000000000000000026ccf273a1f5eae3b7fbf30c9db7a551c6a44864000000000000000000000000cd570093780c1f271bfec54e40df03a652732e760000000000000000000000007c5625b3104c6cf224a4b522c37eeeb3092e1cf0000000000000000000000000c1f0b8d8cf6f5913a8f63d0ac9ef4d734791b32a000000000000000000000000290633e9d8bd4550a3402f45014845ac0fdbd470000000000000000000000000d7d428cdccdc1b569c7bf95538e0dec20bb44ba4000000000000000000000000dc45c3059edbacc0e495daf59390b5a617fb3cb6000000000000000000000000de7e3e355ce8162a43ea922df5a0a300970c4d08000000000000000000000000b67fb947e0c12eaa32d79c165ce60a57712a1dd5000000000000000000000000d0423e62d0f835b02c6902be5d2d22544c51544800000000000000000000000000000000000000000000000000000000000000ea00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000002f0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000001300000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : _lionadeContract (address): 0x764E3596E4B99525fBB415983904Aa1f69387427
Arg [1] : _addresses (address[]): 0x1D02909Ce8115570135DA8391b21df493Ecbaa19,0x715bCf849E9612F69a8aE75db25a7CFF387aCc61,0x70aBE91f46009C7c3C062Dc35B25F7fC29a5e2aA,0x789249F44590C2E809Bd8ee06370D189Cc1C8A03,0xE10A5479Fa63EBA70b54Dff6FA26ae93A6c250E6,0x206A716CD6500E3315c164F22Ad660E4E5adB6c6,0x18F936f419ba4E03329159e45Fccf787bF293290,0x03A909eE4B6d8d410fF9983770A0ca3d84F87827,0x634Fff01FEdb195E913F8B82cF8F5E96C11f4Aa4,0xeC6f735E3284b2d7f7Ee34E429242790d38f1e51,0x4e701ab1fe9bc53E9fF538C16479d272aA0bAF32,0x56c2aA7E0F8918C2E81d9A4DadF2b4f8b62A1687,0x8A4bA4B018bF0F843219Bc46404f6B9bB035cF97,0xCD3BE77D3287900f0835CA5F4450aCFa1ff79134,0x20Cd63d1886fB8c89cB358b537365c161Ea3c2c3,0x1E68729477b169b8e0B25e64A3F1545D4d20021d,0x785423440d5B4D799df9f0c439921801d881f191,0x09c4E72D7C1D208B05709d5f3F411347c6FDD5bf,0x0f7255c6f5d72f670F37b642f56F425A9E40740b,0x3c4E47b1be41100B8FD839334Fe840469c722aB9,0x7C987C415671D213E8F81100835b6Be82953B968,0x3dA7D11dB053CF797e9db587f0b130993DEf2ead,0x2190195093D5229e513C53cf54b1F41BC691EF50,0x9f81bB2c894Ec9358CC25d937A2A50C70664B860,0x6E47a768206673169eC07544544e37749DFA8B0D,0x7a270111fEb64180b5dfC74FB536889f2Fd70091,0x24af492E982Df6692473b383d24CD5878B130c8D,0xC004dcBa87C2BAC561B312880645Bd37591a241c,0xA442540F7365cCd43848C4B25576706A95fd3559,0x1444FedEA6cD0Fd7c78fB2d0CAf803F486B86cBE,0x947CFf0068d16fadE45208BBc3137c1FC1F905A5,0x6E4efC631BF2D85fa978544813280D2988a5d2Ee,0xcc9D3DD3F433De6c14E8881B13D4BcfE1A3E59f5,0xf385d707f91293eEF7195Ae26EC752838619f73c,0x40Dc541924d4529B5Bb5Bb668B802d610FCC8ADc,0x6C1aE7447928271145D740745ae3c0F598387656,0x77A4741b9949957C380be1eF4F3C74b16c0f9cc0,0x315014d50459D218D3294a888897Ca12B6ce694b,0x5F71E69487B30c36D856e8A4bE874D1C1841F01b,0x10BBAd85b0d79F279EDBb10b3DB5444C2E222C80,0x0c93F7e8a1bF0B865f605E2f2522BB5136613f05,0xeCedfe638f467D4b7429f2d945b2b68bc8bdEEd7,0x17383B85Ff7bC7F06F339984a13365Cb5f1CBAc0,0xceB15608171581bF456De5ebA152740b8dF72EBa,0x4A3024Cd2736287752B65545c835aF153b15cDb3,0x25e0cE7cF653AE768A5B70d8d46d2745dFC98366,0x9139142a40c48bfeB5c53e250B73f0aB4d69Ec0C,0xAF745d70F2a9A7d4b8554C99e085535c85278c80,0x3b2D1D962cDD7cE0dbCAde2A65De0912faf909DA,0x3711EEE7dC43A7CD2E8DE94Fa6F707495BC47c50,0x597FDEf2a75C3887F38cD6ccDcf1C9e68bF8FcA8,0x70ceA7A5B6DaB49af0D71ed1176C7E40D5dc05a9,0x5f626416A4a62B1932aC90498871E63E752dD1a8,0xC37DC5B1F5462e6Af48c8aeb7c56ea926bdc723D,0x1Ed8093E27Db0c6aED7e628c157715c10665e906,0xBCac39b7D41C92ee746AEfA2eA195Cb57cba5Ab9,0x7ad1c4737c79AC9Cf6fB3581B725a0139fe3F929,0x06D143b42A3b314ECe47b09e393e1713EF4f6E5c,0x5a8cff947c3EEc654eB96f4614374854A985B8ff,0x7a3268611Cc569025Fe0FdECf4660f25df7F8a74,0xD44acfbd49af9a3BCBfA9505fE8F8b0C5A5FA873,0xBa771d99A792151Bff0CB6032F85f94A883C39D7,0xc7e5ba0C7a71CdC297090Fe95388548362daA0b8,0x8244465045c2e6a12813696bd1ba3FD198412E36,0x4Be7cCE4a8781382F17b04Be7aCa5E9D1b4AaD2d,0xC8694c7fD004bbdb8554C88e2Ce54E71f464da0f,0x23331268398fe4feE365D25723444Bfe2658ce12,0x141e3822C900b0582EAFa4CBf94Da13706a0bE78,0xdadc55B8AB58AE10AC3c5e8B2d759ae6C41F0dEf,0x85E87aeb35dC8E6CEfe09729d9586B222f1Ee005,0xb4024Efe4c5FCCee804905b4904b40e5d19e6B7e,0xBA6719e33977D8d0f7A1A28F02aF99BEAfFA7985,0xD44d25b80CE176E2Be4D389B2FDd0fd066318F35,0x7d02B87B5f66113c22872bafE34B5Aa858795d65,0xe360FF0e1dc3bd26DD6057CA2A589720d514988E,0x523ebe1917385109C003BA0A617Cd0FC3e4bE864,0xBecD56fEe44dEBc76749Ad182881D169E17Ae0f9,0xf935C2b9a7206eeCd1C86d1bfa50fb5bA6FD2536,0x2A9961aA2B35A992026304A7B92Fba073a85eE91,0x2CE55667462e85B5D7A7a28BFaF5772199DcB666,0x3bE77eFCcDA5b6E728eF8A7467aDD8F7d0E74cF5,0x72689911A038941693C5ae52BA2Cb76244d0e40b,0x4495EEF8161621aC8B9Cf734F68505C4998E3616,0xD6d27C78BE6EE9D9ffCAB3846FB50025BB06891e,0x03082cB78376c275393e1eFbf8Ade4DdC658D5AC,0xf71032876C7fb13c81e9ca096eC8F21afa6A21D1,0x4C60CE0De0dffa44621CE8E9Ed9E94d6303f3BbF,0x8B99A15305cBb728461eFf6cd7B7584AeD42F11F,0x3e675970c5db1fe34fd9466811f322996D4E6d8d,0xC0421899db0572b0F5143595cB198b1A8620fB90,0x42139ECB38bf21070DAebD0ca7913A001D9f5650,0xc9B18A89b015Ff53c531F258028F0E0d872BadAB,0x5F0Fa985de985f7674F4E6fd53661fB70FB2112E,0x58d64598B29441297aD93611E91A71836Ff517Ed,0xe5259C5b1535d96F6AAFCA55F8d8A69AB7464C7d,0xC3e821f2fb28435330783c5b72b875163D386b15,0x4f7cC18927B0B973fA11E8861e9A9beEAb7F4E65,0xf7Da642039568a2fA98D9EF02D388D9F8e286F75,0xa5016D2C1A007D1bd18667d788ab2A1f23d2af46,0xf211ba25A6584cDE4469789bDD671f8FC57EFb6e,0x61B879393817Fc292452df3606E0056a25CDAED2,0xd87884250b9927509B7D36D02b9d102be61903b3,0x782703274DBa50573Ff7233f7F5bc5896F0e4c83,0xB96d3299e3dfB357599668e68183d7E7eDF17f67,0x664D05E8BbBcdAe57b022681b125218D2E9Cef11,0x21c473a42c5FF5264f20924C074F470132dF88E9,0x628E8030Fc72C7ae9bd1A009ACEE04e690901023,0x5c5C7f55F6A4Bd3D4A42B878c9DFcbBE67F95743,0x8bF79BAbf23256874BD04621D0aD2934DcdDB443,0x230CE5822Fa92FCED8d894DEDe262932E9D61774,0xD064f9f7d9D307F92098c985eF75Bb34E4ee6708,0xb0d2f7319cf769cC3CfB73C73BAF64DAc82016B0,0x9d4979cD1861a73c62a6DCAF698f7b812318cf29,0x116BE73b5c8a0eCF72f3B2A0Cc7E1bcD0e5287Ba,0xc7d8B51Fd379946fe8089f7698d6AE1Ec75f59e4,0xC1753A280ADc4EC35Aa9FA299D8f3eB722b4cF47,0x5F33799eF96B20594e05BC58F26C289b49902839,0x84F2c998cb6c5055B1DBDc3aCd52710cfd0FCC25,0xC948AC8E38a552EE6f73ce4198e544280eeBF0eE,0xEfA50D8a2725cD4d37767065B23df239DaD41C46,0xb5Bb09EcaEcb7fCA6C837aB706Ce321B3A3dd949,0x92dE4f25753a4ee6690461E64dD839F68c2B0447,0xFEE57Ad345688607bfa946F6a9D68b952661ae7d,0xD8cfee883012941c548015F3fa8767C96985C074,0x304b739eBf7ccd2beD1650cd495a91c3D4ef0286,0xc34eA8EDC1159524Ac98A1BfE12cd4e31772E8b9,0x99b9E273dBB3842D967B2115650A7B32ffbD8915,0xf5d2539690562f9CB7cC228422500BcaA7D7b981,0xeED301b1E3c9E9F09728fFd261A806c42207b44E,0x871Cef1953c6F66d67B9c539A597F8d380a90897,0xaf0aAF2f53802E69c6D4C4F32323662f64cCD33E,0xF669BBD49681f2561d75C6B58d7Cc6E5f04889C3,0xB8aEF48f5eB4D442dBAa2ff4a5ff6Eb304B15493,0x57f016d7f5A400B70055230f5E956Dc3aF93A424,0x59A58f0f2002f2F3231799B2B929dc6e1950b647,0x040278BE662CdDdFdB17B04DF4B4C7dc857c6B7a,0x26Bc82516f6f05FDB9D422b43Fb441363397C156,0x86F05a9eF008AADC1ccaECF73ac9f2e22fe03987,0xC1b207FAA6aB72F14Ed407f3Db7D98D559fd7046,0xAEDf586246957e5417Ff23fBf61cd338d1b5e7e9,0xa29efBe892e9c76fD41F3848f811dB0BF0793DDe,0x8E68CF584f1057ded1D673003E0d1E8AEFb1b12c,0x0Dd11C2a71ca194F7bcfcac806988b580Eb3ba8A,0x4fa9A4979cb6CF683F77412160D85f555de7A6be,0x559826b989D0e9ABd9BBfdFcB75f57c1D16a3ebE,0x5e71DA5e8e3Df9f2eC6AD6Ec73893Fa04de7b3F6,0xa9A4a3a03514e58CD59A13Bb54230d588Ff58F62,0x2E0a86c23066134B7ba0079f0419D00852048Df1,0x1CA360ff207a34372f66C588497911baC1f488Fd,0x14fD36DCd9de887fec7cCa981C2296A23b79beE0,0x777C29cD351111F4bdB394Bf1530a7510fA2F46a,0x9a60c087A268D5b70a4711972cE990705f645BD8,0xc5790e43bCf59CEbDe21C2ABcF3cd587371697c4,0xeB77D696055F5DD0Bd30E4adf3A15Ff5dC4ad4D7,0x5664bcf74F5D4040A49802aE4ca7848BD4838B28,0xD56cB5F700f378152F2C116cC7710947609771f0,0xa3f55C32a40160569ACf4a7A2AAbaC830F37fF2d,0xB16c9B933ec5FbB7888E50faFEeE62169E70B894,0xCE337eC901A6C31C6b41232e1CB0b943E4811FB7,0xdB5C6e2196Dd0c636C5DE83980cF43fe55f65d97,0x2EE886B33c322b3fd8726D6E5B3E0879A28B0D9E,0xC2B19CAEc5cfB90C215765fe70Dca9d0088CD44d,0x2B6733fB161A3DBCB869700F697FaA54d055A702,0xCf5431a0919a5294b2CB813A4fCF6b1712E1D5e1,0x0B84AB28eAB48Db8D9a8Fb62115336A821C71E8A,0xF2c4DCDC031A4A2722d340ab14ee7FB4F05D1e63,0xffb687D37721532994663B8e55609854b3d6AE89,0x118ad9E93ACCBC52772B94AB3Db2256EAb56B71F,0xEDC0f30D965476921359c055821411fC3C3f3e75,0x213106b72a0F05AcA94e764803242A27aBE955c6,0xAD3b696cF4EC30bB57FbA90E887F7CB15d033d8F,0x525B81ba93fD8dBbDf7aE439c6726E32a1df119B,0xF8A8Ef9429a0B9BB886aE83ffaDECfAed2fe11cd,0x09d520c793dd698bd910984adB4c4718bb20bEdA,0x0Dd64fbA327e14c404a70c4b4111F495FDD84AcB,0x3c8C92e442677f9CF043eE404DfC55eED30a0000,0x406f7c2cAaF82Fb67D60108ED9cB76399Ef4FC9b,0x3e49B455221B6A9Fd22Aa7310c06797042C880c7,0xe808A1474cc9Ab087b93Da9A909D6e9b028611A7,0xaF4a1EEFcB37a0D159d3A7745163261b1Ea90896,0x94E581171C04E9774257A85624F5849e647badF6,0xBD85d42f8f78DF7d332AC14d49b24bDec4A1Ba45,0xa2A19A9846111f38bb548232cbd9649a5F59E489,0xAaC4548a187Ab30269a64BbF16116D453A784143,0x2BcC3e54B12de0A1c1109b69b190993466f90151,0xB8630C44D6AE7D5394384854d84d42CC74AB12eE,0x7C5745F55e2b7F7397d4E9Ce514B643b08540F5F,0x8e96141e044eF562f12d888AB7D339A0d763f75b,0xE8228a7D86AE5B94d656eCec560C7B560AF7BF08,0x7F2a1ada49bB63Ff1B8F8f28a310c2D59c53Ee41,0x155b74d878EeB12cD2E09Bf08c33cd0adA3Ba08A,0xBC4cD122195A489f20c362cDA9733D2645924146,0x4600Df0a2ee713b30e8D950877813F89BA53B369,0xdB75d14117e7802E0596baF2C92b90c0F0Ab1aa5,0x59Db27a34980b740D00d90120276D61B0A7e0fbc,0x48029DF6CA91B99793F8F084b9695F6A1309e589,0x7a600C045eF72CE5483f7E76d4Fe5bEfFCdEE6aC,0x955679D217D2C0ADB9c34Aa09fC1566443177Bdd,0x2E6D4fc5837b315Da0E4b66D1891589a77d3AC95,0xE5Ed87054CB0664aC2AE312A7315864b31125A63,0x39301c28137F44827202902fb414e4cA778f921d,0x99058BC91f089f7803e1B7a692Baf0C689cE491A,0x1cBD7f3c6F51BD1BB20aD13eb4aE2DAB39B49050,0xFF0777F5412dbe89Ec398816c3915B40c27DBD81,0x946fEFe407283E9dD00AC8d00a2829a694693e22,0x572bA86D37600eBDE4a437Bfb456894a8Dc56176,0x409f66331a0d5D53df7dc8b6D75159CBA7Dc1e04,0x5aa01E6C2Efe08844927d05C6d2AE0f61A2E2eA9,0xfc6C3e8a64Fb250C1d7019C003E6ee8C13BaC850,0x7F546D7563645C622CF0FCA99bb8a7c785968dD4,0x9c7e26a65A7D6E59e041115B373906fdC65BCb0c,0x799400e2d21Af84b1a0f8569cF23e89d75828b18,0xEeb4A68edCaaB3A392389Ead5B51a54Acb843CB5,0x8Ed68B7368C182686be51DbBBA9410e629079b77,0xb62b934448917e0CA6a91d9B6fC63A0fd13151c2,0xA17b76Cc0b2D1B64a42D8e8c503773Cedd361dd0,0xaD3F070C46A8699eBD31cAc24CBBa7B1FFa72456,0xA544Dc85c67964Bb6cE10cc281FC3228f9fA4eDa,0xB63E2759d473c85610906DB0e2C8359850b03B70,0x30BC82C05DA98599C705d89e04BF718F716EB52c,0x8E490C166Bd821a49a2B1983F5D632d9Ad1BC20B,0x78C6D24cCd5aADceCe9Ba4055Ce82Bd85d713007,0xE81c2Cb8e7BdF0f36829C25981b6b78c0F794bc5,0x3c73973AEC34D7c596251B68fb26d3a8F33205d2,0x26cCf273a1F5eAE3b7FbF30c9DB7a551C6A44864,0xcD570093780C1f271bfEC54e40dF03A652732E76,0x7c5625b3104C6Cf224A4b522c37eEeb3092E1CF0,0xc1F0B8D8cF6f5913A8f63d0AC9eF4d734791B32a,0x290633E9D8Bd4550A3402F45014845Ac0FdBD470,0xD7d428cdcCDc1B569C7bf95538E0DEc20bB44ba4,0xDc45c3059EDBaCc0e495DaF59390B5A617fB3cB6,0xDe7e3e355CE8162a43ea922Df5a0A300970C4D08,0xB67fB947E0c12eaA32D79c165ce60A57712A1DD5,0xd0423E62d0F835b02C6902be5d2D22544c515448
Arg [2] : _amounts (uint256[]): 24,4,5,3,9,14,6,5,47,5,7,2,1,12,1,5,3,24,18,3,3,3,2,6,3,1,4,5,2,5,1,2,22,1,16,2,1,2,6,5,6,3,12,1,3,19,6,6,4,1,1,1,4,4,2,2,9,4,1,20,17,4,1,1,2,3,1,4,3,2,3,3,3,1,3,11,6,8,2,7,2,3,1,1,3,3,2,3,2,3,2,2,3,1,1,2,1,3,2,3,1,6,1,3,5,1,3,1,2,1,1,2,1,1,6,5,2,2,1,1,2,1,1,1,3,3,1,8,3,3,1,1,5,2,2,1,4,3,1,1,1,2,3,1,2,1,1,1,1,1,1,3,1,3,5,1,1,1,1,1,1,3,1,4,2,1,1,1,1,1,1,2,1,1,3,1,1,3,1,1,1,3,1,2,1,1,1,2,1,1,1,1,1,1,1,2,4,1,1,1,1,1,1,1,1,3,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1
-----Encoded View---------------
473 Constructor Arguments found :
Arg [0] : 000000000000000000000000764e3596e4b99525fbb415983904aa1f69387427
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000001dc0
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000ea
Arg [4] : 0000000000000000000000001d02909ce8115570135da8391b21df493ecbaa19
Arg [5] : 000000000000000000000000715bcf849e9612f69a8ae75db25a7cff387acc61
Arg [6] : 00000000000000000000000070abe91f46009c7c3c062dc35b25f7fc29a5e2aa
Arg [7] : 000000000000000000000000789249f44590c2e809bd8ee06370d189cc1c8a03
Arg [8] : 000000000000000000000000e10a5479fa63eba70b54dff6fa26ae93a6c250e6
Arg [9] : 000000000000000000000000206a716cd6500e3315c164f22ad660e4e5adb6c6
Arg [10] : 00000000000000000000000018f936f419ba4e03329159e45fccf787bf293290
Arg [11] : 00000000000000000000000003a909ee4b6d8d410ff9983770a0ca3d84f87827
Arg [12] : 000000000000000000000000634fff01fedb195e913f8b82cf8f5e96c11f4aa4
Arg [13] : 000000000000000000000000ec6f735e3284b2d7f7ee34e429242790d38f1e51
Arg [14] : 0000000000000000000000004e701ab1fe9bc53e9ff538c16479d272aa0baf32
Arg [15] : 00000000000000000000000056c2aa7e0f8918c2e81d9a4dadf2b4f8b62a1687
Arg [16] : 0000000000000000000000008a4ba4b018bf0f843219bc46404f6b9bb035cf97
Arg [17] : 000000000000000000000000cd3be77d3287900f0835ca5f4450acfa1ff79134
Arg [18] : 00000000000000000000000020cd63d1886fb8c89cb358b537365c161ea3c2c3
Arg [19] : 0000000000000000000000001e68729477b169b8e0b25e64a3f1545d4d20021d
Arg [20] : 000000000000000000000000785423440d5b4d799df9f0c439921801d881f191
Arg [21] : 00000000000000000000000009c4e72d7c1d208b05709d5f3f411347c6fdd5bf
Arg [22] : 0000000000000000000000000f7255c6f5d72f670f37b642f56f425a9e40740b
Arg [23] : 0000000000000000000000003c4e47b1be41100b8fd839334fe840469c722ab9
Arg [24] : 0000000000000000000000007c987c415671d213e8f81100835b6be82953b968
Arg [25] : 0000000000000000000000003da7d11db053cf797e9db587f0b130993def2ead
Arg [26] : 0000000000000000000000002190195093d5229e513c53cf54b1f41bc691ef50
Arg [27] : 0000000000000000000000009f81bb2c894ec9358cc25d937a2a50c70664b860
Arg [28] : 0000000000000000000000006e47a768206673169ec07544544e37749dfa8b0d
Arg [29] : 0000000000000000000000007a270111feb64180b5dfc74fb536889f2fd70091
Arg [30] : 00000000000000000000000024af492e982df6692473b383d24cd5878b130c8d
Arg [31] : 000000000000000000000000c004dcba87c2bac561b312880645bd37591a241c
Arg [32] : 000000000000000000000000a442540f7365ccd43848c4b25576706a95fd3559
Arg [33] : 0000000000000000000000001444fedea6cd0fd7c78fb2d0caf803f486b86cbe
Arg [34] : 000000000000000000000000947cff0068d16fade45208bbc3137c1fc1f905a5
Arg [35] : 0000000000000000000000006e4efc631bf2d85fa978544813280d2988a5d2ee
Arg [36] : 000000000000000000000000cc9d3dd3f433de6c14e8881b13d4bcfe1a3e59f5
Arg [37] : 000000000000000000000000f385d707f91293eef7195ae26ec752838619f73c
Arg [38] : 00000000000000000000000040dc541924d4529b5bb5bb668b802d610fcc8adc
Arg [39] : 0000000000000000000000006c1ae7447928271145d740745ae3c0f598387656
Arg [40] : 00000000000000000000000077a4741b9949957c380be1ef4f3c74b16c0f9cc0
Arg [41] : 000000000000000000000000315014d50459d218d3294a888897ca12b6ce694b
Arg [42] : 0000000000000000000000005f71e69487b30c36d856e8a4be874d1c1841f01b
Arg [43] : 00000000000000000000000010bbad85b0d79f279edbb10b3db5444c2e222c80
Arg [44] : 0000000000000000000000000c93f7e8a1bf0b865f605e2f2522bb5136613f05
Arg [45] : 000000000000000000000000ecedfe638f467d4b7429f2d945b2b68bc8bdeed7
Arg [46] : 00000000000000000000000017383b85ff7bc7f06f339984a13365cb5f1cbac0
Arg [47] : 000000000000000000000000ceb15608171581bf456de5eba152740b8df72eba
Arg [48] : 0000000000000000000000004a3024cd2736287752b65545c835af153b15cdb3
Arg [49] : 00000000000000000000000025e0ce7cf653ae768a5b70d8d46d2745dfc98366
Arg [50] : 0000000000000000000000009139142a40c48bfeb5c53e250b73f0ab4d69ec0c
Arg [51] : 000000000000000000000000af745d70f2a9a7d4b8554c99e085535c85278c80
Arg [52] : 0000000000000000000000003b2d1d962cdd7ce0dbcade2a65de0912faf909da
Arg [53] : 0000000000000000000000003711eee7dc43a7cd2e8de94fa6f707495bc47c50
Arg [54] : 000000000000000000000000597fdef2a75c3887f38cd6ccdcf1c9e68bf8fca8
Arg [55] : 00000000000000000000000070cea7a5b6dab49af0d71ed1176c7e40d5dc05a9
Arg [56] : 0000000000000000000000005f626416a4a62b1932ac90498871e63e752dd1a8
Arg [57] : 000000000000000000000000c37dc5b1f5462e6af48c8aeb7c56ea926bdc723d
Arg [58] : 0000000000000000000000001ed8093e27db0c6aed7e628c157715c10665e906
Arg [59] : 000000000000000000000000bcac39b7d41c92ee746aefa2ea195cb57cba5ab9
Arg [60] : 0000000000000000000000007ad1c4737c79ac9cf6fb3581b725a0139fe3f929
Arg [61] : 00000000000000000000000006d143b42a3b314ece47b09e393e1713ef4f6e5c
Arg [62] : 0000000000000000000000005a8cff947c3eec654eb96f4614374854a985b8ff
Arg [63] : 0000000000000000000000007a3268611cc569025fe0fdecf4660f25df7f8a74
Arg [64] : 000000000000000000000000d44acfbd49af9a3bcbfa9505fe8f8b0c5a5fa873
Arg [65] : 000000000000000000000000ba771d99a792151bff0cb6032f85f94a883c39d7
Arg [66] : 000000000000000000000000c7e5ba0c7a71cdc297090fe95388548362daa0b8
Arg [67] : 0000000000000000000000008244465045c2e6a12813696bd1ba3fd198412e36
Arg [68] : 0000000000000000000000004be7cce4a8781382f17b04be7aca5e9d1b4aad2d
Arg [69] : 000000000000000000000000c8694c7fd004bbdb8554c88e2ce54e71f464da0f
Arg [70] : 00000000000000000000000023331268398fe4fee365d25723444bfe2658ce12
Arg [71] : 000000000000000000000000141e3822c900b0582eafa4cbf94da13706a0be78
Arg [72] : 000000000000000000000000dadc55b8ab58ae10ac3c5e8b2d759ae6c41f0def
Arg [73] : 00000000000000000000000085e87aeb35dc8e6cefe09729d9586b222f1ee005
Arg [74] : 000000000000000000000000b4024efe4c5fccee804905b4904b40e5d19e6b7e
Arg [75] : 000000000000000000000000ba6719e33977d8d0f7a1a28f02af99beaffa7985
Arg [76] : 000000000000000000000000d44d25b80ce176e2be4d389b2fdd0fd066318f35
Arg [77] : 0000000000000000000000007d02b87b5f66113c22872bafe34b5aa858795d65
Arg [78] : 000000000000000000000000e360ff0e1dc3bd26dd6057ca2a589720d514988e
Arg [79] : 000000000000000000000000523ebe1917385109c003ba0a617cd0fc3e4be864
Arg [80] : 000000000000000000000000becd56fee44debc76749ad182881d169e17ae0f9
Arg [81] : 000000000000000000000000f935c2b9a7206eecd1c86d1bfa50fb5ba6fd2536
Arg [82] : 0000000000000000000000002a9961aa2b35a992026304a7b92fba073a85ee91
Arg [83] : 0000000000000000000000002ce55667462e85b5d7a7a28bfaf5772199dcb666
Arg [84] : 0000000000000000000000003be77efccda5b6e728ef8a7467add8f7d0e74cf5
Arg [85] : 00000000000000000000000072689911a038941693c5ae52ba2cb76244d0e40b
Arg [86] : 0000000000000000000000004495eef8161621ac8b9cf734f68505c4998e3616
Arg [87] : 000000000000000000000000d6d27c78be6ee9d9ffcab3846fb50025bb06891e
Arg [88] : 00000000000000000000000003082cb78376c275393e1efbf8ade4ddc658d5ac
Arg [89] : 000000000000000000000000f71032876c7fb13c81e9ca096ec8f21afa6a21d1
Arg [90] : 0000000000000000000000004c60ce0de0dffa44621ce8e9ed9e94d6303f3bbf
Arg [91] : 0000000000000000000000008b99a15305cbb728461eff6cd7b7584aed42f11f
Arg [92] : 0000000000000000000000003e675970c5db1fe34fd9466811f322996d4e6d8d
Arg [93] : 000000000000000000000000c0421899db0572b0f5143595cb198b1a8620fb90
Arg [94] : 00000000000000000000000042139ecb38bf21070daebd0ca7913a001d9f5650
Arg [95] : 000000000000000000000000c9b18a89b015ff53c531f258028f0e0d872badab
Arg [96] : 0000000000000000000000005f0fa985de985f7674f4e6fd53661fb70fb2112e
Arg [97] : 00000000000000000000000058d64598b29441297ad93611e91a71836ff517ed
Arg [98] : 000000000000000000000000e5259c5b1535d96f6aafca55f8d8a69ab7464c7d
Arg [99] : 000000000000000000000000c3e821f2fb28435330783c5b72b875163d386b15
Arg [100] : 0000000000000000000000004f7cc18927b0b973fa11e8861e9a9beeab7f4e65
Arg [101] : 000000000000000000000000f7da642039568a2fa98d9ef02d388d9f8e286f75
Arg [102] : 000000000000000000000000a5016d2c1a007d1bd18667d788ab2a1f23d2af46
Arg [103] : 000000000000000000000000f211ba25a6584cde4469789bdd671f8fc57efb6e
Arg [104] : 00000000000000000000000061b879393817fc292452df3606e0056a25cdaed2
Arg [105] : 000000000000000000000000d87884250b9927509b7d36d02b9d102be61903b3
Arg [106] : 000000000000000000000000782703274dba50573ff7233f7f5bc5896f0e4c83
Arg [107] : 000000000000000000000000b96d3299e3dfb357599668e68183d7e7edf17f67
Arg [108] : 000000000000000000000000664d05e8bbbcdae57b022681b125218d2e9cef11
Arg [109] : 00000000000000000000000021c473a42c5ff5264f20924c074f470132df88e9
Arg [110] : 000000000000000000000000628e8030fc72c7ae9bd1a009acee04e690901023
Arg [111] : 0000000000000000000000005c5c7f55f6a4bd3d4a42b878c9dfcbbe67f95743
Arg [112] : 0000000000000000000000008bf79babf23256874bd04621d0ad2934dcddb443
Arg [113] : 000000000000000000000000230ce5822fa92fced8d894dede262932e9d61774
Arg [114] : 000000000000000000000000d064f9f7d9d307f92098c985ef75bb34e4ee6708
Arg [115] : 000000000000000000000000b0d2f7319cf769cc3cfb73c73baf64dac82016b0
Arg [116] : 0000000000000000000000009d4979cd1861a73c62a6dcaf698f7b812318cf29
Arg [117] : 000000000000000000000000116be73b5c8a0ecf72f3b2a0cc7e1bcd0e5287ba
Arg [118] : 000000000000000000000000c7d8b51fd379946fe8089f7698d6ae1ec75f59e4
Arg [119] : 000000000000000000000000c1753a280adc4ec35aa9fa299d8f3eb722b4cf47
Arg [120] : 0000000000000000000000005f33799ef96b20594e05bc58f26c289b49902839
Arg [121] : 00000000000000000000000084f2c998cb6c5055b1dbdc3acd52710cfd0fcc25
Arg [122] : 000000000000000000000000c948ac8e38a552ee6f73ce4198e544280eebf0ee
Arg [123] : 000000000000000000000000efa50d8a2725cd4d37767065b23df239dad41c46
Arg [124] : 000000000000000000000000b5bb09ecaecb7fca6c837ab706ce321b3a3dd949
Arg [125] : 00000000000000000000000092de4f25753a4ee6690461e64dd839f68c2b0447
Arg [126] : 000000000000000000000000fee57ad345688607bfa946f6a9d68b952661ae7d
Arg [127] : 000000000000000000000000d8cfee883012941c548015f3fa8767c96985c074
Arg [128] : 000000000000000000000000304b739ebf7ccd2bed1650cd495a91c3d4ef0286
Arg [129] : 000000000000000000000000c34ea8edc1159524ac98a1bfe12cd4e31772e8b9
Arg [130] : 00000000000000000000000099b9e273dbb3842d967b2115650a7b32ffbd8915
Arg [131] : 000000000000000000000000f5d2539690562f9cb7cc228422500bcaa7d7b981
Arg [132] : 000000000000000000000000eed301b1e3c9e9f09728ffd261a806c42207b44e
Arg [133] : 000000000000000000000000871cef1953c6f66d67b9c539a597f8d380a90897
Arg [134] : 000000000000000000000000af0aaf2f53802e69c6d4c4f32323662f64ccd33e
Arg [135] : 000000000000000000000000f669bbd49681f2561d75c6b58d7cc6e5f04889c3
Arg [136] : 000000000000000000000000b8aef48f5eb4d442dbaa2ff4a5ff6eb304b15493
Arg [137] : 00000000000000000000000057f016d7f5a400b70055230f5e956dc3af93a424
Arg [138] : 00000000000000000000000059a58f0f2002f2f3231799b2b929dc6e1950b647
Arg [139] : 000000000000000000000000040278be662cdddfdb17b04df4b4c7dc857c6b7a
Arg [140] : 00000000000000000000000026bc82516f6f05fdb9d422b43fb441363397c156
Arg [141] : 00000000000000000000000086f05a9ef008aadc1ccaecf73ac9f2e22fe03987
Arg [142] : 000000000000000000000000c1b207faa6ab72f14ed407f3db7d98d559fd7046
Arg [143] : 000000000000000000000000aedf586246957e5417ff23fbf61cd338d1b5e7e9
Arg [144] : 000000000000000000000000a29efbe892e9c76fd41f3848f811db0bf0793dde
Arg [145] : 0000000000000000000000008e68cf584f1057ded1d673003e0d1e8aefb1b12c
Arg [146] : 0000000000000000000000000dd11c2a71ca194f7bcfcac806988b580eb3ba8a
Arg [147] : 0000000000000000000000004fa9a4979cb6cf683f77412160d85f555de7a6be
Arg [148] : 000000000000000000000000559826b989d0e9abd9bbfdfcb75f57c1d16a3ebe
Arg [149] : 0000000000000000000000005e71da5e8e3df9f2ec6ad6ec73893fa04de7b3f6
Arg [150] : 000000000000000000000000a9a4a3a03514e58cd59a13bb54230d588ff58f62
Arg [151] : 0000000000000000000000002e0a86c23066134b7ba0079f0419d00852048df1
Arg [152] : 0000000000000000000000001ca360ff207a34372f66c588497911bac1f488fd
Arg [153] : 00000000000000000000000014fd36dcd9de887fec7cca981c2296a23b79bee0
Arg [154] : 000000000000000000000000777c29cd351111f4bdb394bf1530a7510fa2f46a
Arg [155] : 0000000000000000000000009a60c087a268d5b70a4711972ce990705f645bd8
Arg [156] : 000000000000000000000000c5790e43bcf59cebde21c2abcf3cd587371697c4
Arg [157] : 000000000000000000000000eb77d696055f5dd0bd30e4adf3a15ff5dc4ad4d7
Arg [158] : 0000000000000000000000005664bcf74f5d4040a49802ae4ca7848bd4838b28
Arg [159] : 000000000000000000000000d56cb5f700f378152f2c116cc7710947609771f0
Arg [160] : 000000000000000000000000a3f55c32a40160569acf4a7a2aabac830f37ff2d
Arg [161] : 000000000000000000000000b16c9b933ec5fbb7888e50fafeee62169e70b894
Arg [162] : 000000000000000000000000ce337ec901a6c31c6b41232e1cb0b943e4811fb7
Arg [163] : 000000000000000000000000db5c6e2196dd0c636c5de83980cf43fe55f65d97
Arg [164] : 0000000000000000000000002ee886b33c322b3fd8726d6e5b3e0879a28b0d9e
Arg [165] : 000000000000000000000000c2b19caec5cfb90c215765fe70dca9d0088cd44d
Arg [166] : 0000000000000000000000002b6733fb161a3dbcb869700f697faa54d055a702
Arg [167] : 000000000000000000000000cf5431a0919a5294b2cb813a4fcf6b1712e1d5e1
Arg [168] : 0000000000000000000000000b84ab28eab48db8d9a8fb62115336a821c71e8a
Arg [169] : 000000000000000000000000f2c4dcdc031a4a2722d340ab14ee7fb4f05d1e63
Arg [170] : 000000000000000000000000ffb687d37721532994663b8e55609854b3d6ae89
Arg [171] : 000000000000000000000000118ad9e93accbc52772b94ab3db2256eab56b71f
Arg [172] : 000000000000000000000000edc0f30d965476921359c055821411fc3c3f3e75
Arg [173] : 000000000000000000000000213106b72a0f05aca94e764803242a27abe955c6
Arg [174] : 000000000000000000000000ad3b696cf4ec30bb57fba90e887f7cb15d033d8f
Arg [175] : 000000000000000000000000525b81ba93fd8dbbdf7ae439c6726e32a1df119b
Arg [176] : 000000000000000000000000f8a8ef9429a0b9bb886ae83ffadecfaed2fe11cd
Arg [177] : 00000000000000000000000009d520c793dd698bd910984adb4c4718bb20beda
Arg [178] : 0000000000000000000000000dd64fba327e14c404a70c4b4111f495fdd84acb
Arg [179] : 0000000000000000000000003c8c92e442677f9cf043ee404dfc55eed30a0000
Arg [180] : 000000000000000000000000406f7c2caaf82fb67d60108ed9cb76399ef4fc9b
Arg [181] : 0000000000000000000000003e49b455221b6a9fd22aa7310c06797042c880c7
Arg [182] : 000000000000000000000000e808a1474cc9ab087b93da9a909d6e9b028611a7
Arg [183] : 000000000000000000000000af4a1eefcb37a0d159d3a7745163261b1ea90896
Arg [184] : 00000000000000000000000094e581171c04e9774257a85624f5849e647badf6
Arg [185] : 000000000000000000000000bd85d42f8f78df7d332ac14d49b24bdec4a1ba45
Arg [186] : 000000000000000000000000a2a19a9846111f38bb548232cbd9649a5f59e489
Arg [187] : 000000000000000000000000aac4548a187ab30269a64bbf16116d453a784143
Arg [188] : 0000000000000000000000002bcc3e54b12de0a1c1109b69b190993466f90151
Arg [189] : 000000000000000000000000b8630c44d6ae7d5394384854d84d42cc74ab12ee
Arg [190] : 0000000000000000000000007c5745f55e2b7f7397d4e9ce514b643b08540f5f
Arg [191] : 0000000000000000000000008e96141e044ef562f12d888ab7d339a0d763f75b
Arg [192] : 000000000000000000000000e8228a7d86ae5b94d656ecec560c7b560af7bf08
Arg [193] : 0000000000000000000000007f2a1ada49bb63ff1b8f8f28a310c2d59c53ee41
Arg [194] : 000000000000000000000000155b74d878eeb12cd2e09bf08c33cd0ada3ba08a
Arg [195] : 000000000000000000000000bc4cd122195a489f20c362cda9733d2645924146
Arg [196] : 0000000000000000000000004600df0a2ee713b30e8d950877813f89ba53b369
Arg [197] : 000000000000000000000000db75d14117e7802e0596baf2c92b90c0f0ab1aa5
Arg [198] : 00000000000000000000000059db27a34980b740d00d90120276d61b0a7e0fbc
Arg [199] : 00000000000000000000000048029df6ca91b99793f8f084b9695f6a1309e589
Arg [200] : 0000000000000000000000007a600c045ef72ce5483f7e76d4fe5beffcdee6ac
Arg [201] : 000000000000000000000000955679d217d2c0adb9c34aa09fc1566443177bdd
Arg [202] : 0000000000000000000000002e6d4fc5837b315da0e4b66d1891589a77d3ac95
Arg [203] : 000000000000000000000000e5ed87054cb0664ac2ae312a7315864b31125a63
Arg [204] : 00000000000000000000000039301c28137f44827202902fb414e4ca778f921d
Arg [205] : 00000000000000000000000099058bc91f089f7803e1b7a692baf0c689ce491a
Arg [206] : 0000000000000000000000001cbd7f3c6f51bd1bb20ad13eb4ae2dab39b49050
Arg [207] : 000000000000000000000000ff0777f5412dbe89ec398816c3915b40c27dbd81
Arg [208] : 000000000000000000000000946fefe407283e9dd00ac8d00a2829a694693e22
Arg [209] : 000000000000000000000000572ba86d37600ebde4a437bfb456894a8dc56176
Arg [210] : 000000000000000000000000409f66331a0d5d53df7dc8b6d75159cba7dc1e04
Arg [211] : 0000000000000000000000005aa01e6c2efe08844927d05c6d2ae0f61a2e2ea9
Arg [212] : 000000000000000000000000fc6c3e8a64fb250c1d7019c003e6ee8c13bac850
Arg [213] : 0000000000000000000000007f546d7563645c622cf0fca99bb8a7c785968dd4
Arg [214] : 0000000000000000000000009c7e26a65a7d6e59e041115b373906fdc65bcb0c
Arg [215] : 000000000000000000000000799400e2d21af84b1a0f8569cf23e89d75828b18
Arg [216] : 000000000000000000000000eeb4a68edcaab3a392389ead5b51a54acb843cb5
Arg [217] : 0000000000000000000000008ed68b7368c182686be51dbbba9410e629079b77
Arg [218] : 000000000000000000000000b62b934448917e0ca6a91d9b6fc63a0fd13151c2
Arg [219] : 000000000000000000000000a17b76cc0b2d1b64a42d8e8c503773cedd361dd0
Arg [220] : 000000000000000000000000ad3f070c46a8699ebd31cac24cbba7b1ffa72456
Arg [221] : 000000000000000000000000a544dc85c67964bb6ce10cc281fc3228f9fa4eda
Arg [222] : 000000000000000000000000b63e2759d473c85610906db0e2c8359850b03b70
Arg [223] : 00000000000000000000000030bc82c05da98599c705d89e04bf718f716eb52c
Arg [224] : 0000000000000000000000008e490c166bd821a49a2b1983f5d632d9ad1bc20b
Arg [225] : 00000000000000000000000078c6d24ccd5aadcece9ba4055ce82bd85d713007
Arg [226] : 000000000000000000000000e81c2cb8e7bdf0f36829c25981b6b78c0f794bc5
Arg [227] : 0000000000000000000000003c73973aec34d7c596251b68fb26d3a8f33205d2
Arg [228] : 00000000000000000000000026ccf273a1f5eae3b7fbf30c9db7a551c6a44864
Arg [229] : 000000000000000000000000cd570093780c1f271bfec54e40df03a652732e76
Arg [230] : 0000000000000000000000007c5625b3104c6cf224a4b522c37eeeb3092e1cf0
Arg [231] : 000000000000000000000000c1f0b8d8cf6f5913a8f63d0ac9ef4d734791b32a
Arg [232] : 000000000000000000000000290633e9d8bd4550a3402f45014845ac0fdbd470
Arg [233] : 000000000000000000000000d7d428cdccdc1b569c7bf95538e0dec20bb44ba4
Arg [234] : 000000000000000000000000dc45c3059edbacc0e495daf59390b5a617fb3cb6
Arg [235] : 000000000000000000000000de7e3e355ce8162a43ea922df5a0a300970c4d08
Arg [236] : 000000000000000000000000b67fb947e0c12eaa32d79c165ce60a57712a1dd5
Arg [237] : 000000000000000000000000d0423e62d0f835b02c6902be5d2d22544c515448
Arg [238] : 00000000000000000000000000000000000000000000000000000000000000ea
Arg [239] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [240] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [241] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [242] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [243] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [244] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [245] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [246] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [247] : 000000000000000000000000000000000000000000000000000000000000002f
Arg [248] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [249] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [250] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [251] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [252] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [253] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [254] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [255] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [256] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [257] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [258] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [259] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [260] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [261] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [262] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [263] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [264] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [265] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [266] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [267] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [268] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [269] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [270] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [271] : 0000000000000000000000000000000000000000000000000000000000000016
Arg [272] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [273] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [274] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [275] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [276] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [277] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [278] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [279] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [280] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [281] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [282] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [283] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [284] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [285] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [286] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [287] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [288] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [289] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [290] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [291] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [292] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [293] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [294] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [295] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [296] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [297] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [298] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [299] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [300] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [301] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [302] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [303] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [304] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [305] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [306] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [307] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [308] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [309] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [310] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [311] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [312] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [313] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [314] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [315] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [316] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [317] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [318] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [319] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [320] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [321] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [322] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [323] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [324] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [325] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [326] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [327] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [328] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [329] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [330] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [331] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [332] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [333] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [334] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [335] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [336] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [337] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [338] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [339] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [340] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [341] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [342] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [343] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [344] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [345] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [346] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [347] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [348] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [349] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [350] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [351] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [352] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [353] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [354] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [355] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [356] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [357] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [358] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [359] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [360] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [361] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [362] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [363] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [364] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [365] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [366] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [367] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [368] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [369] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [370] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [371] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [372] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [373] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [374] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [375] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [376] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [377] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [378] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [379] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [380] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [381] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [382] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [383] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [384] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [385] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [386] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [387] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [388] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [389] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [390] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [391] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [392] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [393] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [394] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [395] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [396] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [397] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [398] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [399] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [400] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [401] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [402] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [403] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [404] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [405] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [406] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [407] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [408] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [409] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [410] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [411] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [412] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [413] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [414] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [415] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [416] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [417] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [418] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [419] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [420] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [421] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [422] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [423] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [424] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [425] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [426] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [427] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [428] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [429] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [430] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [431] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [432] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [433] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [434] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [435] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [436] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [437] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [438] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [439] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [440] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [441] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [442] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [443] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [444] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [445] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [446] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [447] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [448] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [449] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [450] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [451] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [452] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [453] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [454] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [455] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [456] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [457] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [458] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [459] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [460] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [461] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [462] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [463] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [464] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [465] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [466] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [467] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [468] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [469] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [470] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [471] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [472] : 0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode Sourcemap
109549:10773:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;118820:267;;;;;;;;;;-1:-1:-1;118820:267:0;;;;;:::i;:::-;;:::i;:::-;;;611:14:1;;604:22;586:41;;574:2;559:18;118820:267:0;;;;;;;;117871:173;;;;;;;;;;-1:-1:-1;117871:173:0;;;;;:::i;:::-;;:::i;:::-;;59327:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;66076:234::-;;;;;;;;;;-1:-1:-1;66076:234:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2315:55:1;;;2297:74;;2285:2;2270:18;66076:234:0;2151:226:1;119323:250:0;;;;;;:::i;:::-;;:::i;117482:172::-;;;;;;;;;;-1:-1:-1;117482:172:0;;;;;:::i;:::-;;:::i;110944:31::-;;;;;;;;;;-1:-1:-1;110944:31:0;;;;;;;;54968:323;;;;;;;;;;-1:-1:-1;55242:12:0;;55226:13;;:28;-1:-1:-1;;55226:46:0;54968:323;;;3040:25:1;;;3028:2;3013:18;54968:323:0;2894:177:1;116900:139:0;;;;;;;;;;-1:-1:-1;116900:139:0;;;;;:::i;:::-;;:::i;119581:224::-;;;;;;:::i;:::-;;:::i;13495:480::-;;;;;;;;;;-1:-1:-1;13495:480:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3792:55:1;;;3774:74;;3879:2;3864:18;;3857:34;;;;3747:18;13495:480:0;3600:297:1;118099:211:0;;;;;;;;;;;;;:::i;106414:143::-;;;;;;;;;;;;106514:42;106414:143;;119813:232;;;;;;:::i;:::-;;:::i;93680:94::-;;;;;;;;;;-1:-1:-1;93680:94:0;;;;;:::i;:::-;;:::i;110444:32::-;;;;;;;;;;;;;;;;115510:103;;;;;;;;;;-1:-1:-1;115510:103:0;;;;;:::i;:::-;;:::i;110520:36::-;;;;;;;;;;;;;;;;110672:34;;;;;;;;;;;;;;;;111013:30;;;;;;;;;;-1:-1:-1;111013:30:0;;;;;;;;;;;112011:102;;;;;;;;;;-1:-1:-1;112011:102:0;;;;;:::i;:::-;;:::i;98043:526::-;;;;;;;;;;-1:-1:-1;98043:526:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;109984:86::-;;;;;;;;;;-1:-1:-1;109984:86:0;;;;-1:-1:-1;;;;;109984:86:0;;;60783:168;;;;;;;;;;-1:-1:-1;60783:168:0;;;;;:::i;:::-;;:::i;115745:102::-;;;;;;;;;;-1:-1:-1;115745:102:0;;;;;:::i;:::-;;:::i;56152:249::-;;;;;;;;;;-1:-1:-1;56152:249:0;;;;;:::i;:::-;;:::i;8069:103::-;;;;;;;;;;;;;:::i;101983:982::-;;;;;;;;;;-1:-1:-1;101983:982:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;110750:37::-;;;;;;;;;;;;;;;;118450:180;;;;;;;;;;-1:-1:-1;118450:180:0;;;;;:::i;:::-;;:::i;7421:87::-;;;;;;;;;;-1:-1:-1;7494:6:0;;-1:-1:-1;;;;;7494:6:0;7421:87;;116472:86;;;;;;;;;;-1:-1:-1;116472:86:0;;;;;:::i;:::-;;:::i;59503:104::-;;;;;;;;;;;;;:::i;98957:2579::-;;;;;;;;;;-1:-1:-1;98957:2579:0;;;;;:::i;:::-;;:::i;113089:351::-;;;;;;;;;;-1:-1:-1;113089:351:0;;;;;:::i;:::-;;:::i;111094:50::-;;;;;;;;;;-1:-1:-1;111094:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;110597:34;;;;;;;;;;;;;;;;113542:390;;;;;;:::i;:::-;;:::i;119095:220::-;;;;;;;;;;-1:-1:-1;119095:220:0;;;;;:::i;:::-;;:::i;110832:35::-;;;;;;;;;;-1:-1:-1;110832:35:0;;;;-1:-1:-1;;;;;110832:35:0;;;120053:266;;;;;;:::i;:::-;;:::i;113976:128::-;;;;;;;;;;;;;:::i;111795:110::-;;;;;;;;;;-1:-1:-1;111795:110:0;;;;;:::i;:::-;;:::i;97440:444::-;;;;;;;;;;-1:-1:-1;97440:444:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;114793:431::-;;;;;;;;;;-1:-1:-1;114793:431:0;;;;;:::i;:::-;;:::i;115987:150::-;;;;;;;;;;-1:-1:-1;115987:150:0;;;;;:::i;:::-;;:::i;110365:31::-;;;;;;;;;;;;;;;;117159:117;;;;;;;;;;-1:-1:-1;117159:117:0;;;;;:::i;:::-;;:::i;116262:114::-;;;;;;;;;;-1:-1:-1;116262:114:0;;;;;:::i;:::-;;:::i;114234:446::-;;;;;;;;;;-1:-1:-1;114234:446:0;;;;;:::i;:::-;;:::i;:::-;;;;;;12272:4:1;12314:3;12303:9;12299:19;12291:27;;12365:6;12359:13;12352:21;12345:29;12334:9;12327:48;12431:4;12423:6;12419:17;12413:24;12406:4;12395:9;12391:20;12384:54;12494:4;12486:6;12482:17;12476:24;12469:4;12458:9;12454:20;12447:54;12557:4;12549:6;12545:17;12539:24;12532:4;12521:9;12517:20;12510:54;12620:4;12612:6;12608:17;12602:24;12595:4;12584:9;12580:20;12573:54;12683:4;12675:6;12671:17;12665:24;12658:4;12647:9;12643:20;12636:54;12746:4;12738:6;12734:17;12728:24;12721:4;12710:9;12706:20;12699:54;12126:633;;;;;67066:189:0;;;;;;;;;;-1:-1:-1;67066:189:0;;;;;:::i;:::-;-1:-1:-1;;;;;67212:25:0;;;67188:4;67212:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;67066:189;116674:105;;;;;;;;;;-1:-1:-1;116674:105:0;;;;;:::i;:::-;;:::i;8327:238::-;;;;;;;;;;-1:-1:-1;8327:238:0;;;;;:::i;:::-;;:::i;118820:267::-;118949:4;118986:38;119012:11;118986:25;:38::i;:::-;:93;;;;119041:38;119067:11;119041:25;:38::i;:::-;118966:113;118820:267;-1:-1:-1;;118820:267:0:o;117871:173::-;7307:13;:11;:13::i;:::-;117992:44:::1;118011:9;118022:13;117992:18;:44::i;:::-;117871:173:::0;;:::o;59327:100::-;59381:13;59414:5;59407:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59327:100;:::o;66076:234::-;66168:7;66193:16;66201:7;66193;:16::i;:::-;66188:64;;66218:34;;;;;;;;;;;;;;66188:64;-1:-1:-1;66272:24:0;;;;:15;:24;;;;;:30;-1:-1:-1;;;;;66272:30:0;;66076:234::o;119323:250::-;119507:8;108069:30;108090:8;108069:20;:30::i;:::-;119533:32:::1;119547:8;119557:7;119533:13;:32::i;:::-;119323:250:::0;;;:::o;117482:172::-;7307:13;:11;:13::i;:::-;117597:6:::1;:16:::0;;;;117624:9:::1;:22:::0;117482:172::o;116900:139::-;7307:13;:11;:13::i;:::-;116983:15:::1;:48:::0;;-1:-1:-1;;116983:48:0::1;-1:-1:-1::0;;;;;116983:48:0;;;::::1;::::0;;;::::1;::::0;;116900:139::o;119581:224::-;119743:4;-1:-1:-1;;;;;107889:18:0;;107897:10;107889:18;107885:83;;107924:32;107945:10;107924:20;:32::i;:::-;119760:37:::1;119779:4;119785:2;119789:7;119760:18;:37::i;:::-;119581:224:::0;;;;:::o;13495:480::-;13617:7;13675:27;;;:17;:27;;;;;;;;13646:56;;;;;;;;;-1:-1:-1;;;;;13646:56:0;;;;;-1:-1:-1;;;13646:56:0;;;;;;;;;;;;13617:7;;13715:92;;-1:-1:-1;13766:29:0;;;;;;;;;-1:-1:-1;13766:29:0;-1:-1:-1;;;;;13766:29:0;;;;-1:-1:-1;;;13766:29:0;;;;;;;;13715:92;13857:23;;;;13819:21;;14341:5;;13844:36;;13843:71;13844:36;:10;:36;:::i;:::-;13843:71;;;;:::i;:::-;13935:16;;;;;-1:-1:-1;13495:480:0;;-1:-1:-1;;;;13495:480:0:o;118099:211::-;7307:13;:11;:13::i;:::-;118216:8:::1;::::0;:33:::1;::::0;118165:21:::1;::::0;118147:15:::1;::::0;-1:-1:-1;;;;;118216:8:0;;::::1;::::0;118165:21;;118147:15;118216:33;118147:15;118216:33;118165:21;118216:8;:33:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;118197:52;;;118268:7;118260:42;;;::::0;-1:-1:-1;;;118260:42:0;;14713:2:1;118260:42:0::1;::::0;::::1;14695:21:1::0;14752:2;14732:18;;;14725:30;14791:24;14771:18;;;14764:52;14833:18;;118260:42:0::1;;;;;;;;119813:232:::0;119979:4;-1:-1:-1;;;;;107889:18:0;;107897:10;107889:18;107885:83;;107924:32;107945:10;107924:20;:32::i;:::-;119996:41:::1;120019:4;120025:2;120029:7;119996:22;:41::i;93680:94::-:0;93746:20;93752:7;93761:4;93746:5;:20::i;:::-;93680:94;:::o;115510:103::-;7307:13;:11;:13::i;:::-;115581:10:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;115581:24:0;;::::1;::::0;;;::::1;::::0;;115510:103::o;112011:102::-;7307:13;:11;:13::i;:::-;112087:7:::1;:18;112097:8:::0;;112087:7;:18:::1;:::i;98043:526::-:0;98158:23;98244:8;98219:22;98244:8;98311:68;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;98311:68:0;;-1:-1:-1;;98311:68:0;;;;;;;;;;;;98274:105;;98399:9;98394:125;98415:14;98410:1;:19;98394:125;;98471:32;98491:8;;98500:1;98491:11;;;;;;;:::i;:::-;;;;;;;98471:19;:32::i;:::-;98455:10;98466:1;98455:13;;;;;;;;:::i;:::-;;;;;;;;;;:48;98431:3;;98394:125;;;-1:-1:-1;98540:10:0;98043:526;-1:-1:-1;;;;98043:526:0:o;60783:168::-;60871:7;60914:27;60933:7;60914:18;:27::i;115745:102::-;7307:13;:11;:13::i;:::-;115817:9:::1;:22:::0;115745:102::o;56152:249::-;56240:7;-1:-1:-1;;;;;56264:19:0;;56260:60;;56292:28;;;;;;;;;;;;;;56260:60;-1:-1:-1;;;;;;56338:25:0;;;;;:18;:25;;;;;;50311:13;56338:55;;56152:249::o;8069:103::-;7307:13;:11;:13::i;:::-;8134:30:::1;8161:1;8134:18;:30::i;:::-;8069:103::o:0;101983:982::-;102077:16;102131:19;102165:25;102205:22;102230:16;102240:5;102230:9;:16::i;:::-;102205:41;;102261:25;102303:14;102289:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;102289:29:0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102261:57:0;;-1:-1:-1;111676:1:0;102379:538;102463:14;102448:11;:29;102379:538;;102546:15;102559:1;102546:12;:15::i;:::-;102534:27;;102584:9;:16;;;102625:8;102580:73;102675:14;;-1:-1:-1;;;;;102675:28:0;;102671:111;;102748:14;;;-1:-1:-1;102671:111:0;102825:5;-1:-1:-1;;;;;102804:26:0;:17;-1:-1:-1;;;;;102804:26:0;;102800:102;;102881:1;102855:8;102864:13;;;;;;102855:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;102800:102;102496:3;;102379:538;;;-1:-1:-1;102938:8:0;;101983:982;-1:-1:-1;;;;;;101983:982:0:o;118450:180::-;7307:13;:11;:13::i;:::-;118561:9:::1;::::0;55242:12;;55226:13;;118551:7;;55226:28;;-1:-1:-1;;55226:46:0;118535:23:::1;;;;:::i;:::-;:35;118527:65;;;::::0;-1:-1:-1;;;118527:65:0;;17441:2:1;118527:65:0::1;::::0;::::1;17423:21:1::0;17480:2;17460:18;;;17453:30;17519:19;17499:18;;;17492:47;17556:18;;118527:65:0::1;17239:341:1::0;118527:65:0::1;118603:19;118609:3;118614:7;118603:5;:19::i;116472:86::-:0;7307:13;:11;:13::i;:::-;116536:5:::1;:14:::0;116472:86::o;59503:104::-;59559:13;59592:7;59585:14;;;;;:::i;98957:2579::-;99100:16;99167:4;99158:5;:13;99154:45;;99180:19;;;;;;;;;;;;;;99154:45;99214:19;99248:17;99268:14;54737:13;;;54655:103;99268:14;99248:34;-1:-1:-1;111676:1:0;99360:5;:23;99356:87;;;111676:1;99404:23;;99356:87;99519:9;99512:4;:16;99508:73;;;99556:9;99549:16;;99508:73;99595:25;99623:16;99633:5;99623:9;:16::i;:::-;99595:44;;99817:4;99809:5;:12;99805:278;;;99864:12;;;99899:31;;;99895:111;;;99975:11;99955:31;;99895:111;99823:198;99805:278;;;-1:-1:-1;100066:1:0;99805:278;100097:25;100139:17;100125:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;100125:32:0;;100097:60;;100176:17;100197:1;100176:22;100172:78;;100226:8;-1:-1:-1;100219:15:0;;-1:-1:-1;;;100219:15:0;100172:78;100394:31;100428:26;100448:5;100428:19;:26::i;:::-;100394:60;;100469:25;100714:9;:16;;;100709:92;;-1:-1:-1;100771:14:0;;100709:92;100850:5;100815:544;100879:4;100874:1;:9;;:45;;;;;100902:17;100887:11;:32;;100874:45;100815:544;;;100988:15;101001:1;100988:12;:15::i;:::-;100976:27;;101026:9;:16;;;101067:8;101022:73;101117:14;;-1:-1:-1;;;;;101117:28:0;;101113:111;;101190:14;;;-1:-1:-1;101113:111:0;101267:5;-1:-1:-1;;;;;101246:26:0;:17;-1:-1:-1;;;;;101246:26:0;;101242:102;;101323:1;101297:8;101306:13;;;;;;101297:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;101242:102;100938:3;;100815:544;;;-1:-1:-1;;;101444:29:0;;;-1:-1:-1;101451:8:0;;-1:-1:-1;;98957:2579:0;;;;;;:::o;113089:351::-;7307:13;:11;:13::i;:::-;113224:9:::1;113219:214;113243:10;:17;113239:1;:21;113219:214;;;113282:15;::::0;113334:13;;-1:-1:-1;;;;;113282:15:0;;::::1;::::0;:33:::1;::::0;113334:10;;113345:1;;113334:13;::::1;;;;;:::i;:::-;;;;;;;113366:10;;113395:8;113404:1;113395:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;113282:139:::1;::::0;-1:-1:-1;;;;;;113282:139:0::1;::::0;;;;;;-1:-1:-1;;;;;17805:55:1;;;113282:139:0::1;::::0;::::1;17787:74:1::0;17877:18;;;17870:34;;;;17920:18;;;17913:34;17760:18;;113282:139:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;113262:3;;;;;:::i;:::-;;;;113219:214;;113542:390:::0;112531:8;:6;:8::i;:::-;:24;;;;-1:-1:-1;112543:12:0;;;;112531:24;112523:63;;;;-1:-1:-1;;;112523:63:0;;18300:2:1;112523:63:0;;;18282:21:1;18339:2;18319:18;;;18312:30;18378:28;18358:18;;;18351:56;18424:18;;112523:63:0;18098:350:1;112523:63:0;113680:5:::1;::::0;113671:7;;112703:16:::1;113680:5:::0;113671:7;112703:16:::1;:::i;:::-;112690:9;:29;;112682:59;;;::::0;-1:-1:-1;;;112682:59:0;;18655:2:1;112682:59:0::1;::::0;::::1;18637:21:1::0;18694:2;18674:18;;;18667:30;18733:19;18713:18;;;18706:47;18770:18;;112682:59:0::1;18453:341:1::0;112682:59:0::1;113712:7:::2;112192:17;;112182:7;:27;112174:68;;;::::0;-1:-1:-1;;;112174:68:0;;19001:2:1;112174:68:0::2;::::0;::::2;18983:21:1::0;19040:2;19020:18;;;19013:30;19079;19059:18;;;19052:58;19127:18;;112174:68:0::2;18799:352:1::0;112174:68:0::2;112287:9;::::0;55242:12;;55226:13;;112277:7;;55226:28;;-1:-1:-1;;55226:46:0;112261:23:::2;;;;:::i;:::-;:35;112253:65;;;::::0;-1:-1:-1;;;112253:65:0;;17441:2:1;112253:65:0::2;::::0;::::2;17423:21:1::0;17480:2;17460:18;;;17453:30;17519:19;17499:18;;;17492:47;17556:18;;112253:65:0::2;17239:341:1::0;112253:65:0::2;112400:12;::::0;90833:10;112351:36:::2;::::0;;;:15:::2;:36;::::0;;;;;:46:::2;::::0;112390:7;;112351:46:::2;:::i;:::-;:61;112329:130;;;::::0;-1:-1:-1;;;112329:130:0;;19358:2:1;112329:130:0::2;::::0;::::2;19340:21:1::0;19397:2;19377:18;;;19370:30;19436:21;19416:18;;;19409:49;19475:18;;112329:130:0::2;19156:343:1::0;112329:130:0::2;90833:10:::0;113737:14:::3;113784:23:::0;;;:15:::3;:23;::::0;;;;:34;;113811:7;;113737:14;113784:34:::3;::::0;113811:7;;113784:34:::3;:::i;:::-;::::0;;;-1:-1:-1;113829:22:0::3;::::0;-1:-1:-1;113835:6:0;113843:7;113829:5:::3;:22::i;:::-;113862:15;::::0;113904:10:::3;::::0;113862:62:::3;::::0;;;;-1:-1:-1;;;;;17805:55:1;;;113862:62:0::3;::::0;::::3;17787:74:1::0;17877:18;;;17870:34;;;;17920:18;;;17913:34;;;113862:15:0;::::3;::::0;:33:::3;::::0;17760:18:1;;113862:62:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;113726:206;112752:1:::2;112597::::1;;113542:390:::0;:::o;119095:220::-;119243:8;108069:30;108090:8;108069:20;:30::i;:::-;119264:43:::1;119288:8;119298;119264:23;:43::i;120053:266::-:0;120247:4;-1:-1:-1;;;;;107889:18:0;;107897:10;107889:18;107885:83;;107924:32;107945:10;107924:20;:32::i;:::-;120264:47:::1;120287:4;120293:2;120297:7;120306:4;120264:22;:47::i;:::-;120053:266:::0;;;;;:::o;113976:128::-;114015:4;114058:6;;114039:15;:25;;:57;;;;;114087:9;;114068:15;:28;;114039:57;114032:64;;113976:128;:::o;111795:110::-;7307:13;:11;:13::i;:::-;111875:9:::1;:22;111887:10:::0;;111875:9;:22:::1;:::i;97440:444::-:0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;111676:1:0;97620:7;:25;:54;;;-1:-1:-1;54737:13:0;;97649:7;:25;;97620:54;97616:103;;;97698:9;97440:444;-1:-1:-1;;97440:444:0:o;97616:103::-;97741:21;97754:7;97741:12;:21::i;:::-;97729:33;;97777:9;:16;;;97773:65;;;97817:9;97440:444;-1:-1:-1;;97440:444:0:o;97773:65::-;97855:21;97868:7;97855:12;:21::i;114793:431::-;114894:13;114925:17;114933:8;114925:7;:17::i;:::-;114920:62;;114951:31;;-1:-1:-1;;;114951:31:0;;;;;;;;;;;114920:62;114998:10;;;;;;;114993:90;;115054:9;115037:45;;;;;;;;:::i;:::-;;;;;;;;;;;;;115023:60;;114793:431;;;:::o;114993:90::-;115156:7;115165:26;115182:8;115165:16;:26::i;:::-;115139:62;;;;;;;;;:::i;115987:150::-;7307:13;:11;:13::i;:::-;116091:17:::1;:38:::0;115987:150::o;117159:117::-;7307:13;:11;:13::i;:::-;117236:12:::1;:32:::0;;-1:-1:-1;;117236:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;117159:117::o;116262:114::-;7307:13;:11;:13::i;:::-;116340:12:::1;:28:::0;116262:114::o;114234:446::-;114313:16;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;114313:16:0;-1:-1:-1;114362:310:0;;;;;;;;114405:12;;;;114362:310;;;;114444:6;;114362:310;;;;;;;;114480:9;;114362:310;;;;114519:9;;114362:310;;;;55242:12;;55226:13;;:28;-1:-1:-1;;55226:46:0;114362:310;;;;114599:5;;114362:310;;;;-1:-1:-1;;;;;114631:25:0;;;;-1:-1:-1;114631:25:0;;;:15;:25;;;;;;114362:310;;;;;114234:446::o;116674:105::-;7307:13;:11;:13::i;:::-;116742:8:::1;:29:::0;;-1:-1:-1;;116742:29:0::1;-1:-1:-1::0;;;;;116742:29:0;;;::::1;::::0;;;::::1;::::0;;116674:105::o;8327:238::-;7307:13;:11;:13::i;:::-;-1:-1:-1;;;;;8430:22:0;::::1;8408:110;;;::::0;-1:-1:-1;;;8408:110:0;;21364:2:1;8408:110:0::1;::::0;::::1;21346:21:1::0;21403:2;21383:18;;;21376:30;21442:34;21422:18;;;21415:62;21513:8;21493:18;;;21486:36;21539:19;;8408:110:0::1;21162:402:1::0;8408:110:0::1;8529:28;8548:8;8529:18;:28::i;58409:655::-:0;58510:4;-1:-1:-1;;;;;;;;;58834:25:0;;;;:102;;-1:-1:-1;58911:25:0;-1:-1:-1;;;;;;58911:25:0;;;58834:102;:179;;;-1:-1:-1;;;;;;;;58988:25:0;;;;58409:655::o;13183:257::-;13301:4;-1:-1:-1;;;;;;13338:41:0;;13353:26;13338:41;;:94;;-1:-1:-1;;;;;;;;;;11740:40:0;;;13396:36;11615:173;7586:132;7494:6;;-1:-1:-1;;;;;7494:6:0;90833:10;7650:23;7642:68;;;;-1:-1:-1;;;7642:68:0;;21771:2:1;7642:68:0;;;21753:21:1;;;21790:18;;;21783:30;21849:34;21829:18;;;21822:62;21901:18;;7642:68:0;21569:356:1;14625:394:0;14341:5;14767:33;;;;;14745:125;;;;-1:-1:-1;;;14745:125:0;;22132:2:1;14745:125:0;;;22114:21:1;22171:2;22151:18;;;22144:30;22210:34;22190:18;;;22183:62;22281:12;22261:18;;;22254:40;22311:19;;14745:125:0;21930:406:1;14745:125:0;-1:-1:-1;;;;;14889:22:0;;14881:60;;;;-1:-1:-1;;;14881:60:0;;22543:2:1;14881:60:0;;;22525:21:1;22582:2;22562:18;;;22555:30;22621:27;22601:18;;;22594:55;22666:18;;14881:60:0;22341:349:1;14881:60:0;14976:35;;;;;;;;;-1:-1:-1;;;;;14976:35:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;14954:57:0;;;;-1:-1:-1;14954:57:0;14625:394::o;67513:282::-;67578:4;67634:7;111676:1;67615:26;;:66;;;;;67668:13;;67658:7;:23;67615:66;:153;;;;-1:-1:-1;;67719:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;67719:44:0;:49;;67513:282::o;108127:512::-;106514:42;108318:45;:49;108314:318;;108407:128;;;;;108480:4;108407:128;;;22930:34:1;-1:-1:-1;;;;;23000:15:1;;22980:18;;;22973:43;106514:42:0;;108407;;22842:18:1;;108407:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;108384:237;;108577:28;;;;;-1:-1:-1;;;;;2315:55:1;;108577:28:0;;;2297:74:1;2270:18;;108577:28:0;2151:226:1;65484:433:0;65598:13;65614:16;65622:7;65614;:16::i;:::-;65598:32;-1:-1:-1;90833:10:0;-1:-1:-1;;;;;65647:28:0;;;65643:175;;65695:44;65712:5;90833:10;67066:189;:::i;65695:44::-;65690:128;;65767:35;;;;;;;;;;;;;;65690:128;65830:24;;;;:15;:24;;;;;;:35;;-1:-1:-1;;65830:35:0;-1:-1:-1;;;;;65830:35:0;;;;;;;;;65881:28;;65830:24;;65881:28;;;;;;;65587:330;65484:433;;:::o;69797:3003::-;69939:27;69969;69988:7;69969:18;:27::i;:::-;69939:57;;70054:4;-1:-1:-1;;;;;70013:45:0;70029:19;-1:-1:-1;;;;;70013:45:0;;70009:99;;70080:28;;;;;;;;;;;;;;70009:99;70136:27;68905:24;;;:15;:24;;;;;69133:26;;70364:134;69133:26;70441:4;90833:10;70464:19;-1:-1:-1;;;;;68363:32:0;;;68207:28;;68492:20;;68514:30;;68489:56;;67904:659;70364:134;70345:287;;70528:43;70545:4;90833:10;67066:189;:::i;70528:43::-;70523:109;;70597:35;;-1:-1:-1;;;70597:35:0;;;;;;;;;;;70523:109;-1:-1:-1;;;;;70649:16:0;;70645:52;;70674:23;;;;;;;;;;;;;;70645:52;70846:15;70843:160;;;70986:1;70965:19;70958:30;70843:160;-1:-1:-1;;;;;71383:24:0;;;;;;;:18;:24;;;;;;71381:26;;-1:-1:-1;;71381:26:0;;;71452:22;;;;;;;;;71450:24;;-1:-1:-1;71450:24:0;;;64312:11;64287:23;64283:41;64235:112;-1:-1:-1;;;64235:112:0;71745:26;;;;:17;:26;;;;;:196;;;;-1:-1:-1;;;72061:47:0;;:52;;72057:627;;72166:1;72156:11;;72134:19;72289:30;;;:17;:30;;;;;;:35;;72285:384;;72427:13;;72412:11;:28;72408:242;;72574:30;;;;:17;:30;;;;;:52;;;72408:242;72115:569;72057:627;72731:7;72727:2;-1:-1:-1;;;;;72712:27:0;72721:4;-1:-1:-1;;;;;72712:27:0;;;;;;;;;;;72750:42;69928:2872;;;69797:3003;;;:::o;72896:193::-;73042:39;73059:4;73065:2;73069:7;73042:39;;;;;;;;;;;;:16;:39::i;85056:3274::-;85136:27;85166;85185:7;85166:18;:27::i;:::-;85136:57;-1:-1:-1;85136:57:0;85206:12;;85365:35;85392:7;68794:27;68905:24;;;:15;:24;;;;;69133:26;;68905:24;;68676:501;85365:35;85271:129;;;;85417:13;85413:451;;;85556:150;85603:15;85641:4;90833:10;85668:19;90746:105;85556:150;85533:319;;85744:43;85761:4;90833:10;67066:189;:::i;85744:43::-;85739:113;;85817:35;;-1:-1:-1;;;85817:35:0;;;;;;;;;;;85739:113;86020:15;86017:160;;;86160:1;86139:19;86132:30;86017:160;-1:-1:-1;;;;;86779:24:0;;;;;;:18;:24;;;;;:60;;86807:32;86779:60;;;64312:11;64287:23;64283:41;64235:112;87167:43;64235:112;87077:26;;;;:17;:26;;;;;:226;;;;-1:-1:-1;;;87423:47:0;;:52;;87419:627;;87528:1;87518:11;;87496:19;87651:30;;;:17;:30;;;;;;:35;;87647:384;;87789:13;;87774:11;:28;87770:242;;87936:30;;;;:17;:30;;;;;:52;;;87770:242;87477:569;87419:627;88074:35;;88101:7;;88097:1;;-1:-1:-1;;;;;88074:35:0;;;;;88097:1;;88074:35;-1:-1:-1;;88297:12:0;:14;;;;;;-1:-1:-1;;;;85056:3274:0:o;61986:1291::-;62069:7;62104;;111676:1;62153:23;62149:1061;;62206:13;;62199:4;:20;62195:1015;;;62244:14;62261:23;;;:17;:23;;;;;;;-1:-1:-1;;;62350:24:0;;:29;;62346:845;;63015:113;63022:6;63032:1;63022:11;63015:113;;-1:-1:-1;;;63093:6:0;63075:25;;;;:17;:25;;;;;;63015:113;;62346:845;62221:989;62195:1015;63238:31;;-1:-1:-1;;;63238:31:0;;;;;;;;;;;8725:191;8818:6;;;-1:-1:-1;;;;;8835:17:0;;;-1:-1:-1;;8835:17:0;;;;;;;8868:40;;8818:6;;;8835:17;8818:6;;8868:40;;8799:16;;8868:40;8788:128;8725:191;:::o;61418:177::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61562:24:0;;;;:17;:24;;;;;;61543:44;;-1:-1:-1;;;;;;;;;;;;;63502:41:0;;;;50970:3;63588:33;;;63554:68;;-1:-1:-1;;;63554:68:0;-1:-1:-1;;;63652:24:0;;:29;;-1:-1:-1;;;63633:48:0;;;;51491:3;63721:28;;;;-1:-1:-1;;;63692:58:0;-1:-1:-1;63376:382:0;77471:3021;77567:13;;77544:20;77595:13;;;77591:44;;77617:18;;;;;;;;;;;;;;77591:44;-1:-1:-1;;;;;78123:22:0;;;;;;:18;:22;;;;50449:2;78123:22;;;:105;;78195:32;78166:62;;78123:105;;;78471:31;;;:17;:31;;;;;-1:-1:-1;64773:15:0;;64747:24;64743:46;64312:11;64287:23;64283:41;64280:52;64235:112;;78471:194;;78727:23;;;;78471:31;;78123:22;;79492:25;78123:22;;79345:335;80006:1;79992:12;79988:20;79946:346;80047:3;80038:7;80035:16;79946:346;;80265:7;80255:8;80252:1;80225:25;80222:1;80219;80214:59;80100:1;80087:15;79946:346;;;79950:77;80325:8;80337:1;80325:13;80321:45;;80347:19;;;;;;;;;;;;;;80321:45;80383:13;:19;-1:-1:-1;119323:250:0;;;:::o;66650:259::-;90833:10;66770:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;66770:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;66770:60:0;;;;;;;;;;66846:55;;586:41:1;;;66770:49:0;;90833:10;66846:55;;559:18:1;66846:55:0;;;;;;;66650:259;;:::o;73687:407::-;73862:31;73875:4;73881:2;73885:7;73862:12;:31::i;:::-;-1:-1:-1;;;;;73908:14:0;;;:19;73904:183;;73947:56;73978:4;73984:2;73988:7;73997:5;73947:30;:56::i;:::-;73942:145;;74031:40;;-1:-1:-1;;;74031:40:0;;;;;;;;;;;61140:182;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61267:47:0;61286:27;61305:7;61286:18;:27::i;:::-;-1:-1:-1;;;;;;;;;;;;;63502:41:0;;;;50970:3;63588:33;;;63554:68;;-1:-1:-1;;;63554:68:0;-1:-1:-1;;;63652:24:0;;:29;;-1:-1:-1;;;63633:48:0;;;;51491:3;63721:28;;;;-1:-1:-1;;;63692:58:0;-1:-1:-1;63376:382:0;34030:716;34086:13;34137:14;34154:17;34165:5;34154:10;:17::i;:::-;34174:1;34154:21;34137:38;;34190:20;34224:6;34213:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34213:18:0;-1:-1:-1;34190:41:0;-1:-1:-1;34355:28:0;;;34371:2;34355:28;34412:288;-1:-1:-1;;34444:5:0;34586:8;34581:2;34570:14;;34565:30;34444:5;34552:44;34642:2;34633:11;;;-1:-1:-1;34663:21:0;34412:288;34663:21;-1:-1:-1;34721:6:0;34030:716;-1:-1:-1;;;34030:716:0:o;76178:831::-;76375:171;;-1:-1:-1;;;76375:171:0;;76341:4;;-1:-1:-1;;;;;76375:45:0;;;;;:171;;90833:10;;76477:4;;76500:7;;76526:5;;76375:171;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;76375:171:0;;;;;;;;-1:-1:-1;;76375:171:0;;;;;;;;;;;;:::i;:::-;;;76358:644;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;76760:6;:13;76777:1;76760:18;76756:235;;76806:40;;-1:-1:-1;;;76806:40:0;;;;;;;;;;;76756:235;76949:6;76943:13;76934:6;76930:2;76926:15;76919:38;76358:644;-1:-1:-1;;;;;;76619:81:0;-1:-1:-1;;;76619:81:0;;-1:-1:-1;76178:831:0;;;;;;:::o;30746:948::-;30799:7;;30886:8;30877:17;;30873:106;;30924:8;30915:17;;;-1:-1:-1;30961:2:0;30951:12;30873:106;31006:8;30997:5;:17;30993:106;;31044:8;31035:17;;;-1:-1:-1;31081:2:0;31071:12;30993:106;31126:8;31117:5;:17;31113:106;;31164:8;31155:17;;;-1:-1:-1;31201:2:0;31191:12;31113:106;31246:7;31237:5;:16;31233:103;;31283:7;31274:16;;;-1:-1:-1;31319:1:0;31309:11;31233:103;31363:7;31354:5;:16;31350:103;;31400:7;31391:16;;;-1:-1:-1;31436:1:0;31426:11;31350:103;31480:7;31471:5;:16;31467:103;;31517:7;31508:16;;;-1:-1:-1;31553:1:0;31543:11;31467:103;31597:7;31588:5;:16;31584:68;;31635:1;31625:11;31680:6;30746:948;-1:-1:-1;;30746:948:0:o;14:177:1:-;-1:-1:-1;;;;;;92:5:1;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;638:196::-;706:20;;-1:-1:-1;;;;;755:54:1;;745:65;;735:93;;824:1;821;814:12;735:93;638:196;;;:::o;839:366::-;906:6;914;967:2;955:9;946:7;942:23;938:32;935:52;;;983:1;980;973:12;935:52;1006:29;1025:9;1006:29;:::i;:::-;996:39;;1085:2;1074:9;1070:18;1057:32;1129:26;1122:5;1118:38;1111:5;1108:49;1098:77;;1171:1;1168;1161:12;1098:77;1194:5;1184:15;;;839:366;;;;;:::o;1210:250::-;1295:1;1305:113;1319:6;1316:1;1313:13;1305:113;;;1395:11;;;1389:18;1376:11;;;1369:39;1341:2;1334:10;1305:113;;;-1:-1:-1;;1452:1:1;1434:16;;1427:27;1210:250::o;1465:271::-;1507:3;1545:5;1539:12;1572:6;1567:3;1560:19;1588:76;1657:6;1650:4;1645:3;1641:14;1634:4;1627:5;1623:16;1588:76;:::i;:::-;1718:2;1697:15;-1:-1:-1;;1693:29:1;1684:39;;;;1725:4;1680:50;;1465:271;-1:-1:-1;;1465:271:1:o;1741:220::-;1890:2;1879:9;1872:21;1853:4;1910:45;1951:2;1940:9;1936:18;1928:6;1910:45;:::i;1966:180::-;2025:6;2078:2;2066:9;2057:7;2053:23;2049:32;2046:52;;;2094:1;2091;2084:12;2046:52;-1:-1:-1;2117:23:1;;1966:180;-1:-1:-1;1966:180:1:o;2382:254::-;2450:6;2458;2511:2;2499:9;2490:7;2486:23;2482:32;2479:52;;;2527:1;2524;2517:12;2479:52;2550:29;2569:9;2550:29;:::i;:::-;2540:39;2626:2;2611:18;;;;2598:32;;-1:-1:-1;;;2382:254:1:o;2641:248::-;2709:6;2717;2770:2;2758:9;2749:7;2745:23;2741:32;2738:52;;;2786:1;2783;2776:12;2738:52;-1:-1:-1;;2809:23:1;;;2879:2;2864:18;;;2851:32;;-1:-1:-1;2641:248:1:o;3076:186::-;3135:6;3188:2;3176:9;3167:7;3163:23;3159:32;3156:52;;;3204:1;3201;3194:12;3156:52;3227:29;3246:9;3227:29;:::i;3267:328::-;3344:6;3352;3360;3413:2;3401:9;3392:7;3388:23;3384:32;3381:52;;;3429:1;3426;3419:12;3381:52;3452:29;3471:9;3452:29;:::i;:::-;3442:39;;3500:38;3534:2;3523:9;3519:18;3500:38;:::i;:::-;3490:48;;3585:2;3574:9;3570:18;3557:32;3547:42;;3267:328;;;;;:::o;4165:118::-;4251:5;4244:13;4237:21;4230:5;4227:32;4217:60;;4273:1;4270;4263:12;4288:241;4344:6;4397:2;4385:9;4376:7;4372:23;4368:32;4365:52;;;4413:1;4410;4403:12;4365:52;4452:9;4439:23;4471:28;4493:5;4471:28;:::i;4534:592::-;4605:6;4613;4666:2;4654:9;4645:7;4641:23;4637:32;4634:52;;;4682:1;4679;4672:12;4634:52;4722:9;4709:23;4751:18;4792:2;4784:6;4781:14;4778:34;;;4808:1;4805;4798:12;4778:34;4846:6;4835:9;4831:22;4821:32;;4891:7;4884:4;4880:2;4876:13;4872:27;4862:55;;4913:1;4910;4903:12;4862:55;4953:2;4940:16;4979:2;4971:6;4968:14;4965:34;;;4995:1;4992;4985:12;4965:34;5040:7;5035:2;5026:6;5022:2;5018:15;5014:24;5011:37;5008:57;;;5061:1;5058;5051:12;5008:57;5092:2;5084:11;;;;;5114:6;;-1:-1:-1;4534:592:1;;-1:-1:-1;;;;4534:592:1:o;5131:615::-;5217:6;5225;5278:2;5266:9;5257:7;5253:23;5249:32;5246:52;;;5294:1;5291;5284:12;5246:52;5334:9;5321:23;5363:18;5404:2;5396:6;5393:14;5390:34;;;5420:1;5417;5410:12;5390:34;5458:6;5447:9;5443:22;5433:32;;5503:7;5496:4;5492:2;5488:13;5484:27;5474:55;;5525:1;5522;5515:12;5474:55;5565:2;5552:16;5591:2;5583:6;5580:14;5577:34;;;5607:1;5604;5597:12;5577:34;5660:7;5655:2;5645:6;5642:1;5638:14;5634:2;5630:23;5626:32;5623:45;5620:65;;;5681:1;5678;5671:12;6128:724;6363:2;6415:21;;;6485:13;;6388:18;;;6507:22;;;6334:4;;6363:2;6586:15;;;;6560:2;6545:18;;;6334:4;6629:197;6643:6;6640:1;6637:13;6629:197;;;6692:52;6740:3;6731:6;6725:13;-1:-1:-1;;;;;5841:5:1;5835:12;5831:61;5826:3;5819:74;5954:18;5946:4;5939:5;5935:16;5929:23;5925:48;5918:4;5913:3;5909:14;5902:72;6037:4;6030:5;6026:16;6020:23;6013:31;6006:39;5999:4;5994:3;5990:14;5983:63;6107:8;6099:4;6092:5;6088:16;6082:23;6078:38;6071:4;6066:3;6062:14;6055:62;;;5751:372;6692:52;6801:15;;;;6773:4;6764:14;;;;;6665:1;6658:9;6629:197;;6857:632;7028:2;7080:21;;;7150:13;;7053:18;;;7172:22;;;6999:4;;7028:2;7251:15;;;;7225:2;7210:18;;;6999:4;7294:169;7308:6;7305:1;7302:13;7294:169;;;7369:13;;7357:26;;7438:15;;;;7403:12;;;;7330:1;7323:9;7294:169;;7494:322;7571:6;7579;7587;7640:2;7628:9;7619:7;7615:23;7611:32;7608:52;;;7656:1;7653;7646:12;7608:52;7679:29;7698:9;7679:29;:::i;:::-;7669:39;7755:2;7740:18;;7727:32;;-1:-1:-1;7806:2:1;7791:18;;;7778:32;;7494:322;-1:-1:-1;;;7494:322:1:o;7821:184::-;-1:-1:-1;;;7870:1:1;7863:88;7970:4;7967:1;7960:15;7994:4;7991:1;7984:15;8010:275;8081:2;8075:9;8146:2;8127:13;;-1:-1:-1;;8123:27:1;8111:40;;8181:18;8166:34;;8202:22;;;8163:62;8160:88;;;8228:18;;:::i;:::-;8264:2;8257:22;8010:275;;-1:-1:-1;8010:275:1:o;8290:183::-;8350:4;8383:18;8375:6;8372:30;8369:56;;;8405:18;;:::i;:::-;-1:-1:-1;8450:1:1;8446:14;8462:4;8442:25;;8290:183::o;8478:662::-;8532:5;8585:3;8578:4;8570:6;8566:17;8562:27;8552:55;;8603:1;8600;8593:12;8552:55;8639:6;8626:20;8665:4;8689:60;8705:43;8745:2;8705:43;:::i;:::-;8689:60;:::i;:::-;8783:15;;;8869:1;8865:10;;;;8853:23;;8849:32;;;8814:12;;;;8893:15;;;8890:35;;;8921:1;8918;8911:12;8890:35;8957:2;8949:6;8945:15;8969:142;8985:6;8980:3;8977:15;8969:142;;;9051:17;;9039:30;;9089:12;;;;9002;;8969:142;;;-1:-1:-1;9129:5:1;8478:662;-1:-1:-1;;;;;;8478:662:1:o;9145:1146::-;9263:6;9271;9324:2;9312:9;9303:7;9299:23;9295:32;9292:52;;;9340:1;9337;9330:12;9292:52;9380:9;9367:23;9409:18;9450:2;9442:6;9439:14;9436:34;;;9466:1;9463;9456:12;9436:34;9504:6;9493:9;9489:22;9479:32;;9549:7;9542:4;9538:2;9534:13;9530:27;9520:55;;9571:1;9568;9561:12;9520:55;9607:2;9594:16;9629:4;9653:60;9669:43;9709:2;9669:43;:::i;9653:60::-;9747:15;;;9829:1;9825:10;;;;9817:19;;9813:28;;;9778:12;;;;9853:19;;;9850:39;;;9885:1;9882;9875:12;9850:39;9909:11;;;;9929:148;9945:6;9940:3;9937:15;9929:148;;;10011:23;10030:3;10011:23;:::i;:::-;9999:36;;9962:12;;;;10055;;;;9929:148;;;10096:5;-1:-1:-1;;10139:18:1;;10126:32;;-1:-1:-1;;10170:16:1;;;10167:36;;;10199:1;10196;10189:12;10167:36;;10222:63;10277:7;10266:8;10255:9;10251:24;10222:63;:::i;:::-;10212:73;;;9145:1146;;;;;:::o;10296:315::-;10361:6;10369;10422:2;10410:9;10401:7;10397:23;10393:32;10390:52;;;10438:1;10435;10428:12;10390:52;10461:29;10480:9;10461:29;:::i;:::-;10451:39;;10540:2;10529:9;10525:18;10512:32;10553:28;10575:5;10553:28;:::i;10868:980::-;10963:6;10971;10979;10987;11040:3;11028:9;11019:7;11015:23;11011:33;11008:53;;;11057:1;11054;11047:12;11008:53;11080:29;11099:9;11080:29;:::i;:::-;11070:39;;11128:2;11149:38;11183:2;11172:9;11168:18;11149:38;:::i;:::-;11139:48;;11234:2;11223:9;11219:18;11206:32;11196:42;;11289:2;11278:9;11274:18;11261:32;11312:18;11353:2;11345:6;11342:14;11339:34;;;11369:1;11366;11359:12;11339:34;11407:6;11396:9;11392:22;11382:32;;11452:7;11445:4;11441:2;11437:13;11433:27;11423:55;;11474:1;11471;11464:12;11423:55;11510:2;11497:16;11532:2;11528;11525:10;11522:36;;;11538:18;;:::i;:::-;11580:53;11623:2;11604:13;;-1:-1:-1;;11600:27:1;11596:36;;11580:53;:::i;:::-;11567:66;;11656:2;11649:5;11642:17;11696:7;11691:2;11686;11682;11678:11;11674:20;11671:33;11668:53;;;11717:1;11714;11707:12;11668:53;11772:2;11767;11763;11759:11;11754:2;11747:5;11743:14;11730:45;11816:1;11811:2;11806;11799:5;11795:14;11791:23;11784:34;;11837:5;11827:15;;;;;10868:980;;;;;;;:::o;11853:268::-;5835:12;;-1:-1:-1;;;;;5831:61:1;5819:74;;5946:4;5935:16;;;5929:23;5954:18;5925:48;5909:14;;;5902:72;6037:4;6026:16;;;6020:23;6013:31;6006:39;5990:14;;;5983:63;6099:4;6088:16;;;6082:23;6107:8;6078:38;6062:14;;;6055:62;12051:3;12036:19;;12064:51;5751:372;12764:260;12832:6;12840;12893:2;12881:9;12872:7;12868:23;12864:32;12861:52;;;12909:1;12906;12899:12;12861:52;12932:29;12951:9;12932:29;:::i;:::-;12922:39;;12980:38;13014:2;13003:9;12999:18;12980:38;:::i;:::-;12970:48;;12764:260;;;;;:::o;13029:437::-;13108:1;13104:12;;;;13151;;;13172:61;;13226:4;13218:6;13214:17;13204:27;;13172:61;13279:2;13271:6;13268:14;13248:18;13245:38;13242:218;;-1:-1:-1;;;13313:1:1;13306:88;13417:4;13414:1;13407:15;13445:4;13442:1;13435:15;13242:218;;13029:437;;;:::o;13471:184::-;-1:-1:-1;;;13520:1:1;13513:88;13620:4;13617:1;13610:15;13644:4;13641:1;13634:15;13660:168;13733:9;;;13764;;13781:15;;;13775:22;;13761:37;13751:71;;13802:18;;:::i;14022:274::-;14062:1;14088;14078:189;;-1:-1:-1;;;14120:1:1;14113:88;14224:4;14221:1;14214:15;14252:4;14249:1;14242:15;14078:189;-1:-1:-1;14281:9:1;;14022:274::o;14988:545::-;15090:2;15085:3;15082:11;15079:448;;;15126:1;15151:5;15147:2;15140:17;15196:4;15192:2;15182:19;15266:2;15254:10;15250:19;15247:1;15243:27;15237:4;15233:38;15302:4;15290:10;15287:20;15284:47;;;-1:-1:-1;15325:4:1;15284:47;15380:2;15375:3;15371:12;15368:1;15364:20;15358:4;15354:31;15344:41;;15435:82;15453:2;15446:5;15443:13;15435:82;;;15498:17;;;15479:1;15468:13;15435:82;;15709:1206;15833:18;15828:3;15825:27;15822:53;;;15855:18;;:::i;:::-;15884:94;15974:3;15934:38;15966:4;15960:11;15934:38;:::i;:::-;15928:4;15884:94;:::i;:::-;16004:1;16029:2;16024:3;16021:11;16046:1;16041:616;;;;16701:1;16718:3;16715:93;;;-1:-1:-1;16774:19:1;;;16761:33;16715:93;-1:-1:-1;;15666:1:1;15662:11;;;15658:24;15654:29;15644:40;15690:1;15686:11;;;15641:57;16821:78;;16014:895;;16041:616;14935:1;14928:14;;;14972:4;14959:18;;-1:-1:-1;;16077:17:1;;;16178:9;16200:229;16214:7;16211:1;16208:14;16200:229;;;16303:19;;;16290:33;16275:49;;16410:4;16395:20;;;;16363:1;16351:14;;;;16230:12;16200:229;;;16204:3;16457;16448:7;16445:16;16442:159;;;16581:1;16577:6;16571:3;16565;16562:1;16558:11;16554:21;16550:34;16546:39;16533:9;16528:3;16524:19;16511:33;16507:79;16499:6;16492:95;16442:159;;;16644:1;16638:3;16635:1;16631:11;16627:19;16621:4;16614:33;16014:895;;15709:1206;;;:::o;16920:184::-;-1:-1:-1;;;16969:1:1;16962:88;17069:4;17066:1;17059:15;17093:4;17090:1;17083:15;17109:125;17174:9;;;17195:10;;;17192:36;;;17208:18;;:::i;17958:135::-;17997:3;18018:17;;;18015:43;;18038:18;;:::i;:::-;-1:-1:-1;18085:1:1;18074:13;;17958:135::o;19504:722::-;19554:3;19595:5;19589:12;19624:36;19650:9;19624:36;:::i;:::-;19679:1;19696:18;;;19723:133;;;;19870:1;19865:355;;;;19689:531;;19723:133;-1:-1:-1;;19756:24:1;;19744:37;;19829:14;;19822:22;19810:35;;19801:45;;;-1:-1:-1;19723:133:1;;19865:355;19896:5;19893:1;19886:16;19925:4;19970:2;19967:1;19957:16;19995:1;20009:165;20023:6;20020:1;20017:13;20009:165;;;20101:14;;20088:11;;;20081:35;20144:16;;;;20038:10;;20009:165;;;20013:3;;;20203:6;20198:3;20194:16;20187:23;;19689:531;;;;;19504:722;;;;:::o;20231:365::-;20460:3;20488:38;20522:3;20514:6;20488:38;:::i;:::-;20546:16;20535:28;;20587:2;20579:11;;20231:365;-1:-1:-1;;;20231:365:1:o;20601:556::-;20878:3;20906:38;20940:3;20932:6;20906:38;:::i;:::-;20973:6;20967:13;20989:65;21047:6;21043:2;21036:4;21028:6;21024:17;20989:65;:::i;:::-;21114:7;21076:15;;21100:22;;;21149:1;21138:13;;20601:556;-1:-1:-1;;;;20601:556:1:o;23027:245::-;23094:6;23147:2;23135:9;23126:7;23122:23;23118:32;23115:52;;;23163:1;23160;23153:12;23115:52;23195:9;23189:16;23214:28;23236:5;23214:28;:::i;23277:512::-;23471:4;-1:-1:-1;;;;;23581:2:1;23573:6;23569:15;23558:9;23551:34;23633:2;23625:6;23621:15;23616:2;23605:9;23601:18;23594:43;;23673:6;23668:2;23657:9;23653:18;23646:34;23716:3;23711:2;23700:9;23696:18;23689:31;23737:46;23778:3;23767:9;23763:19;23755:6;23737:46;:::i;:::-;23729:54;23277:512;-1:-1:-1;;;;;;23277:512:1:o;23794:249::-;23863:6;23916:2;23904:9;23895:7;23891:23;23887:32;23884:52;;;23932:1;23929;23922:12;23884:52;23964:9;23958:16;23983:30;24007:5;23983:30;:::i
Swarm Source
ipfs://bd1297fab88abc9e3495545fde3aec0a86b2ada7d524a4094d927a4763220d64
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.