ETH Price: $3,380.88 (-0.20%)

Token

Citizen Zero (CTZ)
 

Overview

Max Total Supply

2,222 CTZ

Holders

614

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
grail.eth
Balance
44 CTZ
0x649b0894Ce2BA6199F923F7Db0c45625020C2427
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Citizen Zero marks the initial founders’ collection of Citizen Conflict. Citizen Conflict dystopia brims with utilities every gaming enthusiast would kill for.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CitizenZero

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-05
*/

//SPDX-License-Identifier: GPL 3
pragma solidity >=0.8.0 <0.9.0;

library Counters {
    struct Counter {
        uint256 _value;
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

contract TokenAccessControl {
    bool public paused = false;
    address public owner;
    address public newContractOwner;
    mapping(address => bool) public authorizedContracts;

    event Pause();
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        owner = msg.sender;
    }

    modifier ifNotPaused() {
        require(!paused, "contract is paused");
        _;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "caller is not an owner");
        _;
    }

    modifier onlyAuthorizedUser() {
        require(
            authorizedContracts[msg.sender],
            "caller is not an authorized user"
        );
        _;
    }

    modifier onlyOwnerOrAuthorizedUser() {
        require(
            authorizedContracts[msg.sender] || msg.sender == owner,
            "caller is not an authorized user or an owner"
        );
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(owner, address(0));
        owner = address(0);
    }

    function transferOwnership(address _newOwner) public onlyOwner {
        require(_newOwner != address(0));
        newContractOwner = _newOwner;
    }

    function acceptOwnership() public ifNotPaused {
        require(msg.sender == newContractOwner);
        emit OwnershipTransferred(owner, newContractOwner);
        owner = newContractOwner;
        newContractOwner = address(0);
    }

    function setAuthorizedUser(address _operator, bool _approve)
        public
        onlyOwner
    {
        if (_approve) {
            authorizedContracts[_operator] = true;
        } else {
            delete authorizedContracts[_operator];
        }
    }

    function setPause(bool _paused) public onlyOwner {
        paused = _paused;
        if (paused) {
            emit Pause();
        }
    }
}

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);
}

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);
        }
    }
}

library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }

    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v5.0._
     */
    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.
     *
     * _Available since v5.0._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

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

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v5.0._
     */
    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 up instead
     * of rounding down.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    /**
     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
     * with further edits by Uniswap Labs also under MIT license.
     */
    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 result) {
        unchecked {
            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
            // variables such that product = prod1 * 2^256 + prod0.
            uint256 prod0; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                // 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.
            require(denominator > prod1, "Math: mulDiv overflow");

            ///////////////////////////////////////////////
            // 512 by 256 division.
            ///////////////////////////////////////////////

            // Make division exact by subtracting the remainder from [prod1 prod0].
            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
            // See https://cs.stackexchange.com/q/138556/92363.

            // Does not overflow because the denominator cannot be zero at this stage in the function.
            uint256 twos = denominator & (~denominator + 1);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv = 1 mod 2^4.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
            // in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inverse;
            return result;
        }
    }

    /**
     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
     */
    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator,
        Rounding rounding
    ) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    /**
     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.
     *
     * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
     */
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    /**
     * @notice Calculates sqrt(a), following the selected rounding direction.
     */
    function sqrt(uint256 a, Rounding rounding)
        internal
        pure
        returns (uint256)
    {
        unchecked {
            uint256 result = sqrt(a);
            return
                result +
                (rounding == Rounding.Up && result * result < a ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 2, rounded down, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value, Rounding rounding)
        internal
        pure
        returns (uint256)
    {
        unchecked {
            uint256 result = log2(value);
            return
                result +
                (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 10, rounded down, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10**64) {
                value /= 10**64;
                result += 64;
            }
            if (value >= 10**32) {
                value /= 10**32;
                result += 32;
            }
            if (value >= 10**16) {
                value /= 10**16;
                result += 16;
            }
            if (value >= 10**8) {
                value /= 10**8;
                result += 8;
            }
            if (value >= 10**4) {
                value /= 10**4;
                result += 4;
            }
            if (value >= 10**2) {
                value /= 10**2;
                result += 2;
            }
            if (value >= 10**1) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value, Rounding rounding)
        internal
        pure
        returns (uint256)
    {
        unchecked {
            uint256 result = log10(value);
            return
                result +
                (rounding == Rounding.Up && 10**result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 256, rounded down, of a positive value.
     * Returns 0 if given 0.
     *
     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
     */
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 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 +
                (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
        }
    }
}

library Strings {
    bytes16 private constant _SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    /**
     * @dev Converts a `int256` to its ASCII `string` decimal representation.
     */
    function toString(int256 value) internal pure returns (string memory) {
        return
            string(
                abi.encodePacked(
                    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)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }

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

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC2981 is IERC165 {
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

abstract contract ERC2981 is IERC2981, ERC165 {
    struct RoyaltyInfo {
        address receiver;
        uint96 royaltyFraction;
    }

    RoyaltyInfo private _defaultRoyaltyInfo;
    mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo;

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(IERC165, ERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC2981).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        public
        view
        virtual
        override
        returns (address, uint256)
    {
        RoyaltyInfo memory royalty = _tokenRoyaltyInfo[tokenId];

        if (royalty.receiver == address(0)) {
            royalty = _defaultRoyaltyInfo;
        }

        uint256 royaltyAmount = (salePrice * royalty.royaltyFraction) /
            _feeDenominator();

        return (royalty.receiver, royaltyAmount);
    }

    function _feeDenominator() internal pure virtual returns (uint96) {
        return 10000;
    }

    function _setDefaultRoyalty(address receiver, uint96 feeNumerator)
        internal
        virtual
    {
        require(
            feeNumerator <= _feeDenominator(),
            "ERC2981: royalty fee will exceed salePrice"
        );
        require(receiver != address(0), "ERC2981: invalid receiver");

        _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator);
    }

    function _deleteDefaultRoyalty() internal virtual {
        delete _defaultRoyaltyInfo;
    }

    function _setTokenRoyalty(
        uint256 tokenId,
        address receiver,
        uint96 feeNumerator
    ) internal virtual {
        require(
            feeNumerator <= _feeDenominator(),
            "ERC2981: royalty fee will exceed salePrice"
        );
        require(receiver != address(0), "ERC2981: Invalid parameters");

        _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator);
    }

    function _resetTokenRoyalty(uint256 tokenId) internal virtual {
        delete _tokenRoyaltyInfo[tokenId];
    }
}

interface IERC721 is IERC165 {
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function setApprovalForAll(address operator, bool approved) external;

    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);
}

interface IERC4906 is IERC165, IERC721 {
    event MetadataUpdate(uint256 _tokenId);
    event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId);
}

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

contract ERC721 is ERC165, IERC721 {
    string private _name;
    string private _symbol;
    string private _baseURI;
    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(
        string memory name_,
        string memory symbol_,
        string memory baseURI_
    ) {
        _name = name_;
        _symbol = symbol_;
        _baseURI = baseURI_;
    }

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

    function setBaseUri(string memory baseURI) internal virtual {
        _baseURI = baseURI;
    }

    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            owner != address(0),
            "ERC721: address zero is not a valid owner"
        );
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        address owner = _ownerOf(tokenId);
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }

    function name() public view virtual returns (string memory) {
        return _name;
    }

    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        returns (string memory)
    {
        _requireMinted(tokenId);
        return
            bytes(_baseURI).length > 0
                ? string(abi.encodePacked(_baseURI, Strings.toString(tokenId)))
                : "";
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "ERC721: approve caller is not token owner or approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        _setApprovalForAll(msg.sender, operator, approved);
    }

    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(
            _isApprovedOrOwner(msg.sender, tokenId),
            "ERC721: caller is not token owner or approved"
        );

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public virtual override {
        require(
            _isApprovedOrOwner(msg.sender, tokenId),
            "ERC721: caller is not token owner or approved"
        );
        _safeTransfer(from, to, tokenId, data);
    }

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _ownerOf(uint256 tokenId) internal view virtual returns (address) {
        return _owners[tokenId];
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _ownerOf(tokenId) != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            isApprovedForAll(owner, spender) ||
            getApproved(tokenId) == spender);
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId, 1);

        require(!_exists(tokenId), "ERC721: token already minted");

        unchecked {
            _balances[to] += 1;
        }

        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId, 1);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId, 1);
        owner = ERC721.ownerOf(tokenId);
        delete _tokenApprovals[tokenId];

        unchecked {
            _balances[owner] -= 1;
        }
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId, 1);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer from incorrect owner"
        );
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId, 1);
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer from incorrect owner"
        );
        delete _tokenApprovals[tokenId];

        unchecked {
            _balances[from] -= 1;
            _balances[to] += 1;
        }
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId, 1);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (isContract(to)) {
            try
                IERC721Receiver(to).onERC721Received(
                    msg.sender,
                    from,
                    tokenId,
                    data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 firstTokenId,
        uint256 batchSize
    ) internal virtual {}

    function __unsafe_increaseBalance(address account, uint256 amount)
        internal
    {
        _balances[account] += amount;
    }

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }
}

