Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 29 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 16878502 | 659 days ago | IN | 0 ETH | 0.00096023 | ||||
Withdraw | 16757818 | 676 days ago | IN | 0 ETH | 0.00277014 | ||||
Mint | 16506404 | 711 days ago | IN | 0.017 ETH | 0.00165841 | ||||
Setwhitelist Per... | 16506348 | 711 days ago | IN | 0 ETH | 0.0004249 | ||||
Mint For Address | 16505646 | 711 days ago | IN | 0 ETH | 0.00128744 | ||||
Mint For Address | 16505618 | 711 days ago | IN | 0 ETH | 0.0015537 | ||||
Mint | 16505596 | 711 days ago | IN | 0.02 ETH | 0.00190476 | ||||
Add To Whitelist | 16505587 | 711 days ago | IN | 0 ETH | 0.00069631 | ||||
Mint | 16505533 | 711 days ago | IN | 0.01 ETH | 0.00126857 | ||||
Mint | 16505481 | 711 days ago | IN | 0.02 ETH | 0.00210864 | ||||
Setwhitelist Per... | 16505459 | 711 days ago | IN | 0 ETH | 0.00039337 | ||||
Set Paused | 16505457 | 711 days ago | IN | 0 ETH | 0.0003667 | ||||
Whitelist | 16505456 | 711 days ago | IN | 0 ETH | 0.00109605 | ||||
Add To Whitelist | 16505130 | 711 days ago | IN | 0 ETH | 0.00038159 | ||||
Add To Whitelist | 16505129 | 711 days ago | IN | 0 ETH | 0.00070307 | ||||
Add To Whitelist | 16505126 | 711 days ago | IN | 0 ETH | 0.0004013 | ||||
Whitelist | 16505034 | 711 days ago | IN | 0 ETH | 0.06752472 | ||||
Whitelist | 16504981 | 711 days ago | IN | 0 ETH | 0.00276058 | ||||
Whitelist | 16504724 | 711 days ago | IN | 0 ETH | 0.00456424 | ||||
Whitelist | 16504695 | 711 days ago | IN | 0 ETH | 0.00726223 | ||||
Whitelist | 16504681 | 711 days ago | IN | 0 ETH | 0.00535424 | ||||
Whitelist | 16504675 | 711 days ago | IN | 0 ETH | 0.00138288 | ||||
Whitelist | 16504669 | 711 days ago | IN | 0 ETH | 0.00747656 | ||||
Whitelist | 16504583 | 711 days ago | IN | 0 ETH | 0.16552971 | ||||
Add To Whitelist | 16504401 | 711 days ago | IN | 0 ETH | 0.00070241 |
Loading...
Loading
Contract Name:
AMZY
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-27 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/math/Math.sol // 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/Strings.sol // 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: @openzeppelin/contracts/utils/Context.sol // 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/Ownable.sol // 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/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // 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/utils/introspection/ERC165.sol // 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/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @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); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _ownerOf(tokenId); require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @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, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner or approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved"); _safeTransfer(from, to, tokenId, data); } /** * @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. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist */ function _ownerOf(uint256 tokenId) internal view virtual returns (address) { return _owners[tokenId]; } /** * @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 (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _ownerOf(tokenId) != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId, 1); // Check that tokenId was not minted by `_beforeTokenTransfer` hook require(!_exists(tokenId), "ERC721: token already minted"); unchecked { // Will not overflow unless all 2**256 token ids are minted to the same owner. // Given that tokens are minted one by one, it is impossible in practice that // this ever happens. Might change if we allow batch minting. // The ERC fails to describe this case. _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId, 1); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * This is an internal function that does not check if the sender is authorized to operate on the token. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId, 1); // Update ownership in case tokenId was transferred by `_beforeTokenTransfer` hook owner = ERC721.ownerOf(tokenId); // Clear approvals delete _tokenApprovals[tokenId]; unchecked { // Cannot overflow, as that would require more tokens to be burned/transferred // out than the owner initially received through minting and transferring in. _balances[owner] -= 1; } delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId, 1); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId, 1); // Check that tokenId was not transferred by `_beforeTokenTransfer` hook require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); // Clear approvals from the previous owner delete _tokenApprovals[tokenId]; unchecked { // `_balances[from]` cannot overflow for the same reason as described in `_burn`: // `from`'s balance is the number of token held, which is at least one before the current // transfer. // `_balances[to]` could overflow in the conditions described in `_mint`. That would require // all 2**256 token ids to be minted, which in practice is impossible. _balances[from] -= 1; _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting and burning. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`. * - When `from` is zero, the tokens will be minted for `to`. * - When `to` is zero, ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256, /* firstTokenId */ uint256 batchSize ) internal virtual { if (batchSize > 1) { if (from != address(0)) { _balances[from] -= batchSize; } if (to != address(0)) { _balances[to] += batchSize; } } } /** * @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`. * - When `from` is zero, the tokens were minted for `to`. * - When `to` is zero, ``from``'s tokens were burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 firstTokenId, uint256 batchSize ) internal virtual {} } // File: amzy.sol pragma solidity >=0.7.0 <0.9.0; contract AMZY is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string private uriPrefix = ""; string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public cost = 0.017 ether; uint256 public whitelistCost = 0.01 ether; uint256 public maxSupply = 7777; uint256 public maxWhitelistMintAmount = 10; uint256 public maxWhitelistMintAmountPerTx = 10; uint256 public maxMintAmount = 7; uint256 public maxMintAmountPerTx = 7; uint256 private devs1; uint256 private devs2; bool public paused = true; bool public revealed = false; mapping (address => bool) private _isWhitelisted; mapping(address => uint256) public _userMintCount; bool public whitelistPeriod = true; event whitelistPeriodUpdated(bool enabled); constructor() ERC721("Amzy", "AMZY") { setHiddenMetadataUri("ipfs://QmXfFG1gwD9byhfZxGntqkmcxjYy4HAVRpJZ8stLvPrrnw/amzy.json"); } modifier mintCompliance(uint256 _mintAmount) { if (_isWhitelisted[msg.sender]) { require((_userMintCount[msg.sender] + _mintAmount) <= maxWhitelistMintAmount); } else { require((_userMintCount[msg.sender] + _mintAmount) <= maxMintAmount); } if (whitelistPeriod == true) { require(_mintAmount > 0 && _mintAmount <= maxWhitelistMintAmountPerTx, "Invalid mint amount!"); } else { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); } require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function totalSupply() public view returns (uint256) { return supply.current(); } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { if (whitelistPeriod == true) { require(_isWhitelisted[msg.sender]); require(msg.value >= whitelistCost * _mintAmount, "Insufficient funds!"); } else { require(msg.value >= cost * _mintAmount, "Insufficient funds!"); } require(!paused, "The contract is paused!"); _mintLoop(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setWhitelistCost(uint256 _whitelistCost) public onlyOwner { whitelistCost = _whitelistCost; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setMaxWhitelistMintAmount(uint256 _maxWhitelistMintAmount) public onlyOwner { maxWhitelistMintAmount = _maxWhitelistMintAmount; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function withdraw() public onlyOwner { devs1 = address(this).balance * 5 / 100; devs2 = address(this).balance * 475 / 1000; (bool dev1, ) = payable(0x8fd0719DfaD555C69ad0967E9EB0cE013C067051).call{value: devs1}(""); require(dev1); (bool dev2, ) = payable(0x2EfE4C1536dbb50026638a5A329175f67bC15F9f).call{value: devs2}(""); require(dev2); (bool dev3, ) = payable(0x6361a3FF59a71A4B85c2ec8B1A87C4e23c567eAb).call{value: devs2}(""); require(dev3); } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _userMintCount[msg.sender] = _userMintCount[msg.sender] + 1; _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } function whitelist(address[] memory _accounts) public onlyOwner { for (uint256 account = 0; account < _accounts.length; account++) { _isWhitelisted[_accounts[account]] = true; } } function addToWhitelist(address account) public onlyOwner { _isWhitelisted[account] = true; } function removeFromWhitelist(address account) public onlyOwner { _isWhitelisted[account] = false; } function isWhitelisted(address account) public view returns(bool) { return _isWhitelisted[account]; } function userMintCount(address account) public view returns(uint256) { return _userMintCount[account]; } function setwhitelistPeriod(bool _enabled) public onlyOwner { whitelistPeriod = _enabled; emit whitelistPeriodUpdated(_enabled); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"whitelistPeriodUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_userMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWhitelistMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWhitelistMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"nonpayable","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWhitelistMintAmount","type":"uint256"}],"name":"setMaxWhitelistMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistCost","type":"uint256"}],"name":"setWhitelistCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setwhitelistPeriod","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":[],"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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"userMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"}],"name":"whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600890805190602001906200002b929190620003ae565b506040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506009908051906020019062000079929190620003ae565b50663c6568f12e8000600b55662386f26fc10000600c55611e61600d55600a600e55600a600f55600760105560076011556001601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff0219169083151502179055506001601760006101000a81548160ff0219169083151502179055503480156200010857600080fd5b506040518060400160405280600481526020017f416d7a79000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f414d5a590000000000000000000000000000000000000000000000000000000081525081600090805190602001906200018d929190620003ae565b508060019080519060200190620001a6929190620003ae565b505050620001c9620001bd620001f960201b60201c565b6200020160201b60201c565b620001f36040518060600160405280603f815260200162004fc6603f9139620002c760201b60201c565b62000546565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002d7620002f360201b60201c565b80600a9080519060200190620002ef929190620003ae565b5050565b62000303620001f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003296200038460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000382576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003799062000485565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003bc90620004b8565b90600052602060002090601f016020900481019282620003e057600085556200042c565b82601f10620003fb57805160ff19168380011785556200042c565b828001600101855582156200042c579182015b828111156200042b5782518255916020019190600101906200040e565b5b5090506200043b91906200043f565b5090565b5b808211156200045a57600081600090555060010162000440565b5090565b60006200046d602083620004a7565b91506200047a826200051d565b602082019050919050565b60006020820190508181036000830152620004a0816200045e565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620004d157607f821691505b60208210811415620004e857620004e7620004ee565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614a7080620005566000396000f3fe6080604052600436106102ae5760003560e01c806370a0823111610175578063b88d4fde116100dc578063e43252d711610095578063ef7f63571161006f578063ef7f635714610a89578063efbd73f414610ac6578063f2fde38b14610aef578063f96407fa14610b18576102ae565b8063e43252d7146109f8578063e7b99ec714610a21578063e985e9c514610a4c576102ae565b8063b88d4fde146108ec578063bd8aa78014610915578063c87b56dd1461093e578063d49479eb1461097b578063d5abeb01146109a4578063e0a80853146109cf576102ae565b806395d89b411161012e57806395d89b41146107fd578063a0712d6814610828578063a22cb46514610844578063a45ba8e71461086d578063b071401b14610898578063b48e665e146108c1576102ae565b806370a0823114610701578063715018a61461073e5780637ec4a659146107555780638ab1d6811461077e5780638da5cb5b146107a757806394354fd0146107d2576102ae565b80633950891f116102195780634c59547f116101d25780634c59547f146105f15780634fdd43cb1461061a57806351830227146106435780635503a0e81461066e5780635c975abb146106995780636352211e146106c4576102ae565b80633950891f146104d15780633af32abf1461050e5780633ccfd60b1461054b57806342842e0e14610562578063438b63001461058b57806344a0d68a146105c8576102ae565b806316c38b3c1161026b57806316c38b3c146103d557806318160ddd146103fe57806319c8b85f146104295780632116e39414610452578063239c70ae1461047d57806323b872dd146104a8576102ae565b806301ffc9a7146102b357806306fdde03146102f0578063081812fc1461031b578063095ea7b31461035857806313faede61461038157806316ba10e0146103ac575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d591906137e4565b610b43565b6040516102e79190613e30565b60405180910390f35b3480156102fc57600080fd5b50610305610c25565b6040516103129190613e4b565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190613887565b610cb7565b60405161034f9190613da7565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a919061372e565b610cfd565b005b34801561038d57600080fd5b50610396610e15565b6040516103a391906140ad565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce919061383e565b610e1b565b005b3480156103e157600080fd5b506103fc60048036038101906103f791906137b7565b610e3d565b005b34801561040a57600080fd5b50610413610e62565b60405161042091906140ad565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190613887565b610e73565b005b34801561045e57600080fd5b50610467610e85565b60405161047491906140ad565b60405180910390f35b34801561048957600080fd5b50610492610e8b565b60405161049f91906140ad565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca9190613618565b610e91565b005b3480156104dd57600080fd5b506104f860048036038101906104f391906135ab565b610ef1565b60405161050591906140ad565b60405180910390f35b34801561051a57600080fd5b50610535600480360381019061053091906135ab565b610f3a565b6040516105429190613e30565b60405180910390f35b34801561055757600080fd5b50610560610f90565b005b34801561056e57600080fd5b5061058960048036038101906105849190613618565b611181565b005b34801561059757600080fd5b506105b260048036038101906105ad91906135ab565b6111a1565b6040516105bf9190613e0e565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190613887565b6112ac565b005b3480156105fd57600080fd5b50610618600480360381019061061391906137b7565b6112be565b005b34801561062657600080fd5b50610641600480360381019061063c919061383e565b61131a565b005b34801561064f57600080fd5b5061065861133c565b6040516106659190613e30565b60405180910390f35b34801561067a57600080fd5b5061068361134f565b6040516106909190613e4b565b60405180910390f35b3480156106a557600080fd5b506106ae6113dd565b6040516106bb9190613e30565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190613887565b6113f0565b6040516106f89190613da7565b60405180910390f35b34801561070d57600080fd5b50610728600480360381019061072391906135ab565b611477565b60405161073591906140ad565b60405180910390f35b34801561074a57600080fd5b5061075361152f565b005b34801561076157600080fd5b5061077c6004803603810190610777919061383e565b611543565b005b34801561078a57600080fd5b506107a560048036038101906107a091906135ab565b611565565b005b3480156107b357600080fd5b506107bc6115c8565b6040516107c99190613da7565b60405180910390f35b3480156107de57600080fd5b506107e76115f2565b6040516107f491906140ad565b60405180910390f35b34801561080957600080fd5b506108126115f8565b60405161081f9190613e4b565b60405180910390f35b610842600480360381019061083d9190613887565b61168a565b005b34801561085057600080fd5b5061086b600480360381019061086691906136ee565b611a28565b005b34801561087957600080fd5b50610882611a3e565b60405161088f9190613e4b565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba9190613887565b611acc565b005b3480156108cd57600080fd5b506108d6611ade565b6040516108e39190613e30565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e919061366b565b611af1565b005b34801561092157600080fd5b5061093c6004803603810190610937919061376e565b611b53565b005b34801561094a57600080fd5b5061096560048036038101906109609190613887565b611bf0565b6040516109729190613e4b565b60405180910390f35b34801561098757600080fd5b506109a2600480360381019061099d9190613887565b611d49565b005b3480156109b057600080fd5b506109b9611d5b565b6040516109c691906140ad565b60405180910390f35b3480156109db57600080fd5b506109f660048036038101906109f191906137b7565b611d61565b005b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906135ab565b611d86565b005b348015610a2d57600080fd5b50610a36611de9565b604051610a4391906140ad565b60405180910390f35b348015610a5857600080fd5b50610a736004803603810190610a6e91906135d8565b611def565b604051610a809190613e30565b60405180910390f35b348015610a9557600080fd5b50610ab06004803603810190610aab91906135ab565b611e83565b604051610abd91906140ad565b60405180910390f35b348015610ad257600080fd5b50610aed6004803603810190610ae891906138b4565b611e9b565b005b348015610afb57600080fd5b50610b166004803603810190610b1191906135ab565b6120da565b005b348015610b2457600080fd5b50610b2d61215e565b604051610b3a91906140ad565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c0e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c1e5750610c1d82612164565b5b9050919050565b606060008054610c34906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610c60906143e2565b8015610cad5780601f10610c8257610100808354040283529160200191610cad565b820191906000526020600020905b815481529060010190602001808311610c9057829003601f168201915b5050505050905090565b6000610cc2826121ce565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d08826113f0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d709061402d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d98612219565b73ffffffffffffffffffffffffffffffffffffffff161480610dc75750610dc681610dc1612219565b611def565b5b610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd9061406d565b60405180910390fd5b610e108383612221565b505050565b600b5481565b610e236122da565b8060099080519060200190610e39929190613321565b5050565b610e456122da565b80601460006101000a81548160ff02191690831515021790555050565b6000610e6e6007612358565b905090565b610e7b6122da565b80600e8190555050565b600f5481565b60105481565b610ea2610e9c612219565b82612366565b610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890613e6d565b60405180910390fd5b610eec8383836123fb565b505050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f986122da565b6064600547610fa7919061429e565b610fb1919061426d565b6012819055506103e86101db47610fc8919061429e565b610fd2919061426d565b6013819055506000738fd0719dfad555c69ad0967e9eb0ce013c06705173ffffffffffffffffffffffffffffffffffffffff1660125460405161101490613d92565b60006040518083038185875af1925050503d8060008114611051576040519150601f19603f3d011682016040523d82523d6000602084013e611056565b606091505b505090508061106457600080fd5b6000732efe4c1536dbb50026638a5a329175f67bc15f9f73ffffffffffffffffffffffffffffffffffffffff166013546040516110a090613d92565b60006040518083038185875af1925050503d80600081146110dd576040519150601f19603f3d011682016040523d82523d6000602084013e6110e2565b606091505b50509050806110f057600080fd5b6000736361a3ff59a71a4b85c2ec8b1a87c4e23c567eab73ffffffffffffffffffffffffffffffffffffffff1660135460405161112c90613d92565b60006040518083038185875af1925050503d8060008114611169576040519150601f19603f3d011682016040523d82523d6000602084013e61116e565b606091505b505090508061117c57600080fd5b505050565b61119c83838360405180602001604052806000815250611af1565b505050565b606060006111ae83611477565b905060008167ffffffffffffffff8111156111cc576111cb61454a565b5b6040519080825280602002602001820160405280156111fa5781602001602082028036833780820191505090505b50905060006001905060005b83811080156112175750600d548211155b156112a0576000611227836113f0565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561128c57828483815181106112715761127061451b565b5b602002602001018181525050818061128890614445565b9250505b828061129790614445565b93505050611206565b82945050505050919050565b6112b46122da565b80600b8190555050565b6112c66122da565b80601760006101000a81548160ff0219169083151502179055507f0110312507d6aa91b4ec346fc5c734f7509319fd381e0c2f8abc5c0ef45a02248160405161130f9190613e30565b60405180910390a150565b6113226122da565b80600a9080519060200190611338929190613321565b5050565b601460019054906101000a900460ff1681565b6009805461135c906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611388906143e2565b80156113d55780601f106113aa576101008083540402835291602001916113d5565b820191906000526020600020905b8154815290600101906020018083116113b857829003601f168201915b505050505081565b601460009054906101000a900460ff1681565b6000806113fc836126f5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561146e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114659061400d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df90613f6d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115376122da565b6115416000612732565b565b61154b6122da565b8060089080519060200190611561929190613321565b5050565b61156d6122da565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b606060018054611607906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611633906143e2565b80156116805780601f1061165557610100808354040283529160200191611680565b820191906000526020600020905b81548152906001019060200180831161166357829003601f168201915b5050505050905090565b80601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561173b57600e5481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461172b9190614217565b111561173657600080fd5b611795565b60105481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117899190614217565b111561179457600080fd5b5b60011515601760009054906101000a900460ff1615151415611807576000811180156117c35750600f548111155b611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613f0d565b60405180910390fd5b611859565b60008111801561181957506011548111155b611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90613f0d565b60405180910390fd5b5b600d54816118676007612358565b6118719190614217565b11156118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a99061404d565b60405180910390fd5b60011515601760009054906101000a900460ff161515141561197957601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661192457600080fd5b81600c54611932919061429e565b341015611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b9061408d565b60405180910390fd5b6119ca565b81600b54611987919061429e565b3410156119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c09061408d565b60405180910390fd5b5b601460009054906101000a900460ff1615611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1190613fcd565b60405180910390fd5b611a2433836127f8565b5050565b611a3a611a33612219565b83836128c7565b5050565b600a8054611a4b906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a77906143e2565b8015611ac45780601f10611a9957610100808354040283529160200191611ac4565b820191906000526020600020905b815481529060010190602001808311611aa757829003601f168201915b505050505081565b611ad46122da565b8060118190555050565b601760009054906101000a900460ff1681565b611b02611afc612219565b83612366565b611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3890613e6d565b60405180910390fd5b611b4d84848484612a34565b50505050565b611b5b6122da565b60005b8151811015611bec57600160156000848481518110611b8057611b7f61451b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611be490614445565b915050611b5e565b5050565b6060611bfb82612a90565b611c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3190613fed565b60405180910390fd5b60001515601460019054906101000a900460ff1615151415611ce857600a8054611c63906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8f906143e2565b8015611cdc5780601f10611cb157610100808354040283529160200191611cdc565b820191906000526020600020905b815481529060010190602001808311611cbf57829003601f168201915b50505050509050611d44565b6000611cf2612ad1565b90506000815111611d125760405180602001604052806000815250611d40565b80611d1c84612b63565b6009604051602001611d3093929190613d61565b6040516020818303038152906040525b9150505b919050565b611d516122da565b80600c8190555050565b600d5481565b611d696122da565b80601460016101000a81548160ff02191690831515021790555050565b611d8e6122da565b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60166020528060005260406000206000915090505481565b81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f4c57600e5481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f3c9190614217565b1115611f4757600080fd5b611fa6565b60105481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9a9190614217565b1115611fa557600080fd5b5b60011515601760009054906101000a900460ff161515141561201857600081118015611fd45750600f548111155b612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90613f0d565b60405180910390fd5b61206a565b60008111801561202a57506011548111155b612069576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206090613f0d565b60405180910390fd5b5b600d54816120786007612358565b6120829190614217565b11156120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba9061404d565b60405180910390fd5b6120cb6122da565b6120d582846127f8565b505050565b6120e26122da565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990613ead565b60405180910390fd5b61215b81612732565b50565b600e5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121d781612a90565b612216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220d9061400d565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612294836113f0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6122e2612219565b73ffffffffffffffffffffffffffffffffffffffff166123006115c8565b73ffffffffffffffffffffffffffffffffffffffff1614612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90613fad565b60405180910390fd5b565b600081600001549050919050565b600080612372836113f0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123b457506123b38185611def565b5b806123f257508373ffffffffffffffffffffffffffffffffffffffff166123da84610cb7565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661241b826113f0565b73ffffffffffffffffffffffffffffffffffffffff1614612471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246890613ecd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d890613f2d565b60405180910390fd5b6124ee8383836001612c3b565b8273ffffffffffffffffffffffffffffffffffffffff1661250e826113f0565b73ffffffffffffffffffffffffffffffffffffffff1614612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90613ecd565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126f08383836001612d61565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156128c25761280d6007612d67565b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128599190614217565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128af836128aa6007612358565b612d7d565b80806128ba90614445565b9150506127fb565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292d90613f4d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a279190613e30565b60405180910390a3505050565b612a3f8484846123fb565b612a4b84848484612d9b565b612a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8190613e8d565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16612ab2836126f5565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060088054612ae0906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054612b0c906143e2565b8015612b595780601f10612b2e57610100808354040283529160200191612b59565b820191906000526020600020905b815481529060010190602001808311612b3c57829003601f168201915b5050505050905090565b606060006001612b7284612f32565b01905060008167ffffffffffffffff811115612b9157612b9061454a565b5b6040519080825280601f01601f191660200182016040528015612bc35781602001600182028036833780820191505090505b509050600082602001820190505b600115612c30578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612c1a57612c196144bd565b5b0494506000851415612c2b57612c30565b612bd1565b819350505050919050565b6001811115612d5b57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612ccf5780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cc791906142f8565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d5a5780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d529190614217565b925050819055505b5b50505050565b50505050565b6001816000016000828254019250508190555050565b612d97828260405180602001604052806000815250613085565b5050565b6000612dbc8473ffffffffffffffffffffffffffffffffffffffff166130e0565b15612f25578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612de5612219565b8786866040518563ffffffff1660e01b8152600401612e079493929190613dc2565b602060405180830381600087803b158015612e2157600080fd5b505af1925050508015612e5257506040513d601f19601f82011682018060405250810190612e4f9190613811565b60015b612ed5573d8060008114612e82576040519150601f19603f3d011682016040523d82523d6000602084013e612e87565b606091505b50600081511415612ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec490613e8d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f2a565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f90577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612f8657612f856144bd565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612fcd576d04ee2d6d415b85acef81000000008381612fc357612fc26144bd565b5b0492506020810190505b662386f26fc100008310612ffc57662386f26fc100008381612ff257612ff16144bd565b5b0492506010810190505b6305f5e1008310613025576305f5e100838161301b5761301a6144bd565b5b0492506008810190505b612710831061304a5761271083816130405761303f6144bd565b5b0492506004810190505b6064831061306d5760648381613063576130626144bd565b5b0492506002810190505b600a831061307c576001810190505b80915050919050565b61308f8383613103565b61309c6000848484612d9b565b6130db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d290613e8d565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316a90613f8d565b60405180910390fd5b61317c81612a90565b156131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b390613eed565b60405180910390fd5b6131ca600083836001612c3b565b6131d381612a90565b15613213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320a90613eed565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461331d600083836001612d61565b5050565b82805461332d906143e2565b90600052602060002090601f01602090048101928261334f5760008555613396565b82601f1061336857805160ff1916838001178555613396565b82800160010185558215613396579182015b8281111561339557825182559160200191906001019061337a565b5b5090506133a391906133a7565b5090565b5b808211156133c05760008160009055506001016133a8565b5090565b60006133d76133d2846140ed565b6140c8565b905080838252602082019050828560208602820111156133fa576133f961457e565b5b60005b8581101561342a578161341088826134b8565b8452602084019350602083019250506001810190506133fd565b5050509392505050565b600061344761344284614119565b6140c8565b90508281526020810184848401111561346357613462614583565b5b61346e8482856143a0565b509392505050565b60006134896134848461414a565b6140c8565b9050828152602081018484840111156134a5576134a4614583565b5b6134b08482856143a0565b509392505050565b6000813590506134c7816149de565b92915050565b600082601f8301126134e2576134e1614579565b5b81356134f28482602086016133c4565b91505092915050565b60008135905061350a816149f5565b92915050565b60008135905061351f81614a0c565b92915050565b60008151905061353481614a0c565b92915050565b600082601f83011261354f5761354e614579565b5b813561355f848260208601613434565b91505092915050565b600082601f83011261357d5761357c614579565b5b813561358d848260208601613476565b91505092915050565b6000813590506135a581614a23565b92915050565b6000602082840312156135c1576135c061458d565b5b60006135cf848285016134b8565b91505092915050565b600080604083850312156135ef576135ee61458d565b5b60006135fd858286016134b8565b925050602061360e858286016134b8565b9150509250929050565b6000806000606084860312156136315761363061458d565b5b600061363f868287016134b8565b9350506020613650868287016134b8565b925050604061366186828701613596565b9150509250925092565b600080600080608085870312156136855761368461458d565b5b6000613693878288016134b8565b94505060206136a4878288016134b8565b93505060406136b587828801613596565b925050606085013567ffffffffffffffff8111156136d6576136d5614588565b5b6136e28782880161353a565b91505092959194509250565b600080604083850312156137055761370461458d565b5b6000613713858286016134b8565b9250506020613724858286016134fb565b9150509250929050565b600080604083850312156137455761374461458d565b5b6000613753858286016134b8565b925050602061376485828601613596565b9150509250929050565b6000602082840312156137845761378361458d565b5b600082013567ffffffffffffffff8111156137a2576137a1614588565b5b6137ae848285016134cd565b91505092915050565b6000602082840312156137cd576137cc61458d565b5b60006137db848285016134fb565b91505092915050565b6000602082840312156137fa576137f961458d565b5b600061380884828501613510565b91505092915050565b6000602082840312156138275761382661458d565b5b600061383584828501613525565b91505092915050565b6000602082840312156138545761385361458d565b5b600082013567ffffffffffffffff81111561387257613871614588565b5b61387e84828501613568565b91505092915050565b60006020828403121561389d5761389c61458d565b5b60006138ab84828501613596565b91505092915050565b600080604083850312156138cb576138ca61458d565b5b60006138d985828601613596565b92505060206138ea858286016134b8565b9150509250929050565b60006139008383613d43565b60208301905092915050565b6139158161432c565b82525050565b6000613926826141a0565b61393081856141ce565b935061393b8361417b565b8060005b8381101561396c57815161395388826138f4565b975061395e836141c1565b92505060018101905061393f565b5085935050505092915050565b6139828161433e565b82525050565b6000613993826141ab565b61399d81856141df565b93506139ad8185602086016143af565b6139b681614592565b840191505092915050565b60006139cc826141b6565b6139d681856141fb565b93506139e68185602086016143af565b6139ef81614592565b840191505092915050565b6000613a05826141b6565b613a0f818561420c565b9350613a1f8185602086016143af565b80840191505092915050565b60008154613a38816143e2565b613a42818661420c565b94506001821660008114613a5d5760018114613a6e57613aa1565b60ff19831686528186019350613aa1565b613a778561418b565b60005b83811015613a9957815481890152600182019150602081019050613a7a565b838801955050505b50505092915050565b6000613ab7602d836141fb565b9150613ac2826145a3565b604082019050919050565b6000613ada6032836141fb565b9150613ae5826145f2565b604082019050919050565b6000613afd6026836141fb565b9150613b0882614641565b604082019050919050565b6000613b206025836141fb565b9150613b2b82614690565b604082019050919050565b6000613b43601c836141fb565b9150613b4e826146df565b602082019050919050565b6000613b666014836141fb565b9150613b7182614708565b602082019050919050565b6000613b896024836141fb565b9150613b9482614731565b604082019050919050565b6000613bac6019836141fb565b9150613bb782614780565b602082019050919050565b6000613bcf6029836141fb565b9150613bda826147a9565b604082019050919050565b6000613bf26020836141fb565b9150613bfd826147f8565b602082019050919050565b6000613c156020836141fb565b9150613c2082614821565b602082019050919050565b6000613c386017836141fb565b9150613c438261484a565b602082019050919050565b6000613c5b602f836141fb565b9150613c6682614873565b604082019050919050565b6000613c7e6018836141fb565b9150613c89826148c2565b602082019050919050565b6000613ca16021836141fb565b9150613cac826148eb565b604082019050919050565b6000613cc46000836141f0565b9150613ccf8261493a565b600082019050919050565b6000613ce76014836141fb565b9150613cf28261493d565b602082019050919050565b6000613d0a603d836141fb565b9150613d1582614966565b604082019050919050565b6000613d2d6013836141fb565b9150613d38826149b5565b602082019050919050565b613d4c81614396565b82525050565b613d5b81614396565b82525050565b6000613d6d82866139fa565b9150613d7982856139fa565b9150613d858284613a2b565b9150819050949350505050565b6000613d9d82613cb7565b9150819050919050565b6000602082019050613dbc600083018461390c565b92915050565b6000608082019050613dd7600083018761390c565b613de4602083018661390c565b613df16040830185613d52565b8181036060830152613e038184613988565b905095945050505050565b60006020820190508181036000830152613e28818461391b565b905092915050565b6000602082019050613e456000830184613979565b92915050565b60006020820190508181036000830152613e6581846139c1565b905092915050565b60006020820190508181036000830152613e8681613aaa565b9050919050565b60006020820190508181036000830152613ea681613acd565b9050919050565b60006020820190508181036000830152613ec681613af0565b9050919050565b60006020820190508181036000830152613ee681613b13565b9050919050565b60006020820190508181036000830152613f0681613b36565b9050919050565b60006020820190508181036000830152613f2681613b59565b9050919050565b60006020820190508181036000830152613f4681613b7c565b9050919050565b60006020820190508181036000830152613f6681613b9f565b9050919050565b60006020820190508181036000830152613f8681613bc2565b9050919050565b60006020820190508181036000830152613fa681613be5565b9050919050565b60006020820190508181036000830152613fc681613c08565b9050919050565b60006020820190508181036000830152613fe681613c2b565b9050919050565b6000602082019050818103600083015261400681613c4e565b9050919050565b6000602082019050818103600083015261402681613c71565b9050919050565b6000602082019050818103600083015261404681613c94565b9050919050565b6000602082019050818103600083015261406681613cda565b9050919050565b6000602082019050818103600083015261408681613cfd565b9050919050565b600060208201905081810360008301526140a681613d20565b9050919050565b60006020820190506140c26000830184613d52565b92915050565b60006140d26140e3565b90506140de8282614414565b919050565b6000604051905090565b600067ffffffffffffffff8211156141085761410761454a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141345761413361454a565b5b61413d82614592565b9050602081019050919050565b600067ffffffffffffffff8211156141655761416461454a565b5b61416e82614592565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061422282614396565b915061422d83614396565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142625761426161448e565b5b828201905092915050565b600061427882614396565b915061428383614396565b925082614293576142926144bd565b5b828204905092915050565b60006142a982614396565b91506142b483614396565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142ed576142ec61448e565b5b828202905092915050565b600061430382614396565b915061430e83614396565b9250828210156143215761432061448e565b5b828203905092915050565b600061433782614376565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143cd5780820151818401526020810190506143b2565b838111156143dc576000848401525b50505050565b600060028204905060018216806143fa57607f821691505b6020821081141561440e5761440d6144ec565b5b50919050565b61441d82614592565b810181811067ffffffffffffffff8211171561443c5761443b61454a565b5b80604052505050565b600061445082614396565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144835761448261448e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6149e78161432c565b81146149f257600080fd5b50565b6149fe8161433e565b8114614a0957600080fd5b50565b614a158161434a565b8114614a2057600080fd5b50565b614a2c81614396565b8114614a3757600080fd5b5056fea26469706673582212207ada267048d6b08c9a4be959f56c5d2d08135c40ce8884aad55f103e7ed35beb64736f6c63430008070033697066733a2f2f516d586646473167774439627968665a78476e74716b6d63786a59793448415652704a5a3873744c765072726e772f616d7a792e6a736f6e
Deployed Bytecode
0x6080604052600436106102ae5760003560e01c806370a0823111610175578063b88d4fde116100dc578063e43252d711610095578063ef7f63571161006f578063ef7f635714610a89578063efbd73f414610ac6578063f2fde38b14610aef578063f96407fa14610b18576102ae565b8063e43252d7146109f8578063e7b99ec714610a21578063e985e9c514610a4c576102ae565b8063b88d4fde146108ec578063bd8aa78014610915578063c87b56dd1461093e578063d49479eb1461097b578063d5abeb01146109a4578063e0a80853146109cf576102ae565b806395d89b411161012e57806395d89b41146107fd578063a0712d6814610828578063a22cb46514610844578063a45ba8e71461086d578063b071401b14610898578063b48e665e146108c1576102ae565b806370a0823114610701578063715018a61461073e5780637ec4a659146107555780638ab1d6811461077e5780638da5cb5b146107a757806394354fd0146107d2576102ae565b80633950891f116102195780634c59547f116101d25780634c59547f146105f15780634fdd43cb1461061a57806351830227146106435780635503a0e81461066e5780635c975abb146106995780636352211e146106c4576102ae565b80633950891f146104d15780633af32abf1461050e5780633ccfd60b1461054b57806342842e0e14610562578063438b63001461058b57806344a0d68a146105c8576102ae565b806316c38b3c1161026b57806316c38b3c146103d557806318160ddd146103fe57806319c8b85f146104295780632116e39414610452578063239c70ae1461047d57806323b872dd146104a8576102ae565b806301ffc9a7146102b357806306fdde03146102f0578063081812fc1461031b578063095ea7b31461035857806313faede61461038157806316ba10e0146103ac575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d591906137e4565b610b43565b6040516102e79190613e30565b60405180910390f35b3480156102fc57600080fd5b50610305610c25565b6040516103129190613e4b565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190613887565b610cb7565b60405161034f9190613da7565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a919061372e565b610cfd565b005b34801561038d57600080fd5b50610396610e15565b6040516103a391906140ad565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce919061383e565b610e1b565b005b3480156103e157600080fd5b506103fc60048036038101906103f791906137b7565b610e3d565b005b34801561040a57600080fd5b50610413610e62565b60405161042091906140ad565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190613887565b610e73565b005b34801561045e57600080fd5b50610467610e85565b60405161047491906140ad565b60405180910390f35b34801561048957600080fd5b50610492610e8b565b60405161049f91906140ad565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca9190613618565b610e91565b005b3480156104dd57600080fd5b506104f860048036038101906104f391906135ab565b610ef1565b60405161050591906140ad565b60405180910390f35b34801561051a57600080fd5b50610535600480360381019061053091906135ab565b610f3a565b6040516105429190613e30565b60405180910390f35b34801561055757600080fd5b50610560610f90565b005b34801561056e57600080fd5b5061058960048036038101906105849190613618565b611181565b005b34801561059757600080fd5b506105b260048036038101906105ad91906135ab565b6111a1565b6040516105bf9190613e0e565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190613887565b6112ac565b005b3480156105fd57600080fd5b50610618600480360381019061061391906137b7565b6112be565b005b34801561062657600080fd5b50610641600480360381019061063c919061383e565b61131a565b005b34801561064f57600080fd5b5061065861133c565b6040516106659190613e30565b60405180910390f35b34801561067a57600080fd5b5061068361134f565b6040516106909190613e4b565b60405180910390f35b3480156106a557600080fd5b506106ae6113dd565b6040516106bb9190613e30565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190613887565b6113f0565b6040516106f89190613da7565b60405180910390f35b34801561070d57600080fd5b50610728600480360381019061072391906135ab565b611477565b60405161073591906140ad565b60405180910390f35b34801561074a57600080fd5b5061075361152f565b005b34801561076157600080fd5b5061077c6004803603810190610777919061383e565b611543565b005b34801561078a57600080fd5b506107a560048036038101906107a091906135ab565b611565565b005b3480156107b357600080fd5b506107bc6115c8565b6040516107c99190613da7565b60405180910390f35b3480156107de57600080fd5b506107e76115f2565b6040516107f491906140ad565b60405180910390f35b34801561080957600080fd5b506108126115f8565b60405161081f9190613e4b565b60405180910390f35b610842600480360381019061083d9190613887565b61168a565b005b34801561085057600080fd5b5061086b600480360381019061086691906136ee565b611a28565b005b34801561087957600080fd5b50610882611a3e565b60405161088f9190613e4b565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba9190613887565b611acc565b005b3480156108cd57600080fd5b506108d6611ade565b6040516108e39190613e30565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e919061366b565b611af1565b005b34801561092157600080fd5b5061093c6004803603810190610937919061376e565b611b53565b005b34801561094a57600080fd5b5061096560048036038101906109609190613887565b611bf0565b6040516109729190613e4b565b60405180910390f35b34801561098757600080fd5b506109a2600480360381019061099d9190613887565b611d49565b005b3480156109b057600080fd5b506109b9611d5b565b6040516109c691906140ad565b60405180910390f35b3480156109db57600080fd5b506109f660048036038101906109f191906137b7565b611d61565b005b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906135ab565b611d86565b005b348015610a2d57600080fd5b50610a36611de9565b604051610a4391906140ad565b60405180910390f35b348015610a5857600080fd5b50610a736004803603810190610a6e91906135d8565b611def565b604051610a809190613e30565b60405180910390f35b348015610a9557600080fd5b50610ab06004803603810190610aab91906135ab565b611e83565b604051610abd91906140ad565b60405180910390f35b348015610ad257600080fd5b50610aed6004803603810190610ae891906138b4565b611e9b565b005b348015610afb57600080fd5b50610b166004803603810190610b1191906135ab565b6120da565b005b348015610b2457600080fd5b50610b2d61215e565b604051610b3a91906140ad565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c0e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c1e5750610c1d82612164565b5b9050919050565b606060008054610c34906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610c60906143e2565b8015610cad5780601f10610c8257610100808354040283529160200191610cad565b820191906000526020600020905b815481529060010190602001808311610c9057829003601f168201915b5050505050905090565b6000610cc2826121ce565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d08826113f0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d709061402d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d98612219565b73ffffffffffffffffffffffffffffffffffffffff161480610dc75750610dc681610dc1612219565b611def565b5b610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd9061406d565b60405180910390fd5b610e108383612221565b505050565b600b5481565b610e236122da565b8060099080519060200190610e39929190613321565b5050565b610e456122da565b80601460006101000a81548160ff02191690831515021790555050565b6000610e6e6007612358565b905090565b610e7b6122da565b80600e8190555050565b600f5481565b60105481565b610ea2610e9c612219565b82612366565b610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890613e6d565b60405180910390fd5b610eec8383836123fb565b505050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f986122da565b6064600547610fa7919061429e565b610fb1919061426d565b6012819055506103e86101db47610fc8919061429e565b610fd2919061426d565b6013819055506000738fd0719dfad555c69ad0967e9eb0ce013c06705173ffffffffffffffffffffffffffffffffffffffff1660125460405161101490613d92565b60006040518083038185875af1925050503d8060008114611051576040519150601f19603f3d011682016040523d82523d6000602084013e611056565b606091505b505090508061106457600080fd5b6000732efe4c1536dbb50026638a5a329175f67bc15f9f73ffffffffffffffffffffffffffffffffffffffff166013546040516110a090613d92565b60006040518083038185875af1925050503d80600081146110dd576040519150601f19603f3d011682016040523d82523d6000602084013e6110e2565b606091505b50509050806110f057600080fd5b6000736361a3ff59a71a4b85c2ec8b1a87c4e23c567eab73ffffffffffffffffffffffffffffffffffffffff1660135460405161112c90613d92565b60006040518083038185875af1925050503d8060008114611169576040519150601f19603f3d011682016040523d82523d6000602084013e61116e565b606091505b505090508061117c57600080fd5b505050565b61119c83838360405180602001604052806000815250611af1565b505050565b606060006111ae83611477565b905060008167ffffffffffffffff8111156111cc576111cb61454a565b5b6040519080825280602002602001820160405280156111fa5781602001602082028036833780820191505090505b50905060006001905060005b83811080156112175750600d548211155b156112a0576000611227836113f0565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561128c57828483815181106112715761127061451b565b5b602002602001018181525050818061128890614445565b9250505b828061129790614445565b93505050611206565b82945050505050919050565b6112b46122da565b80600b8190555050565b6112c66122da565b80601760006101000a81548160ff0219169083151502179055507f0110312507d6aa91b4ec346fc5c734f7509319fd381e0c2f8abc5c0ef45a02248160405161130f9190613e30565b60405180910390a150565b6113226122da565b80600a9080519060200190611338929190613321565b5050565b601460019054906101000a900460ff1681565b6009805461135c906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611388906143e2565b80156113d55780601f106113aa576101008083540402835291602001916113d5565b820191906000526020600020905b8154815290600101906020018083116113b857829003601f168201915b505050505081565b601460009054906101000a900460ff1681565b6000806113fc836126f5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561146e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114659061400d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df90613f6d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115376122da565b6115416000612732565b565b61154b6122da565b8060089080519060200190611561929190613321565b5050565b61156d6122da565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b606060018054611607906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611633906143e2565b80156116805780601f1061165557610100808354040283529160200191611680565b820191906000526020600020905b81548152906001019060200180831161166357829003601f168201915b5050505050905090565b80601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561173b57600e5481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461172b9190614217565b111561173657600080fd5b611795565b60105481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117899190614217565b111561179457600080fd5b5b60011515601760009054906101000a900460ff1615151415611807576000811180156117c35750600f548111155b611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613f0d565b60405180910390fd5b611859565b60008111801561181957506011548111155b611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90613f0d565b60405180910390fd5b5b600d54816118676007612358565b6118719190614217565b11156118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a99061404d565b60405180910390fd5b60011515601760009054906101000a900460ff161515141561197957601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661192457600080fd5b81600c54611932919061429e565b341015611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b9061408d565b60405180910390fd5b6119ca565b81600b54611987919061429e565b3410156119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c09061408d565b60405180910390fd5b5b601460009054906101000a900460ff1615611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1190613fcd565b60405180910390fd5b611a2433836127f8565b5050565b611a3a611a33612219565b83836128c7565b5050565b600a8054611a4b906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a77906143e2565b8015611ac45780601f10611a9957610100808354040283529160200191611ac4565b820191906000526020600020905b815481529060010190602001808311611aa757829003601f168201915b505050505081565b611ad46122da565b8060118190555050565b601760009054906101000a900460ff1681565b611b02611afc612219565b83612366565b611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3890613e6d565b60405180910390fd5b611b4d84848484612a34565b50505050565b611b5b6122da565b60005b8151811015611bec57600160156000848481518110611b8057611b7f61451b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611be490614445565b915050611b5e565b5050565b6060611bfb82612a90565b611c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3190613fed565b60405180910390fd5b60001515601460019054906101000a900460ff1615151415611ce857600a8054611c63906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8f906143e2565b8015611cdc5780601f10611cb157610100808354040283529160200191611cdc565b820191906000526020600020905b815481529060010190602001808311611cbf57829003601f168201915b50505050509050611d44565b6000611cf2612ad1565b90506000815111611d125760405180602001604052806000815250611d40565b80611d1c84612b63565b6009604051602001611d3093929190613d61565b6040516020818303038152906040525b9150505b919050565b611d516122da565b80600c8190555050565b600d5481565b611d696122da565b80601460016101000a81548160ff02191690831515021790555050565b611d8e6122da565b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60166020528060005260406000206000915090505481565b81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f4c57600e5481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f3c9190614217565b1115611f4757600080fd5b611fa6565b60105481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9a9190614217565b1115611fa557600080fd5b5b60011515601760009054906101000a900460ff161515141561201857600081118015611fd45750600f548111155b612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90613f0d565b60405180910390fd5b61206a565b60008111801561202a57506011548111155b612069576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206090613f0d565b60405180910390fd5b5b600d54816120786007612358565b6120829190614217565b11156120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba9061404d565b60405180910390fd5b6120cb6122da565b6120d582846127f8565b505050565b6120e26122da565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990613ead565b60405180910390fd5b61215b81612732565b50565b600e5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121d781612a90565b612216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220d9061400d565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612294836113f0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6122e2612219565b73ffffffffffffffffffffffffffffffffffffffff166123006115c8565b73ffffffffffffffffffffffffffffffffffffffff1614612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90613fad565b60405180910390fd5b565b600081600001549050919050565b600080612372836113f0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123b457506123b38185611def565b5b806123f257508373ffffffffffffffffffffffffffffffffffffffff166123da84610cb7565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661241b826113f0565b73ffffffffffffffffffffffffffffffffffffffff1614612471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246890613ecd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d890613f2d565b60405180910390fd5b6124ee8383836001612c3b565b8273ffffffffffffffffffffffffffffffffffffffff1661250e826113f0565b73ffffffffffffffffffffffffffffffffffffffff1614612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90613ecd565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126f08383836001612d61565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156128c25761280d6007612d67565b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128599190614217565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128af836128aa6007612358565b612d7d565b80806128ba90614445565b9150506127fb565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292d90613f4d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a279190613e30565b60405180910390a3505050565b612a3f8484846123fb565b612a4b84848484612d9b565b612a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8190613e8d565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16612ab2836126f5565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060088054612ae0906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054612b0c906143e2565b8015612b595780601f10612b2e57610100808354040283529160200191612b59565b820191906000526020600020905b815481529060010190602001808311612b3c57829003601f168201915b5050505050905090565b606060006001612b7284612f32565b01905060008167ffffffffffffffff811115612b9157612b9061454a565b5b6040519080825280601f01601f191660200182016040528015612bc35781602001600182028036833780820191505090505b509050600082602001820190505b600115612c30578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612c1a57612c196144bd565b5b0494506000851415612c2b57612c30565b612bd1565b819350505050919050565b6001811115612d5b57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612ccf5780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cc791906142f8565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d5a5780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d529190614217565b925050819055505b5b50505050565b50505050565b6001816000016000828254019250508190555050565b612d97828260405180602001604052806000815250613085565b5050565b6000612dbc8473ffffffffffffffffffffffffffffffffffffffff166130e0565b15612f25578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612de5612219565b8786866040518563ffffffff1660e01b8152600401612e079493929190613dc2565b602060405180830381600087803b158015612e2157600080fd5b505af1925050508015612e5257506040513d601f19601f82011682018060405250810190612e4f9190613811565b60015b612ed5573d8060008114612e82576040519150601f19603f3d011682016040523d82523d6000602084013e612e87565b606091505b50600081511415612ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec490613e8d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f2a565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f90577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612f8657612f856144bd565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612fcd576d04ee2d6d415b85acef81000000008381612fc357612fc26144bd565b5b0492506020810190505b662386f26fc100008310612ffc57662386f26fc100008381612ff257612ff16144bd565b5b0492506010810190505b6305f5e1008310613025576305f5e100838161301b5761301a6144bd565b5b0492506008810190505b612710831061304a5761271083816130405761303f6144bd565b5b0492506004810190505b6064831061306d5760648381613063576130626144bd565b5b0492506002810190505b600a831061307c576001810190505b80915050919050565b61308f8383613103565b61309c6000848484612d9b565b6130db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d290613e8d565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316a90613f8d565b60405180910390fd5b61317c81612a90565b156131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b390613eed565b60405180910390fd5b6131ca600083836001612c3b565b6131d381612a90565b15613213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320a90613eed565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461331d600083836001612d61565b5050565b82805461332d906143e2565b90600052602060002090601f01602090048101928261334f5760008555613396565b82601f1061336857805160ff1916838001178555613396565b82800160010185558215613396579182015b8281111561339557825182559160200191906001019061337a565b5b5090506133a391906133a7565b5090565b5b808211156133c05760008160009055506001016133a8565b5090565b60006133d76133d2846140ed565b6140c8565b905080838252602082019050828560208602820111156133fa576133f961457e565b5b60005b8581101561342a578161341088826134b8565b8452602084019350602083019250506001810190506133fd565b5050509392505050565b600061344761344284614119565b6140c8565b90508281526020810184848401111561346357613462614583565b5b61346e8482856143a0565b509392505050565b60006134896134848461414a565b6140c8565b9050828152602081018484840111156134a5576134a4614583565b5b6134b08482856143a0565b509392505050565b6000813590506134c7816149de565b92915050565b600082601f8301126134e2576134e1614579565b5b81356134f28482602086016133c4565b91505092915050565b60008135905061350a816149f5565b92915050565b60008135905061351f81614a0c565b92915050565b60008151905061353481614a0c565b92915050565b600082601f83011261354f5761354e614579565b5b813561355f848260208601613434565b91505092915050565b600082601f83011261357d5761357c614579565b5b813561358d848260208601613476565b91505092915050565b6000813590506135a581614a23565b92915050565b6000602082840312156135c1576135c061458d565b5b60006135cf848285016134b8565b91505092915050565b600080604083850312156135ef576135ee61458d565b5b60006135fd858286016134b8565b925050602061360e858286016134b8565b9150509250929050565b6000806000606084860312156136315761363061458d565b5b600061363f868287016134b8565b9350506020613650868287016134b8565b925050604061366186828701613596565b9150509250925092565b600080600080608085870312156136855761368461458d565b5b6000613693878288016134b8565b94505060206136a4878288016134b8565b93505060406136b587828801613596565b925050606085013567ffffffffffffffff8111156136d6576136d5614588565b5b6136e28782880161353a565b91505092959194509250565b600080604083850312156137055761370461458d565b5b6000613713858286016134b8565b9250506020613724858286016134fb565b9150509250929050565b600080604083850312156137455761374461458d565b5b6000613753858286016134b8565b925050602061376485828601613596565b9150509250929050565b6000602082840312156137845761378361458d565b5b600082013567ffffffffffffffff8111156137a2576137a1614588565b5b6137ae848285016134cd565b91505092915050565b6000602082840312156137cd576137cc61458d565b5b60006137db848285016134fb565b91505092915050565b6000602082840312156137fa576137f961458d565b5b600061380884828501613510565b91505092915050565b6000602082840312156138275761382661458d565b5b600061383584828501613525565b91505092915050565b6000602082840312156138545761385361458d565b5b600082013567ffffffffffffffff81111561387257613871614588565b5b61387e84828501613568565b91505092915050565b60006020828403121561389d5761389c61458d565b5b60006138ab84828501613596565b91505092915050565b600080604083850312156138cb576138ca61458d565b5b60006138d985828601613596565b92505060206138ea858286016134b8565b9150509250929050565b60006139008383613d43565b60208301905092915050565b6139158161432c565b82525050565b6000613926826141a0565b61393081856141ce565b935061393b8361417b565b8060005b8381101561396c57815161395388826138f4565b975061395e836141c1565b92505060018101905061393f565b5085935050505092915050565b6139828161433e565b82525050565b6000613993826141ab565b61399d81856141df565b93506139ad8185602086016143af565b6139b681614592565b840191505092915050565b60006139cc826141b6565b6139d681856141fb565b93506139e68185602086016143af565b6139ef81614592565b840191505092915050565b6000613a05826141b6565b613a0f818561420c565b9350613a1f8185602086016143af565b80840191505092915050565b60008154613a38816143e2565b613a42818661420c565b94506001821660008114613a5d5760018114613a6e57613aa1565b60ff19831686528186019350613aa1565b613a778561418b565b60005b83811015613a9957815481890152600182019150602081019050613a7a565b838801955050505b50505092915050565b6000613ab7602d836141fb565b9150613ac2826145a3565b604082019050919050565b6000613ada6032836141fb565b9150613ae5826145f2565b604082019050919050565b6000613afd6026836141fb565b9150613b0882614641565b604082019050919050565b6000613b206025836141fb565b9150613b2b82614690565b604082019050919050565b6000613b43601c836141fb565b9150613b4e826146df565b602082019050919050565b6000613b666014836141fb565b9150613b7182614708565b602082019050919050565b6000613b896024836141fb565b9150613b9482614731565b604082019050919050565b6000613bac6019836141fb565b9150613bb782614780565b602082019050919050565b6000613bcf6029836141fb565b9150613bda826147a9565b604082019050919050565b6000613bf26020836141fb565b9150613bfd826147f8565b602082019050919050565b6000613c156020836141fb565b9150613c2082614821565b602082019050919050565b6000613c386017836141fb565b9150613c438261484a565b602082019050919050565b6000613c5b602f836141fb565b9150613c6682614873565b604082019050919050565b6000613c7e6018836141fb565b9150613c89826148c2565b602082019050919050565b6000613ca16021836141fb565b9150613cac826148eb565b604082019050919050565b6000613cc46000836141f0565b9150613ccf8261493a565b600082019050919050565b6000613ce76014836141fb565b9150613cf28261493d565b602082019050919050565b6000613d0a603d836141fb565b9150613d1582614966565b604082019050919050565b6000613d2d6013836141fb565b9150613d38826149b5565b602082019050919050565b613d4c81614396565b82525050565b613d5b81614396565b82525050565b6000613d6d82866139fa565b9150613d7982856139fa565b9150613d858284613a2b565b9150819050949350505050565b6000613d9d82613cb7565b9150819050919050565b6000602082019050613dbc600083018461390c565b92915050565b6000608082019050613dd7600083018761390c565b613de4602083018661390c565b613df16040830185613d52565b8181036060830152613e038184613988565b905095945050505050565b60006020820190508181036000830152613e28818461391b565b905092915050565b6000602082019050613e456000830184613979565b92915050565b60006020820190508181036000830152613e6581846139c1565b905092915050565b60006020820190508181036000830152613e8681613aaa565b9050919050565b60006020820190508181036000830152613ea681613acd565b9050919050565b60006020820190508181036000830152613ec681613af0565b9050919050565b60006020820190508181036000830152613ee681613b13565b9050919050565b60006020820190508181036000830152613f0681613b36565b9050919050565b60006020820190508181036000830152613f2681613b59565b9050919050565b60006020820190508181036000830152613f4681613b7c565b9050919050565b60006020820190508181036000830152613f6681613b9f565b9050919050565b60006020820190508181036000830152613f8681613bc2565b9050919050565b60006020820190508181036000830152613fa681613be5565b9050919050565b60006020820190508181036000830152613fc681613c08565b9050919050565b60006020820190508181036000830152613fe681613c2b565b9050919050565b6000602082019050818103600083015261400681613c4e565b9050919050565b6000602082019050818103600083015261402681613c71565b9050919050565b6000602082019050818103600083015261404681613c94565b9050919050565b6000602082019050818103600083015261406681613cda565b9050919050565b6000602082019050818103600083015261408681613cfd565b9050919050565b600060208201905081810360008301526140a681613d20565b9050919050565b60006020820190506140c26000830184613d52565b92915050565b60006140d26140e3565b90506140de8282614414565b919050565b6000604051905090565b600067ffffffffffffffff8211156141085761410761454a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141345761413361454a565b5b61413d82614592565b9050602081019050919050565b600067ffffffffffffffff8211156141655761416461454a565b5b61416e82614592565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061422282614396565b915061422d83614396565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142625761426161448e565b5b828201905092915050565b600061427882614396565b915061428383614396565b925082614293576142926144bd565b5b828204905092915050565b60006142a982614396565b91506142b483614396565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142ed576142ec61448e565b5b828202905092915050565b600061430382614396565b915061430e83614396565b9250828210156143215761432061448e565b5b828203905092915050565b600061433782614376565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143cd5780820151818401526020810190506143b2565b838111156143dc576000848401525b50505050565b600060028204905060018216806143fa57607f821691505b6020821081141561440e5761440d6144ec565b5b50919050565b61441d82614592565b810181811067ffffffffffffffff8211171561443c5761443b61454a565b5b80604052505050565b600061445082614396565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144835761448261448e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6149e78161432c565b81146149f257600080fd5b50565b6149fe8161433e565b8114614a0957600080fd5b50565b614a158161434a565b8114614a2057600080fd5b50565b614a2c81614396565b8114614a3757600080fd5b5056fea26469706673582212207ada267048d6b08c9a4be959f56c5d2d08135c40ce8884aad55f103e7ed35beb64736f6c63430008070033
Deployed Bytecode Sourcemap
55950:6182:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40044:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40972:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42484:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42002:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56210:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60252:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60358:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57598:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59856:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56377:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56429:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43184:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61868:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61753:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60441:493;;;;;;;;;;;;;:::i;:::-;;43590:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58296:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59524:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61986:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60008:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56592:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56132:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56562:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40682:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40413:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19475:103;;;;;;;;;;;;;:::i;:::-;;60146:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61640:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18827:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56466:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41141:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57693:434;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42727:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56170:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59720:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56732:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43846:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61328:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58937:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59604:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56294:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59437:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61533:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56248:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42953:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56678:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58135:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19733:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56330:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40044:305;40146:4;40198:25;40183:40;;;:11;:40;;;;:105;;;;40255:33;40240:48;;;:11;:48;;;;40183:105;:158;;;;40305:36;40329:11;40305:23;:36::i;:::-;40183:158;40163:178;;40044:305;;;:::o;40972:100::-;41026:13;41059:5;41052:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40972:100;:::o;42484:171::-;42560:7;42580:23;42595:7;42580:14;:23::i;:::-;42623:15;:24;42639:7;42623:24;;;;;;;;;;;;;;;;;;;;;42616:31;;42484:171;;;:::o;42002:416::-;42083:13;42099:23;42114:7;42099:14;:23::i;:::-;42083:39;;42147:5;42141:11;;:2;:11;;;;42133:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;42241:5;42225:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;42250:37;42267:5;42274:12;:10;:12::i;:::-;42250:16;:37::i;:::-;42225:62;42203:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;42389:21;42398:2;42402:7;42389:8;:21::i;:::-;42072:346;42002:416;;:::o;56210:33::-;;;;:::o;60252:100::-;18713:13;:11;:13::i;:::-;60336:10:::1;60324:9;:22;;;;;;;;;;;;:::i;:::-;;60252:100:::0;:::o;60358:77::-;18713:13;:11;:13::i;:::-;60423:6:::1;60414;;:15;;;;;;;;;;;;;;;;;;60358:77:::0;:::o;57598:89::-;57642:7;57665:16;:6;:14;:16::i;:::-;57658:23;;57598:89;:::o;59856:146::-;18713:13;:11;:13::i;:::-;59973:23:::1;59948:22;:48;;;;59856:146:::0;:::o;56377:47::-;;;;:::o;56429:32::-;;;;:::o;43184:335::-;43379:41;43398:12;:10;:12::i;:::-;43412:7;43379:18;:41::i;:::-;43371:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;43483:28;43493:4;43499:2;43503:7;43483:9;:28::i;:::-;43184:335;;;:::o;61868:112::-;61928:7;61951:14;:23;61966:7;61951:23;;;;;;;;;;;;;;;;61944:30;;61868:112;;;:::o;61753:109::-;61813:4;61833:14;:23;61848:7;61833:23;;;;;;;;;;;;;;;;;;;;;;;;;61826:30;;61753:109;;;:::o;60441:493::-;18713:13;:11;:13::i;:::-;60521:3:::1;60517:1;60493:21;:25;;;;:::i;:::-;:31;;;;:::i;:::-;60485:5;:39;;;;60569:4;60563:3;60539:21;:27;;;;:::i;:::-;:34;;;;:::i;:::-;60531:5;:42;;;;60581:9;60604:42;60596:56;;60660:5;;60596:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60580:90;;;60685:4;60677:13;;;::::0;::::1;;60700:9;60723:42;60715:56;;60779:5;;60715:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60699:90;;;60804:4;60796:13;;;::::0;::::1;;60819:9;60842:42;60834:56;;60898:5;;60834:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60818:90;;;60923:4;60915:13;;;::::0;::::1;;60478:456;;;60441:493::o:0;43590:185::-;43728:39;43745:4;43751:2;43755:7;43728:39;;;;;;;;;;;;:16;:39::i;:::-;43590:185;;;:::o;58296:635::-;58371:16;58399:23;58425:17;58435:6;58425:9;:17::i;:::-;58399:43;;58449:30;58496:15;58482:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58449:63;;58519:22;58544:1;58519:26;;58552:23;58588:309;58613:15;58595;:33;:64;;;;;58650:9;;58632:14;:27;;58595:64;58588:309;;;58670:25;58698:23;58706:14;58698:7;:23::i;:::-;58670:51;;58757:6;58736:27;;:17;:27;;;58732:131;;;58809:14;58776:13;58790:15;58776:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;58836:17;;;;;:::i;:::-;;;;58732:131;58873:16;;;;;:::i;:::-;;;;58661:236;58588:309;;;58912:13;58905:20;;;;;;58296:635;;;:::o;59524:74::-;18713:13;:11;:13::i;:::-;59587:5:::1;59580:4;:12;;;;59524:74:::0;:::o;61986:143::-;18713:13;:11;:13::i;:::-;62071:8:::1;62053:15;;:26;;;;;;;;;;;;;;;;;;62091:32;62114:8;62091:32;;;;;;:::i;:::-;;;;;;;;61986:143:::0;:::o;60008:132::-;18713:13;:11;:13::i;:::-;60116:18:::1;60096:17;:38;;;;;;;;;;;;:::i;:::-;;60008:132:::0;:::o;56592:28::-;;;;;;;;;;;;;:::o;56132:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56562:25::-;;;;;;;;;;;;;:::o;40682:223::-;40754:7;40774:13;40790:17;40799:7;40790:8;:17::i;:::-;40774:33;;40843:1;40826:19;;:5;:19;;;;40818:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;40892:5;40885:12;;;40682:223;;;:::o;40413:207::-;40485:7;40530:1;40513:19;;:5;:19;;;;40505:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40596:9;:16;40606:5;40596:16;;;;;;;;;;;;;;;;40589:23;;40413:207;;;:::o;19475:103::-;18713:13;:11;:13::i;:::-;19540:30:::1;19567:1;19540:18;:30::i;:::-;19475:103::o:0;60146:100::-;18713:13;:11;:13::i;:::-;60230:10:::1;60218:9;:22;;;;;;;;;;;;:::i;:::-;;60146:100:::0;:::o;61640:107::-;18713:13;:11;:13::i;:::-;61736:5:::1;61710:14;:23;61725:7;61710:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;61640:107:::0;:::o;18827:87::-;18873:7;18900:6;;;;;;;;;;;18893:13;;18827:87;:::o;56466:37::-;;;;:::o;41141:104::-;41197:13;41230:7;41223:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41141:104;:::o;57693:434::-;57758:11;57019:14;:26;57034:10;57019:26;;;;;;;;;;;;;;;;;;;;;;;;;57015:222;;;57113:22;;57097:11;57068:14;:26;57083:10;57068:26;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;57067:68;;57059:77;;;;;;57015:222;;;57215:13;;57199:11;57170:14;:26;57185:10;57170:26;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;57169:59;;57161:68;;;;;;57015:222;57266:4;57247:23;;:15;;;;;;;;;;;:23;;;57243:253;;;57306:1;57292:11;:15;:61;;;;;57326:27;;57311:11;:42;;57292:61;57284:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;57243:253;;;57425:1;57411:11;:15;:52;;;;;57445:18;;57430:11;:33;;57411:52;57403:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;57243:253;57544:9;;57529:11;57510:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;57502:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;57801:4:::1;57782:23;;:15;;;;;;;;;;;:23;;;57778:251;;;57825:14;:26;57840:10;57825:26;;;;;;;;;;;;;;;;;;;;;;;;;57817:35;;;::::0;::::1;;57898:11;57882:13;;:27;;;;:::i;:::-;57869:9;:40;;57861:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;57778:251;;;57986:11;57979:4;;:18;;;;:::i;:::-;57966:9;:31;;57958:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;57778:251;58044:6;;;;;;;;;;;58043:7;58035:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;58087:34;58097:10;58109:11;58087:9;:34::i;:::-;57693:434:::0;;:::o;42727:155::-;42822:52;42841:12;:10;:12::i;:::-;42855:8;42865;42822:18;:52::i;:::-;42727:155;;:::o;56170:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;59720:130::-;18713:13;:11;:13::i;:::-;59825:19:::1;59804:18;:40;;;;59720:130:::0;:::o;56732:34::-;;;;;;;;;;;;;:::o;43846:322::-;44020:41;44039:12;:10;:12::i;:::-;44053:7;44020:18;:41::i;:::-;44012:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;44122:38;44136:4;44142:2;44146:7;44155:4;44122:13;:38::i;:::-;43846:322;;;;:::o;61328:199::-;18713:13;:11;:13::i;:::-;61404:15:::1;61399:123;61435:9;:16;61425:7;:26;61399:123;;;61510:4;61473:14;:34;61488:9;61498:7;61488:18;;;;;;;;:::i;:::-;;;;;;;;61473:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;61453:9;;;;;:::i;:::-;;;;61399:123;;;;61328:199:::0;:::o;58937:494::-;59036:13;59077:17;59085:8;59077:7;:17::i;:::-;59061:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;59184:5;59172:17;;:8;;;;;;;;;;;:17;;;59168:64;;;59207:17;59200:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59168:64;59240:28;59271:10;:8;:10::i;:::-;59240:41;;59326:1;59301:14;59295:28;:32;:130;;;;;;;;;;;;;;;;;59363:14;59379:19;:8;:17;:19::i;:::-;59400:9;59346:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59295:130;59288:137;;;58937:494;;;;:::o;59604:110::-;18713:13;:11;:13::i;:::-;59694:14:::1;59678:13;:30;;;;59604:110:::0;:::o;56294:31::-;;;;:::o;59437:81::-;18713:13;:11;:13::i;:::-;59506:6:::1;59495:8;;:17;;;;;;;;;;;;;;;;;;59437:81:::0;:::o;61533:101::-;18713:13;:11;:13::i;:::-;61624:4:::1;61598:14;:23;61613:7;61598:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;61533:101:::0;:::o;56248:41::-;;;;:::o;42953:164::-;43050:4;43074:18;:25;43093:5;43074:25;;;;;;;;;;;;;;;:35;43100:8;43074:35;;;;;;;;;;;;;;;;;;;;;;;;;43067:42;;42953:164;;;;:::o;56678:49::-;;;;;;;;;;;;;;;;;:::o;58135:155::-;58221:11;57019:14;:26;57034:10;57019:26;;;;;;;;;;;;;;;;;;;;;;;;;57015:222;;;57113:22;;57097:11;57068:14;:26;57083:10;57068:26;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;57067:68;;57059:77;;;;;;57015:222;;;57215:13;;57199:11;57170:14;:26;57185:10;57170:26;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;57169:59;;57161:68;;;;;;57015:222;57266:4;57247:23;;:15;;;;;;;;;;;:23;;;57243:253;;;57306:1;57292:11;:15;:61;;;;;57326:27;;57311:11;:42;;57292:61;57284:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;57243:253;;;57425:1;57411:11;:15;:52;;;;;57445:18;;57430:11;:33;;57411:52;57403:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;57243:253;57544:9;;57529:11;57510:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;57502:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;18713:13:::1;:11;:13::i;:::-;58251:33:::2;58261:9;58272:11;58251:9;:33::i;:::-;58135:155:::0;;;:::o;19733:201::-;18713:13;:11;:13::i;:::-;19842:1:::1;19822:22;;:8;:22;;;;19814:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19898:28;19917:8;19898:18;:28::i;:::-;19733:201:::0;:::o;56330:42::-;;;;:::o;32556:157::-;32641:4;32680:25;32665:40;;;:11;:40;;;;32658:47;;32556:157;;;:::o;52303:135::-;52385:16;52393:7;52385;:16::i;:::-;52377:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;52303:135;:::o;17378:98::-;17431:7;17458:10;17451:17;;17378:98;:::o;51582:174::-;51684:2;51657:15;:24;51673:7;51657:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;51740:7;51736:2;51702:46;;51711:23;51726:7;51711:14;:23::i;:::-;51702:46;;;;;;;;;;;;51582:174;;:::o;18992:132::-;19067:12;:10;:12::i;:::-;19056:23;;:7;:5;:7::i;:::-;:23;;;19048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18992:132::o;907:114::-;972:7;999;:14;;;992:21;;907:114;;;:::o;46201:264::-;46294:4;46311:13;46327:23;46342:7;46327:14;:23::i;:::-;46311:39;;46380:5;46369:16;;:7;:16;;;:52;;;;46389:32;46406:5;46413:7;46389:16;:32::i;:::-;46369:52;:87;;;;46449:7;46425:31;;:20;46437:7;46425:11;:20::i;:::-;:31;;;46369:87;46361:96;;;46201:264;;;;:::o;50200:1263::-;50359:4;50332:31;;:23;50347:7;50332:14;:23::i;:::-;:31;;;50324:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;50438:1;50424:16;;:2;:16;;;;50416:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50494:42;50515:4;50521:2;50525:7;50534:1;50494:20;:42::i;:::-;50666:4;50639:31;;:23;50654:7;50639:14;:23::i;:::-;:31;;;50631:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;50784:15;:24;50800:7;50784:24;;;;;;;;;;;;50777:31;;;;;;;;;;;51279:1;51260:9;:15;51270:4;51260:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;51312:1;51295:9;:13;51305:2;51295:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;51354:2;51335:7;:16;51343:7;51335:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;51393:7;51389:2;51374:27;;51383:4;51374:27;;;;;;;;;;;;51414:41;51434:4;51440:2;51444:7;51453:1;51414:19;:41::i;:::-;50200:1263;;;:::o;45476:117::-;45542:7;45569;:16;45577:7;45569:16;;;;;;;;;;;;;;;;;;;;;45562:23;;45476:117;;;:::o;20094:191::-;20168:16;20187:6;;;;;;;;;;;20168:25;;20213:8;20204:6;;:17;;;;;;;;;;;;;;;;;;20268:8;20237:40;;20258:8;20237:40;;;;;;;;;;;;20157:128;20094:191;:::o;60940:272::-;61020:9;61015:192;61039:11;61035:1;:15;61015:192;;;61066:18;:6;:16;:18::i;:::-;61151:1;61122:14;:26;61137:10;61122:26;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;61093:14;:26;61108:10;61093:26;;;;;;;;;;;;;;;:59;;;;61161:38;61171:9;61182:16;:6;:14;:16::i;:::-;61161:9;:38::i;:::-;61052:3;;;;;:::i;:::-;;;;61015:192;;;;60940:272;;:::o;51899:315::-;52054:8;52045:17;;:5;:17;;;;52037:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;52141:8;52103:18;:25;52122:5;52103:25;;;;;;;;;;;;;;;:35;52129:8;52103:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;52187:8;52165:41;;52180:5;52165:41;;;52197:8;52165:41;;;;;;:::i;:::-;;;;;;;;51899:315;;;:::o;45049:313::-;45205:28;45215:4;45221:2;45225:7;45205:9;:28::i;:::-;45252:47;45275:4;45281:2;45285:7;45294:4;45252:22;:47::i;:::-;45244:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;45049:313;;;;:::o;45906:128::-;45971:4;46024:1;45995:31;;:17;46004:7;45995:8;:17::i;:::-;:31;;;;45988:38;;45906:128;;;:::o;61218:104::-;61278:13;61307:9;61300:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61218:104;:::o;14805:716::-;14861:13;14912:14;14949:1;14929:17;14940:5;14929:10;:17::i;:::-;:21;14912:38;;14965:20;14999:6;14988:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14965:41;;15021:11;15150:6;15146:2;15142:15;15134:6;15130:28;15123:35;;15187:288;15194:4;15187:288;;;15219:5;;;;;;;;15361:8;15356:2;15349:5;15345:14;15340:30;15335:3;15327:44;15417:2;15408:11;;;;;;:::i;:::-;;;;;15451:1;15442:5;:10;15438:21;;;15454:5;;15438:21;15187:288;;;15496:6;15489:13;;;;;14805:716;;;:::o;54587:410::-;54777:1;54765:9;:13;54761:229;;;54815:1;54799:18;;:4;:18;;;54795:87;;54857:9;54838;:15;54848:4;54838:15;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;54795:87;54914:1;54900:16;;:2;:16;;;54896:83;;54954:9;54937;:13;54947:2;54937:13;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;54896:83;54761:229;54587:410;;;;:::o;55719:158::-;;;;;:::o;1029:127::-;1136:1;1118:7;:14;;;:19;;;;;;;;;;;1029:127;:::o;46807:110::-;46883:26;46893:2;46897:7;46883:26;;;;;;;;;;;;:9;:26::i;:::-;46807:110;;:::o;53002:853::-;53156:4;53177:15;:2;:13;;;:15::i;:::-;53173:675;;;53229:2;53213:36;;;53250:12;:10;:12::i;:::-;53264:4;53270:7;53279:4;53213:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;53209:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53471:1;53454:6;:13;:18;53450:328;;;53497:60;;;;;;;;;;:::i;:::-;;;;;;;;53450:328;53728:6;53722:13;53713:6;53709:2;53705:15;53698:38;53209:584;53345:41;;;53335:51;;;:6;:51;;;;53328:58;;;;;53173:675;53832:4;53825:11;;53002:853;;;;;;;:::o;11671:922::-;11724:7;11744:14;11761:1;11744:18;;11811:6;11802:5;:15;11798:102;;11847:6;11838:15;;;;;;:::i;:::-;;;;;11882:2;11872:12;;;;11798:102;11927:6;11918:5;:15;11914:102;;11963:6;11954:15;;;;;;:::i;:::-;;;;;11998:2;11988:12;;;;11914:102;12043:6;12034:5;:15;12030:102;;12079:6;12070:15;;;;;;:::i;:::-;;;;;12114:2;12104:12;;;;12030:102;12159:5;12150;:14;12146:99;;12194:5;12185:14;;;;;;:::i;:::-;;;;;12228:1;12218:11;;;;12146:99;12272:5;12263;:14;12259:99;;12307:5;12298:14;;;;;;:::i;:::-;;;;;12341:1;12331:11;;;;12259:99;12385:5;12376;:14;12372:99;;12420:5;12411:14;;;;;;:::i;:::-;;;;;12454:1;12444:11;;;;12372:99;12498:5;12489;:14;12485:66;;12534:1;12524:11;;;;12485:66;12579:6;12572:13;;;11671:922;;;:::o;47144:319::-;47273:18;47279:2;47283:7;47273:5;:18::i;:::-;47324:53;47355:1;47359:2;47363:7;47372:4;47324:22;:53::i;:::-;47302:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;47144:319;;;:::o;21525:326::-;21585:4;21842:1;21820:7;:19;;;:23;21813:30;;21525:326;;;:::o;47799:942::-;47893:1;47879:16;;:2;:16;;;;47871:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;47952:16;47960:7;47952;:16::i;:::-;47951:17;47943:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48014:48;48043:1;48047:2;48051:7;48060:1;48014:20;:48::i;:::-;48161:16;48169:7;48161;:16::i;:::-;48160:17;48152:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48576:1;48559:9;:13;48569:2;48559:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;48620:2;48601:7;:16;48609:7;48601:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;48665:7;48661:2;48640:33;;48657:1;48640:33;;;;;;;;;;;;48686:47;48714:1;48718:2;48722:7;48731:1;48686:19;:47::i;:::-;47799:942;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:474::-;9238:6;9246;9295:2;9283:9;9274:7;9270:23;9266:32;9263:119;;;9301:79;;:::i;:::-;9263:119;9421:1;9446:53;9491:7;9482:6;9471:9;9467:22;9446:53;:::i;:::-;9436:63;;9392:117;9548:2;9574:53;9619:7;9610:6;9599:9;9595:22;9574:53;:::i;:::-;9564:63;;9519:118;9170:474;;;;;:::o;9650:179::-;9719:10;9740:46;9782:3;9774:6;9740:46;:::i;:::-;9818:4;9813:3;9809:14;9795:28;;9650:179;;;;:::o;9835:118::-;9922:24;9940:5;9922:24;:::i;:::-;9917:3;9910:37;9835:118;;:::o;9989:732::-;10108:3;10137:54;10185:5;10137:54;:::i;:::-;10207:86;10286:6;10281:3;10207:86;:::i;:::-;10200:93;;10317:56;10367:5;10317:56;:::i;:::-;10396:7;10427:1;10412:284;10437:6;10434:1;10431:13;10412:284;;;10513:6;10507:13;10540:63;10599:3;10584:13;10540:63;:::i;:::-;10533:70;;10626:60;10679:6;10626:60;:::i;:::-;10616:70;;10472:224;10459:1;10456;10452:9;10447:14;;10412:284;;;10416:14;10712:3;10705:10;;10113:608;;;9989:732;;;;:::o;10727:109::-;10808:21;10823:5;10808:21;:::i;:::-;10803:3;10796:34;10727:109;;:::o;10842:360::-;10928:3;10956:38;10988:5;10956:38;:::i;:::-;11010:70;11073:6;11068:3;11010:70;:::i;:::-;11003:77;;11089:52;11134:6;11129:3;11122:4;11115:5;11111:16;11089:52;:::i;:::-;11166:29;11188:6;11166:29;:::i;:::-;11161:3;11157:39;11150:46;;10932:270;10842:360;;;;:::o;11208:364::-;11296:3;11324:39;11357:5;11324:39;:::i;:::-;11379:71;11443:6;11438:3;11379:71;:::i;:::-;11372:78;;11459:52;11504:6;11499:3;11492:4;11485:5;11481:16;11459:52;:::i;:::-;11536:29;11558:6;11536:29;:::i;:::-;11531:3;11527:39;11520:46;;11300:272;11208:364;;;;:::o;11578:377::-;11684:3;11712:39;11745:5;11712:39;:::i;:::-;11767:89;11849:6;11844:3;11767:89;:::i;:::-;11760:96;;11865:52;11910:6;11905:3;11898:4;11891:5;11887:16;11865:52;:::i;:::-;11942:6;11937:3;11933:16;11926:23;;11688:267;11578:377;;;;:::o;11985:845::-;12088:3;12125:5;12119:12;12154:36;12180:9;12154:36;:::i;:::-;12206:89;12288:6;12283:3;12206:89;:::i;:::-;12199:96;;12326:1;12315:9;12311:17;12342:1;12337:137;;;;12488:1;12483:341;;;;12304:520;;12337:137;12421:4;12417:9;12406;12402:25;12397:3;12390:38;12457:6;12452:3;12448:16;12441:23;;12337:137;;12483:341;12550:38;12582:5;12550:38;:::i;:::-;12610:1;12624:154;12638:6;12635:1;12632:13;12624:154;;;12712:7;12706:14;12702:1;12697:3;12693:11;12686:35;12762:1;12753:7;12749:15;12738:26;;12660:4;12657:1;12653:12;12648:17;;12624:154;;;12807:6;12802:3;12798:16;12791:23;;12490:334;;12304:520;;12092:738;;11985:845;;;;:::o;12836:366::-;12978:3;12999:67;13063:2;13058:3;12999:67;:::i;:::-;12992:74;;13075:93;13164:3;13075:93;:::i;:::-;13193:2;13188:3;13184:12;13177:19;;12836:366;;;:::o;13208:::-;13350:3;13371:67;13435:2;13430:3;13371:67;:::i;:::-;13364:74;;13447:93;13536:3;13447:93;:::i;:::-;13565:2;13560:3;13556:12;13549:19;;13208:366;;;:::o;13580:::-;13722:3;13743:67;13807:2;13802:3;13743:67;:::i;:::-;13736:74;;13819:93;13908:3;13819:93;:::i;:::-;13937:2;13932:3;13928:12;13921:19;;13580:366;;;:::o;13952:::-;14094:3;14115:67;14179:2;14174:3;14115:67;:::i;:::-;14108:74;;14191:93;14280:3;14191:93;:::i;:::-;14309:2;14304:3;14300:12;14293:19;;13952:366;;;:::o;14324:::-;14466:3;14487:67;14551:2;14546:3;14487:67;:::i;:::-;14480:74;;14563:93;14652:3;14563:93;:::i;:::-;14681:2;14676:3;14672:12;14665:19;;14324:366;;;:::o;14696:::-;14838:3;14859:67;14923:2;14918:3;14859:67;:::i;:::-;14852:74;;14935:93;15024:3;14935:93;:::i;:::-;15053:2;15048:3;15044:12;15037:19;;14696:366;;;:::o;15068:::-;15210:3;15231:67;15295:2;15290:3;15231:67;:::i;:::-;15224:74;;15307:93;15396:3;15307:93;:::i;:::-;15425:2;15420:3;15416:12;15409:19;;15068:366;;;:::o;15440:::-;15582:3;15603:67;15667:2;15662:3;15603:67;:::i;:::-;15596:74;;15679:93;15768:3;15679:93;:::i;:::-;15797:2;15792:3;15788:12;15781:19;;15440:366;;;:::o;15812:::-;15954:3;15975:67;16039:2;16034:3;15975:67;:::i;:::-;15968:74;;16051:93;16140:3;16051:93;:::i;:::-;16169:2;16164:3;16160:12;16153:19;;15812:366;;;:::o;16184:::-;16326:3;16347:67;16411:2;16406:3;16347:67;:::i;:::-;16340:74;;16423:93;16512:3;16423:93;:::i;:::-;16541:2;16536:3;16532:12;16525:19;;16184:366;;;:::o;16556:::-;16698:3;16719:67;16783:2;16778:3;16719:67;:::i;:::-;16712:74;;16795:93;16884:3;16795:93;:::i;:::-;16913:2;16908:3;16904:12;16897:19;;16556:366;;;:::o;16928:::-;17070:3;17091:67;17155:2;17150:3;17091:67;:::i;:::-;17084:74;;17167:93;17256:3;17167:93;:::i;:::-;17285:2;17280:3;17276:12;17269:19;;16928:366;;;:::o;17300:::-;17442:3;17463:67;17527:2;17522:3;17463:67;:::i;:::-;17456:74;;17539:93;17628:3;17539:93;:::i;:::-;17657:2;17652:3;17648:12;17641:19;;17300:366;;;:::o;17672:::-;17814:3;17835:67;17899:2;17894:3;17835:67;:::i;:::-;17828:74;;17911:93;18000:3;17911:93;:::i;:::-;18029:2;18024:3;18020:12;18013:19;;17672:366;;;:::o;18044:::-;18186:3;18207:67;18271:2;18266:3;18207:67;:::i;:::-;18200:74;;18283:93;18372:3;18283:93;:::i;:::-;18401:2;18396:3;18392:12;18385:19;;18044:366;;;:::o;18416:398::-;18575:3;18596:83;18677:1;18672:3;18596:83;:::i;:::-;18589:90;;18688:93;18777:3;18688:93;:::i;:::-;18806:1;18801:3;18797:11;18790:18;;18416:398;;;:::o;18820:366::-;18962:3;18983:67;19047:2;19042:3;18983:67;:::i;:::-;18976:74;;19059:93;19148:3;19059:93;:::i;:::-;19177:2;19172:3;19168:12;19161:19;;18820:366;;;:::o;19192:::-;19334:3;19355:67;19419:2;19414:3;19355:67;:::i;:::-;19348:74;;19431:93;19520:3;19431:93;:::i;:::-;19549:2;19544:3;19540:12;19533:19;;19192:366;;;:::o;19564:::-;19706:3;19727:67;19791:2;19786:3;19727:67;:::i;:::-;19720:74;;19803:93;19892:3;19803:93;:::i;:::-;19921:2;19916:3;19912:12;19905:19;;19564:366;;;:::o;19936:108::-;20013:24;20031:5;20013:24;:::i;:::-;20008:3;20001:37;19936:108;;:::o;20050:118::-;20137:24;20155:5;20137:24;:::i;:::-;20132:3;20125:37;20050:118;;:::o;20174:589::-;20399:3;20421:95;20512:3;20503:6;20421:95;:::i;:::-;20414:102;;20533:95;20624:3;20615:6;20533:95;:::i;:::-;20526:102;;20645:92;20733:3;20724:6;20645:92;:::i;:::-;20638:99;;20754:3;20747:10;;20174:589;;;;;;:::o;20769:379::-;20953:3;20975:147;21118:3;20975:147;:::i;:::-;20968:154;;21139:3;21132:10;;20769:379;;;:::o;21154:222::-;21247:4;21285:2;21274:9;21270:18;21262:26;;21298:71;21366:1;21355:9;21351:17;21342:6;21298:71;:::i;:::-;21154:222;;;;:::o;21382:640::-;21577:4;21615:3;21604:9;21600:19;21592:27;;21629:71;21697:1;21686:9;21682:17;21673:6;21629:71;:::i;:::-;21710:72;21778:2;21767:9;21763:18;21754:6;21710:72;:::i;:::-;21792;21860:2;21849:9;21845:18;21836:6;21792:72;:::i;:::-;21911:9;21905:4;21901:20;21896:2;21885:9;21881:18;21874:48;21939:76;22010:4;22001:6;21939:76;:::i;:::-;21931:84;;21382:640;;;;;;;:::o;22028:373::-;22171:4;22209:2;22198:9;22194:18;22186:26;;22258:9;22252:4;22248:20;22244:1;22233:9;22229:17;22222:47;22286:108;22389:4;22380:6;22286:108;:::i;:::-;22278:116;;22028:373;;;;:::o;22407:210::-;22494:4;22532:2;22521:9;22517:18;22509:26;;22545:65;22607:1;22596:9;22592:17;22583:6;22545:65;:::i;:::-;22407:210;;;;:::o;22623:313::-;22736:4;22774:2;22763:9;22759:18;22751:26;;22823:9;22817:4;22813:20;22809:1;22798:9;22794:17;22787:47;22851:78;22924:4;22915:6;22851:78;:::i;:::-;22843:86;;22623:313;;;;:::o;22942:419::-;23108:4;23146:2;23135:9;23131:18;23123:26;;23195:9;23189:4;23185:20;23181:1;23170:9;23166:17;23159:47;23223:131;23349:4;23223:131;:::i;:::-;23215:139;;22942:419;;;:::o;23367:::-;23533:4;23571:2;23560:9;23556:18;23548:26;;23620:9;23614:4;23610:20;23606:1;23595:9;23591:17;23584:47;23648:131;23774:4;23648:131;:::i;:::-;23640:139;;23367:419;;;:::o;23792:::-;23958:4;23996:2;23985:9;23981:18;23973:26;;24045:9;24039:4;24035:20;24031:1;24020:9;24016:17;24009:47;24073:131;24199:4;24073:131;:::i;:::-;24065:139;;23792:419;;;:::o;24217:::-;24383:4;24421:2;24410:9;24406:18;24398:26;;24470:9;24464:4;24460:20;24456:1;24445:9;24441:17;24434:47;24498:131;24624:4;24498:131;:::i;:::-;24490:139;;24217:419;;;:::o;24642:::-;24808:4;24846:2;24835:9;24831:18;24823:26;;24895:9;24889:4;24885:20;24881:1;24870:9;24866:17;24859:47;24923:131;25049:4;24923:131;:::i;:::-;24915:139;;24642:419;;;:::o;25067:::-;25233:4;25271:2;25260:9;25256:18;25248:26;;25320:9;25314:4;25310:20;25306:1;25295:9;25291:17;25284:47;25348:131;25474:4;25348:131;:::i;:::-;25340:139;;25067:419;;;:::o;25492:::-;25658:4;25696:2;25685:9;25681:18;25673:26;;25745:9;25739:4;25735:20;25731:1;25720:9;25716:17;25709:47;25773:131;25899:4;25773:131;:::i;:::-;25765:139;;25492:419;;;:::o;25917:::-;26083:4;26121:2;26110:9;26106:18;26098:26;;26170:9;26164:4;26160:20;26156:1;26145:9;26141:17;26134:47;26198:131;26324:4;26198:131;:::i;:::-;26190:139;;25917:419;;;:::o;26342:::-;26508:4;26546:2;26535:9;26531:18;26523:26;;26595:9;26589:4;26585:20;26581:1;26570:9;26566:17;26559:47;26623:131;26749:4;26623:131;:::i;:::-;26615:139;;26342:419;;;:::o;26767:::-;26933:4;26971:2;26960:9;26956:18;26948:26;;27020:9;27014:4;27010:20;27006:1;26995:9;26991:17;26984:47;27048:131;27174:4;27048:131;:::i;:::-;27040:139;;26767:419;;;:::o;27192:::-;27358:4;27396:2;27385:9;27381:18;27373:26;;27445:9;27439:4;27435:20;27431:1;27420:9;27416:17;27409:47;27473:131;27599:4;27473:131;:::i;:::-;27465:139;;27192:419;;;:::o;27617:::-;27783:4;27821:2;27810:9;27806:18;27798:26;;27870:9;27864:4;27860:20;27856:1;27845:9;27841:17;27834:47;27898:131;28024:4;27898:131;:::i;:::-;27890:139;;27617:419;;;:::o;28042:::-;28208:4;28246:2;28235:9;28231:18;28223:26;;28295:9;28289:4;28285:20;28281:1;28270:9;28266:17;28259:47;28323:131;28449:4;28323:131;:::i;:::-;28315:139;;28042:419;;;:::o;28467:::-;28633:4;28671:2;28660:9;28656:18;28648:26;;28720:9;28714:4;28710:20;28706:1;28695:9;28691:17;28684:47;28748:131;28874:4;28748:131;:::i;:::-;28740:139;;28467:419;;;:::o;28892:::-;29058:4;29096:2;29085:9;29081:18;29073:26;;29145:9;29139:4;29135:20;29131:1;29120:9;29116:17;29109:47;29173:131;29299:4;29173:131;:::i;:::-;29165:139;;28892:419;;;:::o;29317:::-;29483:4;29521:2;29510:9;29506:18;29498:26;;29570:9;29564:4;29560:20;29556:1;29545:9;29541:17;29534:47;29598:131;29724:4;29598:131;:::i;:::-;29590:139;;29317:419;;;:::o;29742:::-;29908:4;29946:2;29935:9;29931:18;29923:26;;29995:9;29989:4;29985:20;29981:1;29970:9;29966:17;29959:47;30023:131;30149:4;30023:131;:::i;:::-;30015:139;;29742:419;;;:::o;30167:::-;30333:4;30371:2;30360:9;30356:18;30348:26;;30420:9;30414:4;30410:20;30406:1;30395:9;30391:17;30384:47;30448:131;30574:4;30448:131;:::i;:::-;30440:139;;30167:419;;;:::o;30592:222::-;30685:4;30723:2;30712:9;30708:18;30700:26;;30736:71;30804:1;30793:9;30789:17;30780:6;30736:71;:::i;:::-;30592:222;;;;:::o;30820:129::-;30854:6;30881:20;;:::i;:::-;30871:30;;30910:33;30938:4;30930:6;30910:33;:::i;:::-;30820:129;;;:::o;30955:75::-;30988:6;31021:2;31015:9;31005:19;;30955:75;:::o;31036:311::-;31113:4;31203:18;31195:6;31192:30;31189:56;;;31225:18;;:::i;:::-;31189:56;31275:4;31267:6;31263:17;31255:25;;31335:4;31329;31325:15;31317:23;;31036:311;;;:::o;31353:307::-;31414:4;31504:18;31496:6;31493:30;31490:56;;;31526:18;;:::i;:::-;31490:56;31564:29;31586:6;31564:29;:::i;:::-;31556:37;;31648:4;31642;31638:15;31630:23;;31353:307;;;:::o;31666:308::-;31728:4;31818:18;31810:6;31807:30;31804:56;;;31840:18;;:::i;:::-;31804:56;31878:29;31900:6;31878:29;:::i;:::-;31870:37;;31962:4;31956;31952:15;31944:23;;31666:308;;;:::o;31980:132::-;32047:4;32070:3;32062:11;;32100:4;32095:3;32091:14;32083:22;;31980:132;;;:::o;32118:141::-;32167:4;32190:3;32182:11;;32213:3;32210:1;32203:14;32247:4;32244:1;32234:18;32226:26;;32118:141;;;:::o;32265:114::-;32332:6;32366:5;32360:12;32350:22;;32265:114;;;:::o;32385:98::-;32436:6;32470:5;32464:12;32454:22;;32385:98;;;:::o;32489:99::-;32541:6;32575:5;32569:12;32559:22;;32489:99;;;:::o;32594:113::-;32664:4;32696;32691:3;32687:14;32679:22;;32594:113;;;:::o;32713:184::-;32812:11;32846:6;32841:3;32834:19;32886:4;32881:3;32877:14;32862:29;;32713:184;;;;:::o;32903:168::-;32986:11;33020:6;33015:3;33008:19;33060:4;33055:3;33051:14;33036:29;;32903:168;;;;:::o;33077:147::-;33178:11;33215:3;33200:18;;33077:147;;;;:::o;33230:169::-;33314:11;33348:6;33343:3;33336:19;33388:4;33383:3;33379:14;33364:29;;33230:169;;;;:::o;33405:148::-;33507:11;33544:3;33529:18;;33405:148;;;;:::o;33559:305::-;33599:3;33618:20;33636:1;33618:20;:::i;:::-;33613:25;;33652:20;33670:1;33652:20;:::i;:::-;33647:25;;33806:1;33738:66;33734:74;33731:1;33728:81;33725:107;;;33812:18;;:::i;:::-;33725:107;33856:1;33853;33849:9;33842:16;;33559:305;;;;:::o;33870:185::-;33910:1;33927:20;33945:1;33927:20;:::i;:::-;33922:25;;33961:20;33979:1;33961:20;:::i;:::-;33956:25;;34000:1;33990:35;;34005:18;;:::i;:::-;33990:35;34047:1;34044;34040:9;34035:14;;33870:185;;;;:::o;34061:348::-;34101:7;34124:20;34142:1;34124:20;:::i;:::-;34119:25;;34158:20;34176:1;34158:20;:::i;:::-;34153:25;;34346:1;34278:66;34274:74;34271:1;34268:81;34263:1;34256:9;34249:17;34245:105;34242:131;;;34353:18;;:::i;:::-;34242:131;34401:1;34398;34394:9;34383:20;;34061:348;;;;:::o;34415:191::-;34455:4;34475:20;34493:1;34475:20;:::i;:::-;34470:25;;34509:20;34527:1;34509:20;:::i;:::-;34504:25;;34548:1;34545;34542:8;34539:34;;;34553:18;;:::i;:::-;34539:34;34598:1;34595;34591:9;34583:17;;34415:191;;;;:::o;34612:96::-;34649:7;34678:24;34696:5;34678:24;:::i;:::-;34667:35;;34612:96;;;:::o;34714:90::-;34748:7;34791:5;34784:13;34777:21;34766:32;;34714:90;;;:::o;34810:149::-;34846:7;34886:66;34879:5;34875:78;34864:89;;34810:149;;;:::o;34965:126::-;35002:7;35042:42;35035:5;35031:54;35020:65;;34965:126;;;:::o;35097:77::-;35134:7;35163:5;35152:16;;35097:77;;;:::o;35180:154::-;35264:6;35259:3;35254;35241:30;35326:1;35317:6;35312:3;35308:16;35301:27;35180:154;;;:::o;35340:307::-;35408:1;35418:113;35432:6;35429:1;35426:13;35418:113;;;35517:1;35512:3;35508:11;35502:18;35498:1;35493:3;35489:11;35482:39;35454:2;35451:1;35447:10;35442:15;;35418:113;;;35549:6;35546:1;35543:13;35540:101;;;35629:1;35620:6;35615:3;35611:16;35604:27;35540:101;35389:258;35340:307;;;:::o;35653:320::-;35697:6;35734:1;35728:4;35724:12;35714:22;;35781:1;35775:4;35771:12;35802:18;35792:81;;35858:4;35850:6;35846:17;35836:27;;35792:81;35920:2;35912:6;35909:14;35889:18;35886:38;35883:84;;;35939:18;;:::i;:::-;35883:84;35704:269;35653:320;;;:::o;35979:281::-;36062:27;36084:4;36062:27;:::i;:::-;36054:6;36050:40;36192:6;36180:10;36177:22;36156:18;36144:10;36141:34;36138:62;36135:88;;;36203:18;;:::i;:::-;36135:88;36243:10;36239:2;36232:22;36022:238;35979:281;;:::o;36266:233::-;36305:3;36328:24;36346:5;36328:24;:::i;:::-;36319:33;;36374:66;36367:5;36364:77;36361:103;;;36444:18;;:::i;:::-;36361:103;36491:1;36484:5;36480:13;36473:20;;36266:233;;;:::o;36505:180::-;36553:77;36550:1;36543:88;36650:4;36647:1;36640:15;36674:4;36671:1;36664:15;36691:180;36739:77;36736:1;36729:88;36836:4;36833:1;36826:15;36860:4;36857:1;36850:15;36877:180;36925:77;36922:1;36915:88;37022:4;37019:1;37012:15;37046:4;37043:1;37036:15;37063:180;37111:77;37108:1;37101:88;37208:4;37205:1;37198:15;37232:4;37229:1;37222:15;37249:180;37297:77;37294:1;37287:88;37394:4;37391:1;37384:15;37418:4;37415:1;37408:15;37435:117;37544:1;37541;37534:12;37558:117;37667:1;37664;37657:12;37681:117;37790:1;37787;37780:12;37804:117;37913:1;37910;37903:12;37927:117;38036:1;38033;38026:12;38050:102;38091:6;38142:2;38138:7;38133:2;38126:5;38122:14;38118:28;38108:38;;38050:102;;;:::o;38158:232::-;38298:34;38294:1;38286:6;38282:14;38275:58;38367:15;38362:2;38354:6;38350:15;38343:40;38158:232;:::o;38396:237::-;38536:34;38532:1;38524:6;38520:14;38513:58;38605:20;38600:2;38592:6;38588:15;38581:45;38396:237;:::o;38639:225::-;38779:34;38775:1;38767:6;38763:14;38756:58;38848:8;38843:2;38835:6;38831:15;38824:33;38639:225;:::o;38870:224::-;39010:34;39006:1;38998:6;38994:14;38987:58;39079:7;39074:2;39066:6;39062:15;39055:32;38870:224;:::o;39100:178::-;39240:30;39236:1;39228:6;39224:14;39217:54;39100:178;:::o;39284:170::-;39424:22;39420:1;39412:6;39408:14;39401:46;39284:170;:::o;39460:223::-;39600:34;39596:1;39588:6;39584:14;39577:58;39669:6;39664:2;39656:6;39652:15;39645:31;39460:223;:::o;39689:175::-;39829:27;39825:1;39817:6;39813:14;39806:51;39689:175;:::o;39870:228::-;40010:34;40006:1;39998:6;39994:14;39987:58;40079:11;40074:2;40066:6;40062:15;40055:36;39870:228;:::o;40104:182::-;40244:34;40240:1;40232:6;40228:14;40221:58;40104:182;:::o;40292:::-;40432:34;40428:1;40420:6;40416:14;40409:58;40292:182;:::o;40480:173::-;40620:25;40616:1;40608:6;40604:14;40597:49;40480:173;:::o;40659:234::-;40799:34;40795:1;40787:6;40783:14;40776:58;40868:17;40863:2;40855:6;40851:15;40844:42;40659:234;:::o;40899:174::-;41039:26;41035:1;41027:6;41023:14;41016:50;40899:174;:::o;41079:220::-;41219:34;41215:1;41207:6;41203:14;41196:58;41288:3;41283:2;41275:6;41271:15;41264:28;41079:220;:::o;41305:114::-;;:::o;41425:170::-;41565:22;41561:1;41553:6;41549:14;41542:46;41425:170;:::o;41601:248::-;41741:34;41737:1;41729:6;41725:14;41718:58;41810:31;41805:2;41797:6;41793:15;41786:56;41601:248;:::o;41855:169::-;41995:21;41991:1;41983:6;41979:14;41972:45;41855:169;:::o;42030:122::-;42103:24;42121:5;42103:24;:::i;:::-;42096:5;42093:35;42083:63;;42142:1;42139;42132:12;42083:63;42030:122;:::o;42158:116::-;42228:21;42243:5;42228:21;:::i;:::-;42221:5;42218:32;42208:60;;42264:1;42261;42254:12;42208:60;42158:116;:::o;42280:120::-;42352:23;42369:5;42352:23;:::i;:::-;42345:5;42342:34;42332:62;;42390:1;42387;42380:12;42332:62;42280:120;:::o;42406:122::-;42479:24;42497:5;42479:24;:::i;:::-;42472:5;42469:35;42459:63;;42518:1;42515;42508:12;42459:63;42406:122;:::o
Swarm Source
ipfs://7ada267048d6b08c9a4be959f56c5d2d08135c40ce8884aad55f103e7ed35beb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.