SonicPocong404 (POCONG)

Overview

TokenID

4784

Total Transfers

-

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
SonicPocong404

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2024-12-15
*/

//SPDX-License-Identifier: MIT
// In celebration of Sonic's launch, FantomPocong has been redeployed as Sonic Pocong 404. 

pragma solidity ^0.8.0;

abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}

pragma solidity ^0.8.0;

abstract contract Ownable {
    event OwnershipTransferred(address indexed user, address indexed newOwner);

    error Unauthorized();
    error InvalidOwner();

    address public owner;

    modifier onlyOwner() virtual {
        if (msg.sender != owner) revert Unauthorized();

        _;
    }

    constructor(address _owner) {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    function transferOwnership(address _owner) public virtual onlyOwner {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(msg.sender, _owner);
    }

    function revokeOwnership() public virtual onlyOwner {
        owner = address(0);

        emit OwnershipTransferred(msg.sender, address(0));
    }
}

// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)

pragma solidity ^0.8.20;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Muldiv operation overflow.
     */
    error MathOverflowedMulDiv();

    enum Rounding {
        Floor, // Toward negative infinity
        Ceil, // Toward positive infinity
        Trunc, // Toward zero
        Expand // Away from zero
    }

    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the 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 towards infinity instead
     * of rounding towards zero.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        if (b == 0) {
            // Guarantee the same behavior as in a regular Solidity division.
            return a / b;
        }

        // (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 = x * y; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                // Solidity will revert if denominator == 0, unlike the div opcode on its own.
                // The surrounding unchecked block does not change this fact.
                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            if (denominator <= prod1) {
                revert MathOverflowedMulDiv();
            }

            ///////////////////////////////////////////////
            // 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.

            uint256 twos = denominator & (0 - denominator);
            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 (unsignedRoundsUp(rounding) && 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
     * towards zero.
     *
     * 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 + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 2 of a positive value rounded towards zero.
     * 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 + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 10 of a positive value rounded towards zero.
     * 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 + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 256 of a positive value rounded towards zero.
     * 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 256, 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 + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);
        }
    }

    /**
     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.
     */
    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {
        return uint8(rounding) % 2 == 1;
    }
}

// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard signed math utilities missing in the Solidity language.
 */
library SignedMath {
    /**
     * @dev Returns the largest of two signed numbers.
     */
    function max(int256 a, int256 b) internal pure returns (int256) {
        return a > b ? a : b;
    }

    /**
     * @dev Returns the smallest of two signed numbers.
     */
    function min(int256 a, int256 b) internal pure returns (int256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two signed numbers without overflow.
     * The result is rounded towards zero.
     */
    function average(int256 a, int256 b) internal pure returns (int256) {
        // Formula from the book "Hacker's Delight"
        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    /**
     * @dev Returns the absolute unsigned value of a signed value.
     */
    function abs(int256 n) internal pure returns (uint256) {
        unchecked {
            // must be unchecked in order to support `n = type(int256).min`
            return uint256(n >= 0 ? n : -n);
        }
    }
}

// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;

/**
 * @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);
}

// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)
pragma solidity ^0.8.20;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant HEX_DIGITS = "0123456789abcdef";
    uint8 private constant ADDRESS_LENGTH = 20;

    /**
     * @dev The `value` string doesn't fit in the specified `length`.
     */
    error StringsInsufficientHexLength(uint256 value, uint256 length);

    /**
     * @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), HEX_DIGITS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    /**
     * @dev Converts a `int256` to its ASCII `string` decimal representation.
     */
    function toStringSigned(int256 value) internal pure returns (string memory) {
        return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value)));
    }

    /**
     * @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) {
        uint256 localValue = value;
        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] = HEX_DIGITS[localValue & 0xf];
            localValue >>= 4;
        }
        if (localValue != 0) {
            revert StringsInsufficientHexLength(value, length);
        }
        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);
    }

    /**
     * @dev Returns true if the two strings are equal.
     */
    function equal(string memory a, string memory b) internal pure returns (bool) {
        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));
    }
}

// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)
pragma solidity ^0.8.20;