contract CitizenZero is ERC721, TokenAccessControl, ERC2981, IERC4906 {
    using Counters for Counters.Counter;
    string private _contractURI;
    uint256 public mintLimit;
    uint64 public whitelistMintStart;
    uint64 public fcfsMintStart;
    uint64 public publicMintStart;
    uint64 public mintEnd;
    Counters.Counter private _tokenIdCounter;
    Counters.Counter private _orderCounter;
    mapping(uint256 => CitizenZeroData) private _citizenZeroData;
    mapping(address => bool) private _whitelist;
    mapping(address => bool) private _fcfs;
    mapping(address => uint16) private _mintedAmount;

    struct CitizenZeroData {
        string secretPhrase;
        uint256 orderNumber;
        uint16[] achievements;
    }

    constructor(
        string memory name_,
        string memory symbol_,
        string memory baseURI_,
        string memory contractURI_,
        uint64 whitelistMintStart_,
        uint64 fcfsMintStart_,
        uint64 publicMintStart_,
        uint64 mintEnd_,
        uint256 mintLimit_,
        address royaltyReceiver_,
        uint96 royaltyFeeNumerator_
    ) ERC721(name_, symbol_, baseURI_) {
        _contractURI = contractURI_;
        whitelistMintStart = whitelistMintStart_;
        fcfsMintStart = fcfsMintStart_;
        publicMintStart = publicMintStart_;
        mintEnd = mintEnd_;
        mintLimit = mintLimit_;
        _setDefaultRoyalty(royaltyReceiver_, royaltyFeeNumerator_);
        _mintCitizenZero(msg.sender);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC721, ERC2981, IERC165)
        returns (bool)
    {
        return
            ERC721.supportsInterface(interfaceId) ||
            ERC2981.supportsInterface(interfaceId) ||
            interfaceId == bytes4(0x49064906);
    }

    function batchMetadataUpdate(uint256 fromTokenId, uint256 toTokenId)
        public
        onlyOwnerOrAuthorizedUser
    {
        emit BatchMetadataUpdate(fromTokenId, toTokenId);
    }

    function metadataUpdate(uint256 tokenId) public {
        emit MetadataUpdate(tokenId);
    }

    function setDefaultRoyalty(address receiver, uint96 feeNumerator)
        public
        onlyOwner
    {
        _setDefaultRoyalty(receiver, feeNumerator);
    }

    function setWhitelistAddresses(
        address[] memory whitelistAddresses,
        bool approval
    ) public onlyOwnerOrAuthorizedUser {
        for (uint256 i = 0; i < whitelistAddresses.length; ++i) {
            _whitelist[whitelistAddresses[i]] = approval;
        }
    }

    function setFcfsAddresses(address[] memory fcfsAddresses, bool approval)
        public
        onlyOwnerOrAuthorizedUser
    {
        for (uint256 i = 0; i < fcfsAddresses.length; ++i) {
            _fcfs[fcfsAddresses[i]] = approval;
        }
    }

    function setUri(string memory baseURI) public onlyOwner {
        setBaseUri(baseURI);
    }

    function setContractUri(string memory contractUri) public onlyOwner {
        _contractURI = contractUri;
    }

    function contractURI() public view returns (string memory) {
        return _contractURI;
    }

    function totalSupply() public view virtual returns (uint256) {
        return _tokenIdCounter.current();
    }

    function mintedAmount(address account) public view returns (uint16) {
        return _mintedAmount[account];
    }

    function burn(uint256 tokenId) public virtual {
        require(
            _isApprovedOrOwner(msg.sender, tokenId),
            "ERC721: caller is not token owner or approved"
        );
        _burn(tokenId);
    }

    function addAchievement(uint256 tokenId, uint16 achievementId)
        public
        onlyOwnerOrAuthorizedUser
    {
        _requireMinted(tokenId);
        _citizenZeroData[tokenId].achievements.push(achievementId);
        emit MetadataUpdate(tokenId);
    }

    function setSecretPhrase(uint256 tokenId, string memory secretPhrase)
        public
        onlyOwnerOrAuthorizedUser
    {
        _requireMinted(tokenId);
        _orderCounter.increment();
        _citizenZeroData[tokenId] = CitizenZeroData(
            secretPhrase,
            _orderCounter.current(),
            _citizenZeroData[tokenId].achievements
        );
        emit MetadataUpdate(tokenId);
    }

    function setMintTimes(
        uint64 _whitelistMintStart,
        uint64 _fcfsMintStart,
        uint64 _publicMintStart,
        uint64 _mintEnd
    ) public onlyOwner {
        whitelistMintStart = _whitelistMintStart;
        fcfsMintStart = _fcfsMintStart;
        publicMintStart = _publicMintStart;
        mintEnd = _mintEnd;
    }

    function getCitizenZeroData(uint256 tokenId)
        public
        view
        returns (
            string memory secretPhrase,
            uint256 orderNumber,
            uint16[] memory achievements
        )
    {
        _requireMinted(tokenId);
        return (
            _citizenZeroData[tokenId].secretPhrase,
            _citizenZeroData[tokenId].orderNumber,
            _citizenZeroData[tokenId].achievements
        );
    }

    function _mintCitizenZero(address to) internal {
        _tokenIdCounter.increment();
        _mint(to, _tokenIdCounter.current());
    }

    function mint() public ifNotPaused {
        require(
            block.timestamp < mintEnd,
            "CitizenZero: Mint has already ended!"
        );
        require(
            this.totalSupply() < mintLimit,
            "CitizenZero: Mint limit reached!"
        );
        require(
            _mintedAmount[msg.sender] < 1,
            "CitizenZero: Mint limit already reached for this wallet!"
        );
        require(
            msg.sender == tx.origin,
            "CitizenZero: Mint is allowed only for wallets!"
        );
        _mintedAmount[msg.sender]++;
        if (block.timestamp > publicMintStart) {
            _mintCitizenZero(msg.sender);
        } else if (
            block.timestamp > fcfsMintStart && _fcfs[msg.sender] == true
        ) {
            _mintCitizenZero(msg.sender);
        } else if (
            block.timestamp > whitelistMintStart &&
            _whitelist[msg.sender] == true
        ) {
            _mintCitizenZero(msg.sender);
        } else {
            revert("CitizenZero: You are not eligible for mint!");
        }
    }

    function isWhitelisted(address account) public view returns (bool) {
        return _whitelist[account];
    }

    function isFcfs(address account) public view returns (bool) {
        return _fcfs[account];
    }

    function withdraw(address contractAddress, uint256 amount)
        public
        onlyOwner
    {
        if (contractAddress == address(0)) {
            payable(msg.sender).transfer(amount);
        } else {
            if (amount == 0)
                amount = IERC20(contractAddress).balanceOf(address(this));
            IERC20(contractAddress).transfer(msg.sender, amount);
        }
    }

    receive() external payable {}

    fallback() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"string","name":"contractURI_","type":"string"},{"internalType":"uint64","name":"whitelistMintStart_","type":"uint64"},{"internalType":"uint64","name":"fcfsMintStart_","type":"uint64"},{"internalType":"uint64","name":"publicMintStart_","type":"uint64"},{"internalType":"uint64","name":"mintEnd_","type":"uint64"},{"internalType":"uint256","name":"mintLimit_","type":"uint256"},{"internalType":"address","name":"royaltyReceiver_","type":"address"},{"internalType":"uint96","name":"royaltyFeeNumerator_","type":"uint96"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toTokenId","type":"uint256"}],"name":"BatchMetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint16","name":"achievementId","type":"uint16"}],"name":"addAchievement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"internalType":"uint256","name":"toTokenId","type":"uint256"}],"name":"batchMetadataUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fcfsMintStart","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCitizenZeroData","outputs":[{"internalType":"string","name":"secretPhrase","type":"string"},{"internalType":"uint256","name":"orderNumber","type":"uint256"},{"internalType":"uint16[]","name":"achievements","type":"uint16[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isFcfs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"metadataUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintEnd","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"mintedAmount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newContractOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintStart","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approve","type":"bool"}],"name":"setAuthorizedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractUri","type":"string"}],"name":"setContractUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"fcfsAddresses","type":"address[]"},{"internalType":"bool","name":"approval","type":"bool"}],"name":"setFcfsAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_whitelistMintStart","type":"uint64"},{"internalType":"uint64","name":"_fcfsMintStart","type":"uint64"},{"internalType":"uint64","name":"_publicMintStart","type":"uint64"},{"internalType":"uint64","name":"_mintEnd","type":"uint64"}],"name":"setMintTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"secretPhrase","type":"string"}],"name":"setSecretPhrase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"whitelistAddresses","type":"address[]"},{"internalType":"bool","name":"approval","type":"bool"}],"name":"setWhitelistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistMintStart","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f60075f6101000a81548160ff02191690831515021790555034801562000029575f80fd5b5060405162006ca838038062006ca883398181016040528101906200004f919062000929565b8a8a8a825f908162000062919062000cd9565b50816001908162000074919062000cd9565b50806002908162000086919062000cd9565b5050505033600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600c9081620000dc919062000cd9565b5086600e5f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555085600e60086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555084600e60106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600e60186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600d81905550620001998282620001bb60201b60201c565b620001aa336200035960201b60201c565b505050505050505050505062000fab565b620001cb6200039160201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156200022c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002239062000e41565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200029d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002949062000eaf565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600a5f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6200036b600f6200039a60201b60201c565b6200038e8162000382600f620003ae60201b60201c565b620003ba60201b60201c565b50565b5f612710905090565b6001815f015f828254019250508190555050565b5f815f01549050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200042b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004229062000f1d565b60405180910390fd5b6200043c81620005f660201b60201c565b156200047f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004769062000f8b565b60405180910390fd5b620004945f838360016200063e60201b60201c565b620004a581620005f660201b60201c565b15620004e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004df9062000f8b565b60405180910390fd5b600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620005f25f838360016200064460201b60201c565b5050565b5f8073ffffffffffffffffffffffffffffffffffffffff166200061f836200064a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b5f60035f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620006e4826200069c565b810181811067ffffffffffffffff82111715620007065762000705620006ac565b5b80604052505050565b5f6200071a62000683565b9050620007288282620006d9565b919050565b5f67ffffffffffffffff8211156200074a5762000749620006ac565b5b62000755826200069c565b9050602081019050919050565b5f5b838110156200078157808201518184015260208101905062000764565b5f8484015250505050565b5f620007a26200079c846200072d565b6200070f565b905082815260208101848484011115620007c157620007c062000698565b5b620007ce84828562000762565b509392505050565b5f82601f830112620007ed57620007ec62000694565b5b8151620007ff8482602086016200078c565b91505092915050565b5f67ffffffffffffffff82169050919050565b620008268162000808565b811462000831575f80fd5b50565b5f8151905062000844816200081b565b92915050565b5f819050919050565b6200085e816200084a565b811462000869575f80fd5b50565b5f815190506200087c8162000853565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620008ad8262000882565b9050919050565b620008bf81620008a1565b8114620008ca575f80fd5b50565b5f81519050620008dd81620008b4565b92915050565b5f6bffffffffffffffffffffffff82169050919050565b6200090581620008e3565b811462000910575f80fd5b50565b5f815190506200092381620008fa565b92915050565b5f805f805f805f805f805f6101608c8e0312156200094c576200094b6200068c565b5b5f8c015167ffffffffffffffff8111156200096c576200096b62000690565b5b6200097a8e828f01620007d6565b9b505060208c015167ffffffffffffffff8111156200099e576200099d62000690565b5b620009ac8e828f01620007d6565b9a505060408c015167ffffffffffffffff811115620009d057620009cf62000690565b5b620009de8e828f01620007d6565b99505060608c015167ffffffffffffffff81111562000a025762000a0162000690565b5b62000a108e828f01620007d6565b985050608062000a238e828f0162000834565b97505060a062000a368e828f0162000834565b96505060c062000a498e828f0162000834565b95505060e062000a5c8e828f0162000834565b94505061010062000a708e828f016200086c565b93505061012062000a848e828f01620008cd565b92505061014062000a988e828f0162000913565b9150509295989b509295989b9093969950565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000afa57607f821691505b60208210810362000b105762000b0f62000ab5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000b747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b37565b62000b80868362000b37565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000bc162000bbb62000bb5846200084a565b62000b98565b6200084a565b9050919050565b5f819050919050565b62000bdc8362000ba1565b62000bf462000beb8262000bc8565b84845462000b43565b825550505050565b5f90565b62000c0a62000bfc565b62000c1781848462000bd1565b505050565b5b8181101562000c3e5762000c325f8262000c00565b60018101905062000c1d565b5050565b601f82111562000c8d5762000c578162000b16565b62000c628462000b28565b8101602085101562000c72578190505b62000c8a62000c818562000b28565b83018262000c1c565b50505b505050565b5f82821c905092915050565b5f62000caf5f198460080262000c92565b1980831691505092915050565b5f62000cc9838362000c9e565b9150826002028217905092915050565b62000ce48262000aab565b67ffffffffffffffff81111562000d005762000cff620006ac565b5b62000d0c825462000ae2565b62000d1982828562000c42565b5f60209050601f83116001811462000d4f575f841562000d3a578287015190505b62000d46858262000cbc565b86555062000db5565b601f19841662000d5f8662000b16565b5f5b8281101562000d885784890151825560018201915060208501945060208101905062000d61565b8683101562000da8578489015162000da4601f89168262000c9e565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f455243323938313a20726f79616c7479206665652077696c6c206578636565645f8201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b5f62000e29602a8362000dbd565b915062000e368262000dcd565b604082019050919050565b5f6020820190508181035f83015262000e5a8162000e1b565b9050919050565b7f455243323938313a20696e76616c6964207265636569766572000000000000005f82015250565b5f62000e9760198362000dbd565b915062000ea48262000e61565b602082019050919050565b5f6020820190508181035f83015262000ec88162000e89565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f62000f0560208362000dbd565b915062000f128262000ecf565b602082019050919050565b5f6020820190508181035f83015262000f368162000ef7565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f62000f73601c8362000dbd565b915062000f808262000f3d565b602082019050919050565b5f6020820190508181035f83015262000fa48162000f65565b9050919050565b615cef8062000fb95f395ff3fe60806040526004361061028b575f3560e01c806395d89b4111610159578063d5b9221b116100c0578063ea2b4ab211610079578063ea2b4ab2146109b7578063eafd4891146109e1578063f2fde38b14610a0b578063f3fef3a314610a33578063fbbf8cc314610a5b578063fdda339114610a9757610292565b8063d5b9221b1461089d578063d7afc640146108d9578063e0b65d6514610901578063e4f52e3d14610929578063e8a3d48514610951578063e985e9c51461097b57610292565b8063b88d4fde11610112578063b88d4fde14610799578063bedb86fb146107c1578063c758f600146107e9578063c87b56dd14610811578063ccb4807b1461084d578063d16bc9ae1461087557610292565b806395d89b41146106a5578063996517cf146106cf5780639b642de1146106f9578063a22cb46514610721578063a249225e14610749578063a8d9bb771461077157610292565b80633af32abf116101fd57806370559664116101b657806370559664146105ad57806370a08231146105e9578063715018a61461062557806379ba50971461063b5780638cfec4c0146106515780638da5cb5b1461067b57610292565b80633af32abf1461049357806342842e0e146104cf57806342966c68146104f75780635c975abb1461051f5780636352211e146105495780636a1c34fb1461058557610292565b80630de959cc1161024f5780630de959cc146103865780631249c58b146103b057806318160ddd146103c657806323b872dd146103f05780632a55205a146104185780632c72ef771461045557610292565b806301ffc9a71461029457806304634d8d146102d057806306fdde03146102f8578063081812fc14610322578063095ea7b31461035e57610292565b3661029257005b005b34801561029f575f80fd5b506102ba60048036038101906102b59190614115565b610ac1565b6040516102c7919061415a565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061420e565b610b31565b005b348015610303575f80fd5b5061030c610bcf565b60405161031991906142d6565b60405180910390f35b34801561032d575f80fd5b5061034860048036038101906103439190614329565b610c5e565b6040516103559190614363565b60405180910390f35b348015610369575f80fd5b50610384600480360381019061037f919061437c565b610ca0565b005b348015610391575f80fd5b5061039a610da8565b6040516103a79190614363565b60405180910390f35b3480156103bb575f80fd5b506103c4610dcd565b005b3480156103d1575f80fd5b506103da611234565b6040516103e791906143c9565b60405180910390f35b3480156103fb575f80fd5b50610416600480360381019061041191906143e2565b611244565b005b348015610423575f80fd5b5061043e60048036038101906104399190614432565b61129d565b60405161044c929190614470565b60405180910390f35b348015610460575f80fd5b5061047b60048036038101906104769190614329565b611479565b60405161048a9392919061455b565b60405180910390f35b34801561049e575f80fd5b506104b960048036038101906104b4919061459e565b6115d1565b6040516104c6919061415a565b60405180910390f35b3480156104da575f80fd5b506104f560048036038101906104f091906143e2565b611623565b005b348015610502575f80fd5b5061051d60048036038101906105189190614329565b611642565b005b34801561052a575f80fd5b50610533611697565b604051610540919061415a565b60405180910390f35b348015610554575f80fd5b5061056f600480360381019061056a9190614329565b6116a9565b60405161057c9190614363565b60405180910390f35b348015610590575f80fd5b506105ab60048036038101906105a69190614329565b61172d565b005b3480156105b8575f80fd5b506105d360048036038101906105ce919061459e565b611767565b6040516105e0919061415a565b60405180910390f35b3480156105f4575f80fd5b5061060f600480360381019061060a919061459e565b6117b9565b60405161061c91906143c9565b60405180910390f35b348015610630575f80fd5b5061063961186d565b005b348015610646575f80fd5b5061064f6119bc565b005b34801561065c575f80fd5b50610665611ba4565b60405161067291906145eb565b60405180910390f35b348015610686575f80fd5b5061068f611bbe565b60405161069c9190614363565b60405180910390f35b3480156106b0575f80fd5b506106b9611be4565b6040516106c691906142d6565b60405180910390f35b3480156106da575f80fd5b506106e3611c74565b6040516106f091906143c9565b60405180910390f35b348015610704575f80fd5b5061071f600480360381019061071a9190614730565b611c7a565b005b34801561072c575f80fd5b50610747600480360381019061074291906147a1565b611d16565b005b348015610754575f80fd5b5061076f600480360381019061076a91906147a1565b611d25565b005b34801561077c575f80fd5b50610797600480360381019061079291906148a3565b611e66565b005b3480156107a4575f80fd5b506107bf60048036038101906107ba919061499b565b611fd0565b005b3480156107cc575f80fd5b506107e760048036038101906107e29190614a1b565b61202b565b005b3480156107f4575f80fd5b5061080f600480360381019061080a9190614432565b612118565b005b34801561081c575f80fd5b5061083760048036038101906108329190614329565b612236565b60405161084491906142d6565b60405180910390f35b348015610858575f80fd5b50610873600480360381019061086e9190614730565b61229d565b005b348015610880575f80fd5b5061089b600480360381019061089691906148a3565b612340565b005b3480156108a8575f80fd5b506108c360048036038101906108be919061459e565b6124aa565b6040516108d0919061415a565b60405180910390f35b3480156108e4575f80fd5b506108ff60048036038101906108fa9190614a70565b6124c7565b005b34801561090c575f80fd5b5061092760048036038101906109229190614ad8565b612646565b005b348015610934575f80fd5b5061094f600480360381019061094a9190614b3c565b61277f565b005b34801561095c575f80fd5b506109656129a8565b60405161097291906142d6565b60405180910390f35b348015610986575f80fd5b506109a1600480360381019061099c9190614b96565b612a38565b6040516109ae919061415a565b60405180910390f35b3480156109c2575f80fd5b506109cb612ac6565b6040516109d891906145eb565b60405180910390f35b3480156109ec575f80fd5b506109f5612ae0565b604051610a0291906145eb565b60405180910390f35b348015610a16575f80fd5b50610a316004803603810190610a2c919061459e565b612afa565b005b348015610a3e575f80fd5b50610a596004803603810190610a54919061437c565b612c04565b005b348015610a66575f80fd5b50610a816004803603810190610a7c919061459e565b612e13565b604051610a8e9190614be3565b60405180910390f35b348015610aa2575f80fd5b50610aab612e66565b604051610ab891906145eb565b60405180910390f35b5f610acb82612e7f565b80610adb5750610ada82612f60565b5b80610b2a5750634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890614c46565b60405180910390fd5b610bcb8282612fd9565b5050565b60605f8054610bdd90614c91565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0990614c91565b8015610c545780601f10610c2b57610100808354040283529160200191610c54565b820191905f5260205f20905b815481529060010190602001808311610c3757829003601f168201915b5050505050905090565b5f610c6882613169565b60055f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610caa826116a9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1190614d31565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d5a5750610d598133612a38565b5b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090614dbf565b60405180910390fd5b610da383836131b4565b505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075f9054906101000a900460ff1615610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390614e27565b60405180910390fd5b600e60189054906101000a900467ffffffffffffffff1667ffffffffffffffff164210610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7590614eb5565b60405180910390fd5b600d543073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eee9190614ee7565b10610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614f5c565b60405180910390fd5b600160145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900461ffff1661ffff1610610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb690614fea565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490615078565b60405180910390fd5b60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81819054906101000a900461ffff1680929190611087906150c3565b91906101000a81548161ffff021916908361ffff16021790555050600e60109054906101000a900467ffffffffffffffff1667ffffffffffffffff164211156110d8576110d33361326a565b611232565b600e60089054906101000a900467ffffffffffffffff1667ffffffffffffffff164211801561115457506001151560135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b15611167576111623361326a565b611231565b600e5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16421180156111e257506001151560125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b156111f5576111f03361326a565b611230565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112279061515c565b60405180910390fd5b5b5b565b5f61123f600f61328a565b905090565b61124e3382613296565b61128d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611284906151ea565b60405180910390fd5b61129883838361332a565b505050565b5f805f600b5f8681526020019081526020015f206040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff160361142657600a6040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b5f61142f613616565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff168661145b9190615208565b6114659190615276565b9050815f0151819350935050509250929050565b60605f606061148784613169565b60115f8581526020019081526020015f205f0160115f8681526020019081526020015f206001015460115f8781526020019081526020015f206002018280546114cf90614c91565b80601f01602080910402602001604051908101604052809291908181526020018280546114fb90614c91565b80156115465780601f1061151d57610100808354040283529160200191611546565b820191905f5260205f20905b81548152906001019060200180831161152957829003601f168201915b50505050509250808054806020026020016040519081016040528092919081815260200182805480156115bd57602002820191905f5260205f20905f905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116115845790505b505050505090509250925092509193909250565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61163d83838360405180602001604052805f815250611fd0565b505050565b61164c3382613296565b61168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906151ea565b60405180910390fd5b6116948161361f565b50565b60075f9054906101000a900460ff1681565b5f806116b483613760565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b906152f0565b60405180910390fd5b80915050919050565b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78160405161175c91906143c9565b60405180910390a150565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f9061537e565b60405180910390fd5b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f490614c46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60075f9054906101000a900460ff1615611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290614e27565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a63575f80fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60109054906101000a900467ffffffffffffffff1681565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611bf390614c91565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1f90614c91565b8015611c6a5780601f10611c4157610100808354040283529160200191611c6a565b820191905f5260205f20905b815481529060010190602001808311611c4d57829003601f168201915b5050505050905090565b600d5481565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190614c46565b60405180910390fd5b611d1381613799565b50565b611d213383836137ac565b5050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90614c46565b60405180910390fd5b8015611e1557600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611e62565b60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549060ff02191690555b5050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f085750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3e9061540c565b60405180910390fd5b5f5b8251811015611fcb578160125f858481518110611f6957611f6861542a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050611f49565b505050565b611fda3383613296565b612019576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612010906151ea565b60405180910390fd5b61202584848484613913565b50505050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290614c46565b60405180910390fd5b8060075f6101000a81548160ff02191690831515021790555060075f9054906101000a900460ff1615612115577f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b50565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806121ba5750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f09061540c565b60405180910390fd5b7f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c828260405161222a929190615457565b60405180910390a15050565b606061224182613169565b5f6002805461224f90614c91565b90501161226a5760405180602001604052805f815250612296565b60026122758361396f565b60405160200161228692919061554a565b6040516020818303038152906040525b9050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614c46565b60405180910390fd5b80600c908161233c91906156f8565b5050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806123e25750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124189061540c565b60405180910390fd5b5f5b82518110156124a5578160135f8584815181106124435761244261542a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050612423565b505050565b6009602052805f5260405f205f915054906101000a900460ff1681565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125695750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6125a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259f9061540c565b60405180910390fd5b6125b182613169565b60115f8381526020019081526020015f2060020181908060018154018082558091505060019003905f5260205f2090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff1602179055507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161263a91906143c9565b60405180910390a15050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd90614c46565b60405180910390fd5b83600e5f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600e60086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555081600e60106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080600e60186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128215750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128579061540c565b60405180910390fd5b61286982613169565b6128736010613a39565b604051806060016040528082815260200161288e601061328a565b815260200160115f8581526020019081526020015f2060020180548060200260200160405190810160405280929190818152602001828054801561291657602002820191905f5260205f20905f905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116128dd5790505b505050505081525060115f8481526020019081526020015f205f820151815f01908161294291906156f8565b50602082015181600101556040820151816002019080519060200190612969929190613fed565b509050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161299c91906143c9565b60405180910390a15050565b6060600c80546129b790614c91565b80601f01602080910402602001604051908101604052809291908181526020018280546129e390614c91565b8015612a2e5780601f10612a0557610100808354040283529160200191612a2e565b820191905f5260205f20905b815481529060010190602001808311612a1157829003601f168201915b5050505050905090565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600e60189054906101000a900467ffffffffffffffff1681565b600e60089054906101000a900467ffffffffffffffff1681565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8190614c46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bc1575f80fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8b90614c46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d10573373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612d0a573d5f803e3d5ffd5b50612e0f565b5f8103612d92578173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612d509190614363565b602060405180830381865afa158015612d6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d8f9190614ee7565b90505b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612dcd929190614470565b6020604051808303815f875af1158015612de9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e0d91906157db565b505b5050565b5f60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900461ffff169050919050565b600e5f9054906101000a900467ffffffffffffffff1681565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f4957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612f595750612f5882613a4d565b5b9050919050565b5f7f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612fd25750612fd182612e7f565b5b9050919050565b612fe1613616565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111561303f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303690615876565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a4906158de565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600a5f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b61317281613ab6565b6131b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a8906152f0565b60405180910390fd5b50565b8160055f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16613224836116a9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b613274600f613a39565b61328781613282600f61328a565b613af6565b50565b5f815f01549050919050565b5f806132a1836116a9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806132e357506132e28185612a38565b5b8061332157508373ffffffffffffffffffffffffffffffffffffffff1661330984610c5e565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661334a826116a9565b73ffffffffffffffffffffffffffffffffffffffff16146133a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133979061596c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361340e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613405906159fa565b60405180910390fd5b61341b8383836001613d09565b8273ffffffffffffffffffffffffffffffffffffffff1661343b826116a9565b73ffffffffffffffffffffffffffffffffffffffff1614613491576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134889061596c565b60405180910390fd5b60055f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540392505081905550600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136118383836001613d0f565b505050565b5f612710905090565b5f613629826116a9565b9050613638815f846001613d09565b613641826116a9565b905060055f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254039250508190555060035f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461375c815f846001613d0f565b5050565b5f60035f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80600290816137a891906156f8565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361381a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381190615a62565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613906919061415a565b60405180910390a3505050565b61391e84848461332a565b61392a84848484613d15565b613969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396090615af0565b60405180910390fd5b50505050565b60605f600161397d84613e7a565b0190505f8167ffffffffffffffff81111561399b5761399a61460c565b5b6040519080825280601f01601f1916602001820160405280156139cd5781602001600182028036833780820191505090505b5090505f82602001820190505b600115613a2e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581613a2357613a22615249565b5b0494505f85036139da575b819350505050919050565b6001815f015f828254019250508190555050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff16613ad783613760565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5b90615b58565b60405180910390fd5b613b6d81613ab6565b15613bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba490615bc0565b60405180910390fd5b613bba5f83836001613d09565b613bc381613ab6565b15613c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bfa90615bc0565b60405180910390fd5b600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613d055f83836001613d0f565b5050565b50505050565b50505050565b5f613d1f84613fcb565b15613e6d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401613d639493929190615c30565b6020604051808303815f875af1925050508015613d9e57506040513d601f19601f82011682018060405250810190613d9b9190615c8e565b60015b613e1d573d805f8114613dcc576040519150601f19603f3d011682016040523d82523d5f602084013e613dd1565b606091505b505f815103613e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e0c90615af0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613e72565b600190505b949350505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613ed6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613ecc57613ecb615249565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613f13576d04ee2d6d415b85acef81000000008381613f0957613f08615249565b5b0492506020810190505b662386f26fc100008310613f4257662386f26fc100008381613f3857613f37615249565b5b0492506010810190505b6305f5e1008310613f6b576305f5e1008381613f6157613f60615249565b5b0492506008810190505b6127108310613f90576127108381613f8657613f85615249565b5b0492506004810190505b60648310613fb35760648381613fa957613fa8615249565b5b0492506002810190505b600a8310613fc2576001810190505b80915050919050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054828255905f5260205f2090600f01601090048101928215614083579160200282015f5b8382111561405357835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302614013565b80156140815782816101000a81549061ffff0219169055600201602081600101049283019260010302614053565b505b5090506140909190614094565b5090565b5b808211156140ab575f815f905550600101614095565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6140f4816140c0565b81146140fe575f80fd5b50565b5f8135905061410f816140eb565b92915050565b5f6020828403121561412a576141296140b8565b5b5f61413784828501614101565b91505092915050565b5f8115159050919050565b61415481614140565b82525050565b5f60208201905061416d5f83018461414b565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61419c82614173565b9050919050565b6141ac81614192565b81146141b6575f80fd5b50565b5f813590506141c7816141a3565b92915050565b5f6bffffffffffffffffffffffff82169050919050565b6141ed816141cd565b81146141f7575f80fd5b50565b5f81359050614208816141e4565b92915050565b5f8060408385031215614224576142236140b8565b5b5f614231858286016141b9565b9250506020614242858286016141fa565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614283578082015181840152602081019050614268565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6142a88261424c565b6142b28185614256565b93506142c2818560208601614266565b6142cb8161428e565b840191505092915050565b5f6020820190508181035f8301526142ee818461429e565b905092915050565b5f819050919050565b614308816142f6565b8114614312575f80fd5b50565b5f81359050614323816142ff565b92915050565b5f6020828403121561433e5761433d6140b8565b5b5f61434b84828501614315565b91505092915050565b61435d81614192565b82525050565b5f6020820190506143765f830184614354565b92915050565b5f8060408385031215614392576143916140b8565b5b5f61439f858286016141b9565b92505060206143b085828601614315565b9150509250929050565b6143c3816142f6565b82525050565b5f6020820190506143dc5f8301846143ba565b92915050565b5f805f606084860312156143f9576143f86140b8565b5b5f614406868287016141b9565b9350506020614417868287016141b9565b925050604061442886828701614315565b9150509250925092565b5f8060408385031215614448576144476140b8565b5b5f61445585828601614315565b925050602061446685828601614315565b9150509250929050565b5f6040820190506144835f830185614354565b61449060208301846143ba565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61ffff82169050919050565b6144d6816144c0565b82525050565b5f6144e783836144cd565b60208301905092915050565b5f602082019050919050565b5f61450982614497565b61451381856144a1565b935061451e836144b1565b805f5b8381101561454e57815161453588826144dc565b9750614540836144f3565b925050600181019050614521565b5085935050505092915050565b5f6060820190508181035f830152614573818661429e565b905061458260208301856143ba565b818103604083015261459481846144ff565b9050949350505050565b5f602082840312156145b3576145b26140b8565b5b5f6145c0848285016141b9565b91505092915050565b5f67ffffffffffffffff82169050919050565b6145e5816145c9565b82525050565b5f6020820190506145fe5f8301846145dc565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6146428261428e565b810181811067ffffffffffffffff821117156146615761466061460c565b5b80604052505050565b5f6146736140af565b905061467f8282614639565b919050565b5f67ffffffffffffffff82111561469e5761469d61460c565b5b6146a78261428e565b9050602081019050919050565b828183375f83830152505050565b5f6146d46146cf84614684565b61466a565b9050828152602081018484840111156146f0576146ef614608565b5b6146fb8482856146b4565b509392505050565b5f82601f83011261471757614716614604565b5b81356147278482602086016146c2565b91505092915050565b5f60208284031215614745576147446140b8565b5b5f82013567ffffffffffffffff811115614762576147616140bc565b5b61476e84828501614703565b91505092915050565b61478081614140565b811461478a575f80fd5b50565b5f8135905061479b81614777565b92915050565b5f80604083850312156147b7576147b66140b8565b5b5f6147c4858286016141b9565b92505060206147d58582860161478d565b9150509250929050565b5f67ffffffffffffffff8211156147f9576147f861460c565b5b602082029050602081019050919050565b5f80fd5b5f61482061481b846147df565b61466a565b905080838252602082019050602084028301858111156148435761484261480a565b5b835b8181101561486c578061485888826141b9565b845260208401935050602081019050614845565b5050509392505050565b5f82601f83011261488a57614889614604565b5b813561489a84826020860161480e565b91505092915050565b5f80604083850312156148b9576148b86140b8565b5b5f83013567ffffffffffffffff8111156148d6576148d56140bc565b5b6148e285828601614876565b92505060206148f38582860161478d565b9150509250929050565b5f67ffffffffffffffff8211156149175761491661460c565b5b6149208261428e565b9050602081019050919050565b5f61493f61493a846148fd565b61466a565b90508281526020810184848401111561495b5761495a614608565b5b6149668482856146b4565b509392505050565b5f82601f83011261498257614981614604565b5b813561499284826020860161492d565b91505092915050565b5f805f80608085870312156149b3576149b26140b8565b5b5f6149c0878288016141b9565b94505060206149d1878288016141b9565b93505060406149e287828801614315565b925050606085013567ffffffffffffffff811115614a0357614a026140bc565b5b614a0f8782880161496e565b91505092959194509250565b5f60208284031215614a3057614a2f6140b8565b5b5f614a3d8482850161478d565b91505092915050565b614a4f816144c0565b8114614a59575f80fd5b50565b5f81359050614a6a81614a46565b92915050565b5f8060408385031215614a8657614a856140b8565b5b5f614a9385828601614315565b9250506020614aa485828601614a5c565b9150509250929050565b614ab7816145c9565b8114614ac1575f80fd5b50565b5f81359050614ad281614aae565b92915050565b5f805f8060808587031215614af057614aef6140b8565b5b5f614afd87828801614ac4565b9450506020614b0e87828801614ac4565b9350506040614b1f87828801614ac4565b9250506060614b3087828801614ac4565b91505092959194509250565b5f8060408385031215614b5257614b516140b8565b5b5f614b5f85828601614315565b925050602083013567ffffffffffffffff811115614b8057614b7f6140bc565b5b614b8c85828601614703565b9150509250929050565b5f8060408385031215614bac57614bab6140b8565b5b5f614bb9858286016141b9565b9250506020614bca858286016141b9565b9150509250929050565b614bdd816144c0565b82525050565b5f602082019050614bf65f830184614bd4565b92915050565b7f63616c6c6572206973206e6f7420616e206f776e6572000000000000000000005f82015250565b5f614c30601683614256565b9150614c3b82614bfc565b602082019050919050565b5f6020820190508181035f830152614c5d81614c24565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614ca857607f821691505b602082108103614cbb57614cba614c64565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f614d1b602183614256565b9150614d2682614cc1565b604082019050919050565b5f6020820190508181035f830152614d4881614d0f565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f5f8201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b5f614da9603d83614256565b9150614db482614d4f565b604082019050919050565b5f6020820190508181035f830152614dd681614d9d565b9050919050565b7f636f6e74726163742069732070617573656400000000000000000000000000005f82015250565b5f614e11601283614256565b9150614e1c82614ddd565b602082019050919050565b5f6020820190508181035f830152614e3e81614e05565b9050919050565b7f436974697a656e5a65726f3a204d696e742068617320616c726561647920656e5f8201527f6465642100000000000000000000000000000000000000000000000000000000602082015250565b5f614e9f602483614256565b9150614eaa82614e45565b604082019050919050565b5f6020820190508181035f830152614ecc81614e93565b9050919050565b5f81519050614ee1816142ff565b92915050565b5f60208284031215614efc57614efb6140b8565b5b5f614f0984828501614ed3565b91505092915050565b7f436974697a656e5a65726f3a204d696e74206c696d69742072656163686564215f82015250565b5f614f46602083614256565b9150614f5182614f12565b602082019050919050565b5f6020820190508181035f830152614f7381614f3a565b9050919050565b7f436974697a656e5a65726f3a204d696e74206c696d697420616c7265616479205f8201527f7265616368656420666f7220746869732077616c6c6574210000000000000000602082015250565b5f614fd4603883614256565b9150614fdf82614f7a565b604082019050919050565b5f6020820190508181035f83015261500181614fc8565b9050919050565b7f436974697a656e5a65726f3a204d696e7420697320616c6c6f776564206f6e6c5f8201527f7920666f722077616c6c65747321000000000000000000000000000000000000602082015250565b5f615062602e83614256565b915061506d82615008565b604082019050919050565b5f6020820190508181035f83015261508f81615056565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6150cd826144c0565b915061ffff82036150e1576150e0615096565b5b600182019050919050565b7f436974697a656e5a65726f3a20596f7520617265206e6f7420656c696769626c5f8201527f6520666f72206d696e7421000000000000000000000000000000000000000000602082015250565b5f615146602b83614256565b9150615151826150ec565b604082019050919050565b5f6020820190508181035f8301526151738161513a565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e655f8201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b5f6151d4602d83614256565b91506151df8261517a565b604082019050919050565b5f6020820190508181035f830152615201816151c8565b9050919050565b5f615212826142f6565b915061521d836142f6565b925082820261522b816142f6565b9150828204841483151761524257615241615096565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f615280826142f6565b915061528b836142f6565b92508261529b5761529a615249565b5b828204905092915050565b7f4552433732313a20696e76616c696420746f6b656e20494400000000000000005f82015250565b5f6152da601883614256565b91506152e5826152a6565b602082019050919050565b5f6020820190508181035f830152615307816152ce565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f7420612076615f8201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b5f615368602983614256565b91506153738261530e565b604082019050919050565b5f6020820190508181035f8301526153958161535c565b9050919050565b7f63616c6c6572206973206e6f7420616e20617574686f72697a656420757365725f8201527f206f7220616e206f776e65720000000000000000000000000000000000000000602082015250565b5f6153f6602c83614256565b91506154018261539c565b604082019050919050565b5f6020820190508181035f830152615423816153ea565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60408201905061546a5f8301856143ba565b61547760208301846143ba565b9392505050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f81546154a681614c91565b6154b0818661547e565b9450600182165f81146154ca57600181146154df57615511565b60ff1983168652811515820286019350615511565b6154e885615488565b5f5b83811015615509578154818901526001820191506020810190506154ea565b838801955050505b50505092915050565b5f6155248261424c565b61552e818561547e565b935061553e818560208601614266565b80840191505092915050565b5f615555828561549a565b9150615561828461551a565b91508190509392505050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026155b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261557c565b6155c1868361557c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6155fc6155f76155f2846142f6565b6155d9565b6142f6565b9050919050565b5f819050919050565b615615836155e2565b61562961562182615603565b848454615588565b825550505050565b5f90565b61563d615631565b61564881848461560c565b505050565b5b8181101561566b576156605f82615635565b60018101905061564e565b5050565b601f8211156156b05761568181615488565b61568a8461556d565b81016020851015615699578190505b6156ad6156a58561556d565b83018261564d565b50505b505050565b5f82821c905092915050565b5f6156d05f19846008026156b5565b1980831691505092915050565b5f6156e883836156c1565b9150826002028217905092915050565b6157018261424c565b67ffffffffffffffff81111561571a5761571961460c565b5b6157248254614c91565b61572f82828561566f565b5f60209050601f831160018114615760575f841561574e578287015190505b61575885826156dd565b8655506157bf565b601f19841661576e86615488565b5f5b8281101561579557848901518255600182019150602085019450602081019050615770565b868310156157b257848901516157ae601f8916826156c1565b8355505b6001600288020188555050505b505050505050565b5f815190506157d581614777565b92915050565b5f602082840312156157f0576157ef6140b8565b5b5f6157fd848285016157c7565b91505092915050565b7f455243323938313a20726f79616c7479206665652077696c6c206578636565645f8201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b5f615860602a83614256565b915061586b82615806565b604082019050919050565b5f6020820190508181035f83015261588d81615854565b9050919050565b7f455243323938313a20696e76616c6964207265636569766572000000000000005f82015250565b5f6158c8601983614256565b91506158d382615894565b602082019050919050565b5f6020820190508181035f8301526158f5816158bc565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f7272656374205f8201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b5f615956602583614256565b9150615961826158fc565b604082019050919050565b5f6020820190508181035f8301526159838161594a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6159e4602483614256565b91506159ef8261598a565b604082019050919050565b5f6020820190508181035f830152615a11816159d8565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f615a4c601983614256565b9150615a5782615a18565b602082019050919050565b5f6020820190508181035f830152615a7981615a40565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f615ada603283614256565b9150615ae582615a80565b604082019050919050565b5f6020820190508181035f830152615b0781615ace565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f615b42602083614256565b9150615b4d82615b0e565b602082019050919050565b5f6020820190508181035f830152615b6f81615b36565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f615baa601c83614256565b9150615bb582615b76565b602082019050919050565b5f6020820190508181035f830152615bd781615b9e565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f615c0282615bde565b615c0c8185615be8565b9350615c1c818560208601614266565b615c258161428e565b840191505092915050565b5f608082019050615c435f830187614354565b615c506020830186614354565b615c5d60408301856143ba565b8181036060830152615c6f8184615bf8565b905095945050505050565b5f81519050615c88816140eb565b92915050565b5f60208284031215615ca357615ca26140b8565b5b5f615cb084828501615c7a565b9150509291505056fea2646970667358221220651d214871294d907a5d0ee78e5ef765d47df9fa24d45822a764a4dfb671b46a64736f6c63430008160033000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000065c0e9e00000000000000000000000000000000000000000000000000000000065c122200000000000000000000000000000000000000000000000000000000065c15a600000000000000000000000000000000000000000000000000000000065c1767f00000000000000000000000000000000000000000000000000000000000008ae00000000000000000000000006973fe88cc9a96c6f5eaf9da50f6a39495aa6ca0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000c436974697a656e205a65726f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343545a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004868747470733a2f2f716170692e716f72706f2e776f726c642f6170692f76312f7075626c69632d626c6f636b636861696e2d646174612f6e66742f636974697a656e2d7a65726f2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f6d657461646174612e716f72706f2e776f726c642f63632f636974697a656e5f7a65726f2e6a736f6e000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061028b575f3560e01c806395d89b4111610159578063d5b9221b116100c0578063ea2b4ab211610079578063ea2b4ab2146109b7578063eafd4891146109e1578063f2fde38b14610a0b578063f3fef3a314610a33578063fbbf8cc314610a5b578063fdda339114610a9757610292565b8063d5b9221b1461089d578063d7afc640146108d9578063e0b65d6514610901578063e4f52e3d14610929578063e8a3d48514610951578063e985e9c51461097b57610292565b8063b88d4fde11610112578063b88d4fde14610799578063bedb86fb146107c1578063c758f600146107e9578063c87b56dd14610811578063ccb4807b1461084d578063d16bc9ae1461087557610292565b806395d89b41146106a5578063996517cf146106cf5780639b642de1146106f9578063a22cb46514610721578063a249225e14610749578063a8d9bb771461077157610292565b80633af32abf116101fd57806370559664116101b657806370559664146105ad57806370a08231146105e9578063715018a61461062557806379ba50971461063b5780638cfec4c0146106515780638da5cb5b1461067b57610292565b80633af32abf1461049357806342842e0e146104cf57806342966c68146104f75780635c975abb1461051f5780636352211e146105495780636a1c34fb1461058557610292565b80630de959cc1161024f5780630de959cc146103865780631249c58b146103b057806318160ddd146103c657806323b872dd146103f05780632a55205a146104185780632c72ef771461045557610292565b806301ffc9a71461029457806304634d8d146102d057806306fdde03146102f8578063081812fc14610322578063095ea7b31461035e57610292565b3661029257005b005b34801561029f575f80fd5b506102ba60048036038101906102b59190614115565b610ac1565b6040516102c7919061415a565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061420e565b610b31565b005b348015610303575f80fd5b5061030c610bcf565b60405161031991906142d6565b60405180910390f35b34801561032d575f80fd5b5061034860048036038101906103439190614329565b610c5e565b6040516103559190614363565b60405180910390f35b348015610369575f80fd5b50610384600480360381019061037f919061437c565b610ca0565b005b348015610391575f80fd5b5061039a610da8565b6040516103a79190614363565b60405180910390f35b3480156103bb575f80fd5b506103c4610dcd565b005b3480156103d1575f80fd5b506103da611234565b6040516103e791906143c9565b60405180910390f35b3480156103fb575f80fd5b50610416600480360381019061041191906143e2565b611244565b005b348015610423575f80fd5b5061043e60048036038101906104399190614432565b61129d565b60405161044c929190614470565b60405180910390f35b348015610460575f80fd5b5061047b60048036038101906104769190614329565b611479565b60405161048a9392919061455b565b60405180910390f35b34801561049e575f80fd5b506104b960048036038101906104b4919061459e565b6115d1565b6040516104c6919061415a565b60405180910390f35b3480156104da575f80fd5b506104f560048036038101906104f091906143e2565b611623565b005b348015610502575f80fd5b5061051d60048036038101906105189190614329565b611642565b005b34801561052a575f80fd5b50610533611697565b604051610540919061415a565b60405180910390f35b348015610554575f80fd5b5061056f600480360381019061056a9190614329565b6116a9565b60405161057c9190614363565b60405180910390f35b348015610590575f80fd5b506105ab60048036038101906105a69190614329565b61172d565b005b3480156105b8575f80fd5b506105d360048036038101906105ce919061459e565b611767565b6040516105e0919061415a565b60405180910390f35b3480156105f4575f80fd5b5061060f600480360381019061060a919061459e565b6117b9565b60405161061c91906143c9565b60405180910390f35b348015610630575f80fd5b5061063961186d565b005b348015610646575f80fd5b5061064f6119bc565b005b34801561065c575f80fd5b50610665611ba4565b60405161067291906145eb565b60405180910390f35b348015610686575f80fd5b5061068f611bbe565b60405161069c9190614363565b60405180910390f35b3480156106b0575f80fd5b506106b9611be4565b6040516106c691906142d6565b60405180910390f35b3480156106da575f80fd5b506106e3611c74565b6040516106f091906143c9565b60405180910390f35b348015610704575f80fd5b5061071f600480360381019061071a9190614730565b611c7a565b005b34801561072c575f80fd5b50610747600480360381019061074291906147a1565b611d16565b005b348015610754575f80fd5b5061076f600480360381019061076a91906147a1565b611d25565b005b34801561077c575f80fd5b50610797600480360381019061079291906148a3565b611e66565b005b3480156107a4575f80fd5b506107bf60048036038101906107ba919061499b565b611fd0565b005b3480156107cc575f80fd5b506107e760048036038101906107e29190614a1b565b61202b565b005b3480156107f4575f80fd5b5061080f600480360381019061080a9190614432565b612118565b005b34801561081c575f80fd5b5061083760048036038101906108329190614329565b612236565b60405161084491906142d6565b60405180910390f35b348015610858575f80fd5b50610873600480360381019061086e9190614730565b61229d565b005b348015610880575f80fd5b5061089b600480360381019061089691906148a3565b612340565b005b3480156108a8575f80fd5b506108c360048036038101906108be919061459e565b6124aa565b6040516108d0919061415a565b60405180910390f35b3480156108e4575f80fd5b506108ff60048036038101906108fa9190614a70565b6124c7565b005b34801561090c575f80fd5b5061092760048036038101906109229190614ad8565b612646565b005b348015610934575f80fd5b5061094f600480360381019061094a9190614b3c565b61277f565b005b34801561095c575f80fd5b506109656129a8565b60405161097291906142d6565b60405180910390f35b348015610986575f80fd5b506109a1600480360381019061099c9190614b96565b612a38565b6040516109ae919061415a565b60405180910390f35b3480156109c2575f80fd5b506109cb612ac6565b6040516109d891906145eb565b60405180910390f35b3480156109ec575f80fd5b506109f5612ae0565b604051610a0291906145eb565b60405180910390f35b348015610a16575f80fd5b50610a316004803603810190610a2c919061459e565b612afa565b005b348015610a3e575f80fd5b50610a596004803603810190610a54919061437c565b612c04565b005b348015610a66575f80fd5b50610a816004803603810190610a7c919061459e565b612e13565b604051610a8e9190614be3565b60405180910390f35b348015610aa2575f80fd5b50610aab612e66565b604051610ab891906145eb565b60405180910390f35b5f610acb82612e7f565b80610adb5750610ada82612f60565b5b80610b2a5750634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890614c46565b60405180910390fd5b610bcb8282612fd9565b5050565b60605f8054610bdd90614c91565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0990614c91565b8015610c545780601f10610c2b57610100808354040283529160200191610c54565b820191905f5260205f20905b815481529060010190602001808311610c3757829003601f168201915b5050505050905090565b5f610c6882613169565b60055f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610caa826116a9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1190614d31565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d5a5750610d598133612a38565b5b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090614dbf565b60405180910390fd5b610da383836131b4565b505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075f9054906101000a900460ff1615610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390614e27565b60405180910390fd5b600e60189054906101000a900467ffffffffffffffff1667ffffffffffffffff164210610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7590614eb5565b60405180910390fd5b600d543073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eee9190614ee7565b10610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614f5c565b60405180910390fd5b600160145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900461ffff1661ffff1610610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb690614fea565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490615078565b60405180910390fd5b60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81819054906101000a900461ffff1680929190611087906150c3565b91906101000a81548161ffff021916908361ffff16021790555050600e60109054906101000a900467ffffffffffffffff1667ffffffffffffffff164211156110d8576110d33361326a565b611232565b600e60089054906101000a900467ffffffffffffffff1667ffffffffffffffff164211801561115457506001151560135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b15611167576111623361326a565b611231565b600e5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16421180156111e257506001151560125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b156111f5576111f03361326a565b611230565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112279061515c565b60405180910390fd5b5b5b565b5f61123f600f61328a565b905090565b61124e3382613296565b61128d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611284906151ea565b60405180910390fd5b61129883838361332a565b505050565b5f805f600b5f8681526020019081526020015f206040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff160361142657600a6040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b5f61142f613616565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff168661145b9190615208565b6114659190615276565b9050815f0151819350935050509250929050565b60605f606061148784613169565b60115f8581526020019081526020015f205f0160115f8681526020019081526020015f206001015460115f8781526020019081526020015f206002018280546114cf90614c91565b80601f01602080910402602001604051908101604052809291908181526020018280546114fb90614c91565b80156115465780601f1061151d57610100808354040283529160200191611546565b820191905f5260205f20905b81548152906001019060200180831161152957829003601f168201915b50505050509250808054806020026020016040519081016040528092919081815260200182805480156115bd57602002820191905f5260205f20905f905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116115845790505b505050505090509250925092509193909250565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61163d83838360405180602001604052805f815250611fd0565b505050565b61164c3382613296565b61168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906151ea565b60405180910390fd5b6116948161361f565b50565b60075f9054906101000a900460ff1681565b5f806116b483613760565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b906152f0565b60405180910390fd5b80915050919050565b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78160405161175c91906143c9565b60405180910390a150565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f9061537e565b60405180910390fd5b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f490614c46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60075f9054906101000a900460ff1615611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290614e27565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a63575f80fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60109054906101000a900467ffffffffffffffff1681565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611bf390614c91565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1f90614c91565b8015611c6a5780601f10611c4157610100808354040283529160200191611c6a565b820191905f5260205f20905b815481529060010190602001808311611c4d57829003601f168201915b5050505050905090565b600d5481565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190614c46565b60405180910390fd5b611d1381613799565b50565b611d213383836137ac565b5050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90614c46565b60405180910390fd5b8015611e1557600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611e62565b60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549060ff02191690555b5050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f085750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3e9061540c565b60405180910390fd5b5f5b8251811015611fcb578160125f858481518110611f6957611f6861542a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050611f49565b505050565b611fda3383613296565b612019576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612010906151ea565b60405180910390fd5b61202584848484613913565b50505050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290614c46565b60405180910390fd5b8060075f6101000a81548160ff02191690831515021790555060075f9054906101000a900460ff1615612115577f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b50565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806121ba5750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f09061540c565b60405180910390fd5b7f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c828260405161222a929190615457565b60405180910390a15050565b606061224182613169565b5f6002805461224f90614c91565b90501161226a5760405180602001604052805f815250612296565b60026122758361396f565b60405160200161228692919061554a565b6040516020818303038152906040525b9050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614c46565b60405180910390fd5b80600c908161233c91906156f8565b5050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806123e25750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124189061540c565b60405180910390fd5b5f5b82518110156124a5578160135f8584815181106124435761244261542a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050612423565b505050565b6009602052805f5260405f205f915054906101000a900460ff1681565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125695750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6125a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259f9061540c565b60405180910390fd5b6125b182613169565b60115f8381526020019081526020015f2060020181908060018154018082558091505060019003905f5260205f2090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff1602179055507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161263a91906143c9565b60405180910390a15050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd90614c46565b60405180910390fd5b83600e5f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600e60086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555081600e60106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080600e60186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128215750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128579061540c565b60405180910390fd5b61286982613169565b6128736010613a39565b604051806060016040528082815260200161288e601061328a565b815260200160115f8581526020019081526020015f2060020180548060200260200160405190810160405280929190818152602001828054801561291657602002820191905f5260205f20905f905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116128dd5790505b505050505081525060115f8481526020019081526020015f205f820151815f01908161294291906156f8565b50602082015181600101556040820151816002019080519060200190612969929190613fed565b509050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161299c91906143c9565b60405180910390a15050565b6060600c80546129b790614c91565b80601f01602080910402602001604051908101604052809291908181526020018280546129e390614c91565b8015612a2e5780601f10612a0557610100808354040283529160200191612a2e565b820191905f5260205f20905b815481529060010190602001808311612a1157829003601f168201915b5050505050905090565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600e60189054906101000a900467ffffffffffffffff1681565b600e60089054906101000a900467ffffffffffffffff1681565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8190614c46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bc1575f80fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8b90614c46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d10573373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612d0a573d5f803e3d5ffd5b50612e0f565b5f8103612d92578173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612d509190614363565b602060405180830381865afa158015612d6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d8f9190614ee7565b90505b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612dcd929190614470565b6020604051808303815f875af1158015612de9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e0d91906157db565b505b5050565b5f60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900461ffff169050919050565b600e5f9054906101000a900467ffffffffffffffff1681565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f4957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612f595750612f5882613a4d565b5b9050919050565b5f7f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612fd25750612fd182612e7f565b5b9050919050565b612fe1613616565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111561303f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303690615876565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a4906158de565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600a5f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b61317281613ab6565b6131b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a8906152f0565b60405180910390fd5b50565b8160055f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16613224836116a9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b613274600f613a39565b61328781613282600f61328a565b613af6565b50565b5f815f01549050919050565b5f806132a1836116a9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806132e357506132e28185612a38565b5b8061332157508373ffffffffffffffffffffffffffffffffffffffff1661330984610c5e565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661334a826116a9565b73ffffffffffffffffffffffffffffffffffffffff16146133a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133979061596c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361340e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613405906159fa565b60405180910390fd5b61341b8383836001613d09565b8273ffffffffffffffffffffffffffffffffffffffff1661343b826116a9565b73ffffffffffffffffffffffffffffffffffffffff1614613491576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134889061596c565b60405180910390fd5b60055f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540392505081905550600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136118383836001613d0f565b505050565b5f612710905090565b5f613629826116a9565b9050613638815f846001613d09565b613641826116a9565b905060055f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254039250508190555060035f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461375c815f846001613d0f565b5050565b5f60035f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80600290816137a891906156f8565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361381a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381190615a62565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613906919061415a565b60405180910390a3505050565b61391e84848461332a565b61392a84848484613d15565b613969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396090615af0565b60405180910390fd5b50505050565b60605f600161397d84613e7a565b0190505f8167ffffffffffffffff81111561399b5761399a61460c565b5b6040519080825280601f01601f1916602001820160405280156139cd5781602001600182028036833780820191505090505b5090505f82602001820190505b600115613a2e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581613a2357613a22615249565b5b0494505f85036139da575b819350505050919050565b6001815f015f828254019250508190555050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff16613ad783613760565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5b90615b58565b60405180910390fd5b613b6d81613ab6565b15613bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba490615bc0565b60405180910390fd5b613bba5f83836001613d09565b613bc381613ab6565b15613c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bfa90615bc0565b60405180910390fd5b600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613d055f83836001613d0f565b5050565b50505050565b50505050565b5f613d1f84613fcb565b15613e6d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401613d639493929190615c30565b6020604051808303815f875af1925050508015613d9e57506040513d601f19601f82011682018060405250810190613d9b9190615c8e565b60015b613e1d573d805f8114613dcc576040519150601f19603f3d011682016040523d82523d5f602084013e613dd1565b606091505b505f815103613e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e0c90615af0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613e72565b600190505b949350505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613ed6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613ecc57613ecb615249565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613f13576d04ee2d6d415b85acef81000000008381613f0957613f08615249565b5b0492506020810190505b662386f26fc100008310613f4257662386f26fc100008381613f3857613f37615249565b5b0492506010810190505b6305f5e1008310613f6b576305f5e1008381613f6157613f60615249565b5b0492506008810190505b6127108310613f90576127108381613f8657613f85615249565b5b0492506004810190505b60648310613fb35760648381613fa957613fa8615249565b5b0492506002810190505b600a8310613fc2576001810190505b80915050919050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054828255905f5260205f2090600f01601090048101928215614083579160200282015f5b8382111561405357835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302614013565b80156140815782816101000a81549061ffff0219169055600201602081600101049283019260010302614053565b505b5090506140909190614094565b5090565b5b808211156140ab575f815f905550600101614095565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6140f4816140c0565b81146140fe575f80fd5b50565b5f8135905061410f816140eb565b92915050565b5f6020828403121561412a576141296140b8565b5b5f61413784828501614101565b91505092915050565b5f8115159050919050565b61415481614140565b82525050565b5f60208201905061416d5f83018461414b565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61419c82614173565b9050919050565b6141ac81614192565b81146141b6575f80fd5b50565b5f813590506141c7816141a3565b92915050565b5f6bffffffffffffffffffffffff82169050919050565b6141ed816141cd565b81146141f7575f80fd5b50565b5f81359050614208816141e4565b92915050565b5f8060408385031215614224576142236140b8565b5b5f614231858286016141b9565b9250506020614242858286016141fa565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614283578082015181840152602081019050614268565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6142a88261424c565b6142b28185614256565b93506142c2818560208601614266565b6142cb8161428e565b840191505092915050565b5f6020820190508181035f8301526142ee818461429e565b905092915050565b5f819050919050565b614308816142f6565b8114614312575f80fd5b50565b5f81359050614323816142ff565b92915050565b5f6020828403121561433e5761433d6140b8565b5b5f61434b84828501614315565b91505092915050565b61435d81614192565b82525050565b5f6020820190506143765f830184614354565b92915050565b5f8060408385031215614392576143916140b8565b5b5f61439f858286016141b9565b92505060206143b085828601614315565b9150509250929050565b6143c3816142f6565b82525050565b5f6020820190506143dc5f8301846143ba565b92915050565b5f805f606084860312156143f9576143f86140b8565b5b5f614406868287016141b9565b9350506020614417868287016141b9565b925050604061442886828701614315565b9150509250925092565b5f8060408385031215614448576144476140b8565b5b5f61445585828601614315565b925050602061446685828601614315565b9150509250929050565b5f6040820190506144835f830185614354565b61449060208301846143ba565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61ffff82169050919050565b6144d6816144c0565b82525050565b5f6144e783836144cd565b60208301905092915050565b5f602082019050919050565b5f61450982614497565b61451381856144a1565b935061451e836144b1565b805f5b8381101561454e57815161453588826144dc565b9750614540836144f3565b925050600181019050614521565b5085935050505092915050565b5f6060820190508181035f830152614573818661429e565b905061458260208301856143ba565b818103604083015261459481846144ff565b9050949350505050565b5f602082840312156145b3576145b26140b8565b5b5f6145c0848285016141b9565b91505092915050565b5f67ffffffffffffffff82169050919050565b6145e5816145c9565b82525050565b5f6020820190506145fe5f8301846145dc565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6146428261428e565b810181811067ffffffffffffffff821117156146615761466061460c565b5b80604052505050565b5f6146736140af565b905061467f8282614639565b919050565b5f67ffffffffffffffff82111561469e5761469d61460c565b5b6146a78261428e565b9050602081019050919050565b828183375f83830152505050565b5f6146d46146cf84614684565b61466a565b9050828152602081018484840111156146f0576146ef614608565b5b6146fb8482856146b4565b509392505050565b5f82601f83011261471757614716614604565b5b81356147278482602086016146c2565b91505092915050565b5f60208284031215614745576147446140b8565b5b5f82013567ffffffffffffffff811115614762576147616140bc565b5b61476e84828501614703565b91505092915050565b61478081614140565b811461478a575f80fd5b50565b5f8135905061479b81614777565b92915050565b5f80604083850312156147b7576147b66140b8565b5b5f6147c4858286016141b9565b92505060206147d58582860161478d565b9150509250929050565b5f67ffffffffffffffff8211156147f9576147f861460c565b5b602082029050602081019050919050565b5f80fd5b5f61482061481b846147df565b61466a565b905080838252602082019050602084028301858111156148435761484261480a565b5b835b8181101561486c578061485888826141b9565b845260208401935050602081019050614845565b5050509392505050565b5f82601f83011261488a57614889614604565b5b813561489a84826020860161480e565b91505092915050565b5f80604083850312156148b9576148b86140b8565b5b5f83013567ffffffffffffffff8111156148d6576148d56140bc565b5b6148e285828601614876565b92505060206148f38582860161478d565b9150509250929050565b5f67ffffffffffffffff8211156149175761491661460c565b5b6149208261428e565b9050602081019050919050565b5f61493f61493a846148fd565b61466a565b90508281526020810184848401111561495b5761495a614608565b5b6149668482856146b4565b509392505050565b5f82601f83011261498257614981614604565b5b813561499284826020860161492d565b91505092915050565b5f805f80608085870312156149b3576149b26140b8565b5b5f6149c0878288016141b9565b94505060206149d1878288016141b9565b93505060406149e287828801614315565b925050606085013567ffffffffffffffff811115614a0357614a026140bc565b5b614a0f8782880161496e565b91505092959194509250565b5f60208284031215614a3057614a2f6140b8565b5b5f614a3d8482850161478d565b91505092915050565b614a4f816144c0565b8114614a59575f80fd5b50565b5f81359050614a6a81614a46565b92915050565b5f8060408385031215614a8657614a856140b8565b5b5f614a9385828601614315565b9250506020614aa485828601614a5c565b9150509250929050565b614ab7816145c9565b8114614ac1575f80fd5b50565b5f81359050614ad281614aae565b92915050565b5f805f8060808587031215614af057614aef6140b8565b5b5f614afd87828801614ac4565b9450506020614b0e87828801614ac4565b9350506040614b1f87828801614ac4565b9250506060614b3087828801614ac4565b91505092959194509250565b5f8060408385031215614b5257614b516140b8565b5b5f614b5f85828601614315565b925050602083013567ffffffffffffffff811115614b8057614b7f6140bc565b5b614b8c85828601614703565b9150509250929050565b5f8060408385031215614bac57614bab6140b8565b5b5f614bb9858286016141b9565b9250506020614bca858286016141b9565b9150509250929050565b614bdd816144c0565b82525050565b5f602082019050614bf65f830184614bd4565b92915050565b7f63616c6c6572206973206e6f7420616e206f776e6572000000000000000000005f82015250565b5f614c30601683614256565b9150614c3b82614bfc565b602082019050919050565b5f6020820190508181035f830152614c5d81614c24565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614ca857607f821691505b602082108103614cbb57614cba614c64565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f614d1b602183614256565b9150614d2682614cc1565b604082019050919050565b5f6020820190508181035f830152614d4881614d0f565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f5f8201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b5f614da9603d83614256565b9150614db482614d4f565b604082019050919050565b5f6020820190508181035f830152614dd681614d9d565b9050919050565b7f636f6e74726163742069732070617573656400000000000000000000000000005f82015250565b5f614e11601283614256565b9150614e1c82614ddd565b602082019050919050565b5f6020820190508181035f830152614e3e81614e05565b9050919050565b7f436974697a656e5a65726f3a204d696e742068617320616c726561647920656e5f8201527f6465642100000000000000000000000000000000000000000000000000000000602082015250565b5f614e9f602483614256565b9150614eaa82614e45565b604082019050919050565b5f6020820190508181035f830152614ecc81614e93565b9050919050565b5f81519050614ee1816142ff565b92915050565b5f60208284031215614efc57614efb6140b8565b5b5f614f0984828501614ed3565b91505092915050565b7f436974697a656e5a65726f3a204d696e74206c696d69742072656163686564215f82015250565b5f614f46602083614256565b9150614f5182614f12565b602082019050919050565b5f6020820190508181035f830152614f7381614f3a565b9050919050565b7f436974697a656e5a65726f3a204d696e74206c696d697420616c7265616479205f8201527f7265616368656420666f7220746869732077616c6c6574210000000000000000602082015250565b5f614fd4603883614256565b9150614fdf82614f7a565b604082019050919050565b5f6020820190508181035f83015261500181614fc8565b9050919050565b7f436974697a656e5a65726f3a204d696e7420697320616c6c6f776564206f6e6c5f8201527f7920666f722077616c6c65747321000000000000000000000000000000000000602082015250565b5f615062602e83614256565b915061506d82615008565b604082019050919050565b5f6020820190508181035f83015261508f81615056565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6150cd826144c0565b915061ffff82036150e1576150e0615096565b5b600182019050919050565b7f436974697a656e5a65726f3a20596f7520617265206e6f7420656c696769626c5f8201527f6520666f72206d696e7421000000000000000000000000000000000000000000602082015250565b5f615146602b83614256565b9150615151826150ec565b604082019050919050565b5f6020820190508181035f8301526151738161513a565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e655f8201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b5f6151d4602d83614256565b91506151df8261517a565b604082019050919050565b5f6020820190508181035f830152615201816151c8565b9050919050565b5f615212826142f6565b915061521d836142f6565b925082820261522b816142f6565b9150828204841483151761524257615241615096565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f615280826142f6565b915061528b836142f6565b92508261529b5761529a615249565b5b828204905092915050565b7f4552433732313a20696e76616c696420746f6b656e20494400000000000000005f82015250565b5f6152da601883614256565b91506152e5826152a6565b602082019050919050565b5f6020820190508181035f830152615307816152ce565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f7420612076615f8201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b5f615368602983614256565b91506153738261530e565b604082019050919050565b5f6020820190508181035f8301526153958161535c565b9050919050565b7f63616c6c6572206973206e6f7420616e20617574686f72697a656420757365725f8201527f206f7220616e206f776e65720000000000000000000000000000000000000000602082015250565b5f6153f6602c83614256565b91506154018261539c565b604082019050919050565b5f6020820190508181035f830152615423816153ea565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60408201905061546a5f8301856143ba565b61547760208301846143ba565b9392505050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f81546154a681614c91565b6154b0818661547e565b9450600182165f81146154ca57600181146154df57615511565b60ff1983168652811515820286019350615511565b6154e885615488565b5f5b83811015615509578154818901526001820191506020810190506154ea565b838801955050505b50505092915050565b5f6155248261424c565b61552e818561547e565b935061553e818560208601614266565b80840191505092915050565b5f615555828561549a565b9150615561828461551a565b91508190509392505050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026155b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261557c565b6155c1868361557c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6155fc6155f76155f2846142f6565b6155d9565b6142f6565b9050919050565b5f819050919050565b615615836155e2565b61562961562182615603565b848454615588565b825550505050565b5f90565b61563d615631565b61564881848461560c565b505050565b5b8181101561566b576156605f82615635565b60018101905061564e565b5050565b601f8211156156b05761568181615488565b61568a8461556d565b81016020851015615699578190505b6156ad6156a58561556d565b83018261564d565b50505b505050565b5f82821c905092915050565b5f6156d05f19846008026156b5565b1980831691505092915050565b5f6156e883836156c1565b9150826002028217905092915050565b6157018261424c565b67ffffffffffffffff81111561571a5761571961460c565b5b6157248254614c91565b61572f82828561566f565b5f60209050601f831160018114615760575f841561574e578287015190505b61575885826156dd565b8655506157bf565b601f19841661576e86615488565b5f5b8281101561579557848901518255600182019150602085019450602081019050615770565b868310156157b257848901516157ae601f8916826156c1565b8355505b6001600288020188555050505b505050505050565b5f815190506157d581614777565b92915050565b5f602082840312156157f0576157ef6140b8565b5b5f6157fd848285016157c7565b91505092915050565b7f455243323938313a20726f79616c7479206665652077696c6c206578636565645f8201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b5f615860602a83614256565b915061586b82615806565b604082019050919050565b5f6020820190508181035f83015261588d81615854565b9050919050565b7f455243323938313a20696e76616c6964207265636569766572000000000000005f82015250565b5f6158c8601983614256565b91506158d382615894565b602082019050919050565b5f6020820190508181035f8301526158f5816158bc565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f7272656374205f8201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b5f615956602583614256565b9150615961826158fc565b604082019050919050565b5f6020820190508181035f8301526159838161594a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6159e4602483614256565b91506159ef8261598a565b604082019050919050565b5f6020820190508181035f830152615a11816159d8565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f615a4c601983614256565b9150615a5782615a18565b602082019050919050565b5f6020820190508181035f830152615a7981615a40565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f615ada603283614256565b9150615ae582615a80565b604082019050919050565b5f6020820190508181035f830152615b0781615ace565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f615b42602083614256565b9150615b4d82615b0e565b602082019050919050565b5f6020820190508181035f830152615b6f81615b36565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f615baa601c83614256565b9150615bb582615b76565b602082019050919050565b5f6020820190508181035f830152615bd781615b9e565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f615c0282615bde565b615c0c8185615be8565b9350615c1c818560208601614266565b615c258161428e565b840191505092915050565b5f608082019050615c435f830187614354565b615c506020830186614354565b615c5d60408301856143ba565b8181036060830152615c6f8184615bf8565b905095945050505050565b5f81519050615c88816140eb565b92915050565b5f60208284031215615ca357615ca26140b8565b5b5f615cb084828501615c7a565b9150509291505056fea2646970667358221220651d214871294d907a5d0ee78e5ef765d47df9fa24d45822a764a4dfb671b46a64736f6c63430008160033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000065c0e9e00000000000000000000000000000000000000000000000000000000065c122200000000000000000000000000000000000000000000000000000000065c15a600000000000000000000000000000000000000000000000000000000065c1767f00000000000000000000000000000000000000000000000000000000000008ae00000000000000000000000006973fe88cc9a96c6f5eaf9da50f6a39495aa6ca0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000c436974697a656e205a65726f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343545a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004868747470733a2f2f716170692e716f72706f2e776f726c642f6170692f76312f7075626c69632d626c6f636b636861696e2d646174612f6e66742f636974697a656e2d7a65726f2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f6d657461646174612e716f72706f2e776f726c642f63632f636974697a656e5f7a65726f2e6a736f6e000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Citizen Zero
Arg [1] : symbol_ (string): CTZ
Arg [2] : baseURI_ (string): https://qapi.qorpo.world/api/v1/public-blockchain-data/nft/citizen-zero/
Arg [3] : contractURI_ (string): https://metadata.qorpo.world/cc/citizen_zero.json
Arg [4] : whitelistMintStart_ (uint64): 1707141600
Arg [5] : fcfsMintStart_ (uint64): 1707156000
Arg [6] : publicMintStart_ (uint64): 1707170400
Arg [7] : mintEnd_ (uint64): 1707177599
Arg [8] : mintLimit_ (uint256): 2222
Arg [9] : royaltyReceiver_ (address): 0x06973fE88cC9a96C6F5eAf9da50f6A39495Aa6Ca
Arg [10] : royaltyFeeNumerator_ (uint96): 50

-----Encoded View---------------
22 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [4] : 0000000000000000000000000000000000000000000000000000000065c0e9e0
Arg [5] : 0000000000000000000000000000000000000000000000000000000065c12220
Arg [6] : 0000000000000000000000000000000000000000000000000000000065c15a60
Arg [7] : 0000000000000000000000000000000000000000000000000000000065c1767f
Arg [8] : 00000000000000000000000000000000000000000000000000000000000008ae
Arg [9] : 00000000000000000000000006973fe88cc9a96c6f5eaf9da50f6a39495aa6ca
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [11] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [12] : 436974697a656e205a65726f0000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [14] : 43545a0000000000000000000000000000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000048
Arg [16] : 68747470733a2f2f716170692e716f72706f2e776f726c642f6170692f76312f
Arg [17] : 7075626c69632d626c6f636b636861696e2d646174612f6e66742f636974697a
Arg [18] : 656e2d7a65726f2f000000000000000000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000031
Arg [20] : 68747470733a2f2f6d657461646174612e716f72706f2e776f726c642f63632f
Arg [21] : 636974697a656e5f7a65726f2e6a736f6e000000000000000000000000000000