/**
 * @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);
 * }
 * ```
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.20;
/**
 * @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 address zero.
     *
     * 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);
}

// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;
interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.20;

/**
 * @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);
}

pragma solidity ^0.8.0;

// "Sonic is Really Cool"
abstract contract SRC404 is Ownable {
    // Events
    event ERC20Transfer(
        address indexed from,
        address indexed to,
        uint256 amount
    );

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed id
    );

    event ERC721Approval(
        address indexed owner,
        address indexed spender,
        uint256 indexed id
    );

    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    // Errors
    error NotFound();
    error AlreadyExists();
    error InvalidRecipient();
    error InvalidSender();
    error UnsafeRecipient();

    // Metadata
    /// @dev Token name
    string public name;

    /// @dev Token symbol
    string public symbol;

    /// @dev Decimals for fractional representation
    uint8 public immutable decimals;

    /// @dev Total supply in fractionalized representation
    uint256 public immutable totalSupply;

    /// @dev Total supply in NFT representation
    uint256 public immutable totalNativeSupply;

    /// @dev Current mint counter, monotonically increasing to ensure accurate ownership
    uint256 public minted;

    // Mappings
    /// @dev Balance of user in fractional representation
    mapping(address => uint256) public balanceOf;

    /// @dev Allowance of user in fractional representation
    mapping(address => mapping(address => uint256)) public allowance;

    /// @dev Approval in native representaion
    mapping(uint256 => address) public getApproved;

    /// @dev Approval for all in native representation
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /// @dev Owner of id in native representation
    mapping(uint256 => address) internal _ownerOf;

    /// @dev Array of owned ids in native representation
    mapping(address => uint256[]) internal _owned;
    mapping(address => uint256[]) internal _contractOwned;

    /// @dev Tracks indices for the _owned mapping
    mapping(uint256 => uint256) internal _ownedIndex;

    /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc)
    mapping(address => bool) public whitelist;

    /// @dev Holds the IDs of NFTs that have been burned so that they can be re-used
    uint256[] public availableIds;

    // Constructor
    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals,
        uint256 _totalNativeSupply,
        address _owner
    ) Ownable(_owner) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalNativeSupply = _totalNativeSupply;
        totalSupply = _totalNativeSupply * (10**decimals);
    }

    /// @notice Initialization function to set pairs / etc
    ///         saving gas by avoiding mint / burn on unnecessary targets
    function setWhitelist(address target, bool state) public onlyOwner {
        whitelist[target] = state;
    }

    /// @notice Function to find owner of a given native token
    function ownerOf(uint256 id) public view virtual returns (address owner) {
        owner = _ownerOf[id];

        if (owner == address(0)) {
            revert NotFound();
        }
    }

    function totalAvailableIds() public view returns (uint256) {
        return availableIds.length;
    }

    function totalNFTsOwned(address owner) public view returns (uint256) {
        return _owned[owner].length;
    }

    /// @notice tokenURI must be implemented by child contract
    function tokenURI(uint256 id) public view virtual returns (string memory);

    /// @notice Function for token approvals
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function approve(address spender, uint256 amountOrId)
        public
        virtual
        returns (bool)
    {
        if (amountOrId <= minted && amountOrId > 0) {
            address owner = _ownerOf[amountOrId];

            if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
                revert Unauthorized();
            }

            getApproved[amountOrId] = spender;

            emit Approval(owner, spender, amountOrId);
        } else {
            allowance[msg.sender][spender] = amountOrId;

            emit Approval(msg.sender, spender, amountOrId);
        }

        return true;
    }

    /// @notice Function native approvals
    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /// @notice Function for mixed transfers
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public returns (bool) {
        uint256 allowed = allowance[from][msg.sender];

        require(allowed >= amount, "Not enough allowance.");

        if (allowed != type(uint256).max)
            allowance[from][msg.sender] = allowed - amount;

        _transfer(from, to, amount);
        return true;
    }

    /// @notice Function for fractional transfers
    function transfer(address to, uint256 amount)
        public
        virtual
        returns (bool)
    {
        return _transfer(msg.sender, to, amount);
    }

    /// @notice Function for native transfers with contract support
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        _nftTransferFrom(msg.sender, from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Function for native transfers with contract support and callback data
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        _nftTransferFrom(msg.sender, from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    // testing only: delete before deploy
    function contractTokenBalance(address _contract)
        public
        view
        returns (uint256)
    {
        return
            balanceOf[_contract] -
            (_contractOwned[_contract].length * _getUnit());
    }

    function contractNFTBalance(address _contract)
        public
        view
        returns (uint256)
    {
        return _contractOwned[_contract].length;
    }

    function enoughTokenBalance(address _contract, uint256 amount)
        public
        view
        returns (bool)
    {
        uint256 tokenBalance = balanceOf[_contract] -
            (_contractOwned[_contract].length * _getUnit());
        return tokenBalance >= amount;
    }

    function tokenOfOwnerByIndex(address _owner, uint256 index) public view returns (uint256) {
        require(index < _owned[_owner].length, "Index out of bounds");
        return _owned[_owner][index];
    }

    /// @notice Internal function for fractional transfers
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        _beforeTokenTransfer(from, to, amount);

        uint256 unit = _getUnit();
        uint256 balanceBeforeSender = balanceOf[from];
        uint256 balanceBeforeReceiver = balanceOf[to];

        if (_isContract(from)) {
            uint256 tokenBalance = balanceBeforeSender -
                (_contractOwned[from].length * unit);
            require(tokenBalance >= amount, "Not enough token balance.");
        }

        balanceOf[from] -= amount;
        unchecked {
            balanceOf[to] += amount;
        }

        // Skip burn for certain addresses to save gas
        // Skip minting to smart contracts
        if (!_shouldSkip(from) || _owned[from].length > 0) {
            uint256 nftsToBurn = (balanceBeforeSender / unit) -
                (balanceOf[from] / unit);
            for (uint256 i = 0; i < nftsToBurn; i++) {
                _burnNFT(from);
            }
        }

        // Skip minting for certain addresses to save gas
        // Skip burning from smart contracts
        if (!_shouldSkip(to)) {
            uint256 nftsToMint = (balanceOf[to] / unit) -
                (balanceBeforeReceiver / unit);
            for (uint256 i = 0; i < nftsToMint; i++) {
                _mintNFT(to);
            }
        }

        emit ERC20Transfer(from, to, amount);
        return true;
    }

    function _mint(address recipient, uint256 quantity) internal {
        balanceOf[recipient] += quantity * _getUnit();

        for (uint256 index = 0; index < quantity; index++) {
            _mintNFT(recipient);
        }
    }

    function _nftTransferFrom(
        address msgSender,
        address from,
        address to,
        uint256 id
    ) internal {
        require(from == _ownerOf[id], "Sender is not owner of NFT.");
        require(to != address(0), "Cannot send to null address.");
        require(
            msgSender == from ||
                isApprovedForAll[from][msgSender] ||
                msgSender == getApproved[id],
            "Operator is not approved."
        );

        balanceOf[from] -= _getUnit();
        unchecked {
            balanceOf[to] += _getUnit();
        }

        _removeSpecificNFT(from, id);
        _deliverNFT(to, id);

        emit Transfer(from, to, id);
        emit ERC20Transfer(from, to, _getUnit());
    }

    // Internal utility logic
    function _getUnit() internal view returns (uint256) {
        return 10**decimals;
    }

    function _mintNFT(address to) internal virtual {
        if (to == address(0)) {
            revert InvalidRecipient();
        }

        uint256 id;

        if (availableIds.length == 0) {
            unchecked {
                minted++;
            }
            require(
                minted <= totalNativeSupply,
                "Cannot mint more than given supply."
            );
            id = minted;
        } else {
            id = availableIds[availableIds.length - 1];
            availableIds.pop();
        }

        if (_ownerOf[id] != address(0)) {
            revert AlreadyExists();
        }

        _deliverNFT(to, id);

        emit Transfer(address(0), to, id);
    }

    function _burnNFT(address from) internal virtual {
        if (from == address(0)) {
            revert InvalidSender();
        }

        // Indiscriminantly burn last NFT in list of owned NFTs for `from`
        uint256 id = _owned[from][_owned[from].length - 1];
        _owned[from].pop();
        delete _ownedIndex[id];
        delete _ownerOf[id];
        delete getApproved[id];

        availableIds.push(id);

        emit Transfer(from, address(0), id);
    }

    function _removeSpecificNFT(address from, uint256 id) private {
        uint256 lastId;
        if (_isContract(from)) {
            lastId = _contractOwned[from][_contractOwned[from].length - 1];
            _contractOwned[from][_ownedIndex[id]] = lastId;
            _contractOwned[from].pop();
        } else {
            lastId = _owned[from][_owned[from].length - 1];
            _owned[from][_ownedIndex[id]] = lastId;
            _owned[from].pop();
        }
        _ownedIndex[lastId] = _ownedIndex[id];
        delete getApproved[id];
    }

    function _deliverNFT(address to, uint256 id) private {
        _ownerOf[id] = to;
        if (_isContract(to)) {
            _contractOwned[to].push(id);
            _ownedIndex[id] = _contractOwned[to].length - 1;
        } else {
            _owned[to].push(id);
            _ownedIndex[id] = _owned[to].length - 1;
        }
    }

    function _setNameSymbol(string memory _name, string memory _symbol)
        internal
    {
        name = _name;
        symbol = _symbol;
    }

    function _shouldSkip(address a) private view returns (bool) {
        return whitelist[a] || _isContract(a);
    }

    function _isContract(address a) private view returns (bool result) {
        assembly {
            result := extcodesize(a)
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


pragma solidity ^0.8.0;

contract SonicPocong404 is SRC404, ERC165 {
    string public baseTokenURI;
    string public baseExtension = ".json";
    
    uint256 public maxMintable;
    uint256 public maxMintPerTx;
    uint256 public royaltyAmount;
    uint256 public startTime;
    uint256 public price;

    address public royaltyReceiver;

    bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;
    
    bool public paused;
    bool private _mintActive;

    constructor() SRC404("SonicPocong404", "POCONG", 6, 10000, msg.sender) {
        address _owner = msg.sender;
        uint256 _startTime = block.timestamp;

        balanceOf[_owner] = 0 ether;

        whitelist[_owner] = true;

        maxMintable = 100000;
        maxMintPerTx = 10000;
        price = 100 ether;
        royaltyAmount = 250;
        _mintActive = false;
        startTime = _startTime;
        paused = false;
        royaltyReceiver = _owner;

        baseTokenURI = "ipfs://bafybeicdquhseawblqs3wlbjamqjhsm4ciihxra63fbvskhd3jkqnddmc4/";
    }

    receive() external payable {}

    function tokenURI(uint256 id) public view override returns (string memory) {
        return string.concat(baseTokenURI, Strings.toString(id),baseExtension);
    }

    function mintHasStarted() public view returns (bool) {
        return block.timestamp >= startTime;
    }

    function mintActive() public view returns (bool) {
        return _mintActive || (block.timestamp >= startTime);
    }

    function mint(uint256 quantity) public payable {
    require(mintActive(), "Minting is not active.");
    require(!paused);

    require(quantity <= maxMintPerTx, "Cannot mint that many at once.");
    require(minted + quantity <= maxMintable, "Finished minting.");

    if (msg.sender != owner) {
        require(msg.value >= (quantity * price), "Not enough FTM sent.");
    }

    if (msg.value > 0) {
        payable(owner).transfer(msg.value);
    }

    _mint(msg.sender, quantity);

    }

    function batchTransfer(address from, address to, uint256[] calldata tokenIds) external {
        require(to != address(0), "Invalid recipient address");
        require(tokenIds.length > 0, "Token IDs array is empty");

        for (uint256 i = 0; i < tokenIds.length; i++) {
            uint256 tokenId = tokenIds[i];
            require(ownerOf(tokenId) == msg.sender, "You do not own this token");

            _nftTransferFrom(msg.sender, from, to, tokenId);
        }
    }

    function walletOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 ownerTokenCount = _owned[_owner].length;
        uint256[] memory tokenIds = new uint256[](ownerTokenCount);
        for (uint256 i = 0; i < ownerTokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokenIds;
    }

    // ROYALTIES

    function royaltyInfo(
        uint256 _tokenId,
        uint256 _salePrice
    ) external view returns (address receiver, uint256 amount) {
        return (royaltyReceiver, ((_salePrice * royaltyAmount) / 10000));
    }

    function supportsInterface(
        bytes4 interfaceId
    ) public view virtual override(ERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            interfaceId == _INTERFACE_ID_ERC2981 ||
            super.supportsInterface(interfaceId);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);
    }

    // admin

    function ownerMint(address recipient, uint256 quantity) public onlyOwner {
        _mint(recipient, quantity);
    }

    function setPaused(bool _paused) public onlyOwner {
        paused = _paused;
    }

    function setMintActive(bool mintActive_) public onlyOwner {
        _mintActive = mintActive_;
    }

    function setRoyaltyReceiver(address _receiver) public onlyOwner {
        royaltyReceiver = _receiver;
    }

    function setStartTime(uint256 _startTime) public onlyOwner {
        startTime = _startTime;
    }

    function setRoyaltyAmount(uint256 _royaltyAmount) public onlyOwner {
        royaltyAmount = _royaltyAmount;
    }

    function setBaseURI(string memory _baseURI) public onlyOwner {
        baseTokenURI = _baseURI;
    }

    function setBaseExtension(string memory _extension) public onlyOwner {
        baseExtension = _extension;
    }

    function setMaxPerTx(uint256 _maxMintPerTx) public onlyOwner {
        maxMintPerTx = _maxMintPerTx;
    }

    function setPrice(uint256 _price) public onlyOwner {
        price = _price;
    }

    function withdrawAllETH() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No ETH to withdraw");
        (bool success, ) = payable(owner).call{value: balance}("");
        require(success, "ETH withdrawal failed");
    }

    function withdrawAllERC20(address erc20Address) external onlyOwner {
        IERC20 erc20 = IERC20(erc20Address);
        uint256 balance = erc20.balanceOf(address(this));
        require(balance > 0, "No tokens to withdraw");
        require(erc20.transfer(owner, balance), "Token transfer failed");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"availableIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"batchTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"contractNFTBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"contractTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"enoughTokenBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintHasStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","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":"id","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":"string","name":"_extension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintPerTx","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"mintActive_","type":"bool"}],"name":"setMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_royaltyAmount","type":"uint256"}],"name":"setRoyaltyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"setRoyaltyReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"setStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAvailableIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"totalNFTsOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNativeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Address","type":"address"}],"name":"withdrawAllERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAllETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600f908161004891906105d3565b50348015610054575f5ffd5b506040518060400160405280600e81526020017f536f6e6963506f636f6e673430340000000000000000000000000000000000008152506040518060400160405280600681526020017f504f434f4e470000000000000000000000000000000000000000000000000000815250600661271033805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361012d576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35084600190816101d691906105d3565b5083600290816101e691906105d3565b508260ff1660808160ff16815250508160c08181525050608051600a61020c919061080a565b826102179190610854565b60a0818152505050505050505f3390505f4290505f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506001600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620186a060108190555061271060118190555068056bc75e2d6310000060148190555060fa6012819055505f6015806101000a81548160ff021916908315150217905550806013819055505f601560146101000a81548160ff0219169083151502179055508160155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060800160405280604381526020016167ee60439139600e908161038e91906105d3565b505050610895565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061041157607f821691505b602082108103610424576104236103cd565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261044b565b610490868361044b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104d46104cf6104ca846104a8565b6104b1565b6104a8565b9050919050565b5f819050919050565b6104ed836104ba565b6105016104f9826104db565b848454610457565b825550505050565b5f5f905090565b610518610509565b6105238184846104e4565b505050565b5b818110156105465761053b5f82610510565b600181019050610529565b5050565b601f82111561058b5761055c8161042a565b6105658461043c565b81016020851015610574578190505b6105886105808561043c565b830182610528565b50505b505050565b5f82821c905092915050565b5f6105ab5f1984600802610590565b1980831691505092915050565b5f6105c3838361059c565b9150826002028217905092915050565b6105dc82610396565b67ffffffffffffffff8111156105f5576105f46103a0565b5b6105ff82546103fa565b61060a82828561054a565b5f60209050601f83116001811461063b575f8415610629578287015190505b61063385826105b8565b86555061069a565b601f1984166106498661042a565b5f5b828110156106705784890151825560018201915060208501945060208101905061064b565b8683101561068d5784890151610689601f89168261059c565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b600185111561072457808604811115610700576106ff6106a2565b5b600185161561070f5780820291505b808102905061071d856106cf565b94506106e4565b94509492505050565b5f8261073c57600190506107f7565b81610749575f90506107f7565b816001811461075f576002811461076957610798565b60019150506107f7565b60ff84111561077b5761077a6106a2565b5b8360020a915084821115610792576107916106a2565b5b506107f7565b5060208310610133831016604e8410600b84101617156107cd5782820a9050838111156107c8576107c76106a2565b5b6107f7565b6107da84848460016106db565b925090508184048111156107f1576107f06106a2565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610814826104a8565b915061081f836107fe565b925061084c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461072d565b905092915050565b5f61085e826104a8565b9150610869836104a8565b9250828202610877816104a8565b9150828204841483151761088e5761088d6106a2565b5b5092915050565b60805160a05160c051615f216108cd5f395f81816120ad0152613dff01525f61139501525f818161186101526131480152615f215ff3fe608060405260043610610384575f3560e01c80637c6e551d116101d0578063a9059cbb11610101578063d9adc1911161009f578063e985e9c51161006e578063e985e9c514610d4a578063ee1cc94414610d86578063ef1f3ebb14610dae578063f2fde38b14610dea5761038b565b8063d9adc19114610c80578063da3ef23f14610cbc578063dd62ed3e14610ce4578063de7fcb1d14610d205761038b565b8063c6f6f216116100db578063c6f6f21614610bb6578063c87b56dd14610bde578063d528d11814610c1a578063d547cfb714610c565761038b565b8063a9059cbb14610b28578063b88d4fde14610b64578063c668286214610b8c5761038b565b806395d89b411161016e578063a035b1fe11610148578063a035b1fe14610a90578063a0712d6814610aba578063a21b5fe914610ad6578063a22cb46514610b005761038b565b806395d89b4114610a005780639b19251a14610a2a5780639fbc871314610a665761038b565b80638da5cb5b116101aa5780638da5cb5b146109705780638dc251e31461099a57806390386bbf146109c257806391b7f5ed146109d85761038b565b80637c6e551d146108f457806381456f481461091e578063857abbd4146109485761038b565b8063313ce567116102b55780634f07de09116102535780636352211e116102225780636352211e1461081657806366e3e5e41461085257806370a082311461088e57806378e97925146108ca5761038b565b80634f07de091461077457806353d6fd591461079c57806355f804b3146107c45780635c975abb146107ec5761038b565b806342842e0e1161028f57806342842e0e146106be578063438b6300146106e6578063484b973c146107225780634f02c4201461074a5761038b565b8063313ce567146106445780633593cebc1461066e5780633e0a322d146106965761038b565b80631ae243661161032257806325fd90f3116102fc57806325fd90f31461058b5780632a55205a146105b55780632b968958146105f25780632f745c59146106085761038b565b80631ae24366146104e95780632154dc391461052557806323b872dd1461054f5761038b565b8063081812fc1161035e578063081812fc1461041f578063095ea7b31461045b57806316c38b3c1461049757806318160ddd146104bf5761038b565b806301ffc9a71461038f57806304bdc76b146103cb57806306fdde03146103f55761038b565b3661038b57005b5f5ffd5b34801561039a575f5ffd5b506103b560048036038101906103b091906146c3565b610e12565b6040516103c29190614708565b60405180910390f35b3480156103d6575f5ffd5b506103df610f42565b6040516103ec9190614739565b60405180910390f35b348015610400575f5ffd5b50610409610f4e565b60405161041691906147c2565b60405180910390f35b34801561042a575f5ffd5b506104456004803603810190610440919061480c565b610fda565b6040516104529190614876565b60405180910390f35b348015610466575f5ffd5b50610481600480360381019061047c91906148b9565b61100a565b60405161048e9190614708565b60405180910390f35b3480156104a2575f5ffd5b506104bd60048036038101906104b89190614921565b6112f1565b005b3480156104ca575f5ffd5b506104d3611393565b6040516104e09190614739565b60405180910390f35b3480156104f4575f5ffd5b5061050f600480360381019061050a91906148b9565b6113b7565b60405161051c9190614708565b60405180910390f35b348015610530575f5ffd5b50610539611463565b6040516105469190614739565b60405180910390f35b34801561055a575f5ffd5b506105756004803603810190610570919061494c565b611469565b6040516105829190614708565b60405180910390f35b348015610596575f5ffd5b5061059f6115f1565b6040516105ac9190614708565b60405180910390f35b3480156105c0575f5ffd5b506105db60048036038101906105d6919061499c565b611612565b6040516105e99291906149da565b60405180910390f35b3480156105fd575f5ffd5b5061060661165c565b005b348015610613575f5ffd5b5061062e600480360381019061062991906148b9565b61177c565b60405161063b9190614739565b60405180910390f35b34801561064f575f5ffd5b5061065861185f565b6040516106659190614a1c565b60405180910390f35b348015610679575f5ffd5b50610694600480360381019061068f9190614a96565b611883565b005b3480156106a1575f5ffd5b506106bc60048036038101906106b7919061480c565b6119fa565b005b3480156106c9575f5ffd5b506106e460048036038101906106df919061494c565b611a89565b005b3480156106f1575f5ffd5b5061070c60048036038101906107079190614b07565b611bb9565b6040516107199190614be9565b60405180910390f35b34801561072d575f5ffd5b50610748600480360381019061074391906148b9565b611c99565b005b348015610755575f5ffd5b5061075e611d2c565b60405161076b9190614739565b60405180910390f35b34801561077f575f5ffd5b5061079a6004803603810190610795919061480c565b611d32565b005b3480156107a7575f5ffd5b506107c260048036038101906107bd9190614c09565b611dc1565b005b3480156107cf575f5ffd5b506107ea60048036038101906107e59190614d6f565b611e9e565b005b3480156107f7575f5ffd5b50610800611f36565b60405161080d9190614708565b60405180910390f35b348015610821575f5ffd5b5061083c6004803603810190610837919061480c565b611f49565b6040516108499190614876565b60405180910390f35b34801561085d575f5ffd5b5061087860048036038101906108739190614b07565b611fe7565b6040516108859190614739565b60405180910390f35b348015610899575f5ffd5b506108b460048036038101906108af9190614b07565b61208a565b6040516108c19190614739565b60405180910390f35b3480156108d5575f5ffd5b506108de61209f565b6040516108eb9190614739565b60405180910390f35b3480156108ff575f5ffd5b506109086120a5565b6040516109159190614739565b60405180910390f35b348015610929575f5ffd5b506109326120ab565b60405161093f9190614739565b60405180910390f35b348015610953575f5ffd5b5061096e60048036038101906109699190614b07565b6120cf565b005b34801561097b575f5ffd5b506109846122f4565b6040516109919190614876565b60405180910390f35b3480156109a5575f5ffd5b506109c060048036038101906109bb9190614b07565b612318565b005b3480156109cd575f5ffd5b506109d66123e0565b005b3480156109e3575f5ffd5b506109fe60048036038101906109f9919061480c565b612577565b005b348015610a0b575f5ffd5b50610a14612606565b604051610a2191906147c2565b60405180910390f35b348015610a35575f5ffd5b50610a506004803603810190610a4b9190614b07565b612692565b604051610a5d9190614708565b60405180910390f35b348015610a71575f5ffd5b50610a7a6126af565b604051610a879190614876565b60405180910390f35b348015610a9b575f5ffd5b50610aa46126d4565b604051610ab19190614739565b60405180910390f35b610ad46004803603810190610acf919061480c565b6126da565b005b348015610ae1575f5ffd5b50610aea6128ef565b604051610af79190614708565b60405180910390f35b348015610b0b575f5ffd5b50610b266004803603810190610b219190614c09565b6128fb565b005b348015610b33575f5ffd5b50610b4e6004803603810190610b4991906148b9565b6129f3565b604051610b5b9190614708565b60405180910390f35b348015610b6f575f5ffd5b50610b8a6004803603810190610b859190614e0b565b612a07565b005b348015610b97575f5ffd5b50610ba0612b3d565b604051610bad91906147c2565b60405180910390f35b348015610bc1575f5ffd5b50610bdc6004803603810190610bd7919061480c565b612bc9565b005b348015610be9575f5ffd5b50610c046004803603810190610bff919061480c565b612c58565b604051610c1191906147c2565b60405180910390f35b348015610c25575f5ffd5b50610c406004803603810190610c3b919061480c565b612c8f565b604051610c4d9190614739565b60405180910390f35b348015610c61575f5ffd5b50610c6a612caf565b604051610c7791906147c2565b60405180910390f35b348015610c8b575f5ffd5b50610ca66004803603810190610ca19190614b07565b612d3b565b604051610cb39190614739565b60405180910390f35b348015610cc7575f5ffd5b50610ce26004803603810190610cdd9190614d6f565b612d84565b005b348015610cef575f5ffd5b50610d0a6004803603810190610d059190614e8f565b612e1c565b604051610d179190614739565b60405180910390f35b348015610d2b575f5ffd5b50610d34612e3c565b604051610d419190614739565b60405180910390f35b348015610d55575f5ffd5b50610d706004803603810190610d6b9190614e8f565b612e42565b604051610d7d9190614708565b60405180910390f35b348015610d91575f5ffd5b50610dac6004803603810190610da79190614921565b612e6c565b005b348015610db9575f5ffd5b50610dd46004803603810190610dcf9190614b07565b612f0d565b604051610de19190614739565b60405180910390f35b348015610df5575f5ffd5b50610e106004803603810190610e0b9190614b07565b612f56565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610edc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f2b5750632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f3b5750610f3a826130dc565b5b9050919050565b5f600d80549050905090565b60018054610f5b90614efa565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8790614efa565b8015610fd25780601f10610fa957610100808354040283529160200191610fd2565b820191905f5260205f20905b815481529060010190602001808311610fb557829003601f168201915b505050505081565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600354821115801561101c57505f82115b15611204575f60085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611113575060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561114a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360065f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516111f69190614739565b60405180910390a3506112e7565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112de9190614739565b60405180910390a35b6001905092915050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611376576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601560146101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f5f6113c1613145565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061140c9190614f57565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114549190614f98565b90508281101591505092915050565b60105481565b5f5f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152090615015565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115d957828161155c9190614f98565b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6115e4858585613178565b5060019150509392505050565b5f60158054906101000a900460ff168061160d57506013544210155b905090565b5f5f60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710601254856116479190614f57565b6116519190615060565b915091509250929050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116e1576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905082106117ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f6906150da565b60405180910390fd5b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828154811061184e5761184d6150f8565b5b905f5260205f200154905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e89061516f565b60405180910390fd5b5f8282905011611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d906151d7565b60405180910390fd5b5f5f90505b828290508110156119f3575f83838381811061195a576119596150f8565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff1661198382611f49565b73ffffffffffffffffffffffffffffffffffffffff16146119d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d09061523f565b60405180910390fd5b6119e533878784613544565b50808060010191505061193b565b5050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a7f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060138190555050565b611a9533848484613544565b5f8273ffffffffffffffffffffffffffffffffffffffff163b14158015611b7d575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401611b1b93929190615290565b6020604051808303815f875af1158015611b37573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5b91906152ec565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611bb4576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60605f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505f8167ffffffffffffffff811115611c1a57611c19614c4b565b5b604051908082528060200260200182016040528015611c485781602001602082028036833780820191505090505b5090505f5f90505b82811015611c8e57611c62858261177c565b828281518110611c7557611c746150f8565b5b6020026020010181815250508080600101915050611c50565b508092505050919050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d1e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d28828261393c565b5050565b60035481565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611db7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060128190555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e46576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f23576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e9081611f3291906154b7565b5050565b601560149054906101000a900460ff1681565b5f60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fe2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f611ff0613145565b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061203b9190614f57565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120839190614f98565b9050919050565b6004602052805f5260405f205f915090505481565b60135481565b60125481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612154576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121929190614876565b602060405180830381865afa1580156121ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d1919061559a565b90505f8111612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c9061560f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016122709291906149da565b6020604051808303815f875af115801561228c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b09190615641565b6122ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e6906156b6565b60405180910390fd5b505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461239d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612465576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f4790505f81116124ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a29061571e565b60405180910390fd5b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516124f090615766565b5f6040518083038185875af1925050503d805f811461252a576040519150601f19603f3d011682016040523d82523d5f602084013e61252f565b606091505b5050905080612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a906157c4565b60405180910390fd5b5050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125fc576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060148190555050565b6002805461261390614efa565b80601f016020809104026020016040519081016040528092919081815260200182805461263f90614efa565b801561268a5780601f106126615761010080835404028352916020019161268a565b820191905f5260205f20905b81548152906001019060200180831161266d57829003601f168201915b505050505081565b600c602052805f5260405f205f915054906101000a900460ff1681565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6126e26115f1565b612721576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127189061582c565b60405180910390fd5b601560149054906101000a900460ff161561273a575f5ffd5b60115481111561277f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277690615894565b60405180910390fd5b6010548160035461279091906158b2565b11156127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c89061592f565b60405180910390fd5b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461287557601454816128329190614f57565b341015612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90615997565b60405180910390fd5b5b5f3411156128e2575f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f193505050501580156128e0573d5f5f3e3d5ffd5b505b6128ec338261393c565b50565b5f601354421015905090565b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129e79190614708565b60405180910390a35050565b5f6129ff338484613178565b905092915050565b612a1333868686613544565b5f8473ffffffffffffffffffffffffffffffffffffffff163b14158015612aff575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b8152600401612a9d9594939291906159e1565b6020604051808303815f875af1158015612ab9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612add91906152ec565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15612b36576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b600f8054612b4a90614efa565b80601f0160208091040260200160405190810160405280929190818152602001828054612b7690614efa565b8015612bc15780601f10612b9857610100808354040283529160200191612bc1565b820191905f5260205f20905b815481529060010190602001808311612ba457829003601f168201915b505050505081565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c4e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060118190555050565b6060600e612c65836139c9565b600f604051602001612c7993929190615ae7565b6040516020818303038152906040529050919050565b600d8181548110612c9e575f80fd5b905f5260205f20015f915090505481565b600e8054612cbc90614efa565b80601f0160208091040260200160405190810160405280929190818152602001828054612ce890614efa565b8015612d335780601f10612d0a57610100808354040283529160200191612d33565b820191905f5260205f20905b815481529060010190602001808311612d1657829003601f168201915b505050505081565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490509050919050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e09576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f9081612e1891906154b7565b5050565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b60115481565b6007602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ef1576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806015806101000a81548160ff02191690831515021790555050565b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490509050919050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fdb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613040576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f7f0000000000000000000000000000000000000000000000000000000000000000600a6131739190615c46565b905090565b5f613184848484613a93565b5f61318d613145565b90505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905061321a87613aa3565b156132be575f83600a5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061326c9190614f57565b836132779190614f98565b9050858110156132bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b390615cda565b60405180910390fd5b505b8460045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461330a9190614f98565b925050819055508460045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555061336487613aad565b15806133af57505f60095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050115b1561343c575f8360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546133fe9190615060565b848461340a9190615060565b6134149190614f98565b90505f5f90505b818110156134395761342c89613b0f565b808060010191505061341b565b50505b61344586613aad565b6134d1575f83826134569190615060565b8460045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461349f9190615060565b6134a99190614f98565b90505f5f90505b818110156134ce576134c188613d7a565b80806001019150506134b0565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161352e9190614739565b60405180910390a3600193505050509392505050565b60085f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146135e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d990615d42565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364790615daa565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061370b575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80613771575060065f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b6137b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a790615e12565b60405180910390fd5b6137b8613145565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546138039190614f98565b92505081905550613812613145565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055506138658382613fc0565b61386f828261431a565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487613921613145565b60405161392e9190614739565b60405180910390a350505050565b613944613145565b8161394f9190614f57565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461399a91906158b2565b925050819055505f5f90505b818110156139c4576139b783613d7a565b80806001019150506139a6565b505050565b60605f60016139d784614507565b0190505f8167ffffffffffffffff8111156139f5576139f4614c4b565b5b6040519080825280601f01601f191660200182016040528015613a275781602001600182028036833780820191505090505b5090505f82602001820190505b600115613a88578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581613a7d57613a7c615033565b5b0494505f8503613a34575b819350505050919050565b613a9e838383614658565b505050565b5f813b9050919050565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613b085750613b0782613aa3565b5b9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613b74576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050613bff9190614f98565b81548110613c1057613c0f6150f8565b5b905f5260205f200154905060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480613c6857613c67615e30565b5b600190038181905f5260205f20015f90559055600b5f8281526020019081526020015f205f905560085f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600d81908060018154018082558091505060019003905f5260205f20015f9091909190915055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613ddf576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f600d8054905003613e6c5760035f81548092919060010191905055507f00000000000000000000000000000000000000000000000000000000000000006003541115613e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e5990615ecd565b60405180910390fd5b6003549050613ec2565b600d6001600d80549050613e809190614f98565b81548110613e9157613e906150f8565b5b905f5260205f2001549050600d805480613eae57613ead615e30565b5b600190038181905f5260205f20015f905590555b5f73ffffffffffffffffffffffffffffffffffffffff1660085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613f57576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f61828261431a565b808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f613fca83613aa3565b1561414757600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506140599190614f98565b8154811061406a576140696150f8565b5b905f5260205f200154905080600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600b5f8581526020019081526020015f2054815481106140d6576140d56150f8565b5b905f5260205f200181905550600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080548061412f5761412e615e30565b5b600190038181905f5260205f20015f905590556142bb565b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506141d19190614f98565b815481106141e2576141e16150f8565b5b905f5260205f20015490508060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600b5f8581526020019081526020015f20548154811061424e5761424d6150f8565b5b905f5260205f20018190555060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054806142a7576142a6615e30565b5b600190038181905f5260205f20015f905590555b600b5f8381526020019081526020015f2054600b5f8381526020019081526020015f208190555060065f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050565b8160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061437282613aa3565b1561443f57600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f90919091909150556001600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506144259190614f98565b600b5f8381526020019081526020015f2081905550614503565b60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506144ed9190614f98565b600b5f8381526020019081526020015f20819055505b5050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614563577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161455957614558615033565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106145a0576d04ee2d6d415b85acef8100000000838161459657614595615033565b5b0492506020810190505b662386f26fc1000083106145cf57662386f26fc1000083816145c5576145c4615033565b5b0492506010810190505b6305f5e10083106145f8576305f5e10083816145ee576145ed615033565b5b0492506008810190505b612710831061461d57612710838161461357614612615033565b5b0492506004810190505b60648310614640576064838161463657614635615033565b5b0492506002810190505b600a831061464f576001810190505b80915050919050565b505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6146a28161466e565b81146146ac575f5ffd5b50565b5f813590506146bd81614699565b92915050565b5f602082840312156146d8576146d7614666565b5b5f6146e5848285016146af565b91505092915050565b5f8115159050919050565b614702816146ee565b82525050565b5f60208201905061471b5f8301846146f9565b92915050565b5f819050919050565b61473381614721565b82525050565b5f60208201905061474c5f83018461472a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61479482614752565b61479e818561475c565b93506147ae81856020860161476c565b6147b78161477a565b840191505092915050565b5f6020820190508181035f8301526147da818461478a565b905092915050565b6147eb81614721565b81146147f5575f5ffd5b50565b5f81359050614806816147e2565b92915050565b5f6020828403121561482157614820614666565b5b5f61482e848285016147f8565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61486082614837565b9050919050565b61487081614856565b82525050565b5f6020820190506148895f830184614867565b92915050565b61489881614856565b81146148a2575f5ffd5b50565b5f813590506148b38161488f565b92915050565b5f5f604083850312156148cf576148ce614666565b5b5f6148dc858286016148a5565b92505060206148ed858286016147f8565b9150509250929050565b614900816146ee565b811461490a575f5ffd5b50565b5f8135905061491b816148f7565b92915050565b5f6020828403121561493657614935614666565b5b5f6149438482850161490d565b91505092915050565b5f5f5f6060848603121561496357614962614666565b5b5f614970868287016148a5565b9350506020614981868287016148a5565b9250506040614992868287016147f8565b9150509250925092565b5f5f604083850312156149b2576149b1614666565b5b5f6149bf858286016147f8565b92505060206149d0858286016147f8565b9150509250929050565b5f6040820190506149ed5f830185614867565b6149fa602083018461472a565b9392505050565b5f60ff82169050919050565b614a1681614a01565b82525050565b5f602082019050614a2f5f830184614a0d565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112614a5657614a55614a35565b5b8235905067ffffffffffffffff811115614a7357614a72614a39565b5b602083019150836020820283011115614a8f57614a8e614a3d565b5b9250929050565b5f5f5f5f60608587031215614aae57614aad614666565b5b5f614abb878288016148a5565b9450506020614acc878288016148a5565b935050604085013567ffffffffffffffff811115614aed57614aec61466a565b5b614af987828801614a41565b925092505092959194509250565b5f60208284031215614b1c57614b1b614666565b5b5f614b29848285016148a5565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b6481614721565b82525050565b5f614b758383614b5b565b60208301905092915050565b5f602082019050919050565b5f614b9782614b32565b614ba18185614b3c565b9350614bac83614b4c565b805f5b83811015614bdc578151614bc38882614b6a565b9750614bce83614b81565b925050600181019050614baf565b5085935050505092915050565b5f6020820190508181035f830152614c018184614b8d565b905092915050565b5f5f60408385031215614c1f57614c1e614666565b5b5f614c2c858286016148a5565b9250506020614c3d8582860161490d565b9150509250929050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614c818261477a565b810181811067ffffffffffffffff82111715614ca057614c9f614c4b565b5b80604052505050565b5f614cb261465d565b9050614cbe8282614c78565b919050565b5f67ffffffffffffffff821115614cdd57614cdc614c4b565b5b614ce68261477a565b9050602081019050919050565b828183375f83830152505050565b5f614d13614d0e84614cc3565b614ca9565b905082815260208101848484011115614d2f57614d2e614c47565b5b614d3a848285614cf3565b509392505050565b5f82601f830112614d5657614d55614a35565b5b8135614d66848260208601614d01565b91505092915050565b5f60208284031215614d8457614d83614666565b5b5f82013567ffffffffffffffff811115614da157614da061466a565b5b614dad84828501614d42565b91505092915050565b5f5f83601f840112614dcb57614dca614a35565b5b8235905067ffffffffffffffff811115614de857614de7614a39565b5b602083019150836001820283011115614e0457614e03614a3d565b5b9250929050565b5f5f5f5f5f60808688031215614e2457614e23614666565b5b5f614e31888289016148a5565b9550506020614e42888289016148a5565b9450506040614e53888289016147f8565b935050606086013567ffffffffffffffff811115614e7457614e7361466a565b5b614e8088828901614db6565b92509250509295509295909350565b5f5f60408385031215614ea557614ea4614666565b5b5f614eb2858286016148a5565b9250506020614ec3858286016148a5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614f1157607f821691505b602082108103614f2457614f23614ecd565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614f6182614721565b9150614f6c83614721565b9250828202614f7a81614721565b91508282048414831517614f9157614f90614f2a565b5b5092915050565b5f614fa282614721565b9150614fad83614721565b9250828203905081811115614fc557614fc4614f2a565b5b92915050565b7f4e6f7420656e6f75676820616c6c6f77616e63652e00000000000000000000005f82015250565b5f614fff60158361475c565b915061500a82614fcb565b602082019050919050565b5f6020820190508181035f83015261502c81614ff3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61506a82614721565b915061507583614721565b92508261508557615084615033565b5b828204905092915050565b7f496e646578206f7574206f6620626f756e6473000000000000000000000000005f82015250565b5f6150c460138361475c565b91506150cf82615090565b602082019050919050565b5f6020820190508181035f8301526150f1816150b8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f61515960198361475c565b915061516482615125565b602082019050919050565b5f6020820190508181035f8301526151868161514d565b9050919050565b7f546f6b656e2049447320617272617920697320656d70747900000000000000005f82015250565b5f6151c160188361475c565b91506151cc8261518d565b602082019050919050565b5f6020820190508181035f8301526151ee816151b5565b9050919050565b7f596f7520646f206e6f74206f776e207468697320746f6b656e000000000000005f82015250565b5f61522960198361475c565b9150615234826151f5565b602082019050919050565b5f6020820190508181035f8301526152568161521d565b9050919050565b5f82825260208201905092915050565b50565b5f61527b5f8361525d565b91506152868261526d565b5f82019050919050565b5f6080820190506152a35f830186614867565b6152b06020830185614867565b6152bd604083018461472a565b81810360608301526152ce81615270565b9050949350505050565b5f815190506152e681614699565b92915050565b5f6020828403121561530157615300614666565b5b5f61530e848285016152d8565b91505092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026153737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615338565b61537d8683615338565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6153b86153b36153ae84614721565b615395565b614721565b9050919050565b5f819050919050565b6153d18361539e565b6153e56153dd826153bf565b848454615344565b825550505050565b5f5f905090565b6153fc6153ed565b6154078184846153c8565b505050565b5b8181101561542a5761541f5f826153f4565b60018101905061540d565b5050565b601f82111561546f5761544081615317565b61544984615329565b81016020851015615458578190505b61546c61546485615329565b83018261540c565b50505b505050565b5f82821c905092915050565b5f61548f5f1984600802615474565b1980831691505092915050565b5f6154a78383615480565b9150826002028217905092915050565b6154c082614752565b67ffffffffffffffff8111156154d9576154d8614c4b565b5b6154e38254614efa565b6154ee82828561542e565b5f60209050601f83116001811461551f575f841561550d578287015190505b615517858261549c565b86555061557e565b601f19841661552d86615317565b5f5b828110156155545784890151825560018201915060208501945060208101905061552f565b86831015615571578489015161556d601f891682615480565b8355505b6001600288020188555050505b505050505050565b5f81519050615594816147e2565b92915050565b5f602082840312156155af576155ae614666565b5b5f6155bc84828501615586565b91505092915050565b7f4e6f20746f6b656e7320746f20776974686472617700000000000000000000005f82015250565b5f6155f960158361475c565b9150615604826155c5565b602082019050919050565b5f6020820190508181035f830152615626816155ed565b9050919050565b5f8151905061563b816148f7565b92915050565b5f6020828403121561565657615655614666565b5b5f6156638482850161562d565b91505092915050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f6156a060158361475c565b91506156ab8261566c565b602082019050919050565b5f6020820190508181035f8301526156cd81615694565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f61570860128361475c565b9150615713826156d4565b602082019050919050565b5f6020820190508181035f830152615735816156fc565b9050919050565b5f81905092915050565b5f6157515f8361573c565b915061575c8261526d565b5f82019050919050565b5f61577082615746565b9150819050919050565b7f455448207769746864726177616c206661696c656400000000000000000000005f82015250565b5f6157ae60158361475c565b91506157b98261577a565b602082019050919050565b5f6020820190508181035f8301526157db816157a2565b9050919050565b7f4d696e74696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61581660168361475c565b9150615821826157e2565b602082019050919050565b5f6020820190508181035f8301526158438161580a565b9050919050565b7f43616e6e6f74206d696e742074686174206d616e79206174206f6e63652e00005f82015250565b5f61587e601e8361475c565b91506158898261584a565b602082019050919050565b5f6020820190508181035f8301526158ab81615872565b9050919050565b5f6158bc82614721565b91506158c783614721565b92508282019050808211156158df576158de614f2a565b5b92915050565b7f46696e6973686564206d696e74696e672e0000000000000000000000000000005f82015250565b5f61591960118361475c565b9150615924826158e5565b602082019050919050565b5f6020820190508181035f8301526159468161590d565b9050919050565b7f4e6f7420656e6f7567682046544d2073656e742e0000000000000000000000005f82015250565b5f61598160148361475c565b915061598c8261594d565b602082019050919050565b5f6020820190508181035f8301526159ae81615975565b9050919050565b5f6159c0838561525d565b93506159cd838584614cf3565b6159d68361477a565b840190509392505050565b5f6080820190506159f45f830188614867565b615a016020830187614867565b615a0e604083018661472a565b8181036060830152615a218184866159b5565b90509695505050505050565b5f81905092915050565b5f8154615a4381614efa565b615a4d8186615a2d565b9450600182165f8114615a675760018114615a7c57615aae565b60ff1983168652811515820286019350615aae565b615a8585615317565b5f5b83811015615aa657815481890152600182019150602081019050615a87565b838801955050505b50505092915050565b5f615ac182614752565b615acb8185615a2d565b9350615adb81856020860161476c565b80840191505092915050565b5f615af28286615a37565b9150615afe8285615ab7565b9150615b0a8284615a37565b9150819050949350505050565b5f8160011c9050919050565b5f5f8291508390505b6001851115615b6c57808604811115615b4857615b47614f2a565b5b6001851615615b575780820291505b8081029050615b6585615b17565b9450615b2c565b94509492505050565b5f82615b845760019050615c3f565b81615b91575f9050615c3f565b8160018114615ba75760028114615bb157615be0565b6001915050615c3f565b60ff841115615bc357615bc2614f2a565b5b8360020a915084821115615bda57615bd9614f2a565b5b50615c3f565b5060208310610133831016604e8410600b8410161715615c155782820a905083811115615c1057615c0f614f2a565b5b615c3f565b615c228484846001615b23565b92509050818404811115615c3957615c38614f2a565b5b81810290505b9392505050565b5f615c5082614721565b9150615c5b83614a01565b9250615c887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615b75565b905092915050565b7f4e6f7420656e6f75676820746f6b656e2062616c616e63652e000000000000005f82015250565b5f615cc460198361475c565b9150615ccf82615c90565b602082019050919050565b5f6020820190508181035f830152615cf181615cb8565b9050919050565b7f53656e646572206973206e6f74206f776e6572206f66204e46542e00000000005f82015250565b5f615d2c601b8361475c565b9150615d3782615cf8565b602082019050919050565b5f6020820190508181035f830152615d5981615d20565b9050919050565b7f43616e6e6f742073656e6420746f206e756c6c20616464726573732e000000005f82015250565b5f615d94601c8361475c565b9150615d9f82615d60565b602082019050919050565b5f6020820190508181035f830152615dc181615d88565b9050919050565b7f4f70657261746f72206973206e6f7420617070726f7665642e000000000000005f82015250565b5f615dfc60198361475c565b9150615e0782615dc8565b602082019050919050565b5f6020820190508181035f830152615e2981615df0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f43616e6e6f74206d696e74206d6f7265207468616e20676976656e20737570705f8201527f6c792e0000000000000000000000000000000000000000000000000000000000602082015250565b5f615eb760238361475c565b9150615ec282615e5d565b604082019050919050565b5f6020820190508181035f830152615ee481615eab565b905091905056fea2646970667358221220df3efa1cb54b6647d05e348de3ed967f3fb103c96d85d77a251a6e73b5c3d93a64736f6c634300081c0033697066733a2f2f62616679626569636471756873656177626c717333776c626a616d716a68736d34636969687872613633666276736b6864336a6b716e64646d63342f

Deployed Bytecode

0x608060405260043610610384575f3560e01c80637c6e551d116101d0578063a9059cbb11610101578063d9adc1911161009f578063e985e9c51161006e578063e985e9c514610d4a578063ee1cc94414610d86578063ef1f3ebb14610dae578063f2fde38b14610dea5761038b565b8063d9adc19114610c80578063da3ef23f14610cbc578063dd62ed3e14610ce4578063de7fcb1d14610d205761038b565b8063c6f6f216116100db578063c6f6f21614610bb6578063c87b56dd14610bde578063d528d11814610c1a578063d547cfb714610c565761038b565b8063a9059cbb14610b28578063b88d4fde14610b64578063c668286214610b8c5761038b565b806395d89b411161016e578063a035b1fe11610148578063a035b1fe14610a90578063a0712d6814610aba578063a21b5fe914610ad6578063a22cb46514610b005761038b565b806395d89b4114610a005780639b19251a14610a2a5780639fbc871314610a665761038b565b80638da5cb5b116101aa5780638da5cb5b146109705780638dc251e31461099a57806390386bbf146109c257806391b7f5ed146109d85761038b565b80637c6e551d146108f457806381456f481461091e578063857abbd4146109485761038b565b8063313ce567116102b55780634f07de09116102535780636352211e116102225780636352211e1461081657806366e3e5e41461085257806370a082311461088e57806378e97925146108ca5761038b565b80634f07de091461077457806353d6fd591461079c57806355f804b3146107c45780635c975abb146107ec5761038b565b806342842e0e1161028f57806342842e0e146106be578063438b6300146106e6578063484b973c146107225780634f02c4201461074a5761038b565b8063313ce567146106445780633593cebc1461066e5780633e0a322d146106965761038b565b80631ae243661161032257806325fd90f3116102fc57806325fd90f31461058b5780632a55205a146105b55780632b968958146105f25780632f745c59146106085761038b565b80631ae24366146104e95780632154dc391461052557806323b872dd1461054f5761038b565b8063081812fc1161035e578063081812fc1461041f578063095ea7b31461045b57806316c38b3c1461049757806318160ddd146104bf5761038b565b806301ffc9a71461038f57806304bdc76b146103cb57806306fdde03146103f55761038b565b3661038b57005b5f5ffd5b34801561039a575f5ffd5b506103b560048036038101906103b091906146c3565b610e12565b6040516103c29190614708565b60405180910390f35b3480156103d6575f5ffd5b506103df610f42565b6040516103ec9190614739565b60405180910390f35b348015610400575f5ffd5b50610409610f4e565b60405161041691906147c2565b60405180910390f35b34801561042a575f5ffd5b506104456004803603810190610440919061480c565b610fda565b6040516104529190614876565b60405180910390f35b348015610466575f5ffd5b50610481600480360381019061047c91906148b9565b61100a565b60405161048e9190614708565b60405180910390f35b3480156104a2575f5ffd5b506104bd60048036038101906104b89190614921565b6112f1565b005b3480156104ca575f5ffd5b506104d3611393565b6040516104e09190614739565b60405180910390f35b3480156104f4575f5ffd5b5061050f600480360381019061050a91906148b9565b6113b7565b60405161051c9190614708565b60405180910390f35b348015610530575f5ffd5b50610539611463565b6040516105469190614739565b60405180910390f35b34801561055a575f5ffd5b506105756004803603810190610570919061494c565b611469565b6040516105829190614708565b60405180910390f35b348015610596575f5ffd5b5061059f6115f1565b6040516105ac9190614708565b60405180910390f35b3480156105c0575f5ffd5b506105db60048036038101906105d6919061499c565b611612565b6040516105e99291906149da565b60405180910390f35b3480156105fd575f5ffd5b5061060661165c565b005b348015610613575f5ffd5b5061062e600480360381019061062991906148b9565b61177c565b60405161063b9190614739565b60405180910390f35b34801561064f575f5ffd5b5061065861185f565b6040516106659190614a1c565b60405180910390f35b348015610679575f5ffd5b50610694600480360381019061068f9190614a96565b611883565b005b3480156106a1575f5ffd5b506106bc60048036038101906106b7919061480c565b6119fa565b005b3480156106c9575f5ffd5b506106e460048036038101906106df919061494c565b611a89565b005b3480156106f1575f5ffd5b5061070c60048036038101906107079190614b07565b611bb9565b6040516107199190614be9565b60405180910390f35b34801561072d575f5ffd5b50610748600480360381019061074391906148b9565b611c99565b005b348015610755575f5ffd5b5061075e611d2c565b60405161076b9190614739565b60405180910390f35b34801561077f575f5ffd5b5061079a6004803603810190610795919061480c565b611d32565b005b3480156107a7575f5ffd5b506107c260048036038101906107bd9190614c09565b611dc1565b005b3480156107cf575f5ffd5b506107ea60048036038101906107e59190614d6f565b611e9e565b005b3480156107f7575f5ffd5b50610800611f36565b60405161080d9190614708565b60405180910390f35b348015610821575f5ffd5b5061083c6004803603810190610837919061480c565b611f49565b6040516108499190614876565b60405180910390f35b34801561085d575f5ffd5b5061087860048036038101906108739190614b07565b611fe7565b6040516108859190614739565b60405180910390f35b348015610899575f5ffd5b506108b460048036038101906108af9190614b07565b61208a565b6040516108c19190614739565b60405180910390f35b3480156108d5575f5ffd5b506108de61209f565b6040516108eb9190614739565b60405180910390f35b3480156108ff575f5ffd5b506109086120a5565b6040516109159190614739565b60405180910390f35b348015610929575f5ffd5b506109326120ab565b60405161093f9190614739565b60405180910390f35b348015610953575f5ffd5b5061096e60048036038101906109699190614b07565b6120cf565b005b34801561097b575f5ffd5b506109846122f4565b6040516109919190614876565b60405180910390f35b3480156109a5575f5ffd5b506109c060048036038101906109bb9190614b07565b612318565b005b3480156109cd575f5ffd5b506109d66123e0565b005b3480156109e3575f5ffd5b506109fe60048036038101906109f9919061480c565b612577565b005b348015610a0b575f5ffd5b50610a14612606565b604051610a2191906147c2565b60405180910390f35b348015610a35575f5ffd5b50610a506004803603810190610a4b9190614b07565b612692565b604051610a5d9190614708565b60405180910390f35b348015610a71575f5ffd5b50610a7a6126af565b604051610a879190614876565b60405180910390f35b348015610a9b575f5ffd5b50610aa46126d4565b604051610ab19190614739565b60405180910390f35b610ad46004803603810190610acf919061480c565b6126da565b005b348015610ae1575f5ffd5b50610aea6128ef565b604051610af79190614708565b60405180910390f35b348015610b0b575f5ffd5b50610b266004803603810190610b219190614c09565b6128fb565b005b348015610b33575f5ffd5b50610b4e6004803603810190610b4991906148b9565b6129f3565b604051610b5b9190614708565b60405180910390f35b348015610b6f575f5ffd5b50610b8a6004803603810190610b859190614e0b565b612a07565b005b348015610b97575f5ffd5b50610ba0612b3d565b604051610bad91906147c2565b60405180910390f35b348015610bc1575f5ffd5b50610bdc6004803603810190610bd7919061480c565b612bc9565b005b348015610be9575f5ffd5b50610c046004803603810190610bff919061480c565b612c58565b604051610c1191906147c2565b60405180910390f35b348015610c25575f5ffd5b50610c406004803603810190610c3b919061480c565b612c8f565b604051610c4d9190614739565b60405180910390f35b348015610c61575f5ffd5b50610c6a612caf565b604051610c7791906147c2565b60405180910390f35b348015610c8b575f5ffd5b50610ca66004803603810190610ca19190614b07565b612d3b565b604051610cb39190614739565b60405180910390f35b348015610cc7575f5ffd5b50610ce26004803603810190610cdd9190614d6f565b612d84565b005b348015610cef575f5ffd5b50610d0a6004803603810190610d059190614e8f565b612e1c565b604051610d179190614739565b60405180910390f35b348015610d2b575f5ffd5b50610d34612e3c565b604051610d419190614739565b60405180910390f35b348015610d55575f5ffd5b50610d706004803603810190610d6b9190614e8f565b612e42565b604051610d7d9190614708565b60405180910390f35b348015610d91575f5ffd5b50610dac6004803603810190610da79190614921565b612e6c565b005b348015610db9575f5ffd5b50610dd46004803603810190610dcf9190614b07565b612f0d565b604051610de19190614739565b60405180910390f35b348015610df5575f5ffd5b50610e106004803603810190610e0b9190614b07565b612f56565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610edc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f2b5750632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f3b5750610f3a826130dc565b5b9050919050565b5f600d80549050905090565b60018054610f5b90614efa565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8790614efa565b8015610fd25780601f10610fa957610100808354040283529160200191610fd2565b820191905f5260205f20905b815481529060010190602001808311610fb557829003601f168201915b505050505081565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600354821115801561101c57505f82115b15611204575f60085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611113575060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561114a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360065f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516111f69190614739565b60405180910390a3506112e7565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112de9190614739565b60405180910390a35b6001905092915050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611376576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601560146101000a81548160ff02191690831515021790555050565b7f00000000000000000000000000000000000000000000000000000002540be40081565b5f5f6113c1613145565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061140c9190614f57565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114549190614f98565b90508281101591505092915050565b60105481565b5f5f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152090615015565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115d957828161155c9190614f98565b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6115e4858585613178565b5060019150509392505050565b5f60158054906101000a900460ff168061160d57506013544210155b905090565b5f5f60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710601254856116479190614f57565b6116519190615060565b915091509250929050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116e1576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905082106117ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f6906150da565b60405180910390fd5b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828154811061184e5761184d6150f8565b5b905f5260205f200154905092915050565b7f000000000000000000000000000000000000000000000000000000000000000681565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e89061516f565b60405180910390fd5b5f8282905011611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d906151d7565b60405180910390fd5b5f5f90505b828290508110156119f3575f83838381811061195a576119596150f8565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff1661198382611f49565b73ffffffffffffffffffffffffffffffffffffffff16146119d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d09061523f565b60405180910390fd5b6119e533878784613544565b50808060010191505061193b565b5050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a7f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060138190555050565b611a9533848484613544565b5f8273ffffffffffffffffffffffffffffffffffffffff163b14158015611b7d575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401611b1b93929190615290565b6020604051808303815f875af1158015611b37573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5b91906152ec565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611bb4576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60605f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505f8167ffffffffffffffff811115611c1a57611c19614c4b565b5b604051908082528060200260200182016040528015611c485781602001602082028036833780820191505090505b5090505f5f90505b82811015611c8e57611c62858261177c565b828281518110611c7557611c746150f8565b5b6020026020010181815250508080600101915050611c50565b508092505050919050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d1e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d28828261393c565b5050565b60035481565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611db7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060128190555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e46576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f23576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e9081611f3291906154b7565b5050565b601560149054906101000a900460ff1681565b5f60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fe2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f611ff0613145565b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061203b9190614f57565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120839190614f98565b9050919050565b6004602052805f5260405f205f915090505481565b60135481565b60125481565b7f000000000000000000000000000000000000000000000000000000000000271081565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612154576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121929190614876565b602060405180830381865afa1580156121ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d1919061559a565b90505f8111612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c9061560f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016122709291906149da565b6020604051808303815f875af115801561228c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b09190615641565b6122ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e6906156b6565b60405180910390fd5b505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461239d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612465576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f4790505f81116124ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a29061571e565b60405180910390fd5b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516124f090615766565b5f6040518083038185875af1925050503d805f811461252a576040519150601f19603f3d011682016040523d82523d5f602084013e61252f565b606091505b5050905080612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a906157c4565b60405180910390fd5b5050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125fc576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060148190555050565b6002805461261390614efa565b80601f016020809104026020016040519081016040528092919081815260200182805461263f90614efa565b801561268a5780601f106126615761010080835404028352916020019161268a565b820191905f5260205f20905b81548152906001019060200180831161266d57829003601f168201915b505050505081565b600c602052805f5260405f205f915054906101000a900460ff1681565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6126e26115f1565b612721576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127189061582c565b60405180910390fd5b601560149054906101000a900460ff161561273a575f5ffd5b60115481111561277f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277690615894565b60405180910390fd5b6010548160035461279091906158b2565b11156127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c89061592f565b60405180910390fd5b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461287557601454816128329190614f57565b341015612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90615997565b60405180910390fd5b5b5f3411156128e2575f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f193505050501580156128e0573d5f5f3e3d5ffd5b505b6128ec338261393c565b50565b5f601354421015905090565b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129e79190614708565b60405180910390a35050565b5f6129ff338484613178565b905092915050565b612a1333868686613544565b5f8473ffffffffffffffffffffffffffffffffffffffff163b14158015612aff575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b8152600401612a9d9594939291906159e1565b6020604051808303815f875af1158015612ab9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612add91906152ec565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15612b36576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b600f8054612b4a90614efa565b80601f0160208091040260200160405190810160405280929190818152602001828054612b7690614efa565b8015612bc15780601f10612b9857610100808354040283529160200191612bc1565b820191905f5260205f20905b815481529060010190602001808311612ba457829003601f168201915b505050505081565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c4e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060118190555050565b6060600e612c65836139c9565b600f604051602001612c7993929190615ae7565b6040516020818303038152906040529050919050565b600d8181548110612c9e575f80fd5b905f5260205f20015f915090505481565b600e8054612cbc90614efa565b80601f0160208091040260200160405190810160405280929190818152602001828054612ce890614efa565b8015612d335780601f10612d0a57610100808354040283529160200191612d33565b820191905f5260205f20905b815481529060010190602001808311612d1657829003601f168201915b505050505081565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490509050919050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e09576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f9081612e1891906154b7565b5050565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b60115481565b6007602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ef1576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806015806101000a81548160ff02191690831515021790555050565b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490509050919050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fdb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613040576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f7f0000000000000000000000000000000000000000000000000000000000000006600a6131739190615c46565b905090565b5f613184848484613a93565b5f61318d613145565b90505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905061321a87613aa3565b156132be575f83600a5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061326c9190614f57565b836132779190614f98565b9050858110156132bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b390615cda565b60405180910390fd5b505b8460045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461330a9190614f98565b925050819055508460045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555061336487613aad565b15806133af57505f60095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050115b1561343c575f8360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546133fe9190615060565b848461340a9190615060565b6134149190614f98565b90505f5f90505b818110156134395761342c89613b0f565b808060010191505061341b565b50505b61344586613aad565b6134d1575f83826134569190615060565b8460045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461349f9190615060565b6134a99190614f98565b90505f5f90505b818110156134ce576134c188613d7a565b80806001019150506134b0565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161352e9190614739565b60405180910390a3600193505050509392505050565b60085f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146135e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d990615d42565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364790615daa565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061370b575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80613771575060065f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b6137b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a790615e12565b60405180910390fd5b6137b8613145565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546138039190614f98565b92505081905550613812613145565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055506138658382613fc0565b61386f828261431a565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487613921613145565b60405161392e9190614739565b60405180910390a350505050565b613944613145565b8161394f9190614f57565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461399a91906158b2565b925050819055505f5f90505b818110156139c4576139b783613d7a565b80806001019150506139a6565b505050565b60605f60016139d784614507565b0190505f8167ffffffffffffffff8111156139f5576139f4614c4b565b5b6040519080825280601f01601f191660200182016040528015613a275781602001600182028036833780820191505090505b5090505f82602001820190505b600115613a88578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581613a7d57613a7c615033565b5b0494505f8503613a34575b819350505050919050565b613a9e838383614658565b505050565b5f813b9050919050565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613b085750613b0782613aa3565b5b9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613b74576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050613bff9190614f98565b81548110613c1057613c0f6150f8565b5b905f5260205f200154905060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480613c6857613c67615e30565b5b600190038181905f5260205f20015f90559055600b5f8281526020019081526020015f205f905560085f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600d81908060018154018082558091505060019003905f5260205f20015f9091909190915055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613ddf576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f600d8054905003613e6c5760035f81548092919060010191905055507f00000000000000000000000000000000000000000000000000000000000027106003541115613e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e5990615ecd565b60405180910390fd5b6003549050613ec2565b600d6001600d80549050613e809190614f98565b81548110613e9157613e906150f8565b5b905f5260205f2001549050600d805480613eae57613ead615e30565b5b600190038181905f5260205f20015f905590555b5f73ffffffffffffffffffffffffffffffffffffffff1660085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613f57576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f61828261431a565b808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f613fca83613aa3565b1561414757600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506140599190614f98565b8154811061406a576140696150f8565b5b905f5260205f200154905080600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600b5f8581526020019081526020015f2054815481106140d6576140d56150f8565b5b905f5260205f200181905550600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080548061412f5761412e615e30565b5b600190038181905f5260205f20015f905590556142bb565b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506141d19190614f98565b815481106141e2576141e16150f8565b5b905f5260205f20015490508060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600b5f8581526020019081526020015f20548154811061424e5761424d6150f8565b5b905f5260205f20018190555060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054806142a7576142a6615e30565b5b600190038181905f5260205f20015f905590555b600b5f8381526020019081526020015f2054600b5f8381526020019081526020015f208190555060065f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050565b8160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061437282613aa3565b1561443f57600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f90919091909150556001600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506144259190614f98565b600b5f8381526020019081526020015f2081905550614503565b60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506144ed9190614f98565b600b5f8381526020019081526020015f20819055505b5050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614563577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161455957614558615033565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106145a0576d04ee2d6d415b85acef8100000000838161459657614595615033565b5b0492506020810190505b662386f26fc1000083106145cf57662386f26fc1000083816145c5576145c4615033565b5b0492506010810190505b6305f5e10083106145f8576305f5e10083816145ee576145ed615033565b5b0492506008810190505b612710831061461d57612710838161461357614612615033565b5b0492506004810190505b60648310614640576064838161463657614635615033565b5b0492506002810190505b600a831061464f576001810190505b80915050919050565b505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6146a28161466e565b81146146ac575f5ffd5b50565b5f813590506146bd81614699565b92915050565b5f602082840312156146d8576146d7614666565b5b5f6146e5848285016146af565b91505092915050565b5f8115159050919050565b614702816146ee565b82525050565b5f60208201905061471b5f8301846146f9565b92915050565b5f819050919050565b61473381614721565b82525050565b5f60208201905061474c5f83018461472a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61479482614752565b61479e818561475c565b93506147ae81856020860161476c565b6147b78161477a565b840191505092915050565b5f6020820190508181035f8301526147da818461478a565b905092915050565b6147eb81614721565b81146147f5575f5ffd5b50565b5f81359050614806816147e2565b92915050565b5f6020828403121561482157614820614666565b5b5f61482e848285016147f8565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61486082614837565b9050919050565b61487081614856565b82525050565b5f6020820190506148895f830184614867565b92915050565b61489881614856565b81146148a2575f5ffd5b50565b5f813590506148b38161488f565b92915050565b5f5f604083850312156148cf576148ce614666565b5b5f6148dc858286016148a5565b92505060206148ed858286016147f8565b9150509250929050565b614900816146ee565b811461490a575f5ffd5b50565b5f8135905061491b816148f7565b92915050565b5f6020828403121561493657614935614666565b5b5f6149438482850161490d565b91505092915050565b5f5f5f6060848603121561496357614962614666565b5b5f614970868287016148a5565b9350506020614981868287016148a5565b9250506040614992868287016147f8565b9150509250925092565b5f5f604083850312156149b2576149b1614666565b5b5f6149bf858286016147f8565b92505060206149d0858286016147f8565b9150509250929050565b5f6040820190506149ed5f830185614867565b6149fa602083018461472a565b9392505050565b5f60ff82169050919050565b614a1681614a01565b82525050565b5f602082019050614a2f5f830184614a0d565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112614a5657614a55614a35565b5b8235905067ffffffffffffffff811115614a7357614a72614a39565b5b602083019150836020820283011115614a8f57614a8e614a3d565b5b9250929050565b5f5f5f5f60608587031215614aae57614aad614666565b5b5f614abb878288016148a5565b9450506020614acc878288016148a5565b935050604085013567ffffffffffffffff811115614aed57614aec61466a565b5b614af987828801614a41565b925092505092959194509250565b5f60208284031215614b1c57614b1b614666565b5b5f614b29848285016148a5565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b6481614721565b82525050565b5f614b758383614b5b565b60208301905092915050565b5f602082019050919050565b5f614b9782614b32565b614ba18185614b3c565b9350614bac83614b4c565b805f5b83811015614bdc578151614bc38882614b6a565b9750614bce83614b81565b925050600181019050614baf565b5085935050505092915050565b5f6020820190508181035f830152614c018184614b8d565b905092915050565b5f5f60408385031215614c1f57614c1e614666565b5b5f614c2c858286016148a5565b9250506020614c3d8582860161490d565b9150509250929050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614c818261477a565b810181811067ffffffffffffffff82111715614ca057614c9f614c4b565b5b80604052505050565b5f614cb261465d565b9050614cbe8282614c78565b919050565b5f67ffffffffffffffff821115614cdd57614cdc614c4b565b5b614ce68261477a565b9050602081019050919050565b828183375f83830152505050565b5f614d13614d0e84614cc3565b614ca9565b905082815260208101848484011115614d2f57614d2e614c47565b5b614d3a848285614cf3565b509392505050565b5f82601f830112614d5657614d55614a35565b5b8135614d66848260208601614d01565b91505092915050565b5f60208284031215614d8457614d83614666565b5b5f82013567ffffffffffffffff811115614da157614da061466a565b5b614dad84828501614d42565b91505092915050565b5f5f83601f840112614dcb57614dca614a35565b5b8235905067ffffffffffffffff811115614de857614de7614a39565b5b602083019150836001820283011115614e0457614e03614a3d565b5b9250929050565b5f5f5f5f5f60808688031215614e2457614e23614666565b5b5f614e31888289016148a5565b9550506020614e42888289016148a5565b9450506040614e53888289016147f8565b935050606086013567ffffffffffffffff811115614e7457614e7361466a565b5b614e8088828901614db6565b92509250509295509295909350565b5f5f60408385031215614ea557614ea4614666565b5b5f614eb2858286016148a5565b9250506020614ec3858286016148a5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614f1157607f821691505b602082108103614f2457614f23614ecd565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614f6182614721565b9150614f6c83614721565b9250828202614f7a81614721565b91508282048414831517614f9157614f90614f2a565b5b5092915050565b5f614fa282614721565b9150614fad83614721565b9250828203905081811115614fc557614fc4614f2a565b5b92915050565b7f4e6f7420656e6f75676820616c6c6f77616e63652e00000000000000000000005f82015250565b5f614fff60158361475c565b915061500a82614fcb565b602082019050919050565b5f6020820190508181035f83015261502c81614ff3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61506a82614721565b915061507583614721565b92508261508557615084615033565b5b828204905092915050565b7f496e646578206f7574206f6620626f756e6473000000000000000000000000005f82015250565b5f6150c460138361475c565b91506150cf82615090565b602082019050919050565b5f6020820190508181035f8301526150f1816150b8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f61515960198361475c565b915061516482615125565b602082019050919050565b5f6020820190508181035f8301526151868161514d565b9050919050565b7f546f6b656e2049447320617272617920697320656d70747900000000000000005f82015250565b5f6151c160188361475c565b91506151cc8261518d565b602082019050919050565b5f6020820190508181035f8301526151ee816151b5565b9050919050565b7f596f7520646f206e6f74206f776e207468697320746f6b656e000000000000005f82015250565b5f61522960198361475c565b9150615234826151f5565b602082019050919050565b5f6020820190508181035f8301526152568161521d565b9050919050565b5f82825260208201905092915050565b50565b5f61527b5f8361525d565b91506152868261526d565b5f82019050919050565b5f6080820190506152a35f830186614867565b6152b06020830185614867565b6152bd604083018461472a565b81810360608301526152ce81615270565b9050949350505050565b5f815190506152e681614699565b92915050565b5f6020828403121561530157615300614666565b5b5f61530e848285016152d8565b91505092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026153737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615338565b61537d8683615338565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6153b86153b36153ae84614721565b615395565b614721565b9050919050565b5f819050919050565b6153d18361539e565b6153e56153dd826153bf565b848454615344565b825550505050565b5f5f905090565b6153fc6153ed565b6154078184846153c8565b505050565b5b8181101561542a5761541f5f826153f4565b60018101905061540d565b5050565b601f82111561546f5761544081615317565b61544984615329565b81016020851015615458578190505b61546c61546485615329565b83018261540c565b50505b505050565b5f82821c905092915050565b5f61548f5f1984600802615474565b1980831691505092915050565b5f6154a78383615480565b9150826002028217905092915050565b6154c082614752565b67ffffffffffffffff8111156154d9576154d8614c4b565b5b6154e38254614efa565b6154ee82828561542e565b5f60209050601f83116001811461551f575f841561550d578287015190505b615517858261549c565b86555061557e565b601f19841661552d86615317565b5f5b828110156155545784890151825560018201915060208501945060208101905061552f565b86831015615571578489015161556d601f891682615480565b8355505b6001600288020188555050505b505050505050565b5f81519050615594816147e2565b92915050565b5f602082840312156155af576155ae614666565b5b5f6155bc84828501615586565b91505092915050565b7f4e6f20746f6b656e7320746f20776974686472617700000000000000000000005f82015250565b5f6155f960158361475c565b9150615604826155c5565b602082019050919050565b5f6020820190508181035f830152615626816155ed565b9050919050565b5f8151905061563b816148f7565b92915050565b5f6020828403121561565657615655614666565b5b5f6156638482850161562d565b91505092915050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f6156a060158361475c565b91506156ab8261566c565b602082019050919050565b5f6020820190508181035f8301526156cd81615694565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f61570860128361475c565b9150615713826156d4565b602082019050919050565b5f6020820190508181035f830152615735816156fc565b9050919050565b5f81905092915050565b5f6157515f8361573c565b915061575c8261526d565b5f82019050919050565b5f61577082615746565b9150819050919050565b7f455448207769746864726177616c206661696c656400000000000000000000005f82015250565b5f6157ae60158361475c565b91506157b98261577a565b602082019050919050565b5f6020820190508181035f8301526157db816157a2565b9050919050565b7f4d696e74696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61581660168361475c565b9150615821826157e2565b602082019050919050565b5f6020820190508181035f8301526158438161580a565b9050919050565b7f43616e6e6f74206d696e742074686174206d616e79206174206f6e63652e00005f82015250565b5f61587e601e8361475c565b91506158898261584a565b602082019050919050565b5f6020820190508181035f8301526158ab81615872565b9050919050565b5f6158bc82614721565b91506158c783614721565b92508282019050808211156158df576158de614f2a565b5b92915050565b7f46696e6973686564206d696e74696e672e0000000000000000000000000000005f82015250565b5f61591960118361475c565b9150615924826158e5565b602082019050919050565b5f6020820190508181035f8301526159468161590d565b9050919050565b7f4e6f7420656e6f7567682046544d2073656e742e0000000000000000000000005f82015250565b5f61598160148361475c565b915061598c8261594d565b602082019050919050565b5f6020820190508181035f8301526159ae81615975565b9050919050565b5f6159c0838561525d565b93506159cd838584614cf3565b6159d68361477a565b840190509392505050565b5f6080820190506159f45f830188614867565b615a016020830187614867565b615a0e604083018661472a565b8181036060830152615a218184866159b5565b90509695505050505050565b5f81905092915050565b5f8154615a4381614efa565b615a4d8186615a2d565b9450600182165f8114615a675760018114615a7c57615aae565b60ff1983168652811515820286019350615aae565b615a8585615317565b5f5b83811015615aa657815481890152600182019150602081019050615a87565b838801955050505b50505092915050565b5f615ac182614752565b615acb8185615a2d565b9350615adb81856020860161476c565b80840191505092915050565b5f615af28286615a37565b9150615afe8285615ab7565b9150615b0a8284615a37565b9150819050949350505050565b5f8160011c9050919050565b5f5f8291508390505b6001851115615b6c57808604811115615b4857615b47614f2a565b5b6001851615615b575780820291505b8081029050615b6585615b17565b9450615b2c565b94509492505050565b5f82615b845760019050615c3f565b81615b91575f9050615c3f565b8160018114615ba75760028114615bb157615be0565b6001915050615c3f565b60ff841115615bc357615bc2614f2a565b5b8360020a915084821115615bda57615bd9614f2a565b5b50615c3f565b5060208310610133831016604e8410600b8410161715615c155782820a905083811115615c1057615c0f614f2a565b5b615c3f565b615c228484846001615b23565b92509050818404811115615c3957615c38614f2a565b5b81810290505b9392505050565b5f615c5082614721565b9150615c5b83614a01565b9250615c887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615b75565b905092915050565b7f4e6f7420656e6f75676820746f6b656e2062616c616e63652e000000000000005f82015250565b5f615cc460198361475c565b9150615ccf82615c90565b602082019050919050565b5f6020820190508181035f830152615cf181615cb8565b9050919050565b7f53656e646572206973206e6f74206f776e6572206f66204e46542e00000000005f82015250565b5f615d2c601b8361475c565b9150615d3782615cf8565b602082019050919050565b5f6020820190508181035f830152615d5981615d20565b9050919050565b7f43616e6e6f742073656e6420746f206e756c6c20616464726573732e000000005f82015250565b5f615d94601c8361475c565b9150615d9f82615d60565b602082019050919050565b5f6020820190508181035f830152615dc181615d88565b9050919050565b7f4f70657261746f72206973206e6f7420617070726f7665642e000000000000005f82015250565b5f615dfc60198361475c565b9150615e0782615dc8565b602082019050919050565b5f6020820190508181035f830152615e2981615df0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f43616e6e6f74206d696e74206d6f7265207468616e20676976656e20737570705f8201527f6c792e0000000000000000000000000000000000000000000000000000000000602082015250565b5f615eb760238361475c565b9150615ec282615e5d565b604082019050919050565b5f6020820190508181035f830152615ee481615eab565b905091905056fea2646970667358221220df3efa1cb54b6647d05e348de3ed967f3fb103c96d85d77a251a6e73b5c3d93a64736f6c634300081c0033

Deployed Bytecode Sourcemap

42569:5457:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45715:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32877:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30291:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31102:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33399:649;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46433:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30527:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36610:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42701:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34455:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43946:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45483:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1171:151;;;;;;;;;;;;;:::i;:::-;;36905:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30427:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44593:488;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46754:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35174:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45089:366;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46307:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30762:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46862:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32493:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46986:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42973:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32676:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36194:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30868:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42803:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42768:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30621:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47712:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;612:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46636:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47427:277;;;;;;;;;;;;;:::i;:::-;;47335:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30345:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31773:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42863:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42834:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44074:511;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43831:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34099:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34930:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35690:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42651:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47219:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43659:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31909:29;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42618:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32989:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47097:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30982:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42734:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31213:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46526:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36435:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;944:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45715:365;45824:4;45876:25;45861:40;;;:11;:40;;;;:105;;;;45933:33;45918:48;;;:11;:48;;;;45861:105;:158;;;;42950:10;45998:21;;45983:36;;;:11;:36;;;;45861:158;:211;;;;46036:36;46060:11;46036:23;:36::i;:::-;45861:211;45841:231;;45715:365;;;:::o;32877:104::-;32927:7;32954:12;:19;;;;32947:26;;32877:104;:::o;30291:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31102:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;33399:649::-;33504:4;33544:6;;33530:10;:20;;:38;;;;;33567:1;33554:10;:14;33530:38;33526:491;;;33585:13;33601:8;:20;33610:10;33601:20;;;;;;;;;;;;;;;;;;;;;33585:36;;33656:5;33642:19;;:10;:19;;;;:59;;;;;33666:16;:23;33683:5;33666:23;;;;;;;;;;;;;;;:35;33690:10;33666:35;;;;;;;;;;;;;;;;;;;;;;;;;33665:36;33642:59;33638:121;;;33729:14;;;;;;;;;;;;;;33638:121;33801:7;33775:11;:23;33787:10;33775:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;33846:7;33830:36;;33839:5;33830:36;;;33855:10;33830:36;;;;;;:::i;:::-;;;;;;;;33570:308;33526:491;;;33932:10;33899:9;:21;33909:10;33899:21;;;;;;;;;;;;;;;:30;33921:7;33899:30;;;;;;;;;;;;;;;:43;;;;33985:7;33964:41;;33973:10;33964:41;;;33994:10;33964:41;;;;;;:::i;:::-;;;;;;;;33526:491;34036:4;34029:11;;33399:649;;;;:::o;46433:85::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;46503:7:::1;46494:6;;:16;;;;;;;;;;;;;;;;;;46433:85:::0;:::o;30527:36::-;;;:::o;36610:287::-;36721:4;36743:20;36838:10;:8;:10::i;:::-;36803:14;:25;36818:9;36803:25;;;;;;;;;;;;;;;:32;;;;:45;;;;:::i;:::-;36766:9;:20;36776:9;36766:20;;;;;;;;;;;;;;;;:83;;;;:::i;:::-;36743:106;;36883:6;36867:12;:22;;36860:29;;;36610:287;;;;:::o;42701:26::-;;;;:::o;34455:416::-;34569:4;34586:15;34604:9;:15;34614:4;34604:15;;;;;;;;;;;;;;;:27;34620:10;34604:27;;;;;;;;;;;;;;;;34586:45;;34663:6;34652:7;:17;;34644:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;34723:17;34712:7;:28;34708:93;;34795:6;34785:7;:16;;;;:::i;:::-;34755:9;:15;34765:4;34755:15;;;;;;;;;;;;;;;:27;34771:10;34755:27;;;;;;;;;;;;;;;:46;;;;34708:93;34814:27;34824:4;34830:2;34834:6;34814:9;:27::i;:::-;;34859:4;34852:11;;;34455:416;;;;;:::o;43946:120::-;43989:4;44013:11;;;;;;;;;;:45;;;;44048:9;;44029:15;:28;;44013:45;44006:52;;43946:120;:::o;45483:224::-;45590:16;45608:14;45643:15;;;;;;;;;;;45692:5;45675:13;;45662:10;:26;;;;:::i;:::-;45661:36;;;;:::i;:::-;45635:64;;;;45483:224;;;;;:::o;1171:151::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;1250:1:::1;1234:5;;:18;;;;;;;;;;;;;;;;;;1311:1;1270:44;;1291:10;1270:44;;;;;;;;;;;;1171:151::o:0;36905:209::-;36986:7;37022:6;:14;37029:6;37022:14;;;;;;;;;;;;;;;:21;;;;37014:5;:29;37006:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37085:6;:14;37092:6;37085:14;;;;;;;;;;;;;;;37100:5;37085:21;;;;;;;;:::i;:::-;;;;;;;;;;37078:28;;36905:209;;;;:::o;30427:31::-;;;:::o;44593:488::-;44713:1;44699:16;;:2;:16;;;44691:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;44782:1;44764:8;;:15;;:19;44756:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;44830:9;44842:1;44830:13;;44825:249;44849:8;;:15;;44845:1;:19;44825:249;;;44886:15;44904:8;;44913:1;44904:11;;;;;;;:::i;:::-;;;;;;;;44886:29;;44958:10;44938:30;;:16;44946:7;44938;:16::i;:::-;:30;;;44930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45015:47;45032:10;45044:4;45050:2;45054:7;45015:16;:47::i;:::-;44871:203;44866:3;;;;;;;44825:249;;;;44593:488;;;;:::o;46754:100::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;46836:10:::1;46824:9;:22;;;;46754:100:::0;:::o;35174:421::-;35298:42;35315:10;35327:4;35333:2;35337;35298:16;:42::i;:::-;35389:1;35371:2;:14;;;:19;;:154;;;;;35485:40;;;35407:118;;;35422:2;35407:35;;;35443:10;35455:4;35461:2;35407:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:118;;;;;35371:154;35353:235;;;35559:17;;;;;;;;;;;;;;35353:235;35174:421;;;:::o;45089:366::-;45149:16;45178:23;45204:6;:14;45211:6;45204:14;;;;;;;;;;;;;;;:21;;;;45178:47;;45236:25;45278:15;45264:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45236:58;;45310:9;45322:1;45310:13;;45305:117;45329:15;45325:1;:19;45305:117;;;45380:30;45400:6;45408:1;45380:19;:30::i;:::-;45366:8;45375:1;45366:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;45346:3;;;;;;;45305:117;;;;45439:8;45432:15;;;;45089:366;;;:::o;46307:118::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;46391:26:::1;46397:9;46408:8;46391:5;:26::i;:::-;46307:118:::0;;:::o;30762:21::-;;;;:::o;46862:116::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;46956:14:::1;46940:13;:30;;;;46862:116:::0;:::o;32493:111::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;32591:5:::1;32571:9;:17;32581:6;32571:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;32493:111:::0;;:::o;46986:103::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;47073:8:::1;47058:12;:23;;;;;;:::i;:::-;;46986:103:::0;:::o;42973:18::-;;;;;;;;;;;;;:::o;32676:193::-;32734:13;32768:8;:12;32777:2;32768:12;;;;;;;;;;;;;;;;;;;;;32760:20;;32814:1;32797:19;;:5;:19;;;32793:69;;32840:10;;;;;;;;;;;;;;32793:69;32676:193;;;:::o;36194:233::-;36291:7;36408:10;:8;:10::i;:::-;36373:14;:25;36388:9;36373:25;;;;;;;;;;;;;;;:32;;;;:45;;;;:::i;:::-;36336:9;:20;36346:9;36336:20;;;;;;;;;;;;;;;;:83;;;;:::i;:::-;36316:103;;36194:233;;;:::o;30868:44::-;;;;;;;;;;;;;;;;;:::o;42803:24::-;;;;:::o;42768:28::-;;;;:::o;30621:42::-;;;:::o;47712:311::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;47790:12:::1;47812;47790:35;;47836:15;47854:5;:15;;;47878:4;47854:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47836:48;;47913:1;47903:7;:11;47895:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;47959:5;:14;;;47974:5;;;;;;;;;;;47981:7;47959:30;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47951:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47779:244;;47712:311:::0;:::o;612:20::-;;;;;;;;;;;;;:::o;46636:110::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;46729:9:::1;46711:15;;:27;;;;;;;;;;;;;;;;;;46636:110:::0;:::o;47427:277::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;47483:15:::1;47501:21;47483:39;;47551:1;47541:7;:11;47533:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;47587:12;47613:5;;;;;;;;;;;47605:19;;47632:7;47605:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47586:58;;;47663:7;47655:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;47472:232;;47427:277::o:0;47335:84::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;47405:6:::1;47397:5;:14;;;;47335:84:::0;:::o;30345:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31773:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;42863:30::-;;;;;;;;;;;;;:::o;42834:20::-;;;;:::o;44074:511::-;44136:12;:10;:12::i;:::-;44128:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;44191:6;;;;;;;;;;;44190:7;44182:16;;;;;;44227:12;;44215:8;:24;;44207:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44310:11;;44298:8;44289:6;;:17;;;;:::i;:::-;:32;;44281:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44370:5;;;;;;;;;;;44356:19;;:10;:19;;;44352:108;;44421:5;;44410:8;:16;;;;:::i;:::-;44396:9;:31;;44388:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44352:108;44484:1;44472:9;:13;44468:72;;;44506:5;;;;;;;;;;;44498:23;;:34;44522:9;44498:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44468:72;44548:27;44554:10;44566:8;44548:5;:27::i;:::-;44074:511;:::o;43831:107::-;43878:4;43921:9;;43902:15;:28;;43895:35;;43831:107;:::o;34099:207::-;34226:8;34185:16;:28;34202:10;34185:28;;;;;;;;;;;;;;;:38;34214:8;34185:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;34279:8;34252:46;;34267:10;34252:46;;;34289:8;34252:46;;;;;;:::i;:::-;;;;;;;;34099:207;;:::o;34930:167::-;35027:4;35056:33;35066:10;35078:2;35082:6;35056:9;:33::i;:::-;35049:40;;34930:167;;;;:::o;35690:453::-;35844:42;35861:10;35873:4;35879:2;35883;35844:16;:42::i;:::-;35935:1;35917:2;:14;;;:19;;:156;;;;;36033:40;;;35953:120;;;35968:2;35953:35;;;35989:10;36001:4;36007:2;36011:4;;35953:63;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:120;;;;;35917:156;35899:237;;;36107:17;;;;;;;;;;;;;;35899:237;35690:453;;;;;:::o;42651:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47219:108::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;47306:13:::1;47291:12;:28;;;;47219:108:::0;:::o;43659:164::-;43719:13;43766:12;43780:20;43797:2;43780:16;:20::i;:::-;43801:13;43752:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43745:70;;43659:164;;;:::o;31909:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42618:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32989:115::-;33049:7;33076:6;:13;33083:5;33076:13;;;;;;;;;;;;;;;:20;;;;33069:27;;32989:115;;;:::o;47097:114::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;47193:10:::1;47177:13;:26;;;;;;:::i;:::-;;47097:114:::0;:::o;30982:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42734:27::-;;;;:::o;31213:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46526:102::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;46609:11:::1;46595;::::0;:25:::1;;;;;;;;;;;;;;;;;;46526:102:::0;:::o;36435:167::-;36530:7;36562:14;:25;36577:9;36562:25;;;;;;;;;;;;;;;:32;;;;36555:39;;36435:167;;;:::o;944:219::-;699:5;;;;;;;;;;;685:19;;:10;:19;;;681:46;;713:14;;;;;;;;;;;;;;681:46;1045:1:::1;1027:20;;:6;:20;;::::0;1023:47:::1;;1056:14;;;;;;;;;;;;;;1023:47;1091:6;1083:5;;:14;;;;;;;;;;;;;;;;;;1148:6;1115:40;;1136:10;1115:40;;;;;;;;;;;;944:219:::0;:::o;22742:148::-;22818:4;22857:25;22842:40;;;:11;:40;;;;22835:47;;22742:148;;;:::o;39725:90::-;39768:7;39799:8;39795:2;:12;;;;:::i;:::-;39788:19;;39725:90;:::o;37182:1488::-;37295:4;37312:38;37333:4;37339:2;37343:6;37312:20;:38::i;:::-;37363:12;37378:10;:8;:10::i;:::-;37363:25;;37399:27;37429:9;:15;37439:4;37429:15;;;;;;;;;;;;;;;;37399:45;;37455:29;37487:9;:13;37497:2;37487:13;;;;;;;;;;;;;;;;37455:45;;37517:17;37529:4;37517:11;:17::i;:::-;37513:223;;;37551:20;37644:4;37614:14;:20;37629:4;37614:20;;;;;;;;;;;;;;;:27;;;;:34;;;;:::i;:::-;37574:19;:75;;;;:::i;:::-;37551:98;;37688:6;37672:12;:22;;37664:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37536:200;37513:223;37767:6;37748:9;:15;37758:4;37748:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;37826:6;37809:9;:13;37819:2;37809:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;37961:17;37973:4;37961:11;:17::i;:::-;37960:18;:45;;;;38004:1;37982:6;:12;37989:4;37982:12;;;;;;;;;;;;;;;:19;;;;:23;37960:45;37956:275;;;38022:18;38110:4;38092:9;:15;38102:4;38092:15;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;38066:4;38044:19;:26;;;;:::i;:::-;38043:72;;;;:::i;:::-;38022:93;;38135:9;38147:1;38135:13;;38130:90;38154:10;38150:1;:14;38130:90;;;38190:14;38199:4;38190:8;:14::i;:::-;38166:3;;;;;;;38130:90;;;;38007:224;37956:275;38353:15;38365:2;38353:11;:15::i;:::-;38348:244;;38385:18;38473:4;38449:21;:28;;;;:::i;:::-;38423:4;38407:9;:13;38417:2;38407:13;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;38406:72;;;;:::i;:::-;38385:93;;38498:9;38510:1;38498:13;;38493:88;38517:10;38513:1;:14;38493:88;;;38553:12;38562:2;38553:8;:12::i;:::-;38529:3;;;;;;;38493:88;;;;38370:222;38348:244;38629:2;38609:31;;38623:4;38609:31;;;38633:6;38609:31;;;;;;:::i;:::-;;;;;;;;38658:4;38651:11;;;;;37182:1488;;;;;:::o;38920:766::-;39082:8;:12;39091:2;39082:12;;;;;;;;;;;;;;;;;;;;;39074:20;;:4;:20;;;39066:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39159:1;39145:16;;:2;:16;;;39137:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;39240:4;39227:17;;:9;:17;;;:71;;;;39265:16;:22;39282:4;39265:22;;;;;;;;;;;;;;;:33;39288:9;39265:33;;;;;;;;;;;;;;;;;;;;;;;;;39227:71;:120;;;;39332:11;:15;39344:2;39332:15;;;;;;;;;;;;;;;;;;;;;39319:28;;:9;:28;;;39227:120;39205:195;;;;;;;;;;;;:::i;:::-;;;;;;;;;39432:10;:8;:10::i;:::-;39413:9;:15;39423:4;39413:15;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;39495:10;:8;:10::i;:::-;39478:9;:13;39488:2;39478:13;;;;;;;;;;;;;;;;:27;;;;;;;;;;;39529:28;39548:4;39554:2;39529:18;:28::i;:::-;39568:19;39580:2;39584;39568:11;:19::i;:::-;39624:2;39620;39605:22;;39614:4;39605:22;;;;;;;;;;;;39663:2;39643:35;;39657:4;39643:35;;;39667:10;:8;:10::i;:::-;39643:35;;;;;;:::i;:::-;;;;;;;;38920:766;;;;:::o;38678:234::-;38785:10;:8;:10::i;:::-;38774:8;:21;;;;:::i;:::-;38750:9;:20;38760:9;38750:20;;;;;;;;;;;;;;;;:45;;;;;;;:::i;:::-;;;;;;;;38813:13;38829:1;38813:17;;38808:97;38840:8;38832:5;:16;38808:97;;;38874:19;38883:9;38874:8;:19::i;:::-;38850:7;;;;;;;38808:97;;;;38678:234;;:::o;19499:718::-;19555:13;19606:14;19643:1;19623:17;19634:5;19623:10;:17::i;:::-;:21;19606:38;;19659:20;19693:6;19682:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19659:41;;19715:11;19844:6;19840:2;19836:15;19828:6;19824:28;19817:35;;19881:290;19888:4;19881:290;;;19913:5;;;;;;;;20055:10;20050:2;20043:5;20039:14;20034:32;20029:3;20021:46;20113:2;20104:11;;;;;;:::i;:::-;;;;;20147:1;20138:5;:10;19881:290;20134:21;19881:290;20192:6;20185:13;;;;;19499:718;;;:::o;46088:195::-;46231:44;46258:4;46264:2;46268:6;46231:26;:44::i;:::-;46088:195;;;:::o;42256:144::-;42310:11;42380:1;42368:14;42358:24;;42256:144;;;:::o;42132:116::-;42186:4;42210:9;:12;42220:1;42210:12;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;42226:14;42238:1;42226:11;:14::i;:::-;42210:30;42203:37;;42132:116;;;:::o;40558:486::-;40638:1;40622:18;;:4;:18;;;40618:73;;40664:15;;;;;;;;;;;;;;40618:73;40779:10;40792:6;:12;40799:4;40792:12;;;;;;;;;;;;;;;40827:1;40805:6;:12;40812:4;40805:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;40792:37;;;;;;;;:::i;:::-;;;;;;;;;;40779:50;;40840:6;:12;40847:4;40840:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40876:11;:15;40888:2;40876:15;;;;;;;;;;;40869:22;;;40909:8;:12;40918:2;40909:12;;;;;;;;;;;;40902:19;;;;;;;;;;;40939:11;:15;40951:2;40939:15;;;;;;;;;;;;40932:22;;;;;;;;;;;40967:12;40985:2;40967:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41033:2;41029:1;41006:30;;41015:4;41006:30;;;;;;;;;;;;40607:437;40558:486;:::o;39823:727::-;39899:1;39885:16;;:2;:16;;;39881:74;;39925:18;;;;;;;;;;;;;;39881:74;39967:10;40017:1;39994:12;:19;;;;:24;39990:382;;40064:6;;:8;;;;;;;;;;;;;40138:17;40128:6;;:27;;40102:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;40246:6;;40241:11;;39990:382;;;40290:12;40325:1;40303:12;:19;;;;:23;;;;:::i;:::-;40290:37;;;;;;;;:::i;:::-;;;;;;;;;;40285:42;;40342:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39990:382;40412:1;40388:26;;:8;:12;40397:2;40388:12;;;;;;;;;;;;;;;;;;;;;:26;;;40384:81;;40438:15;;;;;;;;;;;;;;40384:81;40477:19;40489:2;40493;40477:11;:19::i;:::-;40539:2;40535;40514:28;;40531:1;40514:28;;;;;;;;;;;;39870:680;39823:727;:::o;41052:565::-;41125:14;41154:17;41166:4;41154:11;:17::i;:::-;41150:379;;;41197:14;:20;41212:4;41197:20;;;;;;;;;;;;;;;41248:1;41218:14;:20;41233:4;41218:20;;;;;;;;;;;;;;;:27;;;;:31;;;;:::i;:::-;41197:53;;;;;;;;:::i;:::-;;;;;;;;;;41188:62;;41305:6;41265:14;:20;41280:4;41265:20;;;;;;;;;;;;;;;41286:11;:15;41298:2;41286:15;;;;;;;;;;;;41265:37;;;;;;;;:::i;:::-;;;;;;;;;:46;;;;41326:14;:20;41341:4;41326:20;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41150:379;;;41394:6;:12;41401:4;41394:12;;;;;;;;;;;;;;;41429:1;41407:6;:12;41414:4;41407:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;41394:37;;;;;;;;:::i;:::-;;;;;;;;;;41385:46;;41478:6;41446;:12;41453:4;41446:12;;;;;;;;;;;;;;;41459:11;:15;41471:2;41459:15;;;;;;;;;;;;41446:29;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;41499:6;:12;41506:4;41499:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41150:379;41561:11;:15;41573:2;41561:15;;;;;;;;;;;;41539:11;:19;41551:6;41539:19;;;;;;;;;;;:37;;;;41594:11;:15;41606:2;41594:15;;;;;;;;;;;;41587:22;;;;;;;;;;;41114:503;41052:565;;:::o;41625:342::-;41704:2;41689:8;:12;41698:2;41689:12;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;41721:15;41733:2;41721:11;:15::i;:::-;41717:243;;;41753:14;:18;41768:2;41753:18;;;;;;;;;;;;;;;41777:2;41753:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41841:1;41813:14;:18;41828:2;41813:18;;;;;;;;;;;;;;;:25;;;;:29;;;;:::i;:::-;41795:11;:15;41807:2;41795:15;;;;;;;;;;;:47;;;;41717:243;;;41875:6;:10;41882:2;41875:10;;;;;;;;;;;;;;;41891:2;41875:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41947:1;41927:6;:10;41934:2;41927:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;41909:11;:15;41921:2;41909:15;;;;;;;;;;;:39;;;;41717:243;41625:342;;:::o;13830:948::-;13883:7;13903:14;13920:1;13903:18;;13970:8;13961:5;:17;13957:106;;14008:8;13999:17;;;;;;:::i;:::-;;;;;14045:2;14035:12;;;;13957:106;14090:8;14081:5;:17;14077:106;;14128:8;14119:17;;;;;;:::i;:::-;;;;;14165:2;14155:12;;;;14077:106;14210:8;14201:5;:17;14197:106;;14248:8;14239:17;;;;;;:::i;:::-;;;;;14285:2;14275:12;;;;14197:106;14330:7;14321:5;:16;14317:103;;14367:7;14358:16;;;;;;:::i;:::-;;;;;14403:1;14393:11;;;;14317:103;14447:7;14438:5;:16;14434:103;;14484:7;14475:16;;;;;;:::i;:::-;;;;;14520:1;14510:11;;;;14434:103;14564:7;14555:5;:16;14551:103;;14601:7;14592:16;;;;;;:::i;:::-;;;;;14637:1;14627:11;;;;14551:103;14681:7;14672:5;:16;14668:68;;14719:1;14709:11;;;;14668:68;14764:6;14757:13;;;13830:948;;;:::o;42408:125::-;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:118::-;1688:24;1706:5;1688:24;:::i;:::-;1683:3;1676:37;1601:118;;:::o;1725:222::-;1818:4;1856:2;1845:9;1841:18;1833:26;;1869:71;1937:1;1926:9;1922:17;1913:6;1869:71;:::i;:::-;1725:222;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:139::-;2322:6;2317:3;2312;2306:23;2363:1;2354:6;2349:3;2345:16;2338:27;2233:139;;;:::o;2378:102::-;2419:6;2470:2;2466:7;2461:2;2454:5;2450:14;2446:28;2436:38;;2378:102;;;:::o;2486:377::-;2574:3;2602:39;2635:5;2602:39;:::i;:::-;2657:71;2721:6;2716:3;2657:71;:::i;:::-;2650:78;;2737:65;2795:6;2790:3;2783:4;2776:5;2772:16;2737:65;:::i;:::-;2827:29;2849:6;2827:29;:::i;:::-;2822:3;2818:39;2811:46;;2578:285;2486:377;;;;:::o;2869:313::-;2982:4;3020:2;3009:9;3005:18;2997:26;;3069:9;3063:4;3059:20;3055:1;3044:9;3040:17;3033:47;3097:78;3170:4;3161:6;3097:78;:::i;:::-;3089:86;;2869:313;;;;:::o;3188:122::-;3261:24;3279:5;3261:24;:::i;:::-;3254:5;3251:35;3241:63;;3300:1;3297;3290:12;3241:63;3188:122;:::o;3316:139::-;3362:5;3400:6;3387:20;3378:29;;3416:33;3443:5;3416:33;:::i;:::-;3316:139;;;;:::o;3461:329::-;3520:6;3569:2;3557:9;3548:7;3544:23;3540:32;3537:119;;;3575:79;;:::i;:::-;3537:119;3695:1;3720:53;3765:7;3756:6;3745:9;3741:22;3720:53;:::i;:::-;3710:63;;3666:117;3461:329;;;;:::o;3796:126::-;3833:7;3873:42;3866:5;3862:54;3851:65;;3796:126;;;:::o;3928:96::-;3965:7;3994:24;4012:5;3994:24;:::i;:::-;3983:35;;3928:96;;;:::o;4030:118::-;4117:24;4135:5;4117:24;:::i;:::-;4112:3;4105:37;4030:118;;:::o;4154:222::-;4247:4;4285:2;4274:9;4270:18;4262:26;;4298:71;4366:1;4355:9;4351:17;4342:6;4298:71;:::i;:::-;4154:222;;;;:::o;4382:122::-;4455:24;4473:5;4455:24;:::i;:::-;4448:5;4445:35;4435:63;;4494:1;4491;4484:12;4435:63;4382:122;:::o;4510:139::-;4556:5;4594:6;4581:20;4572:29;;4610:33;4637:5;4610:33;:::i;:::-;4510:139;;;;:::o;4655:474::-;4723:6;4731;4780:2;4768:9;4759:7;4755:23;4751:32;4748:119;;;4786:79;;:::i;:::-;4748:119;4906:1;4931:53;4976:7;4967:6;4956:9;4952:22;4931:53;:::i;:::-;4921:63;;4877:117;5033:2;5059:53;5104:7;5095:6;5084:9;5080:22;5059:53;:::i;:::-;5049:63;;5004:118;4655:474;;;;;:::o;5135:116::-;5205:21;5220:5;5205:21;:::i;:::-;5198:5;5195:32;5185:60;;5241:1;5238;5231:12;5185:60;5135:116;:::o;5257:133::-;5300:5;5338:6;5325:20;5316:29;;5354:30;5378:5;5354:30;:::i;:::-;5257:133;;;;:::o;5396:323::-;5452:6;5501:2;5489:9;5480:7;5476:23;5472:32;5469:119;;;5507:79;;:::i;:::-;5469:119;5627:1;5652:50;5694:7;5685:6;5674:9;5670:22;5652:50;:::i;:::-;5642:60;;5598:114;5396:323;;;;:::o;5725:619::-;5802:6;5810;5818;5867:2;5855:9;5846:7;5842:23;5838:32;5835:119;;;5873:79;;:::i;:::-;5835:119;5993:1;6018:53;6063:7;6054:6;6043:9;6039:22;6018:53;:::i;:::-;6008:63;;5964:117;6120:2;6146:53;6191:7;6182:6;6171:9;6167:22;6146:53;:::i;:::-;6136:63;;6091:118;6248:2;6274:53;6319:7;6310:6;6299:9;6295:22;6274:53;:::i;:::-;6264:63;;6219:118;5725:619;;;;;:::o;6350:474::-;6418:6;6426;6475:2;6463:9;6454:7;6450:23;6446:32;6443:119;;;6481:79;;:::i;:::-;6443:119;6601:1;6626:53;6671:7;6662:6;6651:9;6647:22;6626:53;:::i;:::-;6616:63;;6572:117;6728:2;6754:53;6799:7;6790:6;6779:9;6775:22;6754:53;:::i;:::-;6744:63;;6699:118;6350:474;;;;;:::o;6830:332::-;6951:4;6989:2;6978:9;6974:18;6966:26;;7002:71;7070:1;7059:9;7055:17;7046:6;7002:71;:::i;:::-;7083:72;7151:2;7140:9;7136:18;7127:6;7083:72;:::i;:::-;6830:332;;;;;:::o;7168:86::-;7203:7;7243:4;7236:5;7232:16;7221:27;;7168:86;;;:::o;7260:112::-;7343:22;7359:5;7343:22;:::i;:::-;7338:3;7331:35;7260:112;;:::o;7378:214::-;7467:4;7505:2;7494:9;7490:18;7482:26;;7518:67;7582:1;7571:9;7567:17;7558:6;7518:67;:::i;:::-;7378:214;;;;:::o;7598:117::-;7707:1;7704;7697:12;7721:117;7830:1;7827;7820:12;7844:117;7953:1;7950;7943:12;7984:568;8057:8;8067:6;8117:3;8110:4;8102:6;8098:17;8094:27;8084:122;;8125:79;;:::i;:::-;8084:122;8238:6;8225:20;8215:30;;8268:18;8260:6;8257:30;8254:117;;;8290:79;;:::i;:::-;8254:117;8404:4;8396:6;8392:17;8380:29;;8458:3;8450:4;8442:6;8438:17;8428:8;8424:32;8421:41;8418:128;;;8465:79;;:::i;:::-;8418:128;7984:568;;;;;:::o;8558:849::-;8662:6;8670;8678;8686;8735:2;8723:9;8714:7;8710:23;8706:32;8703:119;;;8741:79;;:::i;:::-;8703:119;8861:1;8886:53;8931:7;8922:6;8911:9;8907:22;8886:53;:::i;:::-;8876:63;;8832:117;8988:2;9014:53;9059:7;9050:6;9039:9;9035:22;9014:53;:::i;:::-;9004:63;;8959:118;9144:2;9133:9;9129:18;9116:32;9175:18;9167:6;9164:30;9161:117;;;9197:79;;:::i;:::-;9161:117;9310:80;9382:7;9373:6;9362:9;9358:22;9310:80;:::i;:::-;9292:98;;;;9087:313;8558:849;;;;;;;:::o;9413:329::-;9472:6;9521:2;9509:9;9500:7;9496:23;9492:32;9489:119;;;9527:79;;:::i;:::-;9489:119;9647:1;9672:53;9717:7;9708:6;9697:9;9693:22;9672:53;:::i;:::-;9662:63;;9618:117;9413:329;;;;:::o;9748:114::-;9815:6;9849:5;9843:12;9833:22;;9748:114;;;:::o;9868:184::-;9967:11;10001:6;9996:3;9989:19;10041:4;10036:3;10032:14;10017:29;;9868:184;;;;:::o;10058:132::-;10125:4;10148:3;10140:11;;10178:4;10173:3;10169:14;10161:22;;10058:132;;;:::o;10196:108::-;10273:24;10291:5;10273:24;:::i;:::-;10268:3;10261:37;10196:108;;:::o;10310:179::-;10379:10;10400:46;10442:3;10434:6;10400:46;:::i;:::-;10478:4;10473:3;10469:14;10455:28;;10310:179;;;;:::o;10495:113::-;10565:4;10597;10592:3;10588:14;10580:22;;10495:113;;;:::o;10644:732::-;10763:3;10792:54;10840:5;10792:54;:::i;:::-;10862:86;10941:6;10936:3;10862:86;:::i;:::-;10855:93;;10972:56;11022:5;10972:56;:::i;:::-;11051:7;11082:1;11067:284;11092:6;11089:1;11086:13;11067:284;;;11168:6;11162:13;11195:63;11254:3;11239:13;11195:63;:::i;:::-;11188:70;;11281:60;11334:6;11281:60;:::i;:::-;11271:70;;11127:224;11114:1;11111;11107:9;11102:14;;11067:284;;;11071:14;11367:3;11360:10;;10768:608;;;10644:732;;;;:::o;11382:373::-;11525:4;11563:2;11552:9;11548:18;11540:26;;11612:9;11606:4;11602:20;11598:1;11587:9;11583:17;11576:47;11640:108;11743:4;11734:6;11640:108;:::i;:::-;11632:116;;11382:373;;;;:::o;11761:468::-;11826:6;11834;11883:2;11871:9;11862:7;11858:23;11854:32;11851:119;;;11889:79;;:::i;:::-;11851:119;12009:1;12034:53;12079:7;12070:6;12059:9;12055:22;12034:53;:::i;:::-;12024:63;;11980:117;12136:2;12162:50;12204:7;12195:6;12184:9;12180:22;12162:50;:::i;:::-;12152:60;;12107:115;11761:468;;;;;:::o;12235:117::-;12344:1;12341;12334:12;12358:180;12406:77;12403:1;12396:88;12503:4;12500:1;12493:15;12527:4;12524:1;12517:15;12544:281;12627:27;12649:4;12627:27;:::i;:::-;12619:6;12615:40;12757:6;12745:10;12742:22;12721:18;12709:10;12706:34;12703:62;12700:88;;;12768:18;;:::i;:::-;12700:88;12808:10;12804:2;12797:22;12587:238;12544:281;;:::o;12831:129::-;12865:6;12892:20;;:::i;:::-;12882:30;;12921:33;12949:4;12941:6;12921:33;:::i;:::-;12831:129;;;:::o;12966:308::-;13028:4;13118:18;13110:6;13107:30;13104:56;;;13140:18;;:::i;:::-;13104:56;13178:29;13200:6;13178:29;:::i;:::-;13170:37;;13262:4;13256;13252:15;13244:23;;12966:308;;;:::o;13280:148::-;13378:6;13373:3;13368;13355:30;13419:1;13410:6;13405:3;13401:16;13394:27;13280:148;;;:::o;13434:425::-;13512:5;13537:66;13553:49;13595:6;13553:49;:::i;:::-;13537:66;:::i;:::-;13528:75;;13626:6;13619:5;13612:21;13664:4;13657:5;13653:16;13702:3;13693:6;13688:3;13684:16;13681:25;13678:112;;;13709:79;;:::i;:::-;13678:112;13799:54;13846:6;13841:3;13836;13799:54;:::i;:::-;13518:341;13434:425;;;;;:::o;13879:340::-;13935:5;13984:3;13977:4;13969:6;13965:17;13961:27;13951:122;;13992:79;;:::i;:::-;13951:122;14109:6;14096:20;14134:79;14209:3;14201:6;14194:4;14186:6;14182:17;14134:79;:::i;:::-;14125:88;;13941:278;13879:340;;;;:::o;14225:509::-;14294:6;14343:2;14331:9;14322:7;14318:23;14314:32;14311:119;;;14349:79;;:::i;:::-;14311:119;14497:1;14486:9;14482:17;14469:31;14527:18;14519:6;14516:30;14513:117;;;14549:79;;:::i;:::-;14513:117;14654:63;14709:7;14700:6;14689:9;14685:22;14654:63;:::i;:::-;14644:73;;14440:287;14225:509;;;;:::o;14753:552::-;14810:8;14820:6;14870:3;14863:4;14855:6;14851:17;14847:27;14837:122;;14878:79;;:::i;:::-;14837:122;14991:6;14978:20;14968:30;;15021:18;15013:6;15010:30;15007:117;;;15043:79;;:::i;:::-;15007:117;15157:4;15149:6;15145:17;15133:29;;15211:3;15203:4;15195:6;15191:17;15181:8;15177:32;15174:41;15171:128;;;15218:79;;:::i;:::-;15171:128;14753:552;;;;;:::o;15311:963::-;15408:6;15416;15424;15432;15440;15489:3;15477:9;15468:7;15464:23;15460:33;15457:120;;;15496:79;;:::i;:::-;15457:120;15616:1;15641:53;15686:7;15677:6;15666:9;15662:22;15641:53;:::i;:::-;15631:63;;15587:117;15743:2;15769:53;15814:7;15805:6;15794:9;15790:22;15769:53;:::i;:::-;15759:63;;15714:118;15871:2;15897:53;15942:7;15933:6;15922:9;15918:22;15897:53;:::i;:::-;15887:63;;15842:118;16027:2;16016:9;16012:18;15999:32;16058:18;16050:6;16047:30;16044:117;;;16080:79;;:::i;:::-;16044:117;16193:64;16249:7;16240:6;16229:9;16225:22;16193:64;:::i;:::-;16175:82;;;;15970:297;15311:963;;;;;;;;:::o;16280:474::-;16348:6;16356;16405:2;16393:9;16384:7;16380:23;16376:32;16373:119;;;16411:79;;:::i;:::-;16373:119;16531:1;16556:53;16601:7;16592:6;16581:9;16577:22;16556:53;:::i;:::-;16546:63;;16502:117;16658:2;16684:53;16729:7;16720:6;16709:9;16705:22;16684:53;:::i;:::-;16674:63;;16629:118;16280:474;;;;;:::o;16760:180::-;16808:77;16805:1;16798:88;16905:4;16902:1;16895:15;16929:4;16926:1;16919:15;16946:320;16990:6;17027:1;17021:4;17017:12;17007:22;;17074:1;17068:4;17064:12;17095:18;17085:81;;17151:4;17143:6;17139:17;17129:27;;17085:81;17213:2;17205:6;17202:14;17182:18;17179:38;17176:84;;17232:18;;:::i;:::-;17176:84;16997:269;16946:320;;;:::o;17272:180::-;17320:77;17317:1;17310:88;17417:4;17414:1;17407:15;17441:4;17438:1;17431:15;17458:410;17498:7;17521:20;17539:1;17521:20;:::i;:::-;17516:25;;17555:20;17573:1;17555:20;:::i;:::-;17550:25;;17610:1;17607;17603:9;17632:30;17650:11;17632:30;:::i;:::-;17621:41;;17811:1;17802:7;17798:15;17795:1;17792:22;17772:1;17765:9;17745:83;17722:139;;17841:18;;:::i;:::-;17722:139;17506:362;17458:410;;;;:::o;17874:194::-;17914:4;17934:20;17952:1;17934:20;:::i;:::-;17929:25;;17968:20;17986:1;17968:20;:::i;:::-;17963:25;;18012:1;18009;18005:9;17997:17;;18036:1;18030:4;18027:11;18024:37;;;18041:18;;:::i;:::-;18024:37;17874:194;;;;:::o;18074:171::-;18214:23;18210:1;18202:6;18198:14;18191:47;18074:171;:::o;18251:366::-;18393:3;18414:67;18478:2;18473:3;18414:67;:::i;:::-;18407:74;;18490:93;18579:3;18490:93;:::i;:::-;18608:2;18603:3;18599:12;18592:19;;18251:366;;;:::o;18623:419::-;18789:4;18827:2;18816:9;18812:18;18804:26;;18876:9;18870:4;18866:20;18862:1;18851:9;18847:17;18840:47;18904:131;19030:4;18904:131;:::i;:::-;18896:139;;18623:419;;;:::o;19048:180::-;19096:77;19093:1;19086:88;19193:4;19190:1;19183:15;19217:4;19214:1;19207:15;19234:185;19274:1;19291:20;19309:1;19291:20;:::i;:::-;19286:25;;19325:20;19343:1;19325:20;:::i;:::-;19320:25;;19364:1;19354:35;;19369:18;;:::i;:::-;19354:35;19411:1;19408;19404:9;19399:14;;19234:185;;;;:::o;19425:169::-;19565:21;19561:1;19553:6;19549:14;19542:45;19425:169;:::o;19600:366::-;19742:3;19763:67;19827:2;19822:3;19763:67;:::i;:::-;19756:74;;19839:93;19928:3;19839:93;:::i;:::-;19957:2;19952:3;19948:12;19941:19;;19600:366;;;:::o;19972:419::-;20138:4;20176:2;20165:9;20161:18;20153:26;;20225:9;20219:4;20215:20;20211:1;20200:9;20196:17;20189:47;20253:131;20379:4;20253:131;:::i;:::-;20245:139;;19972:419;;;:::o;20397:180::-;20445:77;20442:1;20435:88;20542:4;20539:1;20532:15;20566:4;20563:1;20556:15;20583:175;20723:27;20719:1;20711:6;20707:14;20700:51;20583:175;:::o;20764:366::-;20906:3;20927:67;20991:2;20986:3;20927:67;:::i;:::-;20920:74;;21003:93;21092:3;21003:93;:::i;:::-;21121:2;21116:3;21112:12;21105:19;;20764:366;;;:::o;21136:419::-;21302:4;21340:2;21329:9;21325:18;21317:26;;21389:9;21383:4;21379:20;21375:1;21364:9;21360:17;21353:47;21417:131;21543:4;21417:131;:::i;:::-;21409:139;;21136:419;;;:::o;21561:174::-;21701:26;21697:1;21689:6;21685:14;21678:50;21561:174;:::o;21741:366::-;21883:3;21904:67;21968:2;21963:3;21904:67;:::i;:::-;21897:74;;21980:93;22069:3;21980:93;:::i;:::-;22098:2;22093:3;22089:12;22082:19;;21741:366;;;:::o;22113:419::-;22279:4;22317:2;22306:9;22302:18;22294:26;;22366:9;22360:4;22356:20;22352:1;22341:9;22337:17;22330:47;22394:131;22520:4;22394:131;:::i;:::-;22386:139;;22113:419;;;:::o;22538:175::-;22678:27;22674:1;22666:6;22662:14;22655:51;22538:175;:::o;22719:366::-;22861:3;22882:67;22946:2;22941:3;22882:67;:::i;:::-;22875:74;;22958:93;23047:3;22958:93;:::i;:::-;23076:2;23071:3;23067:12;23060:19;;22719:366;;;:::o;23091:419::-;23257:4;23295:2;23284:9;23280:18;23272:26;;23344:9;23338:4;23334:20;23330:1;23319:9;23315:17;23308:47;23372:131;23498:4;23372:131;:::i;:::-;23364:139;;23091:419;;;:::o;23516:168::-;23599:11;23633:6;23628:3;23621:19;23673:4;23668:3;23664:14;23649:29;;23516:168;;;;:::o;23690:114::-;;:::o;23810:362::-;23951:3;23972:65;24035:1;24030:3;23972:65;:::i;:::-;23965:72;;24046:93;24135:3;24046:93;:::i;:::-;24164:1;24159:3;24155:11;24148:18;;23810:362;;;:::o;24178:748::-;24427:4;24465:3;24454:9;24450:19;24442:27;;24479:71;24547:1;24536:9;24532:17;24523:6;24479:71;:::i;:::-;24560:72;24628:2;24617:9;24613:18;24604:6;24560:72;:::i;:::-;24642;24710:2;24699:9;24695:18;24686:6;24642:72;:::i;:::-;24761:9;24755:4;24751:20;24746:2;24735:9;24731:18;24724:48;24789:130;24914:4;24789:130;:::i;:::-;24781:138;;24178:748;;;;;;:::o;24932:141::-;24988:5;25019:6;25013:13;25004:22;;25035:32;25061:5;25035:32;:::i;:::-;24932:141;;;;:::o;25079:349::-;25148:6;25197:2;25185:9;25176:7;25172:23;25168:32;25165:119;;;25203:79;;:::i;:::-;25165:119;25323:1;25348:63;25403:7;25394:6;25383:9;25379:22;25348:63;:::i;:::-;25338:73;;25294:127;25079:349;;;;:::o;25434:141::-;25483:4;25506:3;25498:11;;25529:3;25526:1;25519:14;25563:4;25560:1;25550:18;25542:26;;25434:141;;;:::o;25581:93::-;25618:6;25665:2;25660;25653:5;25649:14;25645:23;25635:33;;25581:93;;;:::o;25680:107::-;25724:8;25774:5;25768:4;25764:16;25743:37;;25680:107;;;;:::o;25793:393::-;25862:6;25912:1;25900:10;25896:18;25935:97;25965:66;25954:9;25935:97;:::i;:::-;26053:39;26083:8;26072:9;26053:39;:::i;:::-;26041:51;;26125:4;26121:9;26114:5;26110:21;26101:30;;26174:4;26164:8;26160:19;26153:5;26150:30;26140:40;;25869:317;;25793:393;;;;;:::o;26192:60::-;26220:3;26241:5;26234:12;;26192:60;;;:::o;26258:142::-;26308:9;26341:53;26359:34;26368:24;26386:5;26368:24;:::i;:::-;26359:34;:::i;:::-;26341:53;:::i;:::-;26328:66;;26258:142;;;:::o;26406:75::-;26449:3;26470:5;26463:12;;26406:75;;;:::o;26487:269::-;26597:39;26628:7;26597:39;:::i;:::-;26658:91;26707:41;26731:16;26707:41;:::i;:::-;26699:6;26692:4;26686:11;26658:91;:::i;:::-;26652:4;26645:105;26563:193;26487:269;;;:::o;26762:73::-;26807:3;26828:1;26821:8;;26762:73;:::o;26841:189::-;26918:32;;:::i;:::-;26959:65;27017:6;27009;27003:4;26959:65;:::i;:::-;26894:136;26841:189;;:::o;27036:186::-;27096:120;27113:3;27106:5;27103:14;27096:120;;;27167:39;27204:1;27197:5;27167:39;:::i;:::-;27140:1;27133:5;27129:13;27120:22;;27096:120;;;27036:186;;:::o;27228:543::-;27329:2;27324:3;27321:11;27318:446;;;27363:38;27395:5;27363:38;:::i;:::-;27447:29;27465:10;27447:29;:::i;:::-;27437:8;27433:44;27630:2;27618:10;27615:18;27612:49;;;27651:8;27636:23;;27612:49;27674:80;27730:22;27748:3;27730:22;:::i;:::-;27720:8;27716:37;27703:11;27674:80;:::i;:::-;27333:431;;27318:446;27228:543;;;:::o;27777:117::-;27831:8;27881:5;27875:4;27871:16;27850:37;;27777:117;;;;:::o;27900:169::-;27944:6;27977:51;28025:1;28021:6;28013:5;28010:1;28006:13;27977:51;:::i;:::-;27973:56;28058:4;28052;28048:15;28038:25;;27951:118;27900:169;;;;:::o;28074:295::-;28150:4;28296:29;28321:3;28315:4;28296:29;:::i;:::-;28288:37;;28358:3;28355:1;28351:11;28345:4;28342:21;28334:29;;28074:295;;;;:::o;28374:1395::-;28491:37;28524:3;28491:37;:::i;:::-;28593:18;28585:6;28582:30;28579:56;;;28615:18;;:::i;:::-;28579:56;28659:38;28691:4;28685:11;28659:38;:::i;:::-;28744:67;28804:6;28796;28790:4;28744:67;:::i;:::-;28838:1;28862:4;28849:17;;28894:2;28886:6;28883:14;28911:1;28906:618;;;;29568:1;29585:6;29582:77;;;29634:9;29629:3;29625:19;29619:26;29610:35;;29582:77;29685:67;29745:6;29738:5;29685:67;:::i;:::-;29679:4;29672:81;29541:222;28876:887;;28906:618;28958:4;28954:9;28946:6;28942:22;28992:37;29024:4;28992:37;:::i;:::-;29051:1;29065:208;29079:7;29076:1;29073:14;29065:208;;;29158:9;29153:3;29149:19;29143:26;29135:6;29128:42;29209:1;29201:6;29197:14;29187:24;;29256:2;29245:9;29241:18;29228:31;;29102:4;29099:1;29095:12;29090:17;;29065:208;;;29301:6;29292:7;29289:19;29286:179;;;29359:9;29354:3;29350:19;29344:26;29402:48;29444:4;29436:6;29432:17;29421:9;29402:48;:::i;:::-;29394:6;29387:64;29309:156;29286:179;29511:1;29507;29499:6;29495:14;29491:22;29485:4;29478:36;28913:611;;;28876:887;;28466:1303;;;28374:1395;;:::o;29775:143::-;29832:5;29863:6;29857:13;29848:22;;29879:33;29906:5;29879:33;:::i;:::-;29775:143;;;;:::o;29924:351::-;29994:6;30043:2;30031:9;30022:7;30018:23;30014:32;30011:119;;;30049:79;;:::i;:::-;30011:119;30169:1;30194:64;30250:7;30241:6;30230:9;30226:22;30194:64;:::i;:::-;30184:74;;30140:128;29924:351;;;;:::o;30281:171::-;30421:23;30417:1;30409:6;30405:14;30398:47;30281:171;:::o;30458:366::-;30600:3;30621:67;30685:2;30680:3;30621:67;:::i;:::-;30614:74;;30697:93;30786:3;30697:93;:::i;:::-;30815:2;30810:3;30806:12;30799:19;;30458:366;;;:::o;30830:419::-;30996:4;31034:2;31023:9;31019:18;31011:26;;31083:9;31077:4;31073:20;31069:1;31058:9;31054:17;31047:47;31111:131;31237:4;31111:131;:::i;:::-;31103:139;;30830:419;;;:::o;31255:137::-;31309:5;31340:6;31334:13;31325:22;;31356:30;31380:5;31356:30;:::i;:::-;31255:137;;;;:::o;31398:345::-;31465:6;31514:2;31502:9;31493:7;31489:23;31485:32;31482:119;;;31520:79;;:::i;:::-;31482:119;31640:1;31665:61;31718:7;31709:6;31698:9;31694:22;31665:61;:::i;:::-;31655:71;;31611:125;31398:345;;;;:::o;31749:171::-;31889:23;31885:1;31877:6;31873:14;31866:47;31749:171;:::o;31926:366::-;32068:3;32089:67;32153:2;32148:3;32089:67;:::i;:::-;32082:74;;32165:93;32254:3;32165:93;:::i;:::-;32283:2;32278:3;32274:12;32267:19;;31926:366;;;:::o;32298:419::-;32464:4;32502:2;32491:9;32487:18;32479:26;;32551:9;32545:4;32541:20;32537:1;32526:9;32522:17;32515:47;32579:131;32705:4;32579:131;:::i;:::-;32571:139;;32298:419;;;:::o;32723:168::-;32863:20;32859:1;32851:6;32847:14;32840:44;32723:168;:::o;32897:366::-;33039:3;33060:67;33124:2;33119:3;33060:67;:::i;:::-;33053:74;;33136:93;33225:3;33136:93;:::i;:::-;33254:2;33249:3;33245:12;33238:19;;32897:366;;;:::o;33269:419::-;33435:4;33473:2;33462:9;33458:18;33450:26;;33522:9;33516:4;33512:20;33508:1;33497:9;33493:17;33486:47;33550:131;33676:4;33550:131;:::i;:::-;33542:139;;33269:419;;;:::o;33694:147::-;33795:11;33832:3;33817:18;;33694:147;;;;:::o;33847:398::-;34006:3;34027:83;34108:1;34103:3;34027:83;:::i;:::-;34020:90;;34119:93;34208:3;34119:93;:::i;:::-;34237:1;34232:3;34228:11;34221:18;;33847:398;;;:::o;34251:379::-;34435:3;34457:147;34600:3;34457:147;:::i;:::-;34450:154;;34621:3;34614:10;;34251:379;;;:::o;34636:171::-;34776:23;34772:1;34764:6;34760:14;34753:47;34636:171;:::o;34813:366::-;34955:3;34976:67;35040:2;35035:3;34976:67;:::i;:::-;34969:74;;35052:93;35141:3;35052:93;:::i;:::-;35170:2;35165:3;35161:12;35154:19;;34813:366;;;:::o;35185:419::-;35351:4;35389:2;35378:9;35374:18;35366:26;;35438:9;35432:4;35428:20;35424:1;35413:9;35409:17;35402:47;35466:131;35592:4;35466:131;:::i;:::-;35458:139;;35185:419;;;:::o;35610:172::-;35750:24;35746:1;35738:6;35734:14;35727:48;35610:172;:::o;35788:366::-;35930:3;35951:67;36015:2;36010:3;35951:67;:::i;:::-;35944:74;;36027:93;36116:3;36027:93;:::i;:::-;36145:2;36140:3;36136:12;36129:19;;35788:366;;;:::o;36160:419::-;36326:4;36364:2;36353:9;36349:18;36341:26;;36413:9;36407:4;36403:20;36399:1;36388:9;36384:17;36377:47;36441:131;36567:4;36441:131;:::i;:::-;36433:139;;36160:419;;;:::o;36585:180::-;36725:32;36721:1;36713:6;36709:14;36702:56;36585:180;:::o;36771:366::-;36913:3;36934:67;36998:2;36993:3;36934:67;:::i;:::-;36927:74;;37010:93;37099:3;37010:93;:::i;:::-;37128:2;37123:3;37119:12;37112:19;;36771:366;;;:::o;37143:419::-;37309:4;37347:2;37336:9;37332:18;37324:26;;37396:9;37390:4;37386:20;37382:1;37371:9;37367:17;37360:47;37424:131;37550:4;37424:131;:::i;:::-;37416:139;;37143:419;;;:::o;37568:191::-;37608:3;37627:20;37645:1;37627:20;:::i;:::-;37622:25;;37661:20;37679:1;37661:20;:::i;:::-;37656:25;;37704:1;37701;37697:9;37690:16;;37725:3;37722:1;37719:10;37716:36;;;37732:18;;:::i;:::-;37716:36;37568:191;;;;:::o;37765:167::-;37905:19;37901:1;37893:6;37889:14;37882:43;37765:167;:::o;37938:366::-;38080:3;38101:67;38165:2;38160:3;38101:67;:::i;:::-;38094:74;;38177:93;38266:3;38177:93;:::i;:::-;38295:2;38290:3;38286:12;38279:19;;37938:366;;;:::o;38310:419::-;38476:4;38514:2;38503:9;38499:18;38491:26;;38563:9;38557:4;38553:20;38549:1;38538:9;38534:17;38527:47;38591:131;38717:4;38591:131;:::i;:::-;38583:139;;38310:419;;;:::o;38735:170::-;38875:22;38871:1;38863:6;38859:14;38852:46;38735:170;:::o;38911:366::-;39053:3;39074:67;39138:2;39133:3;39074:67;:::i;:::-;39067:74;;39150:93;39239:3;39150:93;:::i;:::-;39268:2;39263:3;39259:12;39252:19;;38911:366;;;:::o;39283:419::-;39449:4;39487:2;39476:9;39472:18;39464:26;;39536:9;39530:4;39526:20;39522:1;39511:9;39507:17;39500:47;39564:131;39690:4;39564:131;:::i;:::-;39556:139;;39283:419;;;:::o;39730:314::-;39826:3;39847:70;39910:6;39905:3;39847:70;:::i;:::-;39840:77;;39927:56;39976:6;39971:3;39964:5;39927:56;:::i;:::-;40008:29;40030:6;40008:29;:::i;:::-;40003:3;39999:39;39992:46;;39730:314;;;;;:::o;40050:660::-;40255:4;40293:3;40282:9;40278:19;40270:27;;40307:71;40375:1;40364:9;40360:17;40351:6;40307:71;:::i;:::-;40388:72;40456:2;40445:9;40441:18;40432:6;40388:72;:::i;:::-;40470;40538:2;40527:9;40523:18;40514:6;40470:72;:::i;:::-;40589:9;40583:4;40579:20;40574:2;40563:9;40559:18;40552:48;40617:86;40698:4;40689:6;40681;40617:86;:::i;:::-;40609:94;;40050:660;;;;;;;;:::o;40716:148::-;40818:11;40855:3;40840:18;;40716:148;;;;:::o;40894:874::-;40997:3;41034:5;41028:12;41063:36;41089:9;41063:36;:::i;:::-;41115:89;41197:6;41192:3;41115:89;:::i;:::-;41108:96;;41235:1;41224:9;41220:17;41251:1;41246:166;;;;41426:1;41421:341;;;;41213:549;;41246:166;41330:4;41326:9;41315;41311:25;41306:3;41299:38;41392:6;41385:14;41378:22;41370:6;41366:35;41361:3;41357:45;41350:52;;41246:166;;41421:341;41488:38;41520:5;41488:38;:::i;:::-;41548:1;41562:154;41576:6;41573:1;41570:13;41562:154;;;41650:7;41644:14;41640:1;41635:3;41631:11;41624:35;41700:1;41691:7;41687:15;41676:26;;41598:4;41595:1;41591:12;41586:17;;41562:154;;;41745:6;41740:3;41736:16;41729:23;;41428:334;;41213:549;;41001:767;;40894:874;;;;:::o;41774:390::-;41880:3;41908:39;41941:5;41908:39;:::i;:::-;41963:89;42045:6;42040:3;41963:89;:::i;:::-;41956:96;;42061:65;42119:6;42114:3;42107:4;42100:5;42096:16;42061:65;:::i;:::-;42151:6;42146:3;42142:16;42135:23;;41884:280;41774:390;;;;:::o;42170:583::-;42392:3;42414:92;42502:3;42493:6;42414:92;:::i;:::-;42407:99;;42523:95;42614:3;42605:6;42523:95;:::i;:::-;42516:102;;42635:92;42723:3;42714:6;42635:92;:::i;:::-;42628:99;;42744:3;42737:10;;42170:583;;;;;;:::o;42759:102::-;42801:8;42848:5;42845:1;42841:13;42820:34;;42759:102;;;:::o;42867:848::-;42928:5;42935:4;42959:6;42950:15;;42983:5;42974:14;;42997:712;43018:1;43008:8;43005:15;42997:712;;;43113:4;43108:3;43104:14;43098:4;43095:24;43092:50;;;43122:18;;:::i;:::-;43092:50;43172:1;43162:8;43158:16;43155:451;;;43587:4;43580:5;43576:16;43567:25;;43155:451;43637:4;43631;43627:15;43619:23;;43667:32;43690:8;43667:32;:::i;:::-;43655:44;;42997:712;;;42867:848;;;;;;;:::o;43721:1073::-;43775:5;43966:8;43956:40;;43987:1;43978:10;;43989:5;;43956:40;44015:4;44005:36;;44032:1;44023:10;;44034:5;;44005:36;44101:4;44149:1;44144:27;;;;44185:1;44180:191;;;;44094:277;;44144:27;44162:1;44153:10;;44164:5;;;44180:191;44225:3;44215:8;44212:17;44209:43;;;44232:18;;:::i;:::-;44209:43;44281:8;44278:1;44274:16;44265:25;;44316:3;44309:5;44306:14;44303:40;;;44323:18;;:::i;:::-;44303:40;44356:5;;;44094:277;;44480:2;44470:8;44467:16;44461:3;44455:4;44452:13;44448:36;44430:2;44420:8;44417:16;44412:2;44406:4;44403:12;44399:35;44383:111;44380:246;;;44536:8;44530:4;44526:19;44517:28;;44571:3;44564:5;44561:14;44558:40;;;44578:18;;:::i;:::-;44558:40;44611:5;;44380:246;44651:42;44689:3;44679:8;44673:4;44670:1;44651:42;:::i;:::-;44636:57;;;;44725:4;44720:3;44716:14;44709:5;44706:25;44703:51;;;44734:18;;:::i;:::-;44703:51;44783:4;44776:5;44772:16;44763:25;;43721:1073;;;;;;:::o;44800:281::-;44858:5;44882:23;44900:4;44882:23;:::i;:::-;44874:31;;44926:25;44942:8;44926:25;:::i;:::-;44914:37;;44970:104;45007:66;44997:8;44991:4;44970:104;:::i;:::-;44961:113;;44800:281;;;;:::o;45087:175::-;45227:27;45223:1;45215:6;45211:14;45204:51;45087:175;:::o;45268:366::-;45410:3;45431:67;45495:2;45490:3;45431:67;:::i;:::-;45424:74;;45507:93;45596:3;45507:93;:::i;:::-;45625:2;45620:3;45616:12;45609:19;;45268:366;;;:::o;45640:419::-;45806:4;45844:2;45833:9;45829:18;45821:26;;45893:9;45887:4;45883:20;45879:1;45868:9;45864:17;45857:47;45921:131;46047:4;45921:131;:::i;:::-;45913:139;;45640:419;;;:::o;46065:177::-;46205:29;46201:1;46193:6;46189:14;46182:53;46065:177;:::o;46248:366::-;46390:3;46411:67;46475:2;46470:3;46411:67;:::i;:::-;46404:74;;46487:93;46576:3;46487:93;:::i;:::-;46605:2;46600:3;46596:12;46589:19;;46248:366;;;:::o;46620:419::-;46786:4;46824:2;46813:9;46809:18;46801:26;;46873:9;46867:4;46863:20;46859:1;46848:9;46844:17;46837:47;46901:131;47027:4;46901:131;:::i;:::-;46893:139;;46620:419;;;:::o;47045:178::-;47185:30;47181:1;47173:6;47169:14;47162:54;47045:178;:::o;47229:366::-;47371:3;47392:67;47456:2;47451:3;47392:67;:::i;:::-;47385:74;;47468:93;47557:3;47468:93;:::i;:::-;47586:2;47581:3;47577:12;47570:19;;47229:366;;;:::o;47601:419::-;47767:4;47805:2;47794:9;47790:18;47782:26;;47854:9;47848:4;47844:20;47840:1;47829:9;47825:17;47818:47;47882:131;48008:4;47882:131;:::i;:::-;47874:139;;47601:419;;;:::o;48026:175::-;48166:27;48162:1;48154:6;48150:14;48143:51;48026:175;:::o;48207:366::-;48349:3;48370:67;48434:2;48429:3;48370:67;:::i;:::-;48363:74;;48446:93;48535:3;48446:93;:::i;:::-;48564:2;48559:3;48555:12;48548:19;;48207:366;;;:::o;48579:419::-;48745:4;48783:2;48772:9;48768:18;48760:26;;48832:9;48826:4;48822:20;48818:1;48807:9;48803:17;48796:47;48860:131;48986:4;48860:131;:::i;:::-;48852:139;;48579:419;;;:::o;49004:180::-;49052:77;49049:1;49042:88;49149:4;49146:1;49139:15;49173:4;49170:1;49163:15;49190:222;49330:34;49326:1;49318:6;49314:14;49307:58;49399:5;49394:2;49386:6;49382:15;49375:30;49190:222;:::o;49418:366::-;49560:3;49581:67;49645:2;49640:3;49581:67;:::i;:::-;49574:74;;49657:93;49746:3;49657:93;:::i;:::-;49775:2;49770:3;49766:12;49759:19;;49418:366;;;:::o;49790:419::-;49956:4;49994:2;49983:9;49979:18;49971:26;;50043:9;50037:4;50033:20;50029:1;50018:9;50014:17;50007:47;50071:131;50197:4;50071:131;:::i;:::-;50063:139;;49790:419;;;:::o

Swarm Source

ipfs://df3efa1cb54b6647d05e348de3ed967f3fb103c96d85d77a251a6e73b5c3d93a
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.