Deployed Bytecode Sourcemap

37316:7255:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38855:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39514:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29255:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30207:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29787:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;837:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42734:1117;;;;;;;;;;;;;:::i;:::-;;40578:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30851:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24197:501;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;42122:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;43859:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31229:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40822:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;777:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28974:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39411:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43979:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28672:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1751:146;;;;;;;;;;;;;:::i;:::-;;2066:240;;;;;;;;;;;;;:::i;:::-;;37573:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;810:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29354:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37469:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40250:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30436:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2314:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39689:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31422:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2589:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39211:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29457:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40352:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39983:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;875:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41054:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41765:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41331:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40473:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30629:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37609:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37539:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1905:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44087:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40698:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37500:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38855:348;39011:4;39053:37;39078:11;39053:24;:37::i;:::-;:92;;;;39107:38;39133:11;39107:25;:38::i;:::-;39053:92;:142;;;;39184:10;39177:18;;39162:33;;;:11;:33;;;;39053:142;39033:162;;38855:348;;;:::o;39514:167::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;39631:42:::1;39650:8;39660:12;39631:18;:42::i;:::-;39514:167:::0;;:::o;29255:91::-;29300:13;29333:5;29326:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29255:91;:::o;30207:221::-;30328:7;30353:23;30368:7;30353:14;:23::i;:::-;30396:15;:24;30412:7;30396:24;;;;;;;;;;;;;;;;;;;;;30389:31;;30207:221;;;:::o;29787:412::-;29868:13;29884:23;29899:7;29884:14;:23::i;:::-;29868:39;;29932:5;29926:11;;:2;:11;;;29918:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30024:5;30010:19;;:10;:19;;;:58;;;;30033:35;30050:5;30057:10;30033:16;:35::i;:::-;30010:58;29988:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;30170:21;30179:2;30183:7;30170:8;:21::i;:::-;29857:342;29787:412;;:::o;837:31::-;;;;;;;;;;;;;:::o;42734:1117::-;1174:6;;;;;;;;;;;1173:7;1165:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;42820:7:::1;;;;;;;;;;;42802:25;;:15;:25;42780:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;42945:9;;42924:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;42902:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;43075:1;43047:13;:25;43061:10;43047:25;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;43025:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;43207:9;43193:23;;:10;:23;;;43171:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;43301:13;:25;43315:10;43301:25;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;43361:15;;;;;;;;;;;43343:33;;:15;:33;43339:505;;;43393:28;43410:10;43393:16;:28::i;:::-;43339:505;;;43475:13;;;;;;;;;;;43457:31;;:15;:31;:60;;;;;43513:4;43492:25;;:5;:17;43498:10;43492:17;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;43457:60;43439:405;;;43544:28;43561:10;43544:16;:28::i;:::-;43439:405;;;43626:18;;;;;;;;;;;43608:36;;:15;:36;:83;;;;;43687:4;43661:30;;:10;:22;43672:10;43661:22;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;43608:83;43590:254;;;43718:28;43735:10;43718:16;:28::i;:::-;43590:254;;;43779:53;;;;;;;;;;:::i;:::-;;;;;;;;43590:254;43439:405;43339:505;42734:1117::o:0;40578:112::-;40630:7;40657:25;:15;:23;:25::i;:::-;40650:32;;40578:112;:::o;30851:370::-;31060:39;31079:10;31091:7;31060:18;:39::i;:::-;31038:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;31185:28;31195:4;31201:2;31205:7;31185:9;:28::i;:::-;30851:370;;;:::o;24197:501::-;24337:7;24346;24371:26;24400:17;:26;24418:7;24400:26;;;;;;;;;;;24371:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24471:1;24443:30;;:7;:16;;;:30;;;24439:92;;24500:19;24490:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24439:92;24543:21;24620:17;:15;:17::i;:::-;24567:70;;24580:7;:23;;;24568:35;;:9;:35;;;;:::i;:::-;24567:70;;;;:::i;:::-;24543:94;;24658:7;:16;;;24676:13;24650:40;;;;;;24197:501;;;;;:::o;42122:456::-;42229:26;42270:19;42304:28;42360:23;42375:7;42360:14;:23::i;:::-;42416:16;:25;42433:7;42416:25;;;;;;;;;;;:38;;42469:16;:25;42486:7;42469:25;;;;;;;;;;;:37;;;42521:16;:25;42538:7;42521:25;;;;;;;;;;;:38;;42394:176;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42122:456;;;;;:::o;43859:112::-;43920:4;43944:10;:19;43955:7;43944:19;;;;;;;;;;;;;;;;;;;;;;;;;43937:26;;43859:112;;;:::o;31229:185::-;31367:39;31384:4;31390:2;31394:7;31367:39;;;;;;;;;;;;:16;:39::i;:::-;31229:185;;;:::o;40822:224::-;40901:39;40920:10;40932:7;40901:18;:39::i;:::-;40879:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;41024:14;41030:7;41024:5;:14::i;:::-;40822:224;:::o;777:26::-;;;;;;;;;;;;;:::o;28974:273::-;29091:7;29116:13;29132:17;29141:7;29132:8;:17::i;:::-;29116:33;;29185:1;29168:19;;:5;:19;;;29160:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29234:5;29227:12;;;28974:273;;;:::o;39411:95::-;39475:23;39490:7;39475:23;;;;;;:::i;:::-;;;;;;;;39411:95;:::o;43979:100::-;44033:4;44057:5;:14;44063:7;44057:14;;;;;;;;;;;;;;;;;;;;;;;;;44050:21;;43979:100;;;:::o;28672:294::-;28789:7;28853:1;28836:19;;:5;:19;;;28814:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;28942:9;:16;28952:5;28942:16;;;;;;;;;;;;;;;;28935:23;;28672:294;;;:::o;1751:146::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;1857:1:::1;1821:39;;1842:5;;;;;;;;;;;1821:39;;;;;;;;;;;;1887:1;1871:5;;:18;;;;;;;;;;;;;;;;;;1751:146::o:0;2066:240::-;1174:6;;;;;;;;;;;1173:7;1165:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2145:16:::1;;;;;;;;;;;2131:30;;:10;:30;;;2123:39;;;::::0;::::1;;2206:16;;;;;;;;;;;2178:45;;2199:5;;;;;;;;;;;2178:45;;;;;;;;;;;;2242:16;;;;;;;;;;;2234:5;;:24;;;;;;;;;;;;;;;;;;2296:1;2269:16;;:29;;;;;;;;;;;;;;;;;;2066:240::o:0;37573:29::-;;;;;;;;;;;;;:::o;810:20::-;;;;;;;;;;;;;:::o;29354:95::-;29401:13;29434:7;29427:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29354:95;:::o;37469:24::-;;;;:::o;40250:94::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;40317:19:::1;40328:7;40317:10;:19::i;:::-;40250:94:::0;:::o;30436:185::-;30563:50;30582:10;30594:8;30604;30563:18;:50::i;:::-;30436:185;;:::o;2314:267::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;2430:8:::1;2426:148;;;2488:4;2455:19;:30;2475:9;2455:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;2426:148;;;2532:19;:30;2552:9;2532:30;;;;;;;;;;;;;;;;2525:37;;;;;;;;;;;2426:148;2314:267:::0;;:::o;39689:286::-;1597:19;:31;1617:10;1597:31;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;1646:5;;;;;;;;;;;1632:19;;:10;:19;;;1597:54;1575:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;39846:9:::1;39841:127;39865:18;:25;39861:1;:29;39841:127;;;39948:8;39912:10;:33;39923:18;39942:1;39923:21;;;;;;;;:::i;:::-;;;;;;;;39912:33;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;39892:3;;;;;39841:127;;;;39689:286:::0;;:::o;31422:357::-;31610:39;31629:10;31641:7;31610:18;:39::i;:::-;31588:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;31733:38;31747:4;31753:2;31757:7;31766:4;31733:13;:38::i;:::-;31422:357;;;;:::o;2589:145::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;2658:7:::1;2649:6;;:16;;;;;;;;;;;;;;;;;;2680:6;;;;;;;;;;;2676:51;;;2708:7;;;;;;;;;;2676:51;2589:145:::0;:::o;39211:192::-;1597:19;:31;1617:10;1597:31;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;1646:5;;;;;;;;;;;1632:19;;:10;:19;;;1597:54;1575:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;39352:43:::1;39372:11;39385:9;39352:43;;;;;;;:::i;:::-;;;;;;;;39211:192:::0;;:::o;29457:322::-;29557:13;29588:23;29603:7;29588:14;:23::i;:::-;29667:1;29648:8;29642:22;;;;;:::i;:::-;;;:26;:129;;;;;;;;;;;;;;;;;29712:8;29722:25;29739:7;29722:16;:25::i;:::-;29695:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29642:129;29622:149;;29457:322;;;:::o;40352:113::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;40446:11:::1;40431:12;:26;;;;;;:::i;:::-;;40352:113:::0;:::o;39983:259::-;1597:19;:31;1617:10;1597:31;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;1646:5;;;;;;;;;;;1632:19;;:10;:19;;;1597:54;1575:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;40128:9:::1;40123:112;40147:13;:20;40143:1;:24;40123:112;;;40215:8;40189:5;:23;40195:13;40209:1;40195:16;;;;;;;;:::i;:::-;;;;;;;;40189:23;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;40169:3;;;;;40123:112;;;;39983:259:::0;;:::o;875:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;41054:269::-;1597:19;:31;1617:10;1597:31;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;1646:5;;;;;;;;;;;1632:19;;:10;:19;;;1597:54;1575:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;41184:23:::1;41199:7;41184:14;:23::i;:::-;41218:16;:25;41235:7;41218:25;;;;;;;;;;;:38;;41262:13;41218:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41292:23;41307:7;41292:23;;;;;;:::i;:::-;;;;;;;;41054:269:::0;;:::o;41765:349::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;41972:19:::1;41951:18;;:40;;;;;;;;;;;;;;;;;;42018:14;42002:13;;:30;;;;;;;;;;;;;;;;;;42061:16;42043:15;;:34;;;;;;;;;;;;;;;;;;42098:8;42088:7;;:18;;;;;;;;;;;;;;;;;;41765:349:::0;;;;:::o;41331:426::-;1597:19;:31;1617:10;1597:31;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;1646:5;;;;;;;;;;;1632:19;;:10;:19;;;1597:54;1575:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;41468:23:::1;41483:7;41468:14;:23::i;:::-;41502:25;:13;:23;:25::i;:::-;41566:144;;;;;;;;41596:12;41566:144;;;;41623:23;:13;:21;:23::i;:::-;41566:144;;;;41661:16;:25;41678:7;41661:25;;;;;;;;;;;:38;;41566:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;41538:16:::1;:25;41555:7;41538:25;;;;;;;;;;;:172;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;41726:23;41741:7;41726:23;;;;;;:::i;:::-;;;;;;;;41331:426:::0;;:::o;40473:97::-;40517:13;40550:12;40543:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40473:97;:::o;30629:214::-;30771:4;30800:18;:25;30819:5;30800:25;;;;;;;;;;;;;;;:35;30826:8;30800:35;;;;;;;;;;;;;;;;;;;;;;;;;30793:42;;30629:214;;;;:::o;37609:21::-;;;;;;;;;;;;;:::o;37539:27::-;;;;;;;;;;;;;:::o;1905:153::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;2008:1:::1;1987:23;;:9;:23;;::::0;1979:32:::1;;;::::0;::::1;;2041:9;2022:16;;:28;;;;;;;;;;;;;;;;;;1905:153:::0;:::o;44087:406::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;44228:1:::1;44201:29;;:15;:29;;::::0;44197:289:::1;;44255:10;44247:28;;:36;44276:6;44247:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44197:289;;;44330:1;44320:6;:11:::0;44316:91:::1;;44366:15;44359:33;;;44401:4;44359:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44350:57;;44316:91;44429:15;44422:32;;;44455:10;44467:6;44422:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44197:289;44087:406:::0;;:::o;40698:116::-;40758:6;40784:13;:22;40798:7;40784:22;;;;;;;;;;;;;;;;;;;;;;;;;40777:29;;40698:116;;;:::o;37500:32::-;;;;;;;;;;;;;:::o;28204:355::-;28351:4;28408:25;28393:40;;;:11;:40;;;;:105;;;;28465:33;28450:48;;;:11;:48;;;;28393:105;:158;;;;28515:36;28539:11;28515:23;:36::i;:::-;28393:158;28373:178;;28204:355;;;:::o;23898:291::-;24045:4;24102:26;24087:41;;;:11;:41;;;;:94;;;;24145:36;24169:11;24145:23;:36::i;:::-;24087:94;24067:114;;23898:291;;;:::o;24811:392::-;24967:17;:15;:17::i;:::-;24951:33;;:12;:33;;;;24929:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;25093:1;25073:22;;:8;:22;;;25065:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25160:35;;;;;;;;25172:8;25160:35;;;;;;25182:12;25160:35;;;;;25138:19;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24811:392;;:::o;35534:135::-;35616:16;35624:7;35616;:16::i;:::-;35608:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;35534:135;:::o;35029:174::-;35131:2;35104:15;:24;35120:7;35104:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35187:7;35183:2;35149:46;;35158:23;35173:7;35158:14;:23::i;:::-;35149:46;;;;;;;;;;;;35029:174;;:::o;42586:140::-;42644:27;:15;:25;:27::i;:::-;42682:36;42688:2;42692:25;:15;:23;:25::i;:::-;42682:5;:36::i;:::-;42586:140;:::o;149:114::-;214:7;241;:14;;;234:21;;149:114;;;:::o;32406:331::-;32535:4;32557:13;32573:23;32588:7;32573:14;:23::i;:::-;32557:39;;32626:5;32615:16;;:7;:16;;;:65;;;;32648:32;32665:5;32672:7;32648:16;:32::i;:::-;32615:65;:113;;;;32721:7;32697:31;;:20;32709:7;32697:11;:20::i;:::-;:31;;;32615:113;32607:122;;;32406:331;;;;:::o;34236:785::-;34409:4;34382:31;;:23;34397:7;34382:14;:23::i;:::-;:31;;;34360:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;34511:1;34497:16;;:2;:16;;;34489:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34567:42;34588:4;34594:2;34598:7;34607:1;34567:20;:42::i;:::-;34669:4;34642:31;;:23;34657:7;34642:14;:23::i;:::-;:31;;;34620:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;34756:15;:24;34772:7;34756:24;;;;;;;;;;;;34749:31;;;;;;;;;;;34837:1;34818:9;:15;34828:4;34818:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;34870:1;34853:9;:13;34863:2;34853:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;34912:2;34893:7;:16;34901:7;34893:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34951:7;34947:2;34932:27;;34941:4;34932:27;;;;;;;;;;;;34972:41;34992:4;34998:2;35002:7;35011:1;34972:19;:41::i;:::-;34236:785;;;:::o;24706:97::-;24764:6;24790:5;24783:12;;24706:97;:::o;33752:476::-;33812:13;33828:23;33843:7;33828:14;:23::i;:::-;33812:39;;33864:51;33885:5;33900:1;33904:7;33913:1;33864:20;:51::i;:::-;33934:23;33949:7;33934:14;:23::i;:::-;33926:31;;33975:15;:24;33991:7;33975:24;;;;;;;;;;;;33968:31;;;;;;;;;;;34057:1;34037:9;:16;34047:5;34037:16;;;;;;;;;;;;;;;;:21;;;;;;;;;;;34087:7;:16;34095:7;34087:16;;;;;;;;;;;;34080:23;;;;;;;;;;;34149:7;34145:1;34121:36;;34130:5;34121:36;;;;;;;;;;;;34170:50;34190:5;34205:1;34209:7;34218:1;34170:19;:50::i;:::-;33801:427;33752:476;:::o;32145:117::-;32211:7;32238;:16;32246:7;32238:16;;;;;;;;;;;;;;;;;;;;;32231:23;;32145:117;;;:::o;28567:97::-;28649:7;28638:8;:18;;;;;;:::i;:::-;;28567:97;:::o;35211:315::-;35366:8;35357:17;;:5;:17;;;35349:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35453:8;35415:18;:25;35434:5;35415:25;;;;;;;;;;;;;;;:35;35441:8;35415:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35499:8;35477:41;;35492:5;35477:41;;;35509:8;35477:41;;;;;;:::i;:::-;;;;;;;;35211:315;;;:::o;31787:350::-;31943:28;31953:4;31959:2;31963:7;31943:9;:28::i;:::-;32004:47;32027:4;32033:2;32037:7;32046:4;32004:22;:47::i;:::-;31982:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;31787:350;;;;:::o;20304:716::-;20360:13;20411:14;20448:1;20428:17;20439:5;20428:10;:17::i;:::-;:21;20411:38;;20464:20;20498:6;20487:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20464:41;;20520:11;20649:6;20645:2;20641:15;20633:6;20629:28;20622:35;;20686:288;20693:4;20686:288;;;20718:5;;;;;;;;20860:8;20855:2;20848:5;20844:14;20839:30;20834:3;20826:44;20916:2;20907:11;;;;;;:::i;:::-;;;;;20950:1;20941:5;:10;20686:288;20937:21;20686:288;20995:6;20988:13;;;;;20304:716;;;:::o;271:127::-;378:1;360:7;:14;;;:19;;;;;;;;;;;271:127;:::o;23424:207::-;23554:4;23598:25;23583:40;;;:11;:40;;;;23576:47;;23424:207;;;:::o;32270:128::-;32335:4;32388:1;32359:31;;:17;32368:7;32359:8;:17::i;:::-;:31;;;;32352:38;;32270:128;;;:::o;33190:554::-;33284:1;33270:16;;:2;:16;;;33262:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33343:16;33351:7;33343;:16::i;:::-;33342:17;33334:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33405:48;33434:1;33438:2;33442:7;33451:1;33405:20;:48::i;:::-;33475:16;33483:7;33475;:16::i;:::-;33474:17;33466:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33579:1;33562:9;:13;33572:2;33562:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;33623:2;33604:7;:16;33612:7;33604:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33668:7;33664:2;33643:33;;33660:1;33643:33;;;;;;;;;;;;33689:47;33717:1;33721:2;33725:7;33734:1;33689:19;:47::i;:::-;33190:554;;:::o;36716:159::-;;;;;:::o;36883:158::-;;;;;:::o;35677:1031::-;35831:4;35852:14;35863:2;35852:10;:14::i;:::-;35848:853;;;35920:2;35904:36;;;35963:10;35996:4;36023:7;36053:4;35904:172;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35883:763;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36276:1;36259:6;:13;:18;36255:376;;36302:108;;;;;;;;;;:::i;:::-;;;;;;;;36255:376;36581:6;36575:13;36566:6;36562:2;36558:15;36551:38;35883:763;36150:41;;;36140:51;;;:6;:51;;;;36133:58;;;;;35848:853;36685:4;36678:11;;35677:1031;;;;;;;:::o;17230:922::-;17283:7;17303:14;17320:1;17303:18;;17370:6;17361:5;:15;17357:102;;17406:6;17397:15;;;;;;:::i;:::-;;;;;17441:2;17431:12;;;;17357:102;17486:6;17477:5;:15;17473:102;;17522:6;17513:15;;;;;;:::i;:::-;;;;;17557:2;17547:12;;;;17473:102;17602:6;17593:5;:15;17589:102;;17638:6;17629:15;;;;;;:::i;:::-;;;;;17673:2;17663:12;;;;17589:102;17718:5;17709;:14;17705:99;;17753:5;17744:14;;;;;;:::i;:::-;;;;;17787:1;17777:11;;;;17705:99;17831:5;17822;:14;17818:99;;17866:5;17857:14;;;;;;:::i;:::-;;;;;17900:1;17890:11;;;;17818:99;17944:5;17935;:14;17931:99;;17979:5;17970:14;;;;;;:::i;:::-;;;;;18013:1;18003:11;;;;17931:99;18057:5;18048;:14;18044:66;;18093:1;18083:11;;;;18044:66;18138:6;18131:13;;;17230:922;;;:::o;37194:115::-;37254:4;37300:1;37278:7;:19;;;:23;37271:30;;37194:115;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::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:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:109::-;2061:7;2101:26;2094:5;2090:38;2079:49;;2025:109;;;:::o;2140:120::-;2212:23;2229:5;2212:23;:::i;:::-;2205:5;2202:34;2192:62;;2250:1;2247;2240:12;2192:62;2140:120;:::o;2266:137::-;2311:5;2349:6;2336:20;2327:29;;2365:32;2391:5;2365:32;:::i;:::-;2266:137;;;;:::o;2409:472::-;2476:6;2484;2533:2;2521:9;2512:7;2508:23;2504:32;2501:119;;;2539:79;;:::i;:::-;2501:119;2659:1;2684:53;2729:7;2720:6;2709:9;2705:22;2684:53;:::i;:::-;2674:63;;2630:117;2786:2;2812:52;2856:7;2847:6;2836:9;2832:22;2812:52;:::i;:::-;2802:62;;2757:117;2409:472;;;;;:::o;2887:99::-;2939:6;2973:5;2967:12;2957:22;;2887:99;;;:::o;2992:169::-;3076:11;3110:6;3105:3;3098:19;3150:4;3145:3;3141:14;3126:29;;2992:169;;;;:::o;3167:246::-;3248:1;3258:113;3272:6;3269:1;3266:13;3258:113;;;3357:1;3352:3;3348:11;3342:18;3338:1;3333:3;3329:11;3322:39;3294:2;3291:1;3287:10;3282:15;;3258:113;;;3405:1;3396:6;3391:3;3387:16;3380:27;3229:184;3167:246;;;:::o;3419:102::-;3460:6;3511:2;3507:7;3502:2;3495:5;3491:14;3487:28;3477:38;;3419:102;;;:::o;3527:377::-;3615:3;3643:39;3676:5;3643:39;:::i;:::-;3698:71;3762:6;3757:3;3698:71;:::i;:::-;3691:78;;3778:65;3836:6;3831:3;3824:4;3817:5;3813:16;3778:65;:::i;:::-;3868:29;3890:6;3868:29;:::i;:::-;3863:3;3859:39;3852:46;;3619:285;3527:377;;;;:::o;3910:313::-;4023:4;4061:2;4050:9;4046:18;4038:26;;4110:9;4104:4;4100:20;4096:1;4085:9;4081:17;4074:47;4138:78;4211:4;4202:6;4138:78;:::i;:::-;4130:86;;3910:313;;;;:::o;4229:77::-;4266:7;4295:5;4284:16;;4229:77;;;:::o;4312:122::-;4385:24;4403:5;4385:24;:::i;:::-;4378:5;4375:35;4365:63;;4424:1;4421;4414:12;4365:63;4312:122;:::o;4440:139::-;4486:5;4524:6;4511:20;4502:29;;4540:33;4567:5;4540:33;:::i;:::-;4440:139;;;;:::o;4585:329::-;4644:6;4693:2;4681:9;4672:7;4668:23;4664:32;4661:119;;;4699:79;;:::i;:::-;4661:119;4819:1;4844:53;4889:7;4880:6;4869:9;4865:22;4844:53;:::i;:::-;4834:63;;4790:117;4585:329;;;;:::o;4920:118::-;5007:24;5025:5;5007:24;:::i;:::-;5002:3;4995:37;4920:118;;:::o;5044:222::-;5137:4;5175:2;5164:9;5160:18;5152:26;;5188:71;5256:1;5245:9;5241:17;5232:6;5188:71;:::i;:::-;5044:222;;;;:::o;5272:474::-;5340:6;5348;5397:2;5385:9;5376:7;5372:23;5368:32;5365:119;;;5403:79;;:::i;:::-;5365:119;5523:1;5548:53;5593:7;5584:6;5573:9;5569:22;5548:53;:::i;:::-;5538:63;;5494:117;5650:2;5676:53;5721:7;5712:6;5701:9;5697:22;5676:53;:::i;:::-;5666:63;;5621:118;5272:474;;;;;:::o;5752:118::-;5839:24;5857:5;5839:24;:::i;:::-;5834:3;5827:37;5752:118;;:::o;5876:222::-;5969:4;6007:2;5996:9;5992:18;5984:26;;6020:71;6088:1;6077:9;6073:17;6064:6;6020:71;:::i;:::-;5876:222;;;;:::o;6104:619::-;6181:6;6189;6197;6246:2;6234:9;6225:7;6221:23;6217:32;6214:119;;;6252:79;;:::i;:::-;6214:119;6372:1;6397:53;6442:7;6433:6;6422:9;6418:22;6397:53;:::i;:::-;6387:63;;6343:117;6499:2;6525:53;6570:7;6561:6;6550:9;6546:22;6525:53;:::i;:::-;6515:63;;6470:118;6627:2;6653:53;6698:7;6689:6;6678:9;6674:22;6653:53;:::i;:::-;6643:63;;6598:118;6104:619;;;;;:::o;6729:474::-;6797:6;6805;6854:2;6842:9;6833:7;6829:23;6825:32;6822:119;;;6860:79;;:::i;:::-;6822:119;6980:1;7005:53;7050:7;7041:6;7030:9;7026:22;7005:53;:::i;:::-;6995:63;;6951:117;7107:2;7133:53;7178:7;7169:6;7158:9;7154:22;7133:53;:::i;:::-;7123:63;;7078:118;6729:474;;;;;:::o;7209:332::-;7330:4;7368:2;7357:9;7353:18;7345:26;;7381:71;7449:1;7438:9;7434:17;7425:6;7381:71;:::i;:::-;7462:72;7530:2;7519:9;7515:18;7506:6;7462:72;:::i;:::-;7209:332;;;;;:::o;7547:113::-;7613:6;7647:5;7641:12;7631:22;;7547:113;;;:::o;7666:183::-;7764:11;7798:6;7793:3;7786:19;7838:4;7833:3;7829:14;7814:29;;7666:183;;;;:::o;7855:131::-;7921:4;7944:3;7936:11;;7974:4;7969:3;7965:14;7957:22;;7855:131;;;:::o;7992:89::-;8028:7;8068:6;8061:5;8057:18;8046:29;;7992:89;;;:::o;8087:105::-;8162:23;8179:5;8162:23;:::i;:::-;8157:3;8150:36;8087:105;;:::o;8198:175::-;8265:10;8286:44;8326:3;8318:6;8286:44;:::i;:::-;8362:4;8357:3;8353:14;8339:28;;8198:175;;;;:::o;8379:112::-;8448:4;8480;8475:3;8471:14;8463:22;;8379:112;;;:::o;8525:724::-;8642:3;8671:53;8718:5;8671:53;:::i;:::-;8740:85;8818:6;8813:3;8740:85;:::i;:::-;8733:92;;8849:55;8898:5;8849:55;:::i;:::-;8927:7;8958:1;8943:281;8968:6;8965:1;8962:13;8943:281;;;9044:6;9038:13;9071:61;9128:3;9113:13;9071:61;:::i;:::-;9064:68;;9155:59;9207:6;9155:59;:::i;:::-;9145:69;;9003:221;8990:1;8987;8983:9;8978:14;;8943:281;;;8947:14;9240:3;9233:10;;8647:602;;;8525:724;;;;:::o;9255:680::-;9472:4;9510:2;9499:9;9495:18;9487:26;;9559:9;9553:4;9549:20;9545:1;9534:9;9530:17;9523:47;9587:78;9660:4;9651:6;9587:78;:::i;:::-;9579:86;;9675:72;9743:2;9732:9;9728:18;9719:6;9675:72;:::i;:::-;9794:9;9788:4;9784:20;9779:2;9768:9;9764:18;9757:48;9822:106;9923:4;9914:6;9822:106;:::i;:::-;9814:114;;9255:680;;;;;;:::o;9941:329::-;10000:6;10049:2;10037:9;10028:7;10024:23;10020:32;10017:119;;;10055:79;;:::i;:::-;10017:119;10175:1;10200:53;10245:7;10236:6;10225:9;10221:22;10200:53;:::i;:::-;10190:63;;10146:117;9941:329;;;;:::o;10276:101::-;10312:7;10352:18;10345:5;10341:30;10330:41;;10276:101;;;:::o;10383:115::-;10468:23;10485:5;10468:23;:::i;:::-;10463:3;10456:36;10383:115;;:::o;10504:218::-;10595:4;10633:2;10622:9;10618:18;10610:26;;10646:69;10712:1;10701:9;10697:17;10688:6;10646:69;:::i;:::-;10504:218;;;;:::o;10728:117::-;10837:1;10834;10827:12;10851:117;10960:1;10957;10950:12;10974:180;11022:77;11019:1;11012:88;11119:4;11116:1;11109:15;11143:4;11140:1;11133:15;11160:281;11243:27;11265:4;11243:27;:::i;:::-;11235:6;11231:40;11373:6;11361:10;11358:22;11337:18;11325:10;11322:34;11319:62;11316:88;;;11384:18;;:::i;:::-;11316:88;11424:10;11420:2;11413:22;11203:238;11160:281;;:::o;11447:129::-;11481:6;11508:20;;:::i;:::-;11498:30;;11537:33;11565:4;11557:6;11537:33;:::i;:::-;11447:129;;;:::o;11582:308::-;11644:4;11734:18;11726:6;11723:30;11720:56;;;11756:18;;:::i;:::-;11720:56;11794:29;11816:6;11794:29;:::i;:::-;11786:37;;11878:4;11872;11868:15;11860:23;;11582:308;;;:::o;11896:146::-;11993:6;11988:3;11983;11970:30;12034:1;12025:6;12020:3;12016:16;12009:27;11896:146;;;:::o;12048:425::-;12126:5;12151:66;12167:49;12209:6;12167:49;:::i;:::-;12151:66;:::i;:::-;12142:75;;12240:6;12233:5;12226:21;12278:4;12271:5;12267:16;12316:3;12307:6;12302:3;12298:16;12295:25;12292:112;;;12323:79;;:::i;:::-;12292:112;12413:54;12460:6;12455:3;12450;12413:54;:::i;:::-;12132:341;12048:425;;;;;:::o;12493:340::-;12549:5;12598:3;12591:4;12583:6;12579:17;12575:27;12565:122;;12606:79;;:::i;:::-;12565:122;12723:6;12710:20;12748:79;12823:3;12815:6;12808:4;12800:6;12796:17;12748:79;:::i;:::-;12739:88;;12555:278;12493:340;;;;:::o;12839:509::-;12908:6;12957:2;12945:9;12936:7;12932:23;12928:32;12925:119;;;12963:79;;:::i;:::-;12925:119;13111:1;13100:9;13096:17;13083:31;13141:18;13133:6;13130:30;13127:117;;;13163:79;;:::i;:::-;13127:117;13268:63;13323:7;13314:6;13303:9;13299:22;13268:63;:::i;:::-;13258:73;;13054:287;12839:509;;;;:::o;13354:116::-;13424:21;13439:5;13424:21;:::i;:::-;13417:5;13414:32;13404:60;;13460:1;13457;13450:12;13404:60;13354:116;:::o;13476:133::-;13519:5;13557:6;13544:20;13535:29;;13573:30;13597:5;13573:30;:::i;:::-;13476:133;;;;:::o;13615:468::-;13680:6;13688;13737:2;13725:9;13716:7;13712:23;13708:32;13705:119;;;13743:79;;:::i;:::-;13705:119;13863:1;13888:53;13933:7;13924:6;13913:9;13909:22;13888:53;:::i;:::-;13878:63;;13834:117;13990:2;14016:50;14058:7;14049:6;14038:9;14034:22;14016:50;:::i;:::-;14006:60;;13961:115;13615:468;;;;;:::o;14089:311::-;14166:4;14256:18;14248:6;14245:30;14242:56;;;14278:18;;:::i;:::-;14242:56;14328:4;14320:6;14316:17;14308:25;;14388:4;14382;14378:15;14370:23;;14089:311;;;:::o;14406:117::-;14515:1;14512;14505:12;14546:710;14642:5;14667:81;14683:64;14740:6;14683:64;:::i;:::-;14667:81;:::i;:::-;14658:90;;14768:5;14797:6;14790:5;14783:21;14831:4;14824:5;14820:16;14813:23;;14884:4;14876:6;14872:17;14864:6;14860:30;14913:3;14905:6;14902:15;14899:122;;;14932:79;;:::i;:::-;14899:122;15047:6;15030:220;15064:6;15059:3;15056:15;15030:220;;;15139:3;15168:37;15201:3;15189:10;15168:37;:::i;:::-;15163:3;15156:50;15235:4;15230:3;15226:14;15219:21;;15106:144;15090:4;15085:3;15081:14;15074:21;;15030:220;;;15034:21;14648:608;;14546:710;;;;;:::o;15279:370::-;15350:5;15399:3;15392:4;15384:6;15380:17;15376:27;15366:122;;15407:79;;:::i;:::-;15366:122;15524:6;15511:20;15549:94;15639:3;15631:6;15624:4;15616:6;15612:17;15549:94;:::i;:::-;15540:103;;15356:293;15279:370;;;;:::o;15655:678::-;15745:6;15753;15802:2;15790:9;15781:7;15777:23;15773:32;15770:119;;;15808:79;;:::i;:::-;15770:119;15956:1;15945:9;15941:17;15928:31;15986:18;15978:6;15975:30;15972:117;;;16008:79;;:::i;:::-;15972:117;16113:78;16183:7;16174:6;16163:9;16159:22;16113:78;:::i;:::-;16103:88;;15899:302;16240:2;16266:50;16308:7;16299:6;16288:9;16284:22;16266:50;:::i;:::-;16256:60;;16211:115;15655:678;;;;;:::o;16339:307::-;16400:4;16490:18;16482:6;16479:30;16476:56;;;16512:18;;:::i;:::-;16476:56;16550:29;16572:6;16550:29;:::i;:::-;16542:37;;16634:4;16628;16624:15;16616:23;;16339:307;;;:::o;16652:423::-;16729:5;16754:65;16770:48;16811:6;16770:48;:::i;:::-;16754:65;:::i;:::-;16745:74;;16842:6;16835:5;16828:21;16880:4;16873:5;16869:16;16918:3;16909:6;16904:3;16900:16;16897:25;16894:112;;;16925:79;;:::i;:::-;16894:112;17015:54;17062:6;17057:3;17052;17015:54;:::i;:::-;16735:340;16652:423;;;;;:::o;17094:338::-;17149:5;17198:3;17191:4;17183:6;17179:17;17175:27;17165:122;;17206:79;;:::i;:::-;17165:122;17323:6;17310:20;17348:78;17422:3;17414:6;17407:4;17399:6;17395:17;17348:78;:::i;:::-;17339:87;;17155:277;17094:338;;;;:::o;17438:943::-;17533:6;17541;17549;17557;17606:3;17594:9;17585:7;17581:23;17577:33;17574:120;;;17613:79;;:::i;:::-;17574:120;17733:1;17758:53;17803:7;17794:6;17783:9;17779:22;17758:53;:::i;:::-;17748:63;;17704:117;17860:2;17886:53;17931:7;17922:6;17911:9;17907:22;17886:53;:::i;:::-;17876:63;;17831:118;17988:2;18014:53;18059:7;18050:6;18039:9;18035:22;18014:53;:::i;:::-;18004:63;;17959:118;18144:2;18133:9;18129:18;18116:32;18175:18;18167:6;18164:30;18161:117;;;18197:79;;:::i;:::-;18161:117;18302:62;18356:7;18347:6;18336:9;18332:22;18302:62;:::i;:::-;18292:72;;18087:287;17438:943;;;;;;;:::o;18387:323::-;18443:6;18492:2;18480:9;18471:7;18467:23;18463:32;18460:119;;;18498:79;;:::i;:::-;18460:119;18618:1;18643:50;18685:7;18676:6;18665:9;18661:22;18643:50;:::i;:::-;18633:60;;18589:114;18387:323;;;;:::o;18716:120::-;18788:23;18805:5;18788:23;:::i;:::-;18781:5;18778:34;18768:62;;18826:1;18823;18816:12;18768:62;18716:120;:::o;18842:137::-;18887:5;18925:6;18912:20;18903:29;;18941:32;18967:5;18941:32;:::i;:::-;18842:137;;;;:::o;18985:472::-;19052:6;19060;19109:2;19097:9;19088:7;19084:23;19080:32;19077:119;;;19115:79;;:::i;:::-;19077:119;19235:1;19260:53;19305:7;19296:6;19285:9;19281:22;19260:53;:::i;:::-;19250:63;;19206:117;19362:2;19388:52;19432:7;19423:6;19412:9;19408:22;19388:52;:::i;:::-;19378:62;;19333:117;18985:472;;;;;:::o;19463:120::-;19535:23;19552:5;19535:23;:::i;:::-;19528:5;19525:34;19515:62;;19573:1;19570;19563:12;19515:62;19463:120;:::o;19589:137::-;19634:5;19672:6;19659:20;19650:29;;19688:32;19714:5;19688:32;:::i;:::-;19589:137;;;;:::o;19732:757::-;19814:6;19822;19830;19838;19887:3;19875:9;19866:7;19862:23;19858:33;19855:120;;;19894:79;;:::i;:::-;19855:120;20014:1;20039:52;20083:7;20074:6;20063:9;20059:22;20039:52;:::i;:::-;20029:62;;19985:116;20140:2;20166:52;20210:7;20201:6;20190:9;20186:22;20166:52;:::i;:::-;20156:62;;20111:117;20267:2;20293:52;20337:7;20328:6;20317:9;20313:22;20293:52;:::i;:::-;20283:62;;20238:117;20394:2;20420:52;20464:7;20455:6;20444:9;20440:22;20420:52;:::i;:::-;20410:62;;20365:117;19732:757;;;;;;;:::o;20495:654::-;20573:6;20581;20630:2;20618:9;20609:7;20605:23;20601:32;20598:119;;;20636:79;;:::i;:::-;20598:119;20756:1;20781:53;20826:7;20817:6;20806:9;20802:22;20781:53;:::i;:::-;20771:63;;20727:117;20911:2;20900:9;20896:18;20883:32;20942:18;20934:6;20931:30;20928:117;;;20964:79;;:::i;:::-;20928:117;21069:63;21124:7;21115:6;21104:9;21100:22;21069:63;:::i;:::-;21059:73;;20854:288;20495:654;;;;;:::o;21155:474::-;21223:6;21231;21280:2;21268:9;21259:7;21255:23;21251:32;21248:119;;;21286:79;;:::i;:::-;21248:119;21406:1;21431:53;21476:7;21467:6;21456:9;21452:22;21431:53;:::i;:::-;21421:63;;21377:117;21533:2;21559:53;21604:7;21595:6;21584:9;21580:22;21559:53;:::i;:::-;21549:63;;21504:118;21155:474;;;;;:::o;21635:115::-;21720:23;21737:5;21720:23;:::i;:::-;21715:3;21708:36;21635:115;;:::o;21756:218::-;21847:4;21885:2;21874:9;21870:18;21862:26;;21898:69;21964:1;21953:9;21949:17;21940:6;21898:69;:::i;:::-;21756:218;;;;:::o;21980:172::-;22120:24;22116:1;22108:6;22104:14;22097:48;21980:172;:::o;22158:366::-;22300:3;22321:67;22385:2;22380:3;22321:67;:::i;:::-;22314:74;;22397:93;22486:3;22397:93;:::i;:::-;22515:2;22510:3;22506:12;22499:19;;22158:366;;;:::o;22530:419::-;22696:4;22734:2;22723:9;22719:18;22711:26;;22783:9;22777:4;22773:20;22769:1;22758:9;22754:17;22747:47;22811:131;22937:4;22811:131;:::i;:::-;22803:139;;22530:419;;;:::o;22955:180::-;23003:77;23000:1;22993:88;23100:4;23097:1;23090:15;23124:4;23121:1;23114:15;23141:320;23185:6;23222:1;23216:4;23212:12;23202:22;;23269:1;23263:4;23259:12;23290:18;23280:81;;23346:4;23338:6;23334:17;23324:27;;23280:81;23408:2;23400:6;23397:14;23377:18;23374:38;23371:84;;23427:18;;:::i;:::-;23371:84;23192:269;23141:320;;;:::o;23467:220::-;23607:34;23603:1;23595:6;23591:14;23584:58;23676:3;23671:2;23663:6;23659:15;23652:28;23467:220;:::o;23693:366::-;23835:3;23856:67;23920:2;23915:3;23856:67;:::i;:::-;23849:74;;23932:93;24021:3;23932:93;:::i;:::-;24050:2;24045:3;24041:12;24034:19;;23693:366;;;:::o;24065:419::-;24231:4;24269:2;24258:9;24254:18;24246:26;;24318:9;24312:4;24308:20;24304:1;24293:9;24289:17;24282:47;24346:131;24472:4;24346:131;:::i;:::-;24338:139;;24065:419;;;:::o;24490:248::-;24630:34;24626:1;24618:6;24614:14;24607:58;24699:31;24694:2;24686:6;24682:15;24675:56;24490:248;:::o;24744:366::-;24886:3;24907:67;24971:2;24966:3;24907:67;:::i;:::-;24900:74;;24983:93;25072:3;24983:93;:::i;:::-;25101:2;25096:3;25092:12;25085:19;;24744:366;;;:::o;25116:419::-;25282:4;25320:2;25309:9;25305:18;25297:26;;25369:9;25363:4;25359:20;25355:1;25344:9;25340:17;25333:47;25397:131;25523:4;25397:131;:::i;:::-;25389:139;;25116:419;;;:::o;25541:168::-;25681:20;25677:1;25669:6;25665:14;25658:44;25541:168;:::o;25715:366::-;25857:3;25878:67;25942:2;25937:3;25878:67;:::i;:::-;25871:74;;25954:93;26043:3;25954:93;:::i;:::-;26072:2;26067:3;26063:12;26056:19;;25715:366;;;:::o;26087:419::-;26253:4;26291:2;26280:9;26276:18;26268:26;;26340:9;26334:4;26330:20;26326:1;26315:9;26311:17;26304:47;26368:131;26494:4;26368:131;:::i;:::-;26360:139;;26087:419;;;:::o;26512:223::-;26652:34;26648:1;26640:6;26636:14;26629:58;26721:6;26716:2;26708:6;26704:15;26697:31;26512:223;:::o;26741:366::-;26883:3;26904:67;26968:2;26963:3;26904:67;:::i;:::-;26897:74;;26980:93;27069:3;26980:93;:::i;:::-;27098:2;27093:3;27089:12;27082:19;;26741:366;;;:::o;27113:419::-;27279:4;27317:2;27306:9;27302:18;27294:26;;27366:9;27360:4;27356:20;27352:1;27341:9;27337:17;27330:47;27394:131;27520:4;27394:131;:::i;:::-;27386:139;;27113:419;;;:::o;27538:143::-;27595:5;27626:6;27620:13;27611:22;;27642:33;27669:5;27642:33;:::i;:::-;27538:143;;;;:::o;27687:351::-;27757:6;27806:2;27794:9;27785:7;27781:23;27777:32;27774:119;;;27812:79;;:::i;:::-;27774:119;27932:1;27957:64;28013:7;28004:6;27993:9;27989:22;27957:64;:::i;:::-;27947:74;;27903:128;27687:351;;;;:::o;28044:182::-;28184:34;28180:1;28172:6;28168:14;28161:58;28044:182;:::o;28232:366::-;28374:3;28395:67;28459:2;28454:3;28395:67;:::i;:::-;28388:74;;28471:93;28560:3;28471:93;:::i;:::-;28589:2;28584:3;28580:12;28573:19;;28232:366;;;:::o;28604:419::-;28770:4;28808:2;28797:9;28793:18;28785:26;;28857:9;28851:4;28847:20;28843:1;28832:9;28828:17;28821:47;28885:131;29011:4;28885:131;:::i;:::-;28877:139;;28604:419;;;:::o;29029:243::-;29169:34;29165:1;29157:6;29153:14;29146:58;29238:26;29233:2;29225:6;29221:15;29214:51;29029:243;:::o;29278:366::-;29420:3;29441:67;29505:2;29500:3;29441:67;:::i;:::-;29434:74;;29517:93;29606:3;29517:93;:::i;:::-;29635:2;29630:3;29626:12;29619:19;;29278:366;;;:::o;29650:419::-;29816:4;29854:2;29843:9;29839:18;29831:26;;29903:9;29897:4;29893:20;29889:1;29878:9;29874:17;29867:47;29931:131;30057:4;29931:131;:::i;:::-;29923:139;;29650:419;;;:::o;30075:233::-;30215:34;30211:1;30203:6;30199:14;30192:58;30284:16;30279:2;30271:6;30267:15;30260:41;30075:233;:::o;30314:366::-;30456:3;30477:67;30541:2;30536:3;30477:67;:::i;:::-;30470:74;;30553:93;30642:3;30553:93;:::i;:::-;30671:2;30666:3;30662:12;30655:19;;30314:366;;;:::o;30686:419::-;30852:4;30890:2;30879:9;30875:18;30867:26;;30939:9;30933:4;30929:20;30925:1;30914:9;30910:17;30903:47;30967:131;31093:4;30967:131;:::i;:::-;30959:139;;30686:419;;;:::o;31111:180::-;31159:77;31156:1;31149:88;31256:4;31253:1;31246:15;31280:4;31277:1;31270:15;31297:171;31335:3;31358:23;31375:5;31358:23;:::i;:::-;31349:32;;31403:6;31396:5;31393:17;31390:43;;31413:18;;:::i;:::-;31390:43;31460:1;31453:5;31449:13;31442:20;;31297:171;;;:::o;31474:230::-;31614:34;31610:1;31602:6;31598:14;31591:58;31683:13;31678:2;31670:6;31666:15;31659:38;31474:230;:::o;31710:366::-;31852:3;31873:67;31937:2;31932:3;31873:67;:::i;:::-;31866:74;;31949:93;32038:3;31949:93;:::i;:::-;32067:2;32062:3;32058:12;32051:19;;31710:366;;;:::o;32082:419::-;32248:4;32286:2;32275:9;32271:18;32263:26;;32335:9;32329:4;32325:20;32321:1;32310:9;32306:17;32299:47;32363:131;32489:4;32363:131;:::i;:::-;32355:139;;32082:419;;;:::o;32507:232::-;32647:34;32643:1;32635:6;32631:14;32624:58;32716:15;32711:2;32703:6;32699:15;32692:40;32507:232;:::o;32745:366::-;32887:3;32908:67;32972:2;32967:3;32908:67;:::i;:::-;32901:74;;32984:93;33073:3;32984:93;:::i;:::-;33102:2;33097:3;33093:12;33086:19;;32745:366;;;:::o;33117:419::-;33283:4;33321:2;33310:9;33306:18;33298:26;;33370:9;33364:4;33360:20;33356:1;33345:9;33341:17;33334:47;33398:131;33524:4;33398:131;:::i;:::-;33390:139;;33117:419;;;:::o;33542:410::-;33582:7;33605:20;33623:1;33605:20;:::i;:::-;33600:25;;33639:20;33657:1;33639:20;:::i;:::-;33634:25;;33694:1;33691;33687:9;33716:30;33734:11;33716:30;:::i;:::-;33705:41;;33895:1;33886:7;33882:15;33879:1;33876:22;33856:1;33849:9;33829:83;33806:139;;33925:18;;:::i;:::-;33806:139;33590:362;33542:410;;;;:::o;33958:180::-;34006:77;34003:1;33996:88;34103:4;34100:1;34093:15;34127:4;34124:1;34117:15;34144:185;34184:1;34201:20;34219:1;34201:20;:::i;:::-;34196:25;;34235:20;34253:1;34235:20;:::i;:::-;34230:25;;34274:1;34264:35;;34279:18;;:::i;:::-;34264:35;34321:1;34318;34314:9;34309:14;;34144:185;;;;:::o;34335:174::-;34475:26;34471:1;34463:6;34459:14;34452:50;34335:174;:::o;34515:366::-;34657:3;34678:67;34742:2;34737:3;34678:67;:::i;:::-;34671:74;;34754:93;34843:3;34754:93;:::i;:::-;34872:2;34867:3;34863:12;34856:19;;34515:366;;;:::o;34887:419::-;35053:4;35091:2;35080:9;35076:18;35068:26;;35140:9;35134:4;35130:20;35126:1;35115:9;35111:17;35104:47;35168:131;35294:4;35168:131;:::i;:::-;35160:139;;34887:419;;;:::o;35312:228::-;35452:34;35448:1;35440:6;35436:14;35429:58;35521:11;35516:2;35508:6;35504:15;35497:36;35312:228;:::o;35546:366::-;35688:3;35709:67;35773:2;35768:3;35709:67;:::i;:::-;35702:74;;35785:93;35874:3;35785:93;:::i;:::-;35903:2;35898:3;35894:12;35887:19;;35546:366;;;:::o;35918:419::-;36084:4;36122:2;36111:9;36107:18;36099:26;;36171:9;36165:4;36161:20;36157:1;36146:9;36142:17;36135:47;36199:131;36325:4;36199:131;:::i;:::-;36191:139;;35918:419;;;:::o;36343:231::-;36483:34;36479:1;36471:6;36467:14;36460:58;36552:14;36547:2;36539:6;36535:15;36528:39;36343:231;:::o;36580:366::-;36722:3;36743:67;36807:2;36802:3;36743:67;:::i;:::-;36736:74;;36819:93;36908:3;36819:93;:::i;:::-;36937:2;36932:3;36928:12;36921:19;;36580:366;;;:::o;36952:419::-;37118:4;37156:2;37145:9;37141:18;37133:26;;37205:9;37199:4;37195:20;37191:1;37180:9;37176:17;37169:47;37233:131;37359:4;37233:131;:::i;:::-;37225:139;;36952:419;;;:::o;37377:180::-;37425:77;37422:1;37415:88;37522:4;37519:1;37512:15;37546:4;37543:1;37536:15;37563:332;37684:4;37722:2;37711:9;37707:18;37699:26;;37735:71;37803:1;37792:9;37788:17;37779:6;37735:71;:::i;:::-;37816:72;37884:2;37873:9;37869:18;37860:6;37816:72;:::i;:::-;37563:332;;;;;:::o;37901:148::-;38003:11;38040:3;38025:18;;37901:148;;;;:::o;38055:141::-;38104:4;38127:3;38119:11;;38150:3;38147:1;38140:14;38184:4;38181:1;38171:18;38163:26;;38055:141;;;:::o;38226:874::-;38329:3;38366:5;38360:12;38395:36;38421:9;38395:36;:::i;:::-;38447:89;38529:6;38524:3;38447:89;:::i;:::-;38440:96;;38567:1;38556:9;38552:17;38583:1;38578:166;;;;38758:1;38753:341;;;;38545:549;;38578:166;38662:4;38658:9;38647;38643:25;38638:3;38631:38;38724:6;38717:14;38710:22;38702:6;38698:35;38693:3;38689:45;38682:52;;38578:166;;38753:341;38820:38;38852:5;38820:38;:::i;:::-;38880:1;38894:154;38908:6;38905:1;38902:13;38894:154;;;38982:7;38976:14;38972:1;38967:3;38963:11;38956:35;39032:1;39023:7;39019:15;39008:26;;38930:4;38927:1;38923:12;38918:17;;38894:154;;;39077:6;39072:3;39068:16;39061:23;;38760:334;;38545:549;;38333:767;;38226:874;;;;:::o;39106:390::-;39212:3;39240:39;39273:5;39240:39;:::i;:::-;39295:89;39377:6;39372:3;39295:89;:::i;:::-;39288:96;;39393:65;39451:6;39446:3;39439:4;39432:5;39428:16;39393:65;:::i;:::-;39483:6;39478:3;39474:16;39467:23;;39216:280;39106:390;;;;:::o;39502:429::-;39679:3;39701:92;39789:3;39780:6;39701:92;:::i;:::-;39694:99;;39810:95;39901:3;39892:6;39810:95;:::i;:::-;39803:102;;39922:3;39915:10;;39502:429;;;;;:::o;39937:93::-;39974:6;40021:2;40016;40009:5;40005:14;40001:23;39991:33;;39937:93;;;:::o;40036:107::-;40080:8;40130:5;40124:4;40120:16;40099:37;;40036:107;;;;:::o;40149:393::-;40218:6;40268:1;40256:10;40252:18;40291:97;40321:66;40310:9;40291:97;:::i;:::-;40409:39;40439:8;40428:9;40409:39;:::i;:::-;40397:51;;40481:4;40477:9;40470:5;40466:21;40457:30;;40530:4;40520:8;40516:19;40509:5;40506:30;40496:40;;40225:317;;40149:393;;;;;:::o;40548:60::-;40576:3;40597:5;40590:12;;40548:60;;;:::o;40614:142::-;40664:9;40697:53;40715:34;40724:24;40742:5;40724:24;:::i;:::-;40715:34;:::i;:::-;40697:53;:::i;:::-;40684:66;;40614:142;;;:::o;40762:75::-;40805:3;40826:5;40819:12;;40762:75;;;:::o;40843:269::-;40953:39;40984:7;40953:39;:::i;:::-;41014:91;41063:41;41087:16;41063:41;:::i;:::-;41055:6;41048:4;41042:11;41014:91;:::i;:::-;41008:4;41001:105;40919:193;40843:269;;;:::o;41118:73::-;41163:3;41118:73;:::o;41197:189::-;41274:32;;:::i;:::-;41315:65;41373:6;41365;41359:4;41315:65;:::i;:::-;41250:136;41197:189;;:::o;41392:186::-;41452:120;41469:3;41462:5;41459:14;41452:120;;;41523:39;41560:1;41553:5;41523:39;:::i;:::-;41496:1;41489:5;41485:13;41476:22;;41452:120;;;41392:186;;:::o;41584:543::-;41685:2;41680:3;41677:11;41674:446;;;41719:38;41751:5;41719:38;:::i;:::-;41803:29;41821:10;41803:29;:::i;:::-;41793:8;41789:44;41986:2;41974:10;41971:18;41968:49;;;42007:8;41992:23;;41968:49;42030:80;42086:22;42104:3;42086:22;:::i;:::-;42076:8;42072:37;42059:11;42030:80;:::i;:::-;41689:431;;41674:446;41584:543;;;:::o;42133:117::-;42187:8;42237:5;42231:4;42227:16;42206:37;;42133:117;;;;:::o;42256:169::-;42300:6;42333:51;42381:1;42377:6;42369:5;42366:1;42362:13;42333:51;:::i;:::-;42329:56;42414:4;42408;42404:15;42394:25;;42307:118;42256:169;;;;:::o;42430:295::-;42506:4;42652:29;42677:3;42671:4;42652:29;:::i;:::-;42644:37;;42714:3;42711:1;42707:11;42701:4;42698:21;42690:29;;42430:295;;;;:::o;42730:1395::-;42847:37;42880:3;42847:37;:::i;:::-;42949:18;42941:6;42938:30;42935:56;;;42971:18;;:::i;:::-;42935:56;43015:38;43047:4;43041:11;43015:38;:::i;:::-;43100:67;43160:6;43152;43146:4;43100:67;:::i;:::-;43194:1;43218:4;43205:17;;43250:2;43242:6;43239:14;43267:1;43262:618;;;;43924:1;43941:6;43938:77;;;43990:9;43985:3;43981:19;43975:26;43966:35;;43938:77;44041:67;44101:6;44094:5;44041:67;:::i;:::-;44035:4;44028:81;43897:222;43232:887;;43262:618;43314:4;43310:9;43302:6;43298:22;43348:37;43380:4;43348:37;:::i;:::-;43407:1;43421:208;43435:7;43432:1;43429:14;43421:208;;;43514:9;43509:3;43505:19;43499:26;43491:6;43484:42;43565:1;43557:6;43553:14;43543:24;;43612:2;43601:9;43597:18;43584:31;;43458:4;43455:1;43451:12;43446:17;;43421:208;;;43657:6;43648:7;43645:19;43642:179;;;43715:9;43710:3;43706:19;43700:26;43758:48;43800:4;43792:6;43788:17;43777:9;43758:48;:::i;:::-;43750:6;43743:64;43665:156;43642:179;43867:1;43863;43855:6;43851:14;43847:22;43841:4;43834:36;43269:611;;;43232:887;;42822:1303;;;42730:1395;;:::o;44131:137::-;44185:5;44216:6;44210:13;44201:22;;44232:30;44256:5;44232:30;:::i;:::-;44131:137;;;;:::o;44274:345::-;44341:6;44390:2;44378:9;44369:7;44365:23;44361:32;44358:119;;;44396:79;;:::i;:::-;44358:119;44516:1;44541:61;44594:7;44585:6;44574:9;44570:22;44541:61;:::i;:::-;44531:71;;44487:125;44274:345;;;;:::o;44625:229::-;44765:34;44761:1;44753:6;44749:14;44742:58;44834:12;44829:2;44821:6;44817:15;44810:37;44625:229;:::o;44860:366::-;45002:3;45023:67;45087:2;45082:3;45023:67;:::i;:::-;45016:74;;45099:93;45188:3;45099:93;:::i;:::-;45217:2;45212:3;45208:12;45201:19;;44860:366;;;:::o;45232:419::-;45398:4;45436:2;45425:9;45421:18;45413:26;;45485:9;45479:4;45475:20;45471:1;45460:9;45456:17;45449:47;45513:131;45639:4;45513:131;:::i;:::-;45505:139;;45232:419;;;:::o;45657:175::-;45797:27;45793:1;45785:6;45781:14;45774:51;45657:175;:::o;45838:366::-;45980:3;46001:67;46065:2;46060:3;46001:67;:::i;:::-;45994:74;;46077:93;46166:3;46077:93;:::i;:::-;46195:2;46190:3;46186:12;46179:19;;45838:366;;;:::o;46210:419::-;46376:4;46414:2;46403:9;46399:18;46391:26;;46463:9;46457:4;46453:20;46449:1;46438:9;46434:17;46427:47;46491:131;46617:4;46491:131;:::i;:::-;46483:139;;46210:419;;;:::o;46635:224::-;46775:34;46771:1;46763:6;46759:14;46752:58;46844:7;46839:2;46831:6;46827:15;46820:32;46635:224;:::o;46865:366::-;47007:3;47028:67;47092:2;47087:3;47028:67;:::i;:::-;47021:74;;47104:93;47193:3;47104:93;:::i;:::-;47222:2;47217:3;47213:12;47206:19;;46865:366;;;:::o;47237:419::-;47403:4;47441:2;47430:9;47426:18;47418:26;;47490:9;47484:4;47480:20;47476:1;47465:9;47461:17;47454:47;47518:131;47644:4;47518:131;:::i;:::-;47510:139;;47237:419;;;:::o;47662:223::-;47802:34;47798:1;47790:6;47786:14;47779:58;47871:6;47866:2;47858:6;47854:15;47847:31;47662:223;:::o;47891:366::-;48033:3;48054:67;48118:2;48113:3;48054:67;:::i;:::-;48047:74;;48130:93;48219:3;48130:93;:::i;:::-;48248:2;48243:3;48239:12;48232:19;;47891:366;;;:::o;48263:419::-;48429:4;48467:2;48456:9;48452:18;48444:26;;48516:9;48510:4;48506:20;48502:1;48491:9;48487:17;48480:47;48544:131;48670:4;48544:131;:::i;:::-;48536:139;;48263:419;;;:::o;48688:175::-;48828:27;48824:1;48816:6;48812:14;48805:51;48688:175;:::o;48869:366::-;49011:3;49032:67;49096:2;49091:3;49032:67;:::i;:::-;49025:74;;49108:93;49197:3;49108:93;:::i;:::-;49226:2;49221:3;49217:12;49210:19;;48869:366;;;:::o;49241:419::-;49407:4;49445:2;49434:9;49430:18;49422:26;;49494:9;49488:4;49484:20;49480:1;49469:9;49465:17;49458:47;49522:131;49648:4;49522:131;:::i;:::-;49514:139;;49241:419;;;:::o;49666:237::-;49806:34;49802:1;49794:6;49790:14;49783:58;49875:20;49870:2;49862:6;49858:15;49851:45;49666:237;:::o;49909:366::-;50051:3;50072:67;50136:2;50131:3;50072:67;:::i;:::-;50065:74;;50148:93;50237:3;50148:93;:::i;:::-;50266:2;50261:3;50257:12;50250:19;;49909:366;;;:::o;50281:419::-;50447:4;50485:2;50474:9;50470:18;50462:26;;50534:9;50528:4;50524:20;50520:1;50509:9;50505:17;50498:47;50562:131;50688:4;50562:131;:::i;:::-;50554:139;;50281:419;;;:::o;50706:182::-;50846:34;50842:1;50834:6;50830:14;50823:58;50706:182;:::o;50894:366::-;51036:3;51057:67;51121:2;51116:3;51057:67;:::i;:::-;51050:74;;51133:93;51222:3;51133:93;:::i;:::-;51251:2;51246:3;51242:12;51235:19;;50894:366;;;:::o;51266:419::-;51432:4;51470:2;51459:9;51455:18;51447:26;;51519:9;51513:4;51509:20;51505:1;51494:9;51490:17;51483:47;51547:131;51673:4;51547:131;:::i;:::-;51539:139;;51266:419;;;:::o;51691:178::-;51831:30;51827:1;51819:6;51815:14;51808:54;51691:178;:::o;51875:366::-;52017:3;52038:67;52102:2;52097:3;52038:67;:::i;:::-;52031:74;;52114:93;52203:3;52114:93;:::i;:::-;52232:2;52227:3;52223:12;52216:19;;51875:366;;;:::o;52247:419::-;52413:4;52451:2;52440:9;52436:18;52428:26;;52500:9;52494:4;52490:20;52486:1;52475:9;52471:17;52464:47;52528:131;52654:4;52528:131;:::i;:::-;52520:139;;52247:419;;;:::o;52672:98::-;52723:6;52757:5;52751:12;52741:22;;52672:98;;;:::o;52776:168::-;52859:11;52893:6;52888:3;52881:19;52933:4;52928:3;52924:14;52909:29;;52776:168;;;;:::o;52950:373::-;53036:3;53064:38;53096:5;53064:38;:::i;:::-;53118:70;53181:6;53176:3;53118:70;:::i;:::-;53111:77;;53197:65;53255:6;53250:3;53243:4;53236:5;53232:16;53197:65;:::i;:::-;53287:29;53309:6;53287:29;:::i;:::-;53282:3;53278:39;53271:46;;53040:283;52950:373;;;;:::o;53329:640::-;53524:4;53562:3;53551:9;53547:19;53539:27;;53576:71;53644:1;53633:9;53629:17;53620:6;53576:71;:::i;:::-;53657:72;53725:2;53714:9;53710:18;53701:6;53657:72;:::i;:::-;53739;53807:2;53796:9;53792:18;53783:6;53739:72;:::i;:::-;53858:9;53852:4;53848:20;53843:2;53832:9;53828:18;53821:48;53886:76;53957:4;53948:6;53886:76;:::i;:::-;53878:84;;53329:640;;;;;;;:::o;53975:141::-;54031:5;54062:6;54056:13;54047:22;;54078:32;54104:5;54078:32;:::i;:::-;53975:141;;;;:::o;54122:349::-;54191:6;54240:2;54228:9;54219:7;54215:23;54211:32;54208:119;;;54246:79;;:::i;:::-;54208:119;54366:1;54391:63;54446:7;54437:6;54426:9;54422:22;54391:63;:::i;:::-;54381:73;;54337:127;54122:349;;;;:::o

Swarm Source

ipfs://651d214871294d907a5d0ee78e5ef765d47df9fa24d45822a764a4dfb671b46a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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