ETH Price: $3,607.89 (+4.54%)
 

Overview

Max Total Supply

11 ALLBOTS

Holders

7

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
allintreasury.eth
Balance
2 ALLBOTS
0x9be57ba1e4db334f82ded82d88e1ee59bb8a7e5c
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ALLBOTS

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-06
*/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/contracts/utils/math/Math.sol


// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)

pragma solidity ^0.8.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }

    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

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

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds up instead
     * of rounding down.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

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

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            require(denominator > prod1);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.8.2) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _ownerOf(tokenId);
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

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

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved");
        _safeTransfer(from, to, tokenId, data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist
     */
    function _ownerOf(uint256 tokenId) internal view virtual returns (address) {
        return _owners[tokenId];
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _ownerOf(tokenId) != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

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

        // Check that tokenId was not minted by `_beforeTokenTransfer` hook
        require(!_exists(tokenId), "ERC721: token already minted");

        unchecked {
            // Will not overflow unless all 2**256 token ids are minted to the same owner.
            // Given that tokens are minted one by one, it is impossible in practice that
            // this ever happens. Might change if we allow batch minting.
            // The ERC fails to describe this case.
            _balances[to] += 1;
        }

        _owners[tokenId] = to;

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

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     * This is an internal function that does not check if the sender is authorized to operate on the token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

        // Update ownership in case tokenId was transferred by `_beforeTokenTransfer` hook
        owner = ERC721.ownerOf(tokenId);

        // Clear approvals
        delete _tokenApprovals[tokenId];

        unchecked {
            // Cannot overflow, as that would require more tokens to be burned/transferred
            // out than the owner initially received through minting and transferring in.
            _balances[owner] -= 1;
        }
        delete _owners[tokenId];

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId, 1);

        // Check that tokenId was not transferred by `_beforeTokenTransfer` hook
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");

        // Clear approvals from the previous owner
        delete _tokenApprovals[tokenId];

        unchecked {
            // `_balances[from]` cannot overflow for the same reason as described in `_burn`:
            // `from`'s balance is the number of token held, which is at least one before the current
            // transfer.
            // `_balances[to]` could overflow in the conditions described in `_mint`. That would require
            // all 2**256 token ids to be minted, which in practice is impossible.
            _balances[from] -= 1;
            _balances[to] += 1;
        }
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

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

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits an {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting and burning. If {ERC721Consecutive} is
     * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`.
     * - When `from` is zero, the tokens will be minted for `to`.
     * - When `to` is zero, ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     * - `batchSize` is non-zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 firstTokenId,
        uint256 batchSize
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is
     * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`.
     * - When `from` is zero, the tokens were minted for `to`.
     * - When `to` is zero, ``from``'s tokens were burned.
     * - `from` and `to` are never both zero.
     * - `batchSize` is non-zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 firstTokenId,
        uint256 batchSize
    ) internal virtual {}

    /**
     * @dev Unsafe write access to the balances, used by extensions that "mint" tokens using an {ownerOf} override.
     *
     * WARNING: Anyone calling this MUST ensure that the balances remain consistent with the ownership. The invariant
     * being that for any address `a` the value returned by `balanceOf(a)` must be equal to the number of tokens such
     * that `ownerOf(tokenId)` is `a`.
     */
    // solhint-disable-next-line func-name-mixedcase
    function __unsafe_increaseBalance(address account, uint256 amount) internal {
        _balances[account] += amount;
    }
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev See {ERC721-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 firstTokenId,
        uint256 batchSize
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, firstTokenId, batchSize);

        if (batchSize > 1) {
            // Will only trigger during construction. Batch transferring (minting) is not available afterwards.
            revert("ERC721Enumerable: consecutive transfers not supported");
        }

        uint256 tokenId = firstTokenId;

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: allinnew.sol



/*

ALLCAPS NFT Contract for $ALLIN by DevelopersUnited.org

*/

pragma solidity ^0.8.0.0;




contract ALLBOTS is ERC721Enumerable, Ownable {

    struct LeaderboardEntry {
    uint256 nftId;
    uint256 level;
    address owner;
    

}

    using Strings for uint256;
    string public baseURI;
    string public blacklistURI;
    string public notRevealedURI;
    string public baseExtension = ".json";
    uint256 public cost = 0.5 ether;
    uint256 public maxSupply = 100;
    uint256 public maxMintAmount = 2;
    uint256 public maxWalletMintAmount = 2;
    bool public paused = true;
    bool public revealed = true;
    mapping(address => uint256) public addressMintedBalance;
    mapping(uint256 => bool) public blacklist;


    mapping(address => uint256) public rumCount;
    uint256 public rumCost = 0.5 ether;
    uint256 public levelPerRum = 1;
    mapping(address => uint256) public warchestCount;
    uint256 public warchestCost = 0.5 ether;
    uint256 public levelPerWarChest = 10;
    uint256 public xpPerMinute = 1337;
   

    mapping(address => address) public coldWallet;
    mapping(address => address) public trustedWallet;
    mapping(uint256 => address) public ogMinter;
    mapping(uint256 => uint256) public ogMintTime;
    mapping(uint256 => uint256) public receivingTime;
    mapping(uint256 => uint256) public xpCount;
    mapping(uint256 => uint256) public warchestUsed;
    mapping(uint256 => uint256) public rumUsed;
    mapping(uint256 => uint256) public captinLevel;
    
     

     
   

    //////////////////////////////////////////////////////////
    //  CONSTRUCTOR FUNCTION  
    //////////////////////////////////////////////////////////

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI,
        string memory _initNotRevealedURI,
        string memory _initBlacklistURI
    ) ERC721(_name, _symbol) {
        setBaseURI(_initBaseURI);
        setBlacklistURI(_initBlacklistURI);
        setNotRevealedURI(_initNotRevealedURI);
    
    }

    //////////////////////////////////////////////////////////
    //  INTERNAL FUNCTIONS  
    //////////////////////////////////////////////////////////

    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    function _beforeTokenTransfer(address _from, address _to, uint256 _tokenId, uint256 _batchSize) internal override(ERC721Enumerable) {
        require(blacklist[_tokenId] == false, "NFT_BLACKLISTED");
        if(_to == ogMinter[_tokenId]) {
            xpCount[_tokenId] = (block.timestamp - ogMintTime[_tokenId]) * (xpPerMinute / 60);
            receivingTime[_tokenId] = 0;
            
           
        } else if(_to == coldWallet[msg.sender] || _to == trustedWallet[msg.sender]) {
          
        } else {
            xpCount[_tokenId] = 0;
            captinLevel[_tokenId] = 0;
            receivingTime[_tokenId] = block.timestamp;
            rumUsed[_tokenId] = 0;
            warchestUsed[_tokenId] = 0;
            
        }
        super._beforeTokenTransfer(_from, _to, _tokenId, _batchSize);
    }

    //////////////////////////////////////////////////////////
    //  PUBLIC FUNCTIONS  
    //////////////////////////////////////////////////////////




function getLeaderboard() public view returns (LeaderboardEntry[] memory) {
    uint256 Supply = totalSupply();
    LeaderboardEntry[] memory leaderboard = new LeaderboardEntry[](Supply);

    for (uint256 i = 0; i < Supply; i++) {
        uint256 nftId = i + 1; // Count NFTs from 1 instead of 0
        leaderboard[i].nftId = nftId;
        leaderboard[i].level = getLevel(nftId);
        leaderboard[i].owner = ownerOf(nftId);
    }

    for (uint256 i = 0; i < Supply - 1; i++) {
        for (uint256 j = i + 1; j < Supply; j++) {
            if (leaderboard[j].level > leaderboard[i].level) {
                LeaderboardEntry memory temp = leaderboard[i];
                leaderboard[i] = leaderboard[j];
                leaderboard[j] = temp;
            }
        }
    }

    if (Supply > 10) {
        LeaderboardEntry[] memory top10 = new LeaderboardEntry[](10);
        for (uint256 i = 0; i < 10; i++) {
            top10[i] = leaderboard[i];
        }
        return top10;
    } else {
        return leaderboard;
    }
}





    function getCaptainRanks() public view returns (uint256[] memory) {
    uint256 Supply = totalSupply();
    uint256 delta = 0;
    uint256 gamma = 0;
    uint256 beta = 0;
    uint256 alpha = 0;

    // Calculate the number of NFTs in each level range
    for (uint256 i = 1; i < Supply; i++) {
        uint256 level = captinLevel[i];
        if (level >= 1 && level <= 25) {
            delta++;
        } else if (level >= 26 && level <= 50) {
            gamma++;
        } else if (level >= 51 && level <= 75) {
            beta++;
        } else if (level >= 76 && level <= 100) {
            alpha++;
        }
    }

    // Return the number of NFTs in each level range
    uint256[] memory ranks = new uint256[](4);
    ranks[0] = delta;
    ranks[1] = gamma;
    ranks[2] = beta;
    ranks[3] = alpha;

    return ranks;
}

   


   

    function rewardBotsETH(uint256 payoutAmount1to25,uint256 payoutAmount26to50,uint256 payoutAmount51to75,uint256 payoutAmount76to100) public onlyOwner {
        uint256 Supply = totalSupply();
        uint256 payoutTotal1to25 = 0;
        uint256 payoutTotal26to50 = 0;
        uint256 payoutTotal51to75 = 0;
        uint256 payoutTotal76to100 = 0;
        uint256 count1to25 = 0;
        uint256 count26to50 = 0;
        uint256 count51to75 = 0;
        uint256 count76to100 = 0;

            // Calculate the number of NFTs in each level range
            for (uint256 i = 1; i < Supply; i++) {
                uint256 level = captinLevel[i];
                if (level >= 1 && level <= 25) {
                    count1to25++;
                } else if (level >= 26 && level <= 50) {
                    count26to50++;
                } else if (level >= 51 && level <= 75) {
                    count51to75++;
                } else if (level >= 76 && level <= 100) {
                    count76to100++;
                }
            }

            // Calculate the payout amount for each NFT
            if (count1to25 > 0) {
                payoutTotal1to25 = payoutAmount1to25 / count1to25;
            }
            if (count26to50 > 0) {
                payoutTotal26to50 = payoutAmount26to50 / count26to50;
            }
            if (count51to75 > 0) {
                payoutTotal51to75 = payoutAmount51to75 / count51to75;
            }
            if (count76to100 > 0) {
                payoutTotal76to100 = payoutAmount76to100 / count76to100;
            }

            // Transfer the payout amount to the NFT owners
            for (uint256 i = 1; i < Supply; i++) {
                uint256 level = captinLevel[i];
                if (level >= 1 && level <= 25) {
                    payable(ownerOf(i)).transfer(payoutTotal1to25);
                } else if (level >= 26 && level <= 50) {
                    payable(ownerOf(i)).transfer(payoutTotal26to50);
                } else if (level >= 51 && level <= 75) {
                    payable(ownerOf(i)).transfer(payoutTotal51to75);
                } else if (level >= 76 && level <= 100) {
                    payable(ownerOf(i)).transfer(payoutTotal76to100);
                }
            }
        }


        function rewardBotsERC20(address tokenAddress,uint256 payoutAmount1to25,uint256 payoutAmount26to50,uint256 payoutAmount51to75,uint256 payoutAmount76to100) public onlyOwner {
            uint256 Supply = totalSupply();
            uint256 payoutTotal1to25 = 0;
            uint256 payoutTotal26to50 = 0;
            uint256 payoutTotal51to75 = 0;
            uint256 payoutTotal76to100 = 0;
            uint256 count1to25 = 0;
            uint256 count26to50 = 0;
            uint256 count51to75 = 0;
            uint256 count76to100 = 0;

            // Calculate the number of NFTs in each level range
            for (uint256 i = 1; i < Supply; i++) {
                uint256 level = captinLevel[i];
                if (level >= 1 && level <= 25) {
                    count1to25++;
                } else if (level >= 26 && level <= 50) {
                    count26to50++;
                } else if (level >= 51 && level <= 75) {
                    count51to75++;
                } else if (level >= 76 && level <= 100) {
                    count76to100++;
                }
            }

            // Calculate the payout amount for each NFT
            if (count1to25 > 0) {
                payoutTotal1to25 = payoutAmount1to25 / count1to25;
            }
            if (count26to50 > 0) {
                payoutTotal26to50 = payoutAmount26to50 / count26to50;
            }
            if (count51to75 > 0) {
                payoutTotal51to75 = payoutAmount51to75 / count51to75;
            }
            if (count76to100 > 0) {
                payoutTotal76to100 = payoutAmount76to100 / count76to100;
            }

            // Transfer the payout amount to the NFT owners
            for (uint256 i = 1; i < Supply; i++) {
                uint256 level = captinLevel[i];
                if (level >= 1 && level <= 25) {
                    IERC20(tokenAddress).transfer(ownerOf(i), payoutTotal1to25);
                } else if (level >= 26 && level <= 50) {
                    IERC20(tokenAddress).transfer(ownerOf(i), payoutTotal26to50);
                } else if (level >= 51 && level <= 75) {
                    IERC20(tokenAddress).transfer(ownerOf(i), payoutTotal51to75);
                } else if (level >= 76 && level <= 100) {
                    IERC20(tokenAddress).transfer(ownerOf(i), payoutTotal76to100);
                }
            }
        }




    





    function mint(uint256 _mintAmount) public payable {
        uint256 supply = totalSupply();
        require(_mintAmount > 0, "MINT_AMOUNT_CANNOT_BE_0");
        require(supply + _mintAmount <= maxSupply, "MAX_SUPPLY_EXCEEDED");

        if (msg.sender != owner()) {
            require(_mintAmount + addressMintedBalance[msg.sender] <= maxWalletMintAmount, "MAX_MINT_PER_WALLET_EXCEEDED");
            require(!paused, "MINT_PAUSED");
            require(_mintAmount <= maxMintAmount, "MAX_MINT_PER_TXN_EXCEEDED");
            require(msg.value >= cost * _mintAmount, "INSUFFICIENT_FUNDS");
        }

        for (uint256 i = 1; i <= _mintAmount; i++) {
            _safeMint(msg.sender, supply + i);
            uint256 mintID = supply + i;
            ogMinter[mintID] = msg.sender;
            ogMintTime[mintID] = block.timestamp;
            receivingTime[mintID] = 0;
            captinLevel[mintID] = 0;
            xpCount[mintID] = 0;
            warchestUsed[mintID] = 0;
            rumUsed[mintID] = 0;
            addressMintedBalance[msg.sender]++;
            

        }
    }

    function setColdWallet(address _wallet) public {
        coldWallet[msg.sender] = _wallet;
    }

    function setTrustedWallet(address _wallet) public {
        trustedWallet[msg.sender] = _wallet;
    }

    function getLevel(uint256 _tokenId) public view returns (uint256) {
         require(blacklist[_tokenId] == false, "NFT_BLACKLISTED");
        return captinLevel[_tokenId]; 
    }


     function useRum(uint256 _tokenId) public {
          require(blacklist[_tokenId] == false, "NFT_BLACKLISTED");
         require (rumCount[msg.sender] > 0,"No Rum Detected");
         captinLevel[_tokenId] += levelPerRum;
         rumUsed[_tokenId] += 1;
         rumCount[msg.sender] -= 1;   

        
    }


     function useWarchest(uint256 _tokenId) public {
          require(blacklist[_tokenId] == false, "NFT_BLACKLISTED");
         require (warchestCount[msg.sender] > 0,"No Warchest Detected");
         captinLevel[_tokenId] += levelPerWarChest;
         warchestUsed[_tokenId] += 1;
         warchestCount[msg.sender] -= 1;       
    }



    function BuyRum() public payable {
         
        require(msg.value >= rumCost, "INSUFFICIENT_FUNDS");
        rumCount[msg.sender] += levelPerRum;
    }

     function BuyWarchest() public payable {
          
        require(msg.value >= warchestCost, "INSUFFICIENT_FUNDS");
        warchestCount[msg.sender] += 1;
    }


    function isBlacklisted(uint256 _nftID) public view returns (bool) {
        if (blacklist[_nftID] == true) {
            return true;
        }
        return false;
    }

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

    function migrateWalletStats(address _newWallet) public {
        rumCount[_newWallet] = rumCount[msg.sender];
        warchestCount[_newWallet] = warchestCount[msg.sender];
        rumCount[msg.sender] = 0;
        warchestCount[msg.sender] = 0;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "NFT_DOES_NOT_EXIST");
        if(blacklist[tokenId] == true) {
            return blacklistURI;
        }
        if(revealed == false) {
            return notRevealedURI;
        }
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0
            ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
            : "";
    }


    //////////////////////////////////////////////////////////
    //  OWNER FUNCTIONS  
    //////////////////////////////////////////////////////////

    function depositETH() public payable onlyOwner {}

    function resetWalletStats(address _wallet) public onlyOwner {
        rumCount[_wallet] = 0;
        warchestCount[_wallet] = 0;
    }
    
   

    function airdropNFTs(address _receiver, uint256 _amount) public onlyOwner {
        uint256 supply = totalSupply();
        require(_amount > 0, "MINT_AMOUNT_CANNOT_BE_0");
        require(supply + _amount <= maxSupply, "MAX_SUPPLY_EXCEEDED");
        

        for (uint256 i = 1; i <= _amount; i++) {
            _safeMint(_receiver, supply + i);
             uint256 mintID = supply + i;
            addressMintedBalance[_receiver]++;
            ogMinter[mintID] = _receiver;
            ogMintTime[mintID] = block.timestamp;
            receivingTime[mintID] = 0;
            captinLevel[mintID] = 0;
            xpCount[mintID] = 0;
            warchestUsed[mintID] = 0;
            rumUsed[mintID] = 0;
            
        }
    }


    function blacklistNFT(uint256 _nftID, bool _state) public onlyOwner {
        blacklist[_nftID] = _state;
    }


    function reveal(bool _state) public onlyOwner {
        revealed = _state;
    }

    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }

    function setXPPerMinute(uint256 _xpPerMinute) public onlyOwner {
        xpPerMinute = _xpPerMinute;
    }

    function setRumCost(uint256 _newRumCost) public onlyOwner {
        rumCost = _newRumCost;
    }

    function setRumLevels(uint256 _newRumLevels) public onlyOwner {
        levelPerRum = _newRumLevels;
    }

    function setXPpoints(uint256 _tokenId, uint256 _amount) public onlyOwner {
        xpCount[_tokenId] = _amount;
    }

    function resetLevel(uint256 _tokenId) public onlyOwner {
        captinLevel[_tokenId] = 0;
    }

    function setWarChestLevels(uint256 _newWarChestLevels) public onlyOwner {
        levelPerWarChest = _newWarChestLevels;
    }

    function setWarChestCost(uint256 _newWarChestCost) public onlyOwner {
        warchestCost = _newWarChestCost;
    }

    function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
        maxMintAmount = _newmaxMintAmount;
    }

    function setmaxWalletMintAmount(uint256 _newmaxWalletMintAmount) public onlyOwner {
        maxWalletMintAmount = _newmaxWalletMintAmount;
    }

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedURI = _notRevealedURI;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function setBlacklistURI(string memory _newBlacklistURI) public onlyOwner {
        blacklistURI = _newBlacklistURI;
    }

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

    function pause(bool _state) public onlyOwner {
        paused = _state;
    }

    function withdrawETH() public onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    function withdrawERC20(address _tokenAddress, uint256 _tokenAmount) public virtual onlyOwner {
        IERC20(_tokenAddress).transfer(msg.sender, _tokenAmount);
    }

    function withdrawERC721(address _nftAddress, uint256 _nftID) public virtual onlyOwner {
        IERC721(_nftAddress).transferFrom(address(this), msg.sender, _nftID);
    }

    function calculateXP(uint256 _tokenId)internal view returns(uint){
         require(blacklist[_tokenId] == false, "NFT_BLACKLISTED");
        if
        (ogMinter[_tokenId] == msg.sender || trustedWallet[msg.sender] == msg.sender || coldWallet[msg.sender] == msg.sender){
    
         return (((block.timestamp - ogMintTime[_tokenId]) * xpPerMinute) / 60);
        }
        else
        return (((block.timestamp - receivingTime[_tokenId]) * xpPerMinute) / 60);
      
    }

    function _calculateXP(uint256 _tokenId) public view returns(uint){
         require(blacklist[_tokenId] == false, "NFT_BLACKLISTED");
        uint256 xpPts = calculateXP(_tokenId);
        return xpPts;
    }

     function claimXpSetLevel(uint256 _tokenId) public {
          require(blacklist[_tokenId] == false, "NFT_BLACKLISTED");
         require (captinLevel[_tokenId] <= 100, "Max Level Reached");
        uint256 rewards = calculateXP(_tokenId);
        xpCount[_tokenId] = rewards;
        uint256 levelMultiplier = warchestUsed[_tokenId] * levelPerWarChest + rumUsed[_tokenId] * levelPerRum;

        if
        (xpCount[_tokenId] >= 1 && (xpCount[_tokenId] <= 39665390)){
     

                    if 
                    (xpCount[_tokenId] >= 1 && (xpCount[_tokenId] <= 1337)){
                    captinLevel[_tokenId] = levelMultiplier + 1;
                    }
                    else if
                    (xpCount[_tokenId] >= 1338 && (xpCount[_tokenId] <= 2006)){
                    captinLevel[_tokenId] = levelMultiplier + 2;
                    }
                    else if 
                    (xpCount[_tokenId] >= 2007 && (xpCount[_tokenId] <= 3008)){
                    captinLevel[_tokenId] = levelMultiplier + 3;
                    }
                    else if
                    (xpCount[_tokenId] >= 3009 && (xpCount[_tokenId] <= 4512)){
                    captinLevel[_tokenId] = levelMultiplier + 4;
                    }
                    else if 
                    (xpCount[_tokenId] >= 4513 && (xpCount[_tokenId] <= 6769)){
                    captinLevel[_tokenId] = levelMultiplier + 5;
                    }
                    else if
                    (xpCount[_tokenId] >= 6770 && (xpCount[_tokenId] <= 10153)){
                    captinLevel[_tokenId] = levelMultiplier + 6;
                    }
                    else if 
                    (xpCount[_tokenId] >= 10154 && (xpCount[_tokenId] <= 15229)){
                    captinLevel[_tokenId] = levelMultiplier + 7;
                    }
                    else if
                    (xpCount[_tokenId] >= 15230 && (xpCount[_tokenId] <= 22844)){
                    captinLevel[_tokenId] = levelMultiplier + 8;
                    }
                    else if 
                    (xpCount[_tokenId] >= 22845 && (xpCount[_tokenId] <= 34266)){
                    captinLevel[_tokenId] = levelMultiplier + 9;
                    }
                    else if
                    (xpCount[_tokenId] >= 34267 && (xpCount[_tokenId] <= 51399)){
                    captinLevel[_tokenId] = levelMultiplier + 10;
                    }
                    else if 
                    (xpCount[_tokenId] >= 51400 && (xpCount[_tokenId] <= 77098)){
                    captinLevel[_tokenId] = levelMultiplier + 11;
                    }
                    else if
                    (xpCount[_tokenId] >= 77099 && (xpCount[_tokenId] <= 115647)){
                    captinLevel[_tokenId] = levelMultiplier + 12;
                    }
                    else if 
                    (xpCount[_tokenId] >= 115648 && (xpCount[_tokenId] <= 173471)){
                    captinLevel[_tokenId] = levelMultiplier + 13;
                    }
                    else if
                    (xpCount[_tokenId] >= 173472 && (xpCount[_tokenId] <= 260206)){
                    captinLevel[_tokenId] = levelMultiplier + 14;
                    }
                    else if 
                    (xpCount[_tokenId] >= 260207 && (xpCount[_tokenId] <= 390309)){
                    captinLevel[_tokenId] = levelMultiplier + 15;
                    }
                    else if
                    (xpCount[_tokenId] >= 390310 && (xpCount[_tokenId] <= 585464)){
                    captinLevel[_tokenId] = levelMultiplier + 16;
                    }
                    else if 
                    (xpCount[_tokenId] >= 585465 && (xpCount[_tokenId] <= 878196)){
                    captinLevel[_tokenId] = levelMultiplier + 17;
                    }
                    else if
                    (xpCount[_tokenId] >= 878197 && (xpCount[_tokenId] <= 1317294)){
                    captinLevel[_tokenId] = levelMultiplier + 18;
                    }
                    else if 
                    (xpCount[_tokenId] >= 1317295 && (xpCount[_tokenId] <= 1975941)){
                    captinLevel[_tokenId] = levelMultiplier + 19;
                    }
                    else if
                    (xpCount[_tokenId] >= 1975942 && (xpCount[_tokenId] <= 2963912)){
                    captinLevel[_tokenId] = levelMultiplier + 20;
                    }
                    else if 
                    (xpCount[_tokenId] >= 2963913 && (xpCount[_tokenId] <= 4445868)){
                    captinLevel[_tokenId] = levelMultiplier + 21;
                    }
                    else if
                    (xpCount[_tokenId] >= 4445869 && (xpCount[_tokenId] <= 6668802)){
                    captinLevel[_tokenId] = levelMultiplier + 22;
                    }
                    else if 
                    (xpCount[_tokenId] >= 6668803 && (xpCount[_tokenId] <= 10003204)){
                    captinLevel[_tokenId] = levelMultiplier + 23;
                    }
                    else if
                    (xpCount[_tokenId] >= 10003205 && (xpCount[_tokenId] <= 15004805)){
                    captinLevel[_tokenId] = levelMultiplier + 24;
                    }
                    else if 
                    (xpCount[_tokenId] >= 15004806 && (xpCount[_tokenId] <= 22507208)){
                    captinLevel[_tokenId] = levelMultiplier + 25;
                    }
                    else if
                    (xpCount[_tokenId] >= 22507209 && (xpCount[_tokenId] <= 25208073)){
                    captinLevel[_tokenId] = levelMultiplier + 26;
                    }
                    else if 
                    (xpCount[_tokenId] >= 25208074 && (xpCount[_tokenId] <= 28233042)){
                    captinLevel[_tokenId] = levelMultiplier + 27;
                    }
                    else if
                    (xpCount[_tokenId] >= 28233043 && (xpCount[_tokenId] <= 31621007)){
                    captinLevel[_tokenId] = levelMultiplier + 28;
                    }
                    else if 
                    (xpCount[_tokenId] >= 31621008 && (xpCount[_tokenId] <= 35415528)){
                    captinLevel[_tokenId] = levelMultiplier + 29;
                    }
                    else if
                    (xpCount[_tokenId] >= 35415529 && (xpCount[_tokenId] <= 39665390)){
                    captinLevel[_tokenId] = levelMultiplier + 30;
                    }
        }

        else if
        (xpCount[_tokenId] >= 39665391 && (xpCount[_tokenId] <= 514214641)){


                        if 
                        (xpCount[_tokenId] >= 39665391 && (xpCount[_tokenId] <= 44425238)){
                        captinLevel[_tokenId] = levelMultiplier + 31;
                        }
                        else if
                        (xpCount[_tokenId] >= 44425239 && (xpCount[_tokenId] <= 49756266)){
                        captinLevel[_tokenId] = levelMultiplier + 32;
                        }
                        else if 
                        (xpCount[_tokenId] >= 49756267 && (xpCount[_tokenId] <= 55727018)){
                        captinLevel[_tokenId] = levelMultiplier + 33;
                        }
                        else if
                        (xpCount[_tokenId] >= 55727019 && (xpCount[_tokenId] <= 62414260)){
                        captinLevel[_tokenId] = levelMultiplier + 34;
                        }
                        else if 
                        (xpCount[_tokenId] >= 62414261 && (xpCount[_tokenId] <= 69903972)){
                        captinLevel[_tokenId] = levelMultiplier + 35;
                        }
                        else if
                        (xpCount[_tokenId] >= 69903973 && (xpCount[_tokenId] <= 78292448)){
                        captinLevel[_tokenId] = levelMultiplier + 36;
                        }
                        else if 
                        (xpCount[_tokenId] >= 78292449 && (xpCount[_tokenId] <= 87687542)){
                        captinLevel[_tokenId] = levelMultiplier + 37;
                        }
                        else if
                        (xpCount[_tokenId] >= 87687543 && (xpCount[_tokenId] <= 98210047)){
                        captinLevel[_tokenId] = levelMultiplier + 38;
                        }
                        else if 
                        (xpCount[_tokenId] >= 98210048 && (xpCount[_tokenId] <= 109995253)){
                        captinLevel[_tokenId] = levelMultiplier + 39;
                        }
                        else if
                        (xpCount[_tokenId] >= 109995254 && (xpCount[_tokenId] <= 123194683)){
                        captinLevel[_tokenId] = levelMultiplier + 40;
                        }
                        else if 
                        (xpCount[_tokenId] >= 123194684 && (xpCount[_tokenId] <= 137978045)){
                        captinLevel[_tokenId] = levelMultiplier + 41;
                        }
                        else if
                        (xpCount[_tokenId] >= 137978046 && (xpCount[_tokenId] <= 154535410)){
                        captinLevel[_tokenId] = levelMultiplier + 42;
                        }
                        else if 
                        (xpCount[_tokenId] >= 154535411 && (xpCount[_tokenId] <= 173079660)){
                        captinLevel[_tokenId] = levelMultiplier + 43;
                        }
                        else if
                        (xpCount[_tokenId] >= 173079661 && (xpCount[_tokenId] <= 193849219)){
                        captinLevel[_tokenId] = levelMultiplier + 44;
                        }
                        else if 
                        (xpCount[_tokenId] >= 193849220 && (xpCount[_tokenId] <= 217111125)){
                        captinLevel[_tokenId] = levelMultiplier + 45;
                        }
                        else if
                        (xpCount[_tokenId] >= 217111126 && (xpCount[_tokenId] <= 243164460)){
                        captinLevel[_tokenId] = levelMultiplier + 46;
                        }
                        else if 
                        (xpCount[_tokenId] >= 243164461 && (xpCount[_tokenId] <= 272344195)){
                        captinLevel[_tokenId] = levelMultiplier + 47;
                        }
                        else if
                        (xpCount[_tokenId] >= 272344196 && (xpCount[_tokenId] <= 305025499)){
                        captinLevel[_tokenId] = levelMultiplier + 48;
                        }
                        else if 
                        (xpCount[_tokenId] >= 305025500 && (xpCount[_tokenId] <= 341628559)){
                        captinLevel[_tokenId] = levelMultiplier + 49;
                        }
                        else if
                        (xpCount[_tokenId] >= 341628560 && (xpCount[_tokenId] <= 382623986)){
                        captinLevel[_tokenId] = levelMultiplier + 50;
                        }
                        else if 
                        (xpCount[_tokenId] >= 382623987 && (xpCount[_tokenId] <= 394102705)){
                        captinLevel[_tokenId] = levelMultiplier + 51;
                        }
                        else if
                        (xpCount[_tokenId] >= 394102706 && (xpCount[_tokenId] <= 405925786)){
                        captinLevel[_tokenId] = levelMultiplier + 52;
                        }
                        else if 
                        (xpCount[_tokenId] >= 405925787 && (xpCount[_tokenId] <= 418103560)){
                        captinLevel[_tokenId] = levelMultiplier + 53;
                        }
                        else if
                        (xpCount[_tokenId] >= 418103561 && (xpCount[_tokenId] <= 430646667)){
                        captinLevel[_tokenId] = levelMultiplier + 54;
                        }
                        else if 
                        (xpCount[_tokenId] >= 430646668 && (xpCount[_tokenId] <= 443566067)){
                        captinLevel[_tokenId] = levelMultiplier + 55;
                        }
                        else if
                        (xpCount[_tokenId] >= 443566068 && (xpCount[_tokenId] <= 456873049)){
                        captinLevel[_tokenId] = levelMultiplier + 56;
                        }
                        else if 
                        (xpCount[_tokenId] >= 456873050 && (xpCount[_tokenId] <= 470579240)){
                        captinLevel[_tokenId] = levelMultiplier + 57;
                        }
                        else if
                        (xpCount[_tokenId] >= 470579241 && (xpCount[_tokenId] <= 484696618)){
                        captinLevel[_tokenId] = levelMultiplier + 58;
                        }
                        else if 
                        (xpCount[_tokenId] >= 484696619 && (xpCount[_tokenId] <= 499237516)){
                        captinLevel[_tokenId] = levelMultiplier + 59;
                        }
                        else if
                        (xpCount[_tokenId] >= 499237517 && (xpCount[_tokenId] <= 514214641)){
                        captinLevel[_tokenId] = levelMultiplier + 60;
                        }
        }



        else if
        (xpCount[_tokenId] >= 514214642 && (xpCount[_tokenId] <= 2574099360)){


                        if 
                        (xpCount[_tokenId] >= 514214642 && (xpCount[_tokenId] <= 529641081)){
                        captinLevel[_tokenId] = levelMultiplier + 61;
                        }
                        else if
                        (xpCount[_tokenId] >= 529641082 && (xpCount[_tokenId] <= 545530313)){
                        captinLevel[_tokenId] = levelMultiplier + 62;
                        }
                        else if 
                        (xpCount[_tokenId] >= 545530314 && (xpCount[_tokenId] <= 561896223)){
                        captinLevel[_tokenId] = levelMultiplier + 63;
                        }
                        else if
                        (xpCount[_tokenId] >= 561896224 && (xpCount[_tokenId] <= 578753109)){
                        captinLevel[_tokenId] = levelMultiplier + 64;
                        }
                        else if 
                        (xpCount[_tokenId] >= 578753110 && (xpCount[_tokenId] <= 596115703)){
                        captinLevel[_tokenId] = levelMultiplier + 65;
                        }
                        else if
                        (xpCount[_tokenId] >= 596115704 && (xpCount[_tokenId] <= 613999174)){
                        captinLevel[_tokenId] = levelMultiplier + 66;
                        }
                        else if 
                        (xpCount[_tokenId] >= 613999175 && (xpCount[_tokenId] <= 632419149)){
                        captinLevel[_tokenId] = levelMultiplier + 67;
                        }
                        else if
                        (xpCount[_tokenId] >= 632419150 && (xpCount[_tokenId] <= 651391723)){
                        captinLevel[_tokenId] = levelMultiplier + 68;
                        }
                        else if 
                        (xpCount[_tokenId] >= 651391724 && (xpCount[_tokenId] <= 670933475)){
                        captinLevel[_tokenId] = levelMultiplier + 69;
                        }
                        else if
                        (xpCount[_tokenId] >= 670933476 && (xpCount[_tokenId] <= 691061479)){
                        captinLevel[_tokenId] = levelMultiplier + 70;
                        }
                        else if 
                        (xpCount[_tokenId] >= 691061480 && (xpCount[_tokenId] <= 711793324)){
                        captinLevel[_tokenId] = levelMultiplier + 71;
                        }
                        else if
                        (xpCount[_tokenId] >= 711793325 && (xpCount[_tokenId] <= 733147123)){
                        captinLevel[_tokenId] = levelMultiplier + 72;
                        }
                        else if 
                        (xpCount[_tokenId] >= 733147124 && (xpCount[_tokenId] <= 755141537)){
                        captinLevel[_tokenId] = levelMultiplier + 73;
                        }
                        else if
                        (xpCount[_tokenId] >= 755141538 && (xpCount[_tokenId] <= 777795783)){
                        captinLevel[_tokenId] = levelMultiplier + 74;
                        }
                        else if 
                        (xpCount[_tokenId] >= 777795784 && (xpCount[_tokenId] <= 801129657)){
                        captinLevel[_tokenId] = levelMultiplier + 75;
                        }
                        else if
                        (xpCount[_tokenId] >= 801129658 && (xpCount[_tokenId] <= 825163546)){
                        captinLevel[_tokenId] = levelMultiplier + 76;
                        }
                        else if 
                        (xpCount[_tokenId] >= 825163547 && (xpCount[_tokenId] <= 849918453)){
                        captinLevel[_tokenId] = levelMultiplier + 77;
                        }
                        else if
                        (xpCount[_tokenId] >= 849918454 && (xpCount[_tokenId] <= 875416006)){
                        captinLevel[_tokenId] = levelMultiplier + 78;
                        }
                        else if 
                        (xpCount[_tokenId] >= 875416007 && (xpCount[_tokenId] <= 901678487)){
                        captinLevel[_tokenId] = levelMultiplier + 79;
                        }
                        else if
                        (xpCount[_tokenId] >= 901678488 && (xpCount[_tokenId] <= 928728841)){
                        captinLevel[_tokenId] = levelMultiplier + 80;
                        }
                        else if 
                        (xpCount[_tokenId] >= 928728842 && (xpCount[_tokenId] <= 956590706)){
                        captinLevel[_tokenId] = levelMultiplier + 81;
                        }
                        else if
                        (xpCount[_tokenId] >= 956590707 && (xpCount[_tokenId] <= 985288428)){
                        captinLevel[_tokenId] = levelMultiplier + 82;
                        }
                        else if 
                        (xpCount[_tokenId] >= 985288429 && (xpCount[_tokenId] <= 1014847080)){
                        captinLevel[_tokenId] = levelMultiplier + 83;
                        }
                        else if
                        (xpCount[_tokenId] >= 1014847081 && (xpCount[_tokenId] <= 1045292493)){
                        captinLevel[_tokenId] = levelMultiplier + 84;
                        }
                        else if 
                        (xpCount[_tokenId] >= 1045292494 && (xpCount[_tokenId] <= 1076651268)){
                        captinLevel[_tokenId] = levelMultiplier + 85;
                        }
                        else if
                        (xpCount[_tokenId] >= 1076651269 && (xpCount[_tokenId] <= 1108950806)){
                        captinLevel[_tokenId] = levelMultiplier + 86;
                        }
                        else if 
                        (xpCount[_tokenId] >= 1108950807 && (xpCount[_tokenId] <= 1142219330)){
                        captinLevel[_tokenId] = levelMultiplier + 87;
                        }
                        else if
                        (xpCount[_tokenId] >= 1142219331 && (xpCount[_tokenId] <= 1176485910)){
                        captinLevel[_tokenId] = levelMultiplier + 88;
                        }
                        else if 
                        (xpCount[_tokenId] >= 1176485911 && (xpCount[_tokenId] <= 1211780487)){
                        captinLevel[_tokenId] = levelMultiplier + 89;
                        }
                        else if
                        (xpCount[_tokenId] >= 1211780488 && (xpCount[_tokenId] <= 1248133902)){
                        captinLevel[_tokenId] = levelMultiplier + 90;
                        }
                        else if 
                        (xpCount[_tokenId] >= 1248133903 && (xpCount[_tokenId] <= 1285577919)){
                        captinLevel[_tokenId] = levelMultiplier + 91;
                        }
                        else if
                        (xpCount[_tokenId] >= 1285577920 && (xpCount[_tokenId] <= 1324145256)){
                        captinLevel[_tokenId] = levelMultiplier + 92;
                        }
                        else if 
                        (xpCount[_tokenId] >= 1324145257 && (xpCount[_tokenId] <= 1363869614)){
                        captinLevel[_tokenId] = levelMultiplier + 93;
                        }
                        else if
                        (xpCount[_tokenId] >= 1363869615 && (xpCount[_tokenId] <= 1404785702)){
                        captinLevel[_tokenId] = levelMultiplier + 94;
                        }
                        else if 
                        (xpCount[_tokenId] >= 1404785703 && (xpCount[_tokenId] <= 1446929273)){
                        captinLevel[_tokenId] = levelMultiplier + 95;
                        }
                        else if
                        (xpCount[_tokenId] >= 1446929274 && (xpCount[_tokenId] <= 1490337152)){
                        captinLevel[_tokenId] = levelMultiplier + 96;
                        }
                        else if 
                        (xpCount[_tokenId] >= 1490337153 && (xpCount[_tokenId] <= 1535047266)){
                        captinLevel[_tokenId] = levelMultiplier + 97;
                        }
                        else if
                        (xpCount[_tokenId] >= 1535047267 && (xpCount[_tokenId] <= 1581098684)){
                        captinLevel[_tokenId] = levelMultiplier + 98;
                        }
                        else if 
                        (xpCount[_tokenId] >= 1581098685 && (xpCount[_tokenId] <= 1628531645)){
                        captinLevel[_tokenId] = levelMultiplier + 99;
                        }
                        else if
                        (xpCount[_tokenId] >= 1628531646 && (xpCount[_tokenId] <= 2574099360)){
                        captinLevel[_tokenId] = levelMultiplier + 100;
                        }
        }
        
                        
    }

                
      
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedURI","type":"string"},{"internalType":"string","name":"_initBlacklistURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BuyRum","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"BuyWarchest","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"_calculateXP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"airdropNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftID","type":"uint256"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"blacklistNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blacklistURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"captinLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claimXpSetLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"coldWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCaptainRanks","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLeaderboard","outputs":[{"components":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"internalType":"struct ALLBOTS.LeaderboardEntry[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_nftID","type":"uint256"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"levelPerRum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"levelPerWarChest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"migrateWalletStats","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ogMintTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ogMinter","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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"receivingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"resetLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"resetWalletStats","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"payoutAmount1to25","type":"uint256"},{"internalType":"uint256","name":"payoutAmount26to50","type":"uint256"},{"internalType":"uint256","name":"payoutAmount51to75","type":"uint256"},{"internalType":"uint256","name":"payoutAmount76to100","type":"uint256"}],"name":"rewardBotsERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"payoutAmount1to25","type":"uint256"},{"internalType":"uint256","name":"payoutAmount26to50","type":"uint256"},{"internalType":"uint256","name":"payoutAmount51to75","type":"uint256"},{"internalType":"uint256","name":"payoutAmount76to100","type":"uint256"}],"name":"rewardBotsETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rumCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rumCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rumUsed","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":"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":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBlacklistURI","type":"string"}],"name":"setBlacklistURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setColdWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRumCost","type":"uint256"}],"name":"setRumCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRumLevels","type":"uint256"}],"name":"setRumLevels","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setTrustedWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWarChestCost","type":"uint256"}],"name":"setWarChestCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWarChestLevels","type":"uint256"}],"name":"setWarChestLevels","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_xpPerMinute","type":"uint256"}],"name":"setXPPerMinute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setXPpoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxWalletMintAmount","type":"uint256"}],"name":"setmaxWalletMintAmount","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[{"internalType":"address","name":"","type":"address"}],"name":"trustedWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"useRum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"useWarchest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"warchestCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"warchestCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"warchestUsed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nftAddress","type":"address"},{"internalType":"uint256","name":"_nftID","type":"uint256"}],"name":"withdrawERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"xpCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xpPerMinute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a09081526200002891600e91906200022d565b506706f05b59d3b20000600f8190556064601055600260118190556012556013805461ffff191661010117905560178190556001601855601a55600a601b55610539601c553480156200007a57600080fd5b506040516200640e3803806200640e8339810160408190526200009d91620003a0565b845185908590620000b69060009060208501906200022d565b508051620000cc9060019060208401906200022d565b505050620000e9620000e36200011560201b60201c565b62000119565b620000f4836200016b565b620000ff816200018e565b6200010a82620001ad565b5050505050620004be565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000175620001cc565b80516200018a90600b9060208401906200022d565b5050565b62000198620001cc565b80516200018a90600c9060208401906200022d565b620001b7620001cc565b80516200018a90600d9060208401906200022d565b600a546001600160a01b031633146200022b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b8280546200023b9062000481565b90600052602060002090601f0160209004810192826200025f5760008555620002aa565b82601f106200027a57805160ff1916838001178555620002aa565b82800160010185558215620002aa579182015b82811115620002aa5782518255916020019190600101906200028d565b50620002b8929150620002bc565b5090565b5b80821115620002b85760008155600101620002bd565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002fb57600080fd5b81516001600160401b0380821115620003185762000318620002d3565b604051601f8301601f19908116603f01168101908282118183101715620003435762000343620002d3565b816040528381526020925086838588010111156200036057600080fd5b600091505b8382101562000384578582018301518183018401529082019062000365565b83821115620003965760008385830101525b9695505050505050565b600080600080600060a08688031215620003b957600080fd5b85516001600160401b0380821115620003d157600080fd5b620003df89838a01620002e9565b96506020880151915080821115620003f657600080fd5b6200040489838a01620002e9565b955060408801519150808211156200041b57600080fd5b6200042989838a01620002e9565b945060608801519150808211156200044057600080fd5b6200044e89838a01620002e9565b935060808801519150808211156200046557600080fd5b506200047488828901620002e9565b9150509295509295909350565b600181811c908216806200049657607f821691505b60208210811415620004b857634e487b7160e01b600052602260045260246000fd5b50919050565b615f4080620004ce6000396000f3fe6080604052600436106104c05760003560e01c8063778afd4111610276578063c581faf81161014f578063e086e5ec116100c1578063f2c4ce1e11610085578063f2c4ce1e14610f91578063f2fde38b14610fb1578063f3e414f814610fd1578063f6326fb314610ff1578063fc23d3d714610ff9578063ff9e3e721461101957600080fd5b8063e086e5ec14610efc578063e29db9a114610f11578063e6c843b114610f31578063e985e9c514610f51578063eb6e1caa14610f7157600080fd5b8063ca283bd611610113578063ca283bd614610e30578063cbcc40a914610e66578063cca9d14f14610e86578063d3dcf0e914610ea6578063d5abeb0114610ec6578063da3ef23f14610edc57600080fd5b8063c581faf814610d81578063c668286214610da1578063c7ee289214610db6578063c87b56dd14610de3578063c880534b14610e0357600080fd5b80639cc458f4116101e8578063a5f2c7e4116101ac578063a5f2c7e414610c76578063b88d4fde14610ca2578063bd40f69514610cc2578063bf487dd614610cd7578063bfe5af2c14610ced578063c0d8691614610d5457600080fd5b80639cc458f414610bd6578063a0712d6814610bf6578063a0a24bf414610c09578063a1db978214610c36578063a22cb46514610c5657600080fd5b80638bb7dabd1161023a5780638bb7dabd14610b205780638da5cb5b14610b36578063940cd05b14610b5457806395d89b4114610b74578063976d530914610b895780639a28d0f614610ba957600080fd5b8063778afd4114610a785780637f00c7a614610a8057806386481d4014610aa0578063885ac45914610ac057806389a56b2f14610ad657600080fd5b806342842e0e116103a857806354e9e7931161031a57806366be0cc1116102de57806366be0cc1146109c15780636c0360eb146109f75780636d763a6e14610a0c57806370a0823114610a2e578063715018a614610a4e5780637225038014610a6357600080fd5b806354e9e7931461092757806355f804b3146109475780635c975abb146109675780635ddcc685146109815780636352211e146109a157600080fd5b806348e5db761161036c57806348e5db76146108725780634abf3346146108885780634d1ffe7b146108a85780634f6ccce7146108c857806351830227146108e8578063518fa91c1461090757600080fd5b806342842e0e146107ea5780634358fe891461080a578063438b63001461081257806344a0d68a146108325780634752f9ef1461085257600080fd5b806318160ddd116104415780632c2f1291116104055780632c2f1291146107225780632c87510d1461074f5780632f745c591461077157806331c923e1146107915780633b00878d146107a7578063421b7ea2146107bd57600080fd5b806318160ddd1461068a57806318cae2691461069f578063239c70ae146106cc57806323b872dd146106e2578063297b9e241461070257600080fd5b806306fdde031161048857806306fdde03146105d4578063081812fc146105f6578063095ea7b3146106165780630f2a09191461063657806313faede61461066657600080fd5b806301ffc9a7146104c557806302329a29146104fa5780630492f7501461051c57806304e111e91461056a57806306087e5b1461058a575b600080fd5b3480156104d157600080fd5b506104e56104e036600461562e565b611039565b60405190151581526020015b60405180910390f35b34801561050657600080fd5b5061051a610515366004615659565b611064565b005b34801561052857600080fd5b5061055261053736600461568d565b601d602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016104f1565b34801561057657600080fd5b5061051a610585366004615734565b61107f565b34801561059657600080fd5b5061051a6105a536600461568d565b336000908152601d6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b3480156105e057600080fd5b506105e961109e565b6040516104f191906157d5565b34801561060257600080fd5b506105526106113660046157e8565b611130565b34801561062257600080fd5b5061051a610631366004615801565b611157565b34801561064257600080fd5b506104e56106513660046157e8565b60156020526000908152604090205460ff1681565b34801561067257600080fd5b5061067c600f5481565b6040519081526020016104f1565b34801561069657600080fd5b5060085461067c565b3480156106ab57600080fd5b5061067c6106ba36600461568d565b60146020526000908152604090205481565b3480156106d857600080fd5b5061067c60115481565b3480156106ee57600080fd5b5061051a6106fd36600461582b565b611272565b34801561070e57600080fd5b5061051a61071d3660046157e8565b6112a3565b34801561072e57600080fd5b5061067c61073d3660046157e8565b60226020526000908152604090205481565b34801561075b57600080fd5b506107646112b0565b6040516104f19190615867565b34801561077d57600080fd5b5061067c61078c366004615801565b61143e565b34801561079d57600080fd5b5061067c60175481565b3480156107b357600080fd5b5061067c60185481565b3480156107c957600080fd5b5061067c6107d83660046157e8565b60246020526000908152604090205481565b3480156107f657600080fd5b5061051a61080536600461582b565b6114d4565b61051a6114ef565b34801561081e57600080fd5b5061076461082d36600461568d565b61153a565b34801561083e57600080fd5b5061051a61084d3660046157e8565b6115dc565b34801561085e57600080fd5b506104e561086d3660046157e8565b6115e9565b34801561087e57600080fd5b5061067c60125481565b34801561089457600080fd5b5061051a6108a33660046158ab565b611615565b3480156108b457600080fd5b5061051a6108c33660046157e8565b6118f2565b3480156108d457600080fd5b5061067c6108e33660046157e8565b6118ff565b3480156108f457600080fd5b506013546104e590610100900460ff1681565b34801561091357600080fd5b5061051a6109223660046157e8565b611992565b34801561093357600080fd5b5061051a6109423660046158dd565b611a86565b34801561095357600080fd5b5061051a610962366004615734565b611aae565b34801561097357600080fd5b506013546104e59060ff1681565b34801561098d57600080fd5b5061051a61099c3660046157e8565b611ac9565b3480156109ad57600080fd5b506105526109bc3660046157e8565b611ae2565b3480156109cd57600080fd5b506105526109dc3660046157e8565b601f602052600090815260409020546001600160a01b031681565b348015610a0357600080fd5b506105e9611b17565b348015610a1857600080fd5b50610a21611ba5565b6040516104f1919061590d565b348015610a3a57600080fd5b5061067c610a4936600461568d565b611e59565b348015610a5a57600080fd5b5061051a611edf565b348015610a6f57600080fd5b506105e9611ef3565b61051a611f00565b348015610a8c57600080fd5b5061051a610a9b3660046157e8565b611f42565b348015610aac57600080fd5b5061067c610abb3660046157e8565b611f4f565b348015610acc57600080fd5b5061067c601a5481565b348015610ae257600080fd5b5061051a610af136600461568d565b336000908152601e6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b348015610b2c57600080fd5b5061067c601b5481565b348015610b4257600080fd5b50600a546001600160a01b0316610552565b348015610b6057600080fd5b5061051a610b6f366004615659565b611f91565b348015610b8057600080fd5b506105e9611fb3565b348015610b9557600080fd5b5061051a610ba43660046157e8565b611fc2565b348015610bb557600080fd5b5061067c610bc436600461568d565b60196020526000908152604090205481565b348015610be257600080fd5b5061051a610bf13660046157e8565b611fcf565b61051a610c043660046157e8565b6120b6565b348015610c1557600080fd5b5061067c610c243660046157e8565b60256020526000908152604090205481565b348015610c4257600080fd5b5061051a610c51366004615801565b612300565b348015610c6257600080fd5b5061051a610c7136600461596f565b612388565b348015610c8257600080fd5b5061067c610c913660046157e8565b602080526000908152604090205481565b348015610cae57600080fd5b5061051a610cbd36600461599b565b612393565b348015610cce57600080fd5b506105e96123cb565b348015610ce357600080fd5b5061067c601c5481565b348015610cf957600080fd5b5061051a610d0836600461568d565b33600081815260166020908152604080832080546001600160a01b0396909616808552828520969096558484526019909252808320805495845290832094909455918152908190559055565b348015610d6057600080fd5b5061067c610d6f3660046157e8565b60236020526000908152604090205481565b348015610d8d57600080fd5b5061067c610d9c3660046157e8565b6123d8565b348015610dad57600080fd5b506105e9612419565b348015610dc257600080fd5b5061067c610dd136600461568d565b60166020526000908152604090205481565b348015610def57600080fd5b506105e9610dfe3660046157e8565b612426565b348015610e0f57600080fd5b5061067c610e1e3660046157e8565b60216020526000908152604090205481565b348015610e3c57600080fd5b50610552610e4b36600461568d565b601e602052600090815260409020546001600160a01b031681565b348015610e7257600080fd5b5061051a610e81366004615a17565b61259a565b348015610e9257600080fd5b5061051a610ea1366004615a59565b6128f0565b348015610eb257600080fd5b5061051a610ec136600461568d565b61290a565b348015610ed257600080fd5b5061067c60105481565b348015610ee857600080fd5b5061051a610ef7366004615734565b612939565b348015610f0857600080fd5b5061051a612954565b348015610f1d57600080fd5b5061051a610f2c366004615801565b612998565b348015610f3d57600080fd5b5061051a610f4c3660046157e8565b612abd565b348015610f5d57600080fd5b506104e5610f6c366004615a7b565b612aca565b348015610f7d57600080fd5b5061051a610f8c3660046157e8565b612af8565b348015610f9d57600080fd5b5061051a610fac366004615734565b612b05565b348015610fbd57600080fd5b5061051a610fcc36600461568d565b612b20565b348015610fdd57600080fd5b5061051a610fec366004615801565b612b96565b61051a612c08565b34801561100557600080fd5b5061051a6110143660046157e8565b612c10565b34801561102557600080fd5b5061051a6110343660046157e8565b6147f9565b60006001600160e01b0319821663780e9d6360e01b148061105e575061105e82614806565b92915050565b61106c614856565b6013805460ff1916911515919091179055565b611087614856565b805161109a90600c906020840190615555565b5050565b6060600080546110ad90615aae565b80601f01602080910402602001604051908101604052809291908181526020018280546110d990615aae565b80156111265780601f106110fb57610100808354040283529160200191611126565b820191906000526020600020905b81548152906001019060200180831161110957829003601f168201915b5050505050905090565b600061113b826148b0565b506000908152600460205260409020546001600160a01b031690565b600061116282611ae2565b9050806001600160a01b0316836001600160a01b031614156111d55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806111f157506111f18133612aca565b6112635760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016111cc565b61126d83836148d5565b505050565b61127c3382614943565b6112985760405162461bcd60e51b81526004016111cc90615ae9565b61126d8383836149a2565b6112ab614856565b601b55565b606060006112bd60085490565b9050600080808060015b8581101561139157600081815260256020526040902054600181108015906112f0575060198111155b1561130757856112ff81615b4c565b96505061137e565b601a8110158015611319575060328111155b15611330578461132881615b4c565b95505061137e565b603381101580156113425750604b8111155b15611359578361135181615b4c565b94505061137e565b604c811015801561136b575060648111155b1561137e578261137a81615b4c565b9350505b508061138981615b4c565b9150506112c7565b5060408051600480825260a082019092526000916020820160808036833701905050905084816000815181106113c9576113c9615b67565b60200260200101818152505083816001815181106113e9576113e9615b67565b602002602001018181525050828160028151811061140957611409615b67565b602002602001018181525050818160038151811061142957611429615b67565b60209081029190910101529695505050505050565b600061144983611e59565b82106114ab5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016111cc565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61126d83838360405180602001604052806000815250612393565b6017543410156115115760405162461bcd60e51b81526004016111cc90615b7d565b6018543360009081526016602052604081208054909190611533908490615ba9565b9091555050565b6060600061154783611e59565b905060008167ffffffffffffffff811115611564576115646156a8565b60405190808252806020026020018201604052801561158d578160200160208202803683370190505b50905060005b828110156115d4576115a5858261143e565b8282815181106115b7576115b7615b67565b6020908102919091010152806115cc81615b4c565b915050611593565b509392505050565b6115e4614856565b600f55565b60008181526015602052604081205460ff1615156001141561160d57506001919050565b506000919050565b61161d614856565b600061162860085490565b905060008080808080808060015b89811015611700576000818152602560205260409020546001811080159061165f575060198111155b15611676578561166e81615b4c565b9650506116ed565b601a8110158015611688575060328111155b1561169f578461169781615b4c565b9550506116ed565b603381101580156116b15750604b8111155b156116c857836116c081615b4c565b9450506116ed565b604c81101580156116da575060648111155b156116ed57826116e981615b4c565b9350505b50806116f881615b4c565b915050611636565b50831561171457611711848e615bc1565b97505b821561172757611724838d615bc1565b96505b811561173a57611737828c615bc1565b95505b801561174d5761174a818b615bc1565b94505b60015b898110156118e25760008181526025602052604090205460018110801590611779575060198111155b156117c55761178782611ae2565b6001600160a01b03166108fc8b9081150290604051600060405180830381858888f193505050501580156117bf573d6000803e3d6000fd5b506118cf565b601a81101580156117d7575060328111155b1561181d576117e582611ae2565b6001600160a01b03166108fc8a9081150290604051600060405180830381858888f193505050501580156117bf573d6000803e3d6000fd5b6033811015801561182f5750604b8111155b156118755761183d82611ae2565b6001600160a01b03166108fc899081150290604051600060405180830381858888f193505050501580156117bf573d6000803e3d6000fd5b604c8110158015611887575060648111155b156118cf5761189582611ae2565b6001600160a01b03166108fc889081150290604051600060405180830381858888f193505050501580156118cd573d6000803e3d6000fd5b505b50806118da81615b4c565b915050611750565b5050505050505050505050505050565b6118fa614856565b601c55565b600061190a60085490565b821061196d5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016111cc565b6008828154811061198057611980615b67565b90600052602060002001549050919050565b60008181526015602052604090205460ff16156119c15760405162461bcd60e51b81526004016111cc90615be3565b33600090815260196020526040902054611a145760405162461bcd60e51b8152602060048201526014602482015273139bc815d85c98da195cdd0811195d1958dd195960621b60448201526064016111cc565b601b5460008281526025602052604081208054909190611a35908490615ba9565b90915550506000818152602360205260408120805460019290611a59908490615ba9565b9091555050336000908152601960205260408120805460019290611a7e908490615c0c565b909155505050565b611a8e614856565b600091825260156020526040909120805460ff1916911515919091179055565b611ab6614856565b805161109a90600b906020840190615555565b611ad1614856565b600090815260256020526040812055565b6000818152600260205260408120546001600160a01b03168061105e5760405162461bcd60e51b81526004016111cc90615c23565b600b8054611b2490615aae565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5090615aae565b8015611b9d5780601f10611b7257610100808354040283529160200191611b9d565b820191906000526020600020905b815481529060010190602001808311611b8057829003601f168201915b505050505081565b60606000611bb260085490565b905060008167ffffffffffffffff811115611bcf57611bcf6156a8565b604051908082528060200260200182016040528015611c0857816020015b611bf56155d9565b815260200190600190039081611bed5790505b50905060005b82811015611cb9576000611c23826001615ba9565b905080838381518110611c3857611c38615b67565b602090810291909101015152611c4d81611f4f565b838381518110611c5f57611c5f615b67565b60200260200101516020018181525050611c7881611ae2565b838381518110611c8a57611c8a615b67565b60209081029190910101516001600160a01b039091166040909101525080611cb181615b4c565b915050611c0e565b5060005b611cc8600184615c0c565b811015611dc3576000611cdc826001615ba9565b90505b83811015611db057828281518110611cf957611cf9615b67565b602002602001015160200151838281518110611d1757611d17615b67565b6020026020010151602001511115611d9e576000838381518110611d3d57611d3d615b67565b60200260200101519050838281518110611d5957611d59615b67565b6020026020010151848481518110611d7357611d73615b67565b602002602001018190525080848381518110611d9157611d91615b67565b6020026020010181905250505b80611da881615b4c565b915050611cdf565b5080611dbb81615b4c565b915050611cbd565b50600a82111561105e5760408051600a8082526101608201909252600091816020015b611dee6155d9565b815260200190600190039081611de657905050905060005b600a8110156115d457828181518110611e2157611e21615b67565b6020026020010151828281518110611e3b57611e3b615b67565b60200260200101819052508080611e5190615b4c565b915050611e06565b60006001600160a01b038216611ec35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016111cc565b506001600160a01b031660009081526003602052604090205490565b611ee7614856565b611ef16000614b13565b565b600d8054611b2490615aae565b601a54341015611f225760405162461bcd60e51b81526004016111cc90615b7d565b336000908152601960205260408120805460019290611533908490615ba9565b611f4a614856565b601155565b60008181526015602052604081205460ff1615611f7e5760405162461bcd60e51b81526004016111cc90615be3565b5060009081526025602052604090205490565b611f99614856565b601380549115156101000261ff0019909216919091179055565b6060600180546110ad90615aae565b611fca614856565b601755565b60008181526015602052604090205460ff1615611ffe5760405162461bcd60e51b81526004016111cc90615be3565b3360009081526016602052604090205461204c5760405162461bcd60e51b815260206004820152600f60248201526e139bc8149d5b4811195d1958dd1959608a1b60448201526064016111cc565b6018546000828152602560205260408120805490919061206d908490615ba9565b90915550506000818152602460205260408120805460019290612091908490615ba9565b9091555050336000908152601660205260408120805460019290611a7e908490615c0c565b60006120c160085490565b9050600082116120e35760405162461bcd60e51b81526004016111cc90615c55565b6010546120f08383615ba9565b111561210e5760405162461bcd60e51b81526004016111cc90615c86565b600a546001600160a01b03163314612247576012543360009081526014602052604090205461213d9084615ba9565b111561218b5760405162461bcd60e51b815260206004820152601c60248201527f4d41585f4d494e545f5045525f57414c4c45545f45584345454445440000000060448201526064016111cc565b60135460ff16156121cc5760405162461bcd60e51b815260206004820152600b60248201526a1352539517d4105554d15160aa1b60448201526064016111cc565b60115482111561221a5760405162461bcd60e51b815260206004820152601960248201527813505617d352539517d4115497d5161397d15610d151511151603a1b60448201526064016111cc565b81600f546122289190615cb3565b3410156122475760405162461bcd60e51b81526004016111cc90615b7d565b60015b82811161126d576122643361225f8385615ba9565b614b65565b60006122708284615ba9565b6000818152601f6020908152604080832080546001600160a01b0319163390811790915582805281842042905560218352818420849055602583528184208490556022835281842084905560238352818420849055602483528184208490558352601490915281208054929350906122e783615b4c565b91905055505080806122f890615b4c565b91505061224a565b612308614856565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906123369033908590600401615cd2565b602060405180830381600087803b15801561235057600080fd5b505af1158015612364573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d9190615ceb565b61109a338383614b7f565b61239d3383614943565b6123b95760405162461bcd60e51b81526004016111cc90615ae9565b6123c584848484614c4a565b50505050565b600c8054611b2490615aae565b60008181526015602052604081205460ff16156124075760405162461bcd60e51b81526004016111cc90615be3565b600061241283614c7d565b9392505050565b600e8054611b2490615aae565b606061243182614d65565b6124725760405162461bcd60e51b815260206004820152601260248201527113919517d113d154d7d393d517d1561254d560721b60448201526064016111cc565b60008281526015602052604090205460ff1615156001141561252057600c805461249b90615aae565b80601f01602080910402602001604051908101604052809291908181526020018280546124c790615aae565b80156125145780601f106124e957610100808354040283529160200191612514565b820191906000526020600020905b8154815290600101906020018083116124f757829003601f168201915b50505050509050919050565b601354610100900460ff1661253c57600d805461249b90615aae565b6000612546614d82565b905060008151116125665760405180602001604052806000815250612412565b8061257084614d91565b600e60405160200161258493929190615d08565b6040516020818303038152906040529392505050565b6125a2614856565b60006125ad60085490565b905060008080808080808060015b8981101561268557600081815260256020526040902054600181108015906125e4575060198111155b156125fb57856125f381615b4c565b965050612672565b601a811015801561260d575060328111155b15612624578461261c81615b4c565b955050612672565b603381101580156126365750604b8111155b1561264d578361264581615b4c565b945050612672565b604c811015801561265f575060648111155b15612672578261266e81615b4c565b9350505b508061267d81615b4c565b9150506125bb565b50831561269957612696848e615bc1565b97505b82156126ac576126a9838d615bc1565b96505b81156126bf576126bc828c615bc1565b95505b80156126d2576126cf818b615bc1565b94505b60015b898110156128df57600081815260256020526040902054600181108015906126fe575060198111155b15612791578f6001600160a01b031663a9059cbb61271b84611ae2565b8c6040518363ffffffff1660e01b8152600401612739929190615cd2565b602060405180830381600087803b15801561275357600080fd5b505af1158015612767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278b9190615ceb565b506128cc565b601a81101580156127a3575060328111155b156127de578f6001600160a01b031663a9059cbb6127c084611ae2565b8b6040518363ffffffff1660e01b8152600401612739929190615cd2565b603381101580156127f05750604b8111155b1561282b578f6001600160a01b031663a9059cbb61280d84611ae2565b8a6040518363ffffffff1660e01b8152600401612739929190615cd2565b604c811015801561283d575060648111155b156128cc578f6001600160a01b031663a9059cbb61285a84611ae2565b896040518363ffffffff1660e01b8152600401612878929190615cd2565b602060405180830381600087803b15801561289257600080fd5b505af11580156128a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ca9190615ceb565b505b50806128d781615b4c565b9150506126d5565b505050505050505050505050505050565b6128f8614856565b60009182526022602052604090912055565b612912614856565b6001600160a01b031660009081526016602090815260408083208390556019909152812055565b612941614856565b805161109a90600e906020840190615555565b61295c614856565b600a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612995573d6000803e3d6000fd5b50565b6129a0614856565b60006129ab60085490565b9050600082116129cd5760405162461bcd60e51b81526004016111cc90615c55565b6010546129da8383615ba9565b11156129f85760405162461bcd60e51b81526004016111cc90615c86565b60015b8281116123c557612a108461225f8385615ba9565b6000612a1c8284615ba9565b6001600160a01b0386166000908152601460205260408120805492935090612a4383615b4c565b90915550506000908152601f6020908152604080832080546001600160a01b0319166001600160a01b03891617905581805280832042905560218252808320839055602582528083208390556022825280832083905560238252808320839055602490915281205580612ab581615b4c565b9150506129fb565b612ac5614856565b601a55565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b612b00614856565b601255565b612b0d614856565b805161109a90600d906020840190615555565b612b28614856565b6001600160a01b038116612b8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016111cc565b61299581614b13565b612b9e614856565b6040516323b872dd60e01b8152306004820152336024820152604481018290526001600160a01b038316906323b872dd90606401600060405180830381600087803b158015612bec57600080fd5b505af1158015612c00573d6000803e3d6000fd5b505050505050565b611ef1614856565b60008181526015602052604090205460ff1615612c3f5760405162461bcd60e51b81526004016111cc90615be3565b60008181526025602052604090205460641015612c925760405162461bcd60e51b815260206004820152601160248201527013585e0813195d995b0814995858da1959607a1b60448201526064016111cc565b6000612c9d82614c7d565b600083815260226020908152604080832084905560185460249092528220549293509091612ccb9190615cb3565b601b54600085815260236020526040902054612ce79190615cb3565b612cf19190615ba9565b600084815260226020526040902054909150600111801590612d25575060008381526022602052604090205463025d3eee10155b156134ef57600083815260226020526040902054600111801590612d59575060008381526022602052604090205461053910155b15612d7d57612d69816001615ba9565b600084815260256020526040902055505050565b60008381526022602052604090205461053a11801590612dad57506000838152602260205260409020546107d610155b15612dbd57612d69816002615ba9565b6000838152602260205260409020546107d711801590612ded5750600083815260226020526040902054610bc010155b15612dfd57612d69816003615ba9565b600083815260226020526040902054610bc111801590612e2d57506000838152602260205260409020546111a010155b15612e3d57612d69816004615ba9565b6000838152602260205260409020546111a111801590612e6d5750600083815260226020526040902054611a7110155b15612e7d57612d69816005615ba9565b600083815260226020526040902054611a7211801590612ead57506000838152602260205260409020546127a910155b15612ebd57612d69816006615ba9565b6000838152602260205260409020546127aa11801590612eed5750600083815260226020526040902054613b7d10155b15612efd57612d69816007615ba9565b600083815260226020526040902054613b7e11801590612f2d575060008381526022602052604090205461593c10155b15612f3d57612d69816008615ba9565b60008381526022602052604090205461593d11801590612f6d57506000838152602260205260409020546185da10155b15612f7d57612d69816009615ba9565b6000838152602260205260409020546185db11801590612fad575060008381526022602052604090205461c8c710155b15612fbd57612d6981600a615ba9565b60008381526022602052604090205461c8c811801590612fee575060008381526022602052604090205462012d2a10155b15612ffe57612d6981600b615ba9565b60008381526022602052604090205462012d2b1180159061303057506000838152602260205260409020546201c3bf10155b1561304057612d6981600c615ba9565b6000838152602260205260409020546201c3c01180159061307257506000838152602260205260409020546202a59f10155b1561308257612d6981600d615ba9565b6000838152602260205260409020546202a5a0118015906130b457506000838152602260205260409020546203f86e10155b156130c457612d6981600e615ba9565b6000838152602260205260409020546203f86f118015906130f657506000838152602260205260409020546205f4a510155b1561310657612d6981600f615ba9565b6000838152602260205260409020546205f4a61180159061313857506000838152602260205260409020546208eef810155b1561314857612d69816010615ba9565b6000838152602260205260409020546208eef91180159061317a5750600083815260226020526040902054620d667410155b1561318a57612d69816011615ba9565b600083815260226020526040902054620d6675118015906131bc5750600083815260226020526040902054621419ae10155b156131cc57612d69816012615ba9565b600083815260226020526040902054621419af118015906131fe5750600083815260226020526040902054621e268510155b1561320e57612d69816013615ba9565b600083815260226020526040902054621e2686118015906132405750600083815260226020526040902054622d39c810155b1561325057612d69816014615ba9565b600083815260226020526040902054622d39c91180159061328257506000838152602260205260409020546243d6ac10155b1561329257612d69816015615ba9565b6000838152602260205260409020546243d6ad118015906132c457506000838152602260205260409020546265c20210155b156132d457612d69816016615ba9565b6000838152602260205260409020546265c2031180159061330657506000838152602260205260409020546298a30410155b1561331657612d69816017615ba9565b6000838152602260205260409020546298a30511801590613348575060008381526022602052604090205462e4f48510155b1561335857612d69816018615ba9565b60008381526022602052604090205462e4f4861180159061338b57506000838152602260205260409020546301576ec810155b1561339b57612d69816019615ba9565b6000838152602260205260409020546301576ec9118015906133cf5750600083815260226020526040902054630180a50910155b156133df57612d6981601a615ba9565b600083815260226020526040902054630180a50a1180159061341357506000838152602260205260409020546301aecd5210155b1561342357612d6981601b615ba9565b6000838152602260205260409020546301aecd531180159061345757506000838152602260205260409020546301e27f8f10155b1561346757612d6981601c615ba9565b6000838152602260205260409020546301e27f901180159061349b575060008381526022602052604090205463021c65e810155b156134ab57612d6981601d615ba9565b60008381526022602052604090205463021c65e9118015906134df575060008381526022602052604090205463025d3eee10155b1561126d57612d6981601e615ba9565b60008381526022602052604090205463025d3eef118015906135235750600083815260226020526040902054631ea64af110155b15613d205760008381526022602052604090205463025d3eef1180159061355c57506000838152602260205260409020546302a5e01610155b1561356c57612d6981601f615ba9565b6000838152602260205260409020546302a5e017118015906135a057506000838152602260205260409020546302f7386a10155b156135b057612d69816020615ba9565b6000838152602260205260409020546302f7386b118015906135e4575060008381526022602052604090205463035253aa10155b156135f457612d69816021615ba9565b60008381526022602052604090205463035253ab1180159061362857506000838152602260205260409020546303b85db410155b1561363857612d69816022615ba9565b6000838152602260205260409020546303b85db51180159061366c575060008381526022602052604090205463042aa66410155b1561367c57612d69816023615ba9565b60008381526022602052604090205463042aa665118015906136b057506000838152602260205260409020546304aaa5e010155b156136c057612d69816024615ba9565b6000838152602260205260409020546304aaa5e1118015906136f4575060008381526022602052604090205463053a017610155b1561370457612d69816025615ba9565b60008381526022602052604090205463053a01771180159061373857506000838152602260205260409020546305da90ff10155b1561374857612d69816026615ba9565b6000838152602260205260409020546305da91001180159061377c575060008381526022602052604090205463068e64f510155b1561378c57612d69816027615ba9565b60008381526022602052604090205463068e64f6118015906137c05750600083815260226020526040902054630757cd3b10155b156137d057612d69816028615ba9565b600083815260226020526040902054630757cd3c11801590613804575060008381526022602052604090205463083960bd10155b1561381457612d69816029615ba9565b60008381526022602052604090205463083960be11801590613848575060008381526022602052604090205463093605f210155b1561385857612d6981602a615ba9565b60008381526022602052604090205463093605f31180159061388c5750600083815260226020526040902054630a50fc6c10155b1561389c57612d6981602b615ba9565b600083815260226020526040902054630a50fc6d118015906138d05750600083815260226020526040902054630b8de78310155b156138e057612d6981602c615ba9565b600083815260226020526040902054630b8de784118015906139145750600083815260226020526040902054630cf0da5510155b1561392457612d6981602d615ba9565b600083815260226020526040902054630cf0da56118015906139585750600083815260226020526040902054630e7e652c10155b1561396857612d6981602e615ba9565b600083815260226020526040902054630e7e652d1180159061399c575060008381526022602052604090205463103ba48310155b156139ac57612d6981602f615ba9565b60008381526022602052604090205463103ba484118015906139e0575060008381526022602052604090205463122e51db10155b156139f057612d69816030615ba9565b60008381526022602052604090205463122e51dc11801590613a24575060008381526022602052604090205463145cd68f10155b15613a3457612d69816031615ba9565b60008381526022602052604090205463145cd69011801590613a6857506000838152602260205260409020546316ce60f210155b15613a7857612d69816032615ba9565b6000838152602260205260409020546316ce60f311801590613aac575060008381526022602052604090205463177d87b110155b15613abc57612d69816033615ba9565b60008381526022602052604090205463177d87b211801590613af05750600083815260226020526040902054631831ef9a10155b15613b0057612d69816034615ba9565b600083815260226020526040902054631831ef9b11801590613b3457506000838152602260205260409020546318ebc10810155b15613b4457612d69816035615ba9565b6000838152602260205260409020546318ebc10911801590613b7857506000838152602260205260409020546319ab258b10155b15613b8857612d69816036615ba9565b6000838152602260205260409020546319ab258c11801590613bbc5750600083815260226020526040902054631a7047f310155b15613bcc57612d69816037615ba9565b600083815260226020526040902054631a7047f411801590613c005750600083815260226020526040902054631b3b545910155b15613c1057612d69816038615ba9565b600083815260226020526040902054631b3b545a11801590613c445750600083815260226020526040902054631c0c782810155b15613c5457612d69816039615ba9565b600083815260226020526040902054631c0c782911801590613c885750600083815260226020526040902054631ce3e22a10155b15613c9857612d6981603a615ba9565b600083815260226020526040902054631ce3e22b11801590613ccc5750600083815260226020526040902054631dc1c28c10155b15613cdc57612d6981603b615ba9565b600083815260226020526040902054631dc1c28d11801590613d105750600083815260226020526040902054631ea64af110155b1561126d57612d6981603c615ba9565b600083815260226020526040902054631ea64af211801590613d54575060008381526022602052604090205463996da3a010155b1561126d57600083815260226020526040902054631ea64af211801590613d8d5750600083815260226020526040902054631f91ae7910155b15613d9d57612d6981603d615ba9565b600083815260226020526040902054631f91ae7a11801590613dd1575060008381526022602052604090205463208421c910155b15613de157612d6981603e615ba9565b60008381526022602052604090205463208421ca11801590613e15575060008381526022602052604090205463217ddb1f10155b15613e2557612d6981603f615ba9565b60008381526022602052604090205463217ddb2011801590613e59575060008381526022602052604090205463227f125510155b15613e6957612d69816040615ba9565b60008381526022602052604090205463227f125611801590613e9d575060008381526022602052604090205463238800f710155b15613ead57612d69816041615ba9565b60008381526022602052604090205463238800f811801590613ee15750600083815260226020526040902054632498e24610155b15613ef157612d69816042615ba9565b600083815260226020526040902054632498e24711801590613f2557506000838152602260205260409020546325b1f34d10155b15613f3557612d69816043615ba9565b6000838152602260205260409020546325b1f34e11801590613f6957506000838152602260205260409020546326d372eb10155b15613f7957612d69816044615ba9565b6000838152602260205260409020546326d372ec11801590613fad57506000838152602260205260409020546327fda1e310155b15613fbd57612d69816045615ba9565b6000838152602260205260409020546327fda1e411801590613ff15750600083815260226020526040902054632930c2e710155b1561400157612d69816046615ba9565b600083815260226020526040902054632930c2e8118015906140355750600083815260226020526040902054632a6d1aac10155b1561404557612d69816047615ba9565b600083815260226020526040902054632a6d1aad118015906140795750600083815260226020526040902054632bb2eff310155b1561408957612d69816048615ba9565b600083815260226020526040902054632bb2eff4118015906140bd5750600083815260226020526040902054632d028ba110155b156140cd57612d69816049615ba9565b600083815260226020526040902054632d028ba2118015906141015750600083815260226020526040902054632e5c38c710155b1561411157612d6981604a615ba9565b600083815260226020526040902054632e5c38c8118015906141455750600083815260226020526040902054632fc044b910155b1561415557612d6981604b615ba9565b600083815260226020526040902054632fc044ba11801590614189575060008381526022602052604090205463312eff1a10155b1561419957612d6981604c615ba9565b60008381526022602052604090205463312eff1b118015906141cd57506000838152602260205260409020546332a8b9f510155b156141dd57612d6981604d615ba9565b6000838152602260205260409020546332a8b9f611801590614211575060008381526022602052604090205463342dc9c610155b1561422157612d6981604e615ba9565b60008381526022602052604090205463342dc9c71180159061425557506000838152602260205260409020546335be859710155b1561426557612d6981604f615ba9565b6000838152602260205260409020546335be859811801590614299575060008381526022602052604090205463375b470910155b156142a957612d69816050615ba9565b60008381526022602052604090205463375b470a118015906142dd57506000838152602260205260409020546339046a7210155b156142ed57612d69816051615ba9565b6000838152602260205260409020546339046a73118015906143215750600083815260226020526040902054633aba4eec10155b1561433157612d69816052615ba9565b600083815260226020526040902054633aba4eed118015906143655750600083815260226020526040902054633c7d566810155b1561437557612d69816053615ba9565b600083815260226020526040902054633c7d5669118015906143a95750600083815260226020526040902054633e4de5cd10155b156143b957612d69816054615ba9565b600083815260226020526040902054633e4de5ce118015906143ed575060008381526022602052604090205463402c650410155b156143fd57612d69816055615ba9565b60008381526022602052604090205463402c65051180159061443157506000838152602260205260409020546342193f1610155b1561444157612d69816056615ba9565b6000838152602260205260409020546342193f17118015906144755750600083815260226020526040902054634414e24210155b1561448557612d69816057615ba9565b600083815260226020526040902054634414e243118015906144b9575060008381526022602052604090205463461fc01610155b156144c957612d69816058615ba9565b60008381526022602052604090205463461fc017118015906144fd575060008381526022602052604090205463483a4d8710155b1561450d57612d69816059615ba9565b60008381526022602052604090205463483a4d88118015906145415750600083815260226020526040902054634a65030e10155b1561455157612d6981605a615ba9565b600083815260226020526040902054634a65030f118015906145855750600083815260226020526040902054634ca05cbf10155b1561459557612d6981605b615ba9565b600083815260226020526040902054634ca05cc0118015906145c95750600083815260226020526040902054634eecda6810155b156145d957612d6981605c615ba9565b600083815260226020526040902054634eecda691180159061460d575060008381526022602052604090205463514affae10155b1561461d57612d6981605d615ba9565b60008381526022602052604090205463514affaf1180159061465157506000838152602260205260409020546353bb542610155b1561466157612d6981605e615ba9565b6000838152602260205260409020546353bb542711801590614695575060008381526022602052604090205463563e637910155b156146a557612d6981605f615ba9565b60008381526022602052604090205463563e637a118015906146d957506000838152602260205260409020546358d4bd8010155b156146e957612d69816060615ba9565b6000838152602260205260409020546358d4bd811180159061471d5750600083815260226020526040902054635b7ef66210155b1561472d57612d69816061615ba9565b600083815260226020526040902054635b7ef663118015906147615750600083815260226020526040902054635e3da6bc10155b1561477157612d69816062615ba9565b600083815260226020526040902054635e3da6bd118015906147a557506000838152602260205260409020546361116bbd10155b156147b557612d69816063615ba9565b6000838152602260205260409020546361116bbe118015906147e9575060008381526022602052604090205463996da3a010155b1561126d57612d69816064615ba9565b614801614856565b601855565b60006001600160e01b031982166380ac58cd60e01b148061483757506001600160e01b03198216635b5e139f60e01b145b8061105e57506301ffc9a760e01b6001600160e01b031983161461105e565b600a546001600160a01b03163314611ef15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016111cc565b6148b981614d65565b6129955760405162461bcd60e51b81526004016111cc90615c23565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061490a82611ae2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061494f83611ae2565b9050806001600160a01b0316846001600160a01b0316148061497657506149768185612aca565b8061499a5750836001600160a01b031661498f84611130565b6001600160a01b0316145b949350505050565b826001600160a01b03166149b582611ae2565b6001600160a01b0316146149db5760405162461bcd60e51b81526004016111cc90615dcc565b6001600160a01b038216614a3d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016111cc565b614a4a8383836001614e26565b826001600160a01b0316614a5d82611ae2565b6001600160a01b031614614a835760405162461bcd60e51b81526004016111cc90615dcc565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61109a828260405180602001604052806000815250614f5e565b816001600160a01b0316836001600160a01b03161415614bdd5760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b60448201526064016111cc565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b614c558484846149a2565b614c6184848484614f91565b6123c55760405162461bcd60e51b81526004016111cc90615e11565b60008181526015602052604081205460ff1615614cac5760405162461bcd60e51b81526004016111cc90615be3565b6000828152601f60205260409020546001600160a01b0316331480614ce75750336000818152601e60205260409020546001600160a01b0316145b80614d085750336000818152601d60205260409020546001600160a01b0316145b15614d4057601c546000838152602080526040902054603c9190614d2c9042615c0c565b614d369190615cb3565b61105e9190615bc1565b601c54600083815260216020526040902054603c9190614d2c9042615c0c565b919050565b6000908152600260205260409020546001600160a01b0316151590565b6060600b80546110ad90615aae565b60606000614d9e8361509e565b600101905060008167ffffffffffffffff811115614dbe57614dbe6156a8565b6040519080825280601f01601f191660200182016040528015614de8576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084614e21576115d4565b614df2565b60008281526015602052604090205460ff1615614e555760405162461bcd60e51b81526004016111cc90615be3565b6000828152601f60205260409020546001600160a01b0384811691161415614eca57603c601c54614e869190615bc1565b6000838152602080526040902054614e9e9042615c0c565b614ea89190615cb3565b6000838152602260209081526040808320939093556021905290812055614f52565b336000908152601d60205260409020546001600160a01b0384811691161480614f0d5750336000908152601e60205260409020546001600160a01b038481169116145b15614f1757614f52565b600082815260226020908152604080832083905560258252808320839055602182528083204290556024825280832083905560239091528120555b6123c584848484615176565b614f6883836152aa565b614f756000848484614f91565b61126d5760405162461bcd60e51b81526004016111cc90615e11565b60006001600160a01b0384163b1561509357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614fd5903390899088908890600401615e63565b602060405180830381600087803b158015614fef57600080fd5b505af192505050801561501f575060408051601f3d908101601f1916820190925261501c91810190615ea0565b60015b615079573d80801561504d576040519150601f19603f3d011682016040523d82523d6000602084013e615052565b606091505b5080516150715760405162461bcd60e51b81526004016111cc90615e11565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061499a565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106150dd5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310615109576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061512757662386f26fc10000830492506010015b6305f5e100831061513f576305f5e100830492506008015b612710831061515357612710830492506004015b60648310615165576064830492506002015b600a831061105e5760010192915050565b60018111156151e55760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b60648201526084016111cc565b816001600160a01b0385166152415761523c81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b615264565b836001600160a01b0316856001600160a01b0316146152645761526485826153c5565b6001600160a01b0384166152805761527b81615462565b6152a3565b846001600160a01b0316846001600160a01b0316146152a3576152a38482615511565b5050505050565b6001600160a01b0382166153005760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016111cc565b61530981614d65565b156153265760405162461bcd60e51b81526004016111cc90615ebd565b615334600083836001614e26565b61533d81614d65565b1561535a5760405162461bcd60e51b81526004016111cc90615ebd565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600060016153d284611e59565b6153dc9190615c0c565b60008381526007602052604090205490915080821461542f576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061547490600190615c0c565b6000838152600960205260408120546008805493945090928490811061549c5761549c615b67565b9060005260206000200154905080600883815481106154bd576154bd615b67565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806154f5576154f5615ef4565b6001900381819060005260206000200160009055905550505050565b600061551c83611e59565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b82805461556190615aae565b90600052602060002090601f01602090048101928261558357600085556155c9565b82601f1061559c57805160ff19168380011785556155c9565b828001600101855582156155c9579182015b828111156155c95782518255916020019190600101906155ae565b506155d5929150615603565b5090565b6040518060600160405280600081526020016000815260200160006001600160a01b031681525090565b5b808211156155d55760008155600101615604565b6001600160e01b03198116811461299557600080fd5b60006020828403121561564057600080fd5b813561241281615618565b801515811461299557600080fd5b60006020828403121561566b57600080fd5b81356124128161564b565b80356001600160a01b0381168114614d6057600080fd5b60006020828403121561569f57600080fd5b61241282615676565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156156d9576156d96156a8565b604051601f8501601f19908116603f01168101908282118183101715615701576157016156a8565b8160405280935085815286868601111561571a57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561574657600080fd5b813567ffffffffffffffff81111561575d57600080fd5b8201601f8101841361576e57600080fd5b61499a848235602084016156be565b60005b83811015615798578181015183820152602001615780565b838111156123c55750506000910152565b600081518084526157c181602086016020860161577d565b601f01601f19169290920160200192915050565b60208152600061241260208301846157a9565b6000602082840312156157fa57600080fd5b5035919050565b6000806040838503121561581457600080fd5b61581d83615676565b946020939093013593505050565b60008060006060848603121561584057600080fd5b61584984615676565b925061585760208501615676565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561589f57835183529284019291840191600101615883565b50909695505050505050565b600080600080608085870312156158c157600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156158f057600080fd5b8235915060208301356159028161564b565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b828110156159625781518051855286810151878601528501516001600160a01b0316858501526060909301929085019060010161592a565b5091979650505050505050565b6000806040838503121561598257600080fd5b61598b83615676565b915060208301356159028161564b565b600080600080608085870312156159b157600080fd5b6159ba85615676565b93506159c860208601615676565b925060408501359150606085013567ffffffffffffffff8111156159eb57600080fd5b8501601f810187136159fc57600080fd5b615a0b878235602084016156be565b91505092959194509250565b600080600080600060a08688031215615a2f57600080fd5b615a3886615676565b97602087013597506040870135966060810135965060800135945092505050565b60008060408385031215615a6c57600080fd5b50508035926020909101359150565b60008060408385031215615a8e57600080fd5b615a9783615676565b9150615aa560208401615676565b90509250929050565b600181811c90821680615ac257607f821691505b60208210811415615ae357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000600019821415615b6057615b60615b36565b5060010190565b634e487b7160e01b600052603260045260246000fd5b602080825260129082015271494e53554646494349454e545f46554e445360701b604082015260600190565b60008219821115615bbc57615bbc615b36565b500190565b600082615bde57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600f908201526e13919517d0931050d2d31254d51151608a1b604082015260600190565b600082821015615c1e57615c1e615b36565b500390565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b60208082526017908201527604d494e545f414d4f554e545f43414e4e4f545f42455f3604c1b604082015260600190565b60208082526013908201527213505617d4d55414131657d15610d151511151606a1b604082015260600190565b6000816000190483118215151615615ccd57615ccd615b36565b500290565b6001600160a01b03929092168252602082015260400190565b600060208284031215615cfd57600080fd5b81516124128161564b565b600084516020615d1b8285838a0161577d565b855191840191615d2e8184848a0161577d565b8554920191600090600181811c9080831680615d4b57607f831692505b858310811415615d6957634e487b7160e01b85526022600452602485fd5b808015615d7d5760018114615d8e57615dbb565b60ff19851688528388019550615dbb565b60008b81526020902060005b85811015615db35781548a820152908401908801615d9a565b505083880195505b50939b9a5050505050505050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090615e96908301846157a9565b9695505050505050565b600060208284031215615eb257600080fd5b815161241281615618565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212202b665dea4c29da153286965e18c34f12b632e81f0b50b03281e526ecbf71db6764736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000007414c4c424f5453000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007414c4c424f545300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f62616679626569686262757965366e62736872686c756c7832776961326836646e6a74727a623267353764666b6834616c376c786834616c786a692f00000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f62616679626569686262757965366e62736872686c756c7832776961326836646e6a74727a623267353764666b6834616c376c786834616c786a692f00000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f62616679626569686262757965366e62736872686c756c7832776961326836646e6a74727a623267353764666b6834616c376c786834616c786a692f00000000000000

Deployed Bytecode

0x6080604052600436106104c05760003560e01c8063778afd4111610276578063c581faf81161014f578063e086e5ec116100c1578063f2c4ce1e11610085578063f2c4ce1e14610f91578063f2fde38b14610fb1578063f3e414f814610fd1578063f6326fb314610ff1578063fc23d3d714610ff9578063ff9e3e721461101957600080fd5b8063e086e5ec14610efc578063e29db9a114610f11578063e6c843b114610f31578063e985e9c514610f51578063eb6e1caa14610f7157600080fd5b8063ca283bd611610113578063ca283bd614610e30578063cbcc40a914610e66578063cca9d14f14610e86578063d3dcf0e914610ea6578063d5abeb0114610ec6578063da3ef23f14610edc57600080fd5b8063c581faf814610d81578063c668286214610da1578063c7ee289214610db6578063c87b56dd14610de3578063c880534b14610e0357600080fd5b80639cc458f4116101e8578063a5f2c7e4116101ac578063a5f2c7e414610c76578063b88d4fde14610ca2578063bd40f69514610cc2578063bf487dd614610cd7578063bfe5af2c14610ced578063c0d8691614610d5457600080fd5b80639cc458f414610bd6578063a0712d6814610bf6578063a0a24bf414610c09578063a1db978214610c36578063a22cb46514610c5657600080fd5b80638bb7dabd1161023a5780638bb7dabd14610b205780638da5cb5b14610b36578063940cd05b14610b5457806395d89b4114610b74578063976d530914610b895780639a28d0f614610ba957600080fd5b8063778afd4114610a785780637f00c7a614610a8057806386481d4014610aa0578063885ac45914610ac057806389a56b2f14610ad657600080fd5b806342842e0e116103a857806354e9e7931161031a57806366be0cc1116102de57806366be0cc1146109c15780636c0360eb146109f75780636d763a6e14610a0c57806370a0823114610a2e578063715018a614610a4e5780637225038014610a6357600080fd5b806354e9e7931461092757806355f804b3146109475780635c975abb146109675780635ddcc685146109815780636352211e146109a157600080fd5b806348e5db761161036c57806348e5db76146108725780634abf3346146108885780634d1ffe7b146108a85780634f6ccce7146108c857806351830227146108e8578063518fa91c1461090757600080fd5b806342842e0e146107ea5780634358fe891461080a578063438b63001461081257806344a0d68a146108325780634752f9ef1461085257600080fd5b806318160ddd116104415780632c2f1291116104055780632c2f1291146107225780632c87510d1461074f5780632f745c591461077157806331c923e1146107915780633b00878d146107a7578063421b7ea2146107bd57600080fd5b806318160ddd1461068a57806318cae2691461069f578063239c70ae146106cc57806323b872dd146106e2578063297b9e241461070257600080fd5b806306fdde031161048857806306fdde03146105d4578063081812fc146105f6578063095ea7b3146106165780630f2a09191461063657806313faede61461066657600080fd5b806301ffc9a7146104c557806302329a29146104fa5780630492f7501461051c57806304e111e91461056a57806306087e5b1461058a575b600080fd5b3480156104d157600080fd5b506104e56104e036600461562e565b611039565b60405190151581526020015b60405180910390f35b34801561050657600080fd5b5061051a610515366004615659565b611064565b005b34801561052857600080fd5b5061055261053736600461568d565b601d602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016104f1565b34801561057657600080fd5b5061051a610585366004615734565b61107f565b34801561059657600080fd5b5061051a6105a536600461568d565b336000908152601d6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b3480156105e057600080fd5b506105e961109e565b6040516104f191906157d5565b34801561060257600080fd5b506105526106113660046157e8565b611130565b34801561062257600080fd5b5061051a610631366004615801565b611157565b34801561064257600080fd5b506104e56106513660046157e8565b60156020526000908152604090205460ff1681565b34801561067257600080fd5b5061067c600f5481565b6040519081526020016104f1565b34801561069657600080fd5b5060085461067c565b3480156106ab57600080fd5b5061067c6106ba36600461568d565b60146020526000908152604090205481565b3480156106d857600080fd5b5061067c60115481565b3480156106ee57600080fd5b5061051a6106fd36600461582b565b611272565b34801561070e57600080fd5b5061051a61071d3660046157e8565b6112a3565b34801561072e57600080fd5b5061067c61073d3660046157e8565b60226020526000908152604090205481565b34801561075b57600080fd5b506107646112b0565b6040516104f19190615867565b34801561077d57600080fd5b5061067c61078c366004615801565b61143e565b34801561079d57600080fd5b5061067c60175481565b3480156107b357600080fd5b5061067c60185481565b3480156107c957600080fd5b5061067c6107d83660046157e8565b60246020526000908152604090205481565b3480156107f657600080fd5b5061051a61080536600461582b565b6114d4565b61051a6114ef565b34801561081e57600080fd5b5061076461082d36600461568d565b61153a565b34801561083e57600080fd5b5061051a61084d3660046157e8565b6115dc565b34801561085e57600080fd5b506104e561086d3660046157e8565b6115e9565b34801561087e57600080fd5b5061067c60125481565b34801561089457600080fd5b5061051a6108a33660046158ab565b611615565b3480156108b457600080fd5b5061051a6108c33660046157e8565b6118f2565b3480156108d457600080fd5b5061067c6108e33660046157e8565b6118ff565b3480156108f457600080fd5b506013546104e590610100900460ff1681565b34801561091357600080fd5b5061051a6109223660046157e8565b611992565b34801561093357600080fd5b5061051a6109423660046158dd565b611a86565b34801561095357600080fd5b5061051a610962366004615734565b611aae565b34801561097357600080fd5b506013546104e59060ff1681565b34801561098d57600080fd5b5061051a61099c3660046157e8565b611ac9565b3480156109ad57600080fd5b506105526109bc3660046157e8565b611ae2565b3480156109cd57600080fd5b506105526109dc3660046157e8565b601f602052600090815260409020546001600160a01b031681565b348015610a0357600080fd5b506105e9611b17565b348015610a1857600080fd5b50610a21611ba5565b6040516104f1919061590d565b348015610a3a57600080fd5b5061067c610a4936600461568d565b611e59565b348015610a5a57600080fd5b5061051a611edf565b348015610a6f57600080fd5b506105e9611ef3565b61051a611f00565b348015610a8c57600080fd5b5061051a610a9b3660046157e8565b611f42565b348015610aac57600080fd5b5061067c610abb3660046157e8565b611f4f565b348015610acc57600080fd5b5061067c601a5481565b348015610ae257600080fd5b5061051a610af136600461568d565b336000908152601e6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b348015610b2c57600080fd5b5061067c601b5481565b348015610b4257600080fd5b50600a546001600160a01b0316610552565b348015610b6057600080fd5b5061051a610b6f366004615659565b611f91565b348015610b8057600080fd5b506105e9611fb3565b348015610b9557600080fd5b5061051a610ba43660046157e8565b611fc2565b348015610bb557600080fd5b5061067c610bc436600461568d565b60196020526000908152604090205481565b348015610be257600080fd5b5061051a610bf13660046157e8565b611fcf565b61051a610c043660046157e8565b6120b6565b348015610c1557600080fd5b5061067c610c243660046157e8565b60256020526000908152604090205481565b348015610c4257600080fd5b5061051a610c51366004615801565b612300565b348015610c6257600080fd5b5061051a610c7136600461596f565b612388565b348015610c8257600080fd5b5061067c610c913660046157e8565b602080526000908152604090205481565b348015610cae57600080fd5b5061051a610cbd36600461599b565b612393565b348015610cce57600080fd5b506105e96123cb565b348015610ce357600080fd5b5061067c601c5481565b348015610cf957600080fd5b5061051a610d0836600461568d565b33600081815260166020908152604080832080546001600160a01b0396909616808552828520969096558484526019909252808320805495845290832094909455918152908190559055565b348015610d6057600080fd5b5061067c610d6f3660046157e8565b60236020526000908152604090205481565b348015610d8d57600080fd5b5061067c610d9c3660046157e8565b6123d8565b348015610dad57600080fd5b506105e9612419565b348015610dc257600080fd5b5061067c610dd136600461568d565b60166020526000908152604090205481565b348015610def57600080fd5b506105e9610dfe3660046157e8565b612426565b348015610e0f57600080fd5b5061067c610e1e3660046157e8565b60216020526000908152604090205481565b348015610e3c57600080fd5b50610552610e4b36600461568d565b601e602052600090815260409020546001600160a01b031681565b348015610e7257600080fd5b5061051a610e81366004615a17565b61259a565b348015610e9257600080fd5b5061051a610ea1366004615a59565b6128f0565b348015610eb257600080fd5b5061051a610ec136600461568d565b61290a565b348015610ed257600080fd5b5061067c60105481565b348015610ee857600080fd5b5061051a610ef7366004615734565b612939565b348015610f0857600080fd5b5061051a612954565b348015610f1d57600080fd5b5061051a610f2c366004615801565b612998565b348015610f3d57600080fd5b5061051a610f4c3660046157e8565b612abd565b348015610f5d57600080fd5b506104e5610f6c366004615a7b565b612aca565b348015610f7d57600080fd5b5061051a610f8c3660046157e8565b612af8565b348015610f9d57600080fd5b5061051a610fac366004615734565b612b05565b348015610fbd57600080fd5b5061051a610fcc36600461568d565b612b20565b348015610fdd57600080fd5b5061051a610fec366004615801565b612b96565b61051a612c08565b34801561100557600080fd5b5061051a6110143660046157e8565b612c10565b34801561102557600080fd5b5061051a6110343660046157e8565b6147f9565b60006001600160e01b0319821663780e9d6360e01b148061105e575061105e82614806565b92915050565b61106c614856565b6013805460ff1916911515919091179055565b611087614856565b805161109a90600c906020840190615555565b5050565b6060600080546110ad90615aae565b80601f01602080910402602001604051908101604052809291908181526020018280546110d990615aae565b80156111265780601f106110fb57610100808354040283529160200191611126565b820191906000526020600020905b81548152906001019060200180831161110957829003601f168201915b5050505050905090565b600061113b826148b0565b506000908152600460205260409020546001600160a01b031690565b600061116282611ae2565b9050806001600160a01b0316836001600160a01b031614156111d55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806111f157506111f18133612aca565b6112635760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016111cc565b61126d83836148d5565b505050565b61127c3382614943565b6112985760405162461bcd60e51b81526004016111cc90615ae9565b61126d8383836149a2565b6112ab614856565b601b55565b606060006112bd60085490565b9050600080808060015b8581101561139157600081815260256020526040902054600181108015906112f0575060198111155b1561130757856112ff81615b4c565b96505061137e565b601a8110158015611319575060328111155b15611330578461132881615b4c565b95505061137e565b603381101580156113425750604b8111155b15611359578361135181615b4c565b94505061137e565b604c811015801561136b575060648111155b1561137e578261137a81615b4c565b9350505b508061138981615b4c565b9150506112c7565b5060408051600480825260a082019092526000916020820160808036833701905050905084816000815181106113c9576113c9615b67565b60200260200101818152505083816001815181106113e9576113e9615b67565b602002602001018181525050828160028151811061140957611409615b67565b602002602001018181525050818160038151811061142957611429615b67565b60209081029190910101529695505050505050565b600061144983611e59565b82106114ab5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016111cc565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61126d83838360405180602001604052806000815250612393565b6017543410156115115760405162461bcd60e51b81526004016111cc90615b7d565b6018543360009081526016602052604081208054909190611533908490615ba9565b9091555050565b6060600061154783611e59565b905060008167ffffffffffffffff811115611564576115646156a8565b60405190808252806020026020018201604052801561158d578160200160208202803683370190505b50905060005b828110156115d4576115a5858261143e565b8282815181106115b7576115b7615b67565b6020908102919091010152806115cc81615b4c565b915050611593565b509392505050565b6115e4614856565b600f55565b60008181526015602052604081205460ff1615156001141561160d57506001919050565b506000919050565b61161d614856565b600061162860085490565b905060008080808080808060015b89811015611700576000818152602560205260409020546001811080159061165f575060198111155b15611676578561166e81615b4c565b9650506116ed565b601a8110158015611688575060328111155b1561169f578461169781615b4c565b9550506116ed565b603381101580156116b15750604b8111155b156116c857836116c081615b4c565b9450506116ed565b604c81101580156116da575060648111155b156116ed57826116e981615b4c565b9350505b50806116f881615b4c565b915050611636565b50831561171457611711848e615bc1565b97505b821561172757611724838d615bc1565b96505b811561173a57611737828c615bc1565b95505b801561174d5761174a818b615bc1565b94505b60015b898110156118e25760008181526025602052604090205460018110801590611779575060198111155b156117c55761178782611ae2565b6001600160a01b03166108fc8b9081150290604051600060405180830381858888f193505050501580156117bf573d6000803e3d6000fd5b506118cf565b601a81101580156117d7575060328111155b1561181d576117e582611ae2565b6001600160a01b03166108fc8a9081150290604051600060405180830381858888f193505050501580156117bf573d6000803e3d6000fd5b6033811015801561182f5750604b8111155b156118755761183d82611ae2565b6001600160a01b03166108fc899081150290604051600060405180830381858888f193505050501580156117bf573d6000803e3d6000fd5b604c8110158015611887575060648111155b156118cf5761189582611ae2565b6001600160a01b03166108fc889081150290604051600060405180830381858888f193505050501580156118cd573d6000803e3d6000fd5b505b50806118da81615b4c565b915050611750565b5050505050505050505050505050565b6118fa614856565b601c55565b600061190a60085490565b821061196d5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016111cc565b6008828154811061198057611980615b67565b90600052602060002001549050919050565b60008181526015602052604090205460ff16156119c15760405162461bcd60e51b81526004016111cc90615be3565b33600090815260196020526040902054611a145760405162461bcd60e51b8152602060048201526014602482015273139bc815d85c98da195cdd0811195d1958dd195960621b60448201526064016111cc565b601b5460008281526025602052604081208054909190611a35908490615ba9565b90915550506000818152602360205260408120805460019290611a59908490615ba9565b9091555050336000908152601960205260408120805460019290611a7e908490615c0c565b909155505050565b611a8e614856565b600091825260156020526040909120805460ff1916911515919091179055565b611ab6614856565b805161109a90600b906020840190615555565b611ad1614856565b600090815260256020526040812055565b6000818152600260205260408120546001600160a01b03168061105e5760405162461bcd60e51b81526004016111cc90615c23565b600b8054611b2490615aae565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5090615aae565b8015611b9d5780601f10611b7257610100808354040283529160200191611b9d565b820191906000526020600020905b815481529060010190602001808311611b8057829003601f168201915b505050505081565b60606000611bb260085490565b905060008167ffffffffffffffff811115611bcf57611bcf6156a8565b604051908082528060200260200182016040528015611c0857816020015b611bf56155d9565b815260200190600190039081611bed5790505b50905060005b82811015611cb9576000611c23826001615ba9565b905080838381518110611c3857611c38615b67565b602090810291909101015152611c4d81611f4f565b838381518110611c5f57611c5f615b67565b60200260200101516020018181525050611c7881611ae2565b838381518110611c8a57611c8a615b67565b60209081029190910101516001600160a01b039091166040909101525080611cb181615b4c565b915050611c0e565b5060005b611cc8600184615c0c565b811015611dc3576000611cdc826001615ba9565b90505b83811015611db057828281518110611cf957611cf9615b67565b602002602001015160200151838281518110611d1757611d17615b67565b6020026020010151602001511115611d9e576000838381518110611d3d57611d3d615b67565b60200260200101519050838281518110611d5957611d59615b67565b6020026020010151848481518110611d7357611d73615b67565b602002602001018190525080848381518110611d9157611d91615b67565b6020026020010181905250505b80611da881615b4c565b915050611cdf565b5080611dbb81615b4c565b915050611cbd565b50600a82111561105e5760408051600a8082526101608201909252600091816020015b611dee6155d9565b815260200190600190039081611de657905050905060005b600a8110156115d457828181518110611e2157611e21615b67565b6020026020010151828281518110611e3b57611e3b615b67565b60200260200101819052508080611e5190615b4c565b915050611e06565b60006001600160a01b038216611ec35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016111cc565b506001600160a01b031660009081526003602052604090205490565b611ee7614856565b611ef16000614b13565b565b600d8054611b2490615aae565b601a54341015611f225760405162461bcd60e51b81526004016111cc90615b7d565b336000908152601960205260408120805460019290611533908490615ba9565b611f4a614856565b601155565b60008181526015602052604081205460ff1615611f7e5760405162461bcd60e51b81526004016111cc90615be3565b5060009081526025602052604090205490565b611f99614856565b601380549115156101000261ff0019909216919091179055565b6060600180546110ad90615aae565b611fca614856565b601755565b60008181526015602052604090205460ff1615611ffe5760405162461bcd60e51b81526004016111cc90615be3565b3360009081526016602052604090205461204c5760405162461bcd60e51b815260206004820152600f60248201526e139bc8149d5b4811195d1958dd1959608a1b60448201526064016111cc565b6018546000828152602560205260408120805490919061206d908490615ba9565b90915550506000818152602460205260408120805460019290612091908490615ba9565b9091555050336000908152601660205260408120805460019290611a7e908490615c0c565b60006120c160085490565b9050600082116120e35760405162461bcd60e51b81526004016111cc90615c55565b6010546120f08383615ba9565b111561210e5760405162461bcd60e51b81526004016111cc90615c86565b600a546001600160a01b03163314612247576012543360009081526014602052604090205461213d9084615ba9565b111561218b5760405162461bcd60e51b815260206004820152601c60248201527f4d41585f4d494e545f5045525f57414c4c45545f45584345454445440000000060448201526064016111cc565b60135460ff16156121cc5760405162461bcd60e51b815260206004820152600b60248201526a1352539517d4105554d15160aa1b60448201526064016111cc565b60115482111561221a5760405162461bcd60e51b815260206004820152601960248201527813505617d352539517d4115497d5161397d15610d151511151603a1b60448201526064016111cc565b81600f546122289190615cb3565b3410156122475760405162461bcd60e51b81526004016111cc90615b7d565b60015b82811161126d576122643361225f8385615ba9565b614b65565b60006122708284615ba9565b6000818152601f6020908152604080832080546001600160a01b0319163390811790915582805281842042905560218352818420849055602583528184208490556022835281842084905560238352818420849055602483528184208490558352601490915281208054929350906122e783615b4c565b91905055505080806122f890615b4c565b91505061224a565b612308614856565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906123369033908590600401615cd2565b602060405180830381600087803b15801561235057600080fd5b505af1158015612364573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d9190615ceb565b61109a338383614b7f565b61239d3383614943565b6123b95760405162461bcd60e51b81526004016111cc90615ae9565b6123c584848484614c4a565b50505050565b600c8054611b2490615aae565b60008181526015602052604081205460ff16156124075760405162461bcd60e51b81526004016111cc90615be3565b600061241283614c7d565b9392505050565b600e8054611b2490615aae565b606061243182614d65565b6124725760405162461bcd60e51b815260206004820152601260248201527113919517d113d154d7d393d517d1561254d560721b60448201526064016111cc565b60008281526015602052604090205460ff1615156001141561252057600c805461249b90615aae565b80601f01602080910402602001604051908101604052809291908181526020018280546124c790615aae565b80156125145780601f106124e957610100808354040283529160200191612514565b820191906000526020600020905b8154815290600101906020018083116124f757829003601f168201915b50505050509050919050565b601354610100900460ff1661253c57600d805461249b90615aae565b6000612546614d82565b905060008151116125665760405180602001604052806000815250612412565b8061257084614d91565b600e60405160200161258493929190615d08565b6040516020818303038152906040529392505050565b6125a2614856565b60006125ad60085490565b905060008080808080808060015b8981101561268557600081815260256020526040902054600181108015906125e4575060198111155b156125fb57856125f381615b4c565b965050612672565b601a811015801561260d575060328111155b15612624578461261c81615b4c565b955050612672565b603381101580156126365750604b8111155b1561264d578361264581615b4c565b945050612672565b604c811015801561265f575060648111155b15612672578261266e81615b4c565b9350505b508061267d81615b4c565b9150506125bb565b50831561269957612696848e615bc1565b97505b82156126ac576126a9838d615bc1565b96505b81156126bf576126bc828c615bc1565b95505b80156126d2576126cf818b615bc1565b94505b60015b898110156128df57600081815260256020526040902054600181108015906126fe575060198111155b15612791578f6001600160a01b031663a9059cbb61271b84611ae2565b8c6040518363ffffffff1660e01b8152600401612739929190615cd2565b602060405180830381600087803b15801561275357600080fd5b505af1158015612767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278b9190615ceb565b506128cc565b601a81101580156127a3575060328111155b156127de578f6001600160a01b031663a9059cbb6127c084611ae2565b8b6040518363ffffffff1660e01b8152600401612739929190615cd2565b603381101580156127f05750604b8111155b1561282b578f6001600160a01b031663a9059cbb61280d84611ae2565b8a6040518363ffffffff1660e01b8152600401612739929190615cd2565b604c811015801561283d575060648111155b156128cc578f6001600160a01b031663a9059cbb61285a84611ae2565b896040518363ffffffff1660e01b8152600401612878929190615cd2565b602060405180830381600087803b15801561289257600080fd5b505af11580156128a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ca9190615ceb565b505b50806128d781615b4c565b9150506126d5565b505050505050505050505050505050565b6128f8614856565b60009182526022602052604090912055565b612912614856565b6001600160a01b031660009081526016602090815260408083208390556019909152812055565b612941614856565b805161109a90600e906020840190615555565b61295c614856565b600a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612995573d6000803e3d6000fd5b50565b6129a0614856565b60006129ab60085490565b9050600082116129cd5760405162461bcd60e51b81526004016111cc90615c55565b6010546129da8383615ba9565b11156129f85760405162461bcd60e51b81526004016111cc90615c86565b60015b8281116123c557612a108461225f8385615ba9565b6000612a1c8284615ba9565b6001600160a01b0386166000908152601460205260408120805492935090612a4383615b4c565b90915550506000908152601f6020908152604080832080546001600160a01b0319166001600160a01b03891617905581805280832042905560218252808320839055602582528083208390556022825280832083905560238252808320839055602490915281205580612ab581615b4c565b9150506129fb565b612ac5614856565b601a55565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b612b00614856565b601255565b612b0d614856565b805161109a90600d906020840190615555565b612b28614856565b6001600160a01b038116612b8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016111cc565b61299581614b13565b612b9e614856565b6040516323b872dd60e01b8152306004820152336024820152604481018290526001600160a01b038316906323b872dd90606401600060405180830381600087803b158015612bec57600080fd5b505af1158015612c00573d6000803e3d6000fd5b505050505050565b611ef1614856565b60008181526015602052604090205460ff1615612c3f5760405162461bcd60e51b81526004016111cc90615be3565b60008181526025602052604090205460641015612c925760405162461bcd60e51b815260206004820152601160248201527013585e0813195d995b0814995858da1959607a1b60448201526064016111cc565b6000612c9d82614c7d565b600083815260226020908152604080832084905560185460249092528220549293509091612ccb9190615cb3565b601b54600085815260236020526040902054612ce79190615cb3565b612cf19190615ba9565b600084815260226020526040902054909150600111801590612d25575060008381526022602052604090205463025d3eee10155b156134ef57600083815260226020526040902054600111801590612d59575060008381526022602052604090205461053910155b15612d7d57612d69816001615ba9565b600084815260256020526040902055505050565b60008381526022602052604090205461053a11801590612dad57506000838152602260205260409020546107d610155b15612dbd57612d69816002615ba9565b6000838152602260205260409020546107d711801590612ded5750600083815260226020526040902054610bc010155b15612dfd57612d69816003615ba9565b600083815260226020526040902054610bc111801590612e2d57506000838152602260205260409020546111a010155b15612e3d57612d69816004615ba9565b6000838152602260205260409020546111a111801590612e6d5750600083815260226020526040902054611a7110155b15612e7d57612d69816005615ba9565b600083815260226020526040902054611a7211801590612ead57506000838152602260205260409020546127a910155b15612ebd57612d69816006615ba9565b6000838152602260205260409020546127aa11801590612eed5750600083815260226020526040902054613b7d10155b15612efd57612d69816007615ba9565b600083815260226020526040902054613b7e11801590612f2d575060008381526022602052604090205461593c10155b15612f3d57612d69816008615ba9565b60008381526022602052604090205461593d11801590612f6d57506000838152602260205260409020546185da10155b15612f7d57612d69816009615ba9565b6000838152602260205260409020546185db11801590612fad575060008381526022602052604090205461c8c710155b15612fbd57612d6981600a615ba9565b60008381526022602052604090205461c8c811801590612fee575060008381526022602052604090205462012d2a10155b15612ffe57612d6981600b615ba9565b60008381526022602052604090205462012d2b1180159061303057506000838152602260205260409020546201c3bf10155b1561304057612d6981600c615ba9565b6000838152602260205260409020546201c3c01180159061307257506000838152602260205260409020546202a59f10155b1561308257612d6981600d615ba9565b6000838152602260205260409020546202a5a0118015906130b457506000838152602260205260409020546203f86e10155b156130c457612d6981600e615ba9565b6000838152602260205260409020546203f86f118015906130f657506000838152602260205260409020546205f4a510155b1561310657612d6981600f615ba9565b6000838152602260205260409020546205f4a61180159061313857506000838152602260205260409020546208eef810155b1561314857612d69816010615ba9565b6000838152602260205260409020546208eef91180159061317a5750600083815260226020526040902054620d667410155b1561318a57612d69816011615ba9565b600083815260226020526040902054620d6675118015906131bc5750600083815260226020526040902054621419ae10155b156131cc57612d69816012615ba9565b600083815260226020526040902054621419af118015906131fe5750600083815260226020526040902054621e268510155b1561320e57612d69816013615ba9565b600083815260226020526040902054621e2686118015906132405750600083815260226020526040902054622d39c810155b1561325057612d69816014615ba9565b600083815260226020526040902054622d39c91180159061328257506000838152602260205260409020546243d6ac10155b1561329257612d69816015615ba9565b6000838152602260205260409020546243d6ad118015906132c457506000838152602260205260409020546265c20210155b156132d457612d69816016615ba9565b6000838152602260205260409020546265c2031180159061330657506000838152602260205260409020546298a30410155b1561331657612d69816017615ba9565b6000838152602260205260409020546298a30511801590613348575060008381526022602052604090205462e4f48510155b1561335857612d69816018615ba9565b60008381526022602052604090205462e4f4861180159061338b57506000838152602260205260409020546301576ec810155b1561339b57612d69816019615ba9565b6000838152602260205260409020546301576ec9118015906133cf5750600083815260226020526040902054630180a50910155b156133df57612d6981601a615ba9565b600083815260226020526040902054630180a50a1180159061341357506000838152602260205260409020546301aecd5210155b1561342357612d6981601b615ba9565b6000838152602260205260409020546301aecd531180159061345757506000838152602260205260409020546301e27f8f10155b1561346757612d6981601c615ba9565b6000838152602260205260409020546301e27f901180159061349b575060008381526022602052604090205463021c65e810155b156134ab57612d6981601d615ba9565b60008381526022602052604090205463021c65e9118015906134df575060008381526022602052604090205463025d3eee10155b1561126d57612d6981601e615ba9565b60008381526022602052604090205463025d3eef118015906135235750600083815260226020526040902054631ea64af110155b15613d205760008381526022602052604090205463025d3eef1180159061355c57506000838152602260205260409020546302a5e01610155b1561356c57612d6981601f615ba9565b6000838152602260205260409020546302a5e017118015906135a057506000838152602260205260409020546302f7386a10155b156135b057612d69816020615ba9565b6000838152602260205260409020546302f7386b118015906135e4575060008381526022602052604090205463035253aa10155b156135f457612d69816021615ba9565b60008381526022602052604090205463035253ab1180159061362857506000838152602260205260409020546303b85db410155b1561363857612d69816022615ba9565b6000838152602260205260409020546303b85db51180159061366c575060008381526022602052604090205463042aa66410155b1561367c57612d69816023615ba9565b60008381526022602052604090205463042aa665118015906136b057506000838152602260205260409020546304aaa5e010155b156136c057612d69816024615ba9565b6000838152602260205260409020546304aaa5e1118015906136f4575060008381526022602052604090205463053a017610155b1561370457612d69816025615ba9565b60008381526022602052604090205463053a01771180159061373857506000838152602260205260409020546305da90ff10155b1561374857612d69816026615ba9565b6000838152602260205260409020546305da91001180159061377c575060008381526022602052604090205463068e64f510155b1561378c57612d69816027615ba9565b60008381526022602052604090205463068e64f6118015906137c05750600083815260226020526040902054630757cd3b10155b156137d057612d69816028615ba9565b600083815260226020526040902054630757cd3c11801590613804575060008381526022602052604090205463083960bd10155b1561381457612d69816029615ba9565b60008381526022602052604090205463083960be11801590613848575060008381526022602052604090205463093605f210155b1561385857612d6981602a615ba9565b60008381526022602052604090205463093605f31180159061388c5750600083815260226020526040902054630a50fc6c10155b1561389c57612d6981602b615ba9565b600083815260226020526040902054630a50fc6d118015906138d05750600083815260226020526040902054630b8de78310155b156138e057612d6981602c615ba9565b600083815260226020526040902054630b8de784118015906139145750600083815260226020526040902054630cf0da5510155b1561392457612d6981602d615ba9565b600083815260226020526040902054630cf0da56118015906139585750600083815260226020526040902054630e7e652c10155b1561396857612d6981602e615ba9565b600083815260226020526040902054630e7e652d1180159061399c575060008381526022602052604090205463103ba48310155b156139ac57612d6981602f615ba9565b60008381526022602052604090205463103ba484118015906139e0575060008381526022602052604090205463122e51db10155b156139f057612d69816030615ba9565b60008381526022602052604090205463122e51dc11801590613a24575060008381526022602052604090205463145cd68f10155b15613a3457612d69816031615ba9565b60008381526022602052604090205463145cd69011801590613a6857506000838152602260205260409020546316ce60f210155b15613a7857612d69816032615ba9565b6000838152602260205260409020546316ce60f311801590613aac575060008381526022602052604090205463177d87b110155b15613abc57612d69816033615ba9565b60008381526022602052604090205463177d87b211801590613af05750600083815260226020526040902054631831ef9a10155b15613b0057612d69816034615ba9565b600083815260226020526040902054631831ef9b11801590613b3457506000838152602260205260409020546318ebc10810155b15613b4457612d69816035615ba9565b6000838152602260205260409020546318ebc10911801590613b7857506000838152602260205260409020546319ab258b10155b15613b8857612d69816036615ba9565b6000838152602260205260409020546319ab258c11801590613bbc5750600083815260226020526040902054631a7047f310155b15613bcc57612d69816037615ba9565b600083815260226020526040902054631a7047f411801590613c005750600083815260226020526040902054631b3b545910155b15613c1057612d69816038615ba9565b600083815260226020526040902054631b3b545a11801590613c445750600083815260226020526040902054631c0c782810155b15613c5457612d69816039615ba9565b600083815260226020526040902054631c0c782911801590613c885750600083815260226020526040902054631ce3e22a10155b15613c9857612d6981603a615ba9565b600083815260226020526040902054631ce3e22b11801590613ccc5750600083815260226020526040902054631dc1c28c10155b15613cdc57612d6981603b615ba9565b600083815260226020526040902054631dc1c28d11801590613d105750600083815260226020526040902054631ea64af110155b1561126d57612d6981603c615ba9565b600083815260226020526040902054631ea64af211801590613d54575060008381526022602052604090205463996da3a010155b1561126d57600083815260226020526040902054631ea64af211801590613d8d5750600083815260226020526040902054631f91ae7910155b15613d9d57612d6981603d615ba9565b600083815260226020526040902054631f91ae7a11801590613dd1575060008381526022602052604090205463208421c910155b15613de157612d6981603e615ba9565b60008381526022602052604090205463208421ca11801590613e15575060008381526022602052604090205463217ddb1f10155b15613e2557612d6981603f615ba9565b60008381526022602052604090205463217ddb2011801590613e59575060008381526022602052604090205463227f125510155b15613e6957612d69816040615ba9565b60008381526022602052604090205463227f125611801590613e9d575060008381526022602052604090205463238800f710155b15613ead57612d69816041615ba9565b60008381526022602052604090205463238800f811801590613ee15750600083815260226020526040902054632498e24610155b15613ef157612d69816042615ba9565b600083815260226020526040902054632498e24711801590613f2557506000838152602260205260409020546325b1f34d10155b15613f3557612d69816043615ba9565b6000838152602260205260409020546325b1f34e11801590613f6957506000838152602260205260409020546326d372eb10155b15613f7957612d69816044615ba9565b6000838152602260205260409020546326d372ec11801590613fad57506000838152602260205260409020546327fda1e310155b15613fbd57612d69816045615ba9565b6000838152602260205260409020546327fda1e411801590613ff15750600083815260226020526040902054632930c2e710155b1561400157612d69816046615ba9565b600083815260226020526040902054632930c2e8118015906140355750600083815260226020526040902054632a6d1aac10155b1561404557612d69816047615ba9565b600083815260226020526040902054632a6d1aad118015906140795750600083815260226020526040902054632bb2eff310155b1561408957612d69816048615ba9565b600083815260226020526040902054632bb2eff4118015906140bd5750600083815260226020526040902054632d028ba110155b156140cd57612d69816049615ba9565b600083815260226020526040902054632d028ba2118015906141015750600083815260226020526040902054632e5c38c710155b1561411157612d6981604a615ba9565b600083815260226020526040902054632e5c38c8118015906141455750600083815260226020526040902054632fc044b910155b1561415557612d6981604b615ba9565b600083815260226020526040902054632fc044ba11801590614189575060008381526022602052604090205463312eff1a10155b1561419957612d6981604c615ba9565b60008381526022602052604090205463312eff1b118015906141cd57506000838152602260205260409020546332a8b9f510155b156141dd57612d6981604d615ba9565b6000838152602260205260409020546332a8b9f611801590614211575060008381526022602052604090205463342dc9c610155b1561422157612d6981604e615ba9565b60008381526022602052604090205463342dc9c71180159061425557506000838152602260205260409020546335be859710155b1561426557612d6981604f615ba9565b6000838152602260205260409020546335be859811801590614299575060008381526022602052604090205463375b470910155b156142a957612d69816050615ba9565b60008381526022602052604090205463375b470a118015906142dd57506000838152602260205260409020546339046a7210155b156142ed57612d69816051615ba9565b6000838152602260205260409020546339046a73118015906143215750600083815260226020526040902054633aba4eec10155b1561433157612d69816052615ba9565b600083815260226020526040902054633aba4eed118015906143655750600083815260226020526040902054633c7d566810155b1561437557612d69816053615ba9565b600083815260226020526040902054633c7d5669118015906143a95750600083815260226020526040902054633e4de5cd10155b156143b957612d69816054615ba9565b600083815260226020526040902054633e4de5ce118015906143ed575060008381526022602052604090205463402c650410155b156143fd57612d69816055615ba9565b60008381526022602052604090205463402c65051180159061443157506000838152602260205260409020546342193f1610155b1561444157612d69816056615ba9565b6000838152602260205260409020546342193f17118015906144755750600083815260226020526040902054634414e24210155b1561448557612d69816057615ba9565b600083815260226020526040902054634414e243118015906144b9575060008381526022602052604090205463461fc01610155b156144c957612d69816058615ba9565b60008381526022602052604090205463461fc017118015906144fd575060008381526022602052604090205463483a4d8710155b1561450d57612d69816059615ba9565b60008381526022602052604090205463483a4d88118015906145415750600083815260226020526040902054634a65030e10155b1561455157612d6981605a615ba9565b600083815260226020526040902054634a65030f118015906145855750600083815260226020526040902054634ca05cbf10155b1561459557612d6981605b615ba9565b600083815260226020526040902054634ca05cc0118015906145c95750600083815260226020526040902054634eecda6810155b156145d957612d6981605c615ba9565b600083815260226020526040902054634eecda691180159061460d575060008381526022602052604090205463514affae10155b1561461d57612d6981605d615ba9565b60008381526022602052604090205463514affaf1180159061465157506000838152602260205260409020546353bb542610155b1561466157612d6981605e615ba9565b6000838152602260205260409020546353bb542711801590614695575060008381526022602052604090205463563e637910155b156146a557612d6981605f615ba9565b60008381526022602052604090205463563e637a118015906146d957506000838152602260205260409020546358d4bd8010155b156146e957612d69816060615ba9565b6000838152602260205260409020546358d4bd811180159061471d5750600083815260226020526040902054635b7ef66210155b1561472d57612d69816061615ba9565b600083815260226020526040902054635b7ef663118015906147615750600083815260226020526040902054635e3da6bc10155b1561477157612d69816062615ba9565b600083815260226020526040902054635e3da6bd118015906147a557506000838152602260205260409020546361116bbd10155b156147b557612d69816063615ba9565b6000838152602260205260409020546361116bbe118015906147e9575060008381526022602052604090205463996da3a010155b1561126d57612d69816064615ba9565b614801614856565b601855565b60006001600160e01b031982166380ac58cd60e01b148061483757506001600160e01b03198216635b5e139f60e01b145b8061105e57506301ffc9a760e01b6001600160e01b031983161461105e565b600a546001600160a01b03163314611ef15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016111cc565b6148b981614d65565b6129955760405162461bcd60e51b81526004016111cc90615c23565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061490a82611ae2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061494f83611ae2565b9050806001600160a01b0316846001600160a01b0316148061497657506149768185612aca565b8061499a5750836001600160a01b031661498f84611130565b6001600160a01b0316145b949350505050565b826001600160a01b03166149b582611ae2565b6001600160a01b0316146149db5760405162461bcd60e51b81526004016111cc90615dcc565b6001600160a01b038216614a3d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016111cc565b614a4a8383836001614e26565b826001600160a01b0316614a5d82611ae2565b6001600160a01b031614614a835760405162461bcd60e51b81526004016111cc90615dcc565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61109a828260405180602001604052806000815250614f5e565b816001600160a01b0316836001600160a01b03161415614bdd5760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b60448201526064016111cc565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b614c558484846149a2565b614c6184848484614f91565b6123c55760405162461bcd60e51b81526004016111cc90615e11565b60008181526015602052604081205460ff1615614cac5760405162461bcd60e51b81526004016111cc90615be3565b6000828152601f60205260409020546001600160a01b0316331480614ce75750336000818152601e60205260409020546001600160a01b0316145b80614d085750336000818152601d60205260409020546001600160a01b0316145b15614d4057601c546000838152602080526040902054603c9190614d2c9042615c0c565b614d369190615cb3565b61105e9190615bc1565b601c54600083815260216020526040902054603c9190614d2c9042615c0c565b919050565b6000908152600260205260409020546001600160a01b0316151590565b6060600b80546110ad90615aae565b60606000614d9e8361509e565b600101905060008167ffffffffffffffff811115614dbe57614dbe6156a8565b6040519080825280601f01601f191660200182016040528015614de8576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084614e21576115d4565b614df2565b60008281526015602052604090205460ff1615614e555760405162461bcd60e51b81526004016111cc90615be3565b6000828152601f60205260409020546001600160a01b0384811691161415614eca57603c601c54614e869190615bc1565b6000838152602080526040902054614e9e9042615c0c565b614ea89190615cb3565b6000838152602260209081526040808320939093556021905290812055614f52565b336000908152601d60205260409020546001600160a01b0384811691161480614f0d5750336000908152601e60205260409020546001600160a01b038481169116145b15614f1757614f52565b600082815260226020908152604080832083905560258252808320839055602182528083204290556024825280832083905560239091528120555b6123c584848484615176565b614f6883836152aa565b614f756000848484614f91565b61126d5760405162461bcd60e51b81526004016111cc90615e11565b60006001600160a01b0384163b1561509357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614fd5903390899088908890600401615e63565b602060405180830381600087803b158015614fef57600080fd5b505af192505050801561501f575060408051601f3d908101601f1916820190925261501c91810190615ea0565b60015b615079573d80801561504d576040519150601f19603f3d011682016040523d82523d6000602084013e615052565b606091505b5080516150715760405162461bcd60e51b81526004016111cc90615e11565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061499a565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106150dd5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310615109576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061512757662386f26fc10000830492506010015b6305f5e100831061513f576305f5e100830492506008015b612710831061515357612710830492506004015b60648310615165576064830492506002015b600a831061105e5760010192915050565b60018111156151e55760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b60648201526084016111cc565b816001600160a01b0385166152415761523c81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b615264565b836001600160a01b0316856001600160a01b0316146152645761526485826153c5565b6001600160a01b0384166152805761527b81615462565b6152a3565b846001600160a01b0316846001600160a01b0316146152a3576152a38482615511565b5050505050565b6001600160a01b0382166153005760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016111cc565b61530981614d65565b156153265760405162461bcd60e51b81526004016111cc90615ebd565b615334600083836001614e26565b61533d81614d65565b1561535a5760405162461bcd60e51b81526004016111cc90615ebd565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600060016153d284611e59565b6153dc9190615c0c565b60008381526007602052604090205490915080821461542f576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061547490600190615c0c565b6000838152600960205260408120546008805493945090928490811061549c5761549c615b67565b9060005260206000200154905080600883815481106154bd576154bd615b67565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806154f5576154f5615ef4565b6001900381819060005260206000200160009055905550505050565b600061551c83611e59565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b82805461556190615aae565b90600052602060002090601f01602090048101928261558357600085556155c9565b82601f1061559c57805160ff19168380011785556155c9565b828001600101855582156155c9579182015b828111156155c95782518255916020019190600101906155ae565b506155d5929150615603565b5090565b6040518060600160405280600081526020016000815260200160006001600160a01b031681525090565b5b808211156155d55760008155600101615604565b6001600160e01b03198116811461299557600080fd5b60006020828403121561564057600080fd5b813561241281615618565b801515811461299557600080fd5b60006020828403121561566b57600080fd5b81356124128161564b565b80356001600160a01b0381168114614d6057600080fd5b60006020828403121561569f57600080fd5b61241282615676565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156156d9576156d96156a8565b604051601f8501601f19908116603f01168101908282118183101715615701576157016156a8565b8160405280935085815286868601111561571a57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561574657600080fd5b813567ffffffffffffffff81111561575d57600080fd5b8201601f8101841361576e57600080fd5b61499a848235602084016156be565b60005b83811015615798578181015183820152602001615780565b838111156123c55750506000910152565b600081518084526157c181602086016020860161577d565b601f01601f19169290920160200192915050565b60208152600061241260208301846157a9565b6000602082840312156157fa57600080fd5b5035919050565b6000806040838503121561581457600080fd5b61581d83615676565b946020939093013593505050565b60008060006060848603121561584057600080fd5b61584984615676565b925061585760208501615676565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561589f57835183529284019291840191600101615883565b50909695505050505050565b600080600080608085870312156158c157600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156158f057600080fd5b8235915060208301356159028161564b565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b828110156159625781518051855286810151878601528501516001600160a01b0316858501526060909301929085019060010161592a565b5091979650505050505050565b6000806040838503121561598257600080fd5b61598b83615676565b915060208301356159028161564b565b600080600080608085870312156159b157600080fd5b6159ba85615676565b93506159c860208601615676565b925060408501359150606085013567ffffffffffffffff8111156159eb57600080fd5b8501601f810187136159fc57600080fd5b615a0b878235602084016156be565b91505092959194509250565b600080600080600060a08688031215615a2f57600080fd5b615a3886615676565b97602087013597506040870135966060810135965060800135945092505050565b60008060408385031215615a6c57600080fd5b50508035926020909101359150565b60008060408385031215615a8e57600080fd5b615a9783615676565b9150615aa560208401615676565b90509250929050565b600181811c90821680615ac257607f821691505b60208210811415615ae357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000600019821415615b6057615b60615b36565b5060010190565b634e487b7160e01b600052603260045260246000fd5b602080825260129082015271494e53554646494349454e545f46554e445360701b604082015260600190565b60008219821115615bbc57615bbc615b36565b500190565b600082615bde57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600f908201526e13919517d0931050d2d31254d51151608a1b604082015260600190565b600082821015615c1e57615c1e615b36565b500390565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b60208082526017908201527604d494e545f414d4f554e545f43414e4e4f545f42455f3604c1b604082015260600190565b60208082526013908201527213505617d4d55414131657d15610d151511151606a1b604082015260600190565b6000816000190483118215151615615ccd57615ccd615b36565b500290565b6001600160a01b03929092168252602082015260400190565b600060208284031215615cfd57600080fd5b81516124128161564b565b600084516020615d1b8285838a0161577d565b855191840191615d2e8184848a0161577d565b8554920191600090600181811c9080831680615d4b57607f831692505b858310811415615d6957634e487b7160e01b85526022600452602485fd5b808015615d7d5760018114615d8e57615dbb565b60ff19851688528388019550615dbb565b60008b81526020902060005b85811015615db35781548a820152908401908801615d9a565b505083880195505b50939b9a5050505050505050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090615e96908301846157a9565b9695505050505050565b600060208284031215615eb257600080fd5b815161241281615618565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212202b665dea4c29da153286965e18c34f12b632e81f0b50b03281e526ecbf71db6764736f6c63430008090033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000007414c4c424f5453000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007414c4c424f545300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f62616679626569686262757965366e62736872686c756c7832776961326836646e6a74727a623267353764666b6834616c376c786834616c786a692f00000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f62616679626569686262757965366e62736872686c756c7832776961326836646e6a74727a623267353764666b6834616c376c786834616c786a692f00000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f62616679626569686262757965366e62736872686c756c7832776961326836646e6a74727a623267353764666b6834616c376c786834616c786a692f00000000000000

-----Decoded View---------------
Arg [0] : _name (string): ALLBOTS
Arg [1] : _symbol (string): ALLBOTS
Arg [2] : _initBaseURI (string): https://nftstorage.link/ipfs/bafybeihbbuye6nbshrhlulx2wia2h6dnjtrzb2g57dfkh4al7lxh4alxji/
Arg [3] : _initNotRevealedURI (string): https://nftstorage.link/ipfs/bafybeihbbuye6nbshrhlulx2wia2h6dnjtrzb2g57dfkh4al7lxh4alxji/
Arg [4] : _initBlacklistURI (string): https://nftstorage.link/ipfs/bafybeihbbuye6nbshrhlulx2wia2h6dnjtrzb2g57dfkh4al7lxh4alxji/

-----Encoded View---------------
21 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 414c4c424f545300000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [8] : 414c4c424f545300000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000059
Arg [10] : 68747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166
Arg [11] : 79626569686262757965366e62736872686c756c7832776961326836646e6a74
Arg [12] : 727a623267353764666b6834616c376c786834616c786a692f00000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000059
Arg [14] : 68747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166
Arg [15] : 79626569686262757965366e62736872686c756c7832776961326836646e6a74
Arg [16] : 727a623267353764666b6834616c376c786834616c786a692f00000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000059
Arg [18] : 68747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166
Arg [19] : 79626569686262757965366e62736872686c756c7832776961326836646e6a74
Arg [20] : 727a623267353764666b6834616c376c786834616c786a692f00000000000000


Deployed Bytecode Sourcemap

65794:41124:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59724:224;;;;;;;;;;-1:-1:-1;59724:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;59724:224:0;;;;;;;;82851:79;;;;;;;;;;-1:-1:-1;82851:79:0;;;;;:::i;:::-;;:::i;:::-;;66783:45;;;;;;;;;;-1:-1:-1;66783:45:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;66783:45:0;;;;;;-1:-1:-1;;;;;1494:32:1;;;1476:51;;1464:2;1449:18;66783:45:0;1330:203:1;82583:124:0;;;;;;;;;;-1:-1:-1;82583:124:0;;;;;:::i;:::-;;:::i;76986:98::-;;;;;;;;;;-1:-1:-1;76986:98:0;;;;;:::i;:::-;77055:10;77044:22;;;;:10;:22;;;;;:32;;-1:-1:-1;;;;;;77044:32:0;-1:-1:-1;;;;;77044:32:0;;;;;;;;;;76986:98;43431:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;44943:171::-;;;;;;;;;;-1:-1:-1;44943:171:0;;;;;:::i;:::-;;:::i;44461:416::-;;;;;;;;;;-1:-1:-1;44461:416:0;;;;;:::i;:::-;;:::i;66412:41::-;;;;;;;;;;-1:-1:-1;66412:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;66125:31;;;;;;;;;;;;;;;;;;;4104:25:1;;;4092:2;4077:18;66125:31:0;3958:177:1;60364:113:0;;;;;;;;;;-1:-1:-1;60452:10:0;:17;60364:113;;66350:55;;;;;;;;;;-1:-1:-1;66350:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;66200:32;;;;;;;;;;;;;;;;45643:335;;;;;;;;;;-1:-1:-1;45643:335:0;;;;;:::i;:::-;;:::i;81791:128::-;;;;;;;;;;-1:-1:-1;81791:128:0;;;;;:::i;:::-;;:::i;67047:42::-;;;;;;;;;;-1:-1:-1;67047:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;70182:860;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;60032:256::-;;;;;;;;;;-1:-1:-1;60032:256:0;;;;;:::i;:::-;;:::i;66514:34::-;;;;;;;;;;;;;;;;66555:30;;;;;;;;;;;;;;;;67150:42;;;;;;;;;;-1:-1:-1;67150:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;46049:185;;;;;;;;;;-1:-1:-1;46049:185:0;;;;;:::i;:::-;;:::i;78074:160::-;;;:::i;78603:358::-;;;;;;;;;;-1:-1:-1;78603:358:0;;;;;:::i;:::-;;:::i;81125:86::-;;;;;;;;;;-1:-1:-1;81125:86:0;;;;;:::i;:::-;;:::i;78419:176::-;;;;;;;;;;-1:-1:-1;78419:176:0;;;;;:::i;:::-;;:::i;66239:38::-;;;;;;;;;;;;;;;;71066:2319;;;;;;;;;;-1:-1:-1;71066:2319:0;;;;;:::i;:::-;;:::i;81219:108::-;;;;;;;;;;-1:-1:-1;81219:108:0;;;;;:::i;:::-;;:::i;60554:233::-;;;;;;;;;;-1:-1:-1;60554:233:0;;;;;:::i;:::-;;:::i;66316:27::-;;;;;;;;;;-1:-1:-1;66316:27:0;;;;;;;;;;;77724:338;;;;;;;;;;-1:-1:-1;77724:338:0;;;;;:::i;:::-;;:::i;80912:113::-;;;;;;;;;;-1:-1:-1;80912:113:0;;;;;:::i;:::-;;:::i;82471:104::-;;;;;;;;;;-1:-1:-1;82471:104:0;;;;;:::i;:::-;;:::i;66284:25::-;;;;;;;;;;-1:-1:-1;66284:25:0;;;;;;;;81684:99;;;;;;;;;;-1:-1:-1;81684:99:0;;;;;:::i;:::-;;:::i;43141:223::-;;;;;;;;;;-1:-1:-1;43141:223:0;;;;;:::i;:::-;;:::i;66890:43::-;;;;;;;;;;-1:-1:-1;66890:43:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;66890:43:0;;;65985:21;;;;;;;;;;;;;:::i;69101:1065::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;42872:207::-;;;;;;;;;;-1:-1:-1;42872:207:0;;;;;:::i;:::-;;:::i;20854:103::-;;;;;;;;;;;;;:::i;66046:28::-;;;;;;;;;;;;;:::i;78243:166::-;;;:::i;82053:122::-;;;;;;;;;;-1:-1:-1;82053:122:0;;;;;:::i;:::-;;:::i;77204:182::-;;;;;;;;;;-1:-1:-1;77204:182:0;;;;;:::i;:::-;;:::i;66647:39::-;;;;;;;;;;;;;;;;77092:104;;;;;;;;;;-1:-1:-1;77092:104:0;;;;;:::i;:::-;77167:10;77153:25;;;;:13;:25;;;;;:35;;-1:-1:-1;;;;;;77153:35:0;-1:-1:-1;;;;;77153:35:0;;;;;;;;;;77092:104;66693:36;;;;;;;;;;;;;;;;20206:87;;;;;;;;;;-1:-1:-1;20279:6:0;;-1:-1:-1;;;;;20279:6:0;20206:87;;81035:82;;;;;;;;;;-1:-1:-1;81035:82:0;;;;;:::i;:::-;;:::i;43600:104::-;;;;;;;;;;;;;:::i;81335:98::-;;;;;;;;;;-1:-1:-1;81335:98:0;;;;;:::i;:::-;;:::i;66592:48::-;;;;;;;;;;-1:-1:-1;66592:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;77397:316;;;;;;;;;;-1:-1:-1;77397:316:0;;;;;:::i;:::-;;:::i;75859:1119::-;;;;;;:::i;:::-;;:::i;67199:46::-;;;;;;;;;;-1:-1:-1;67199:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;83053:168;;;;;;;;;;-1:-1:-1;83053:168:0;;;;;:::i;:::-;;:::i;45186:155::-;;;;;;;;;;-1:-1:-1;45186:155:0;;;;;:::i;:::-;;:::i;66940:45::-;;;;;;;;;;-1:-1:-1;66940:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;46305:322;;;;;;;;;;-1:-1:-1;46305:322:0;;;;;:::i;:::-;;:::i;66013:26::-;;;;;;;;;;;;;:::i;66736:33::-;;;;;;;;;;;;;;;;78969:256;;;;;;;;;;-1:-1:-1;78969:256:0;;;;;:::i;:::-;79067:10;79058:20;;;;:8;:20;;;;;;;;;;-1:-1:-1;;;;;79035:20:0;;;;;;;;;;:43;;;;79117:25;;;:13;:25;;;;;;;;79089;;;;;;:53;;;;79153:20;;;:24;;;;79188:29;;78969:256;67096:47;;;;;;;;;;-1:-1:-1;67096:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;83904:212;;;;;;;;;;-1:-1:-1;83904:212:0;;;;;:::i;:::-;;:::i;66081:37::-;;;;;;;;;;;;;:::i;66464:43::-;;;;;;;;;;-1:-1:-1;66464:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;79233:532;;;;;;;;;;-1:-1:-1;79233:532:0;;;;;:::i;:::-;;:::i;66992:48::-;;;;;;;;;;-1:-1:-1;66992:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;66835;;;;;;;;;;-1:-1:-1;66835:48:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;66835:48:0;;;73399:2430;;;;;;;;;;-1:-1:-1;73399:2430:0;;;;;:::i;:::-;;:::i;81557:119::-;;;;;;;;;;-1:-1:-1;81557:119:0;;;;;:::i;:::-;;:::i;79989:137::-;;;;;;;;;;-1:-1:-1;79989:137:0;;;;;:::i;:::-;;:::i;66163:30::-;;;;;;;;;;;;;;;;82715:128;;;;;;;;;;-1:-1:-1;82715:128:0;;;;;:::i;:::-;;:::i;82938:107::-;;;;;;;;;;;;;:::i;80145:757::-;;;;;;;;;;-1:-1:-1;80145:757:0;;;;;:::i;:::-;;:::i;81927:118::-;;;;;;;;;;-1:-1:-1;81927:118:0;;;;;:::i;:::-;;:::i;45412:164::-;;;;;;;;;;-1:-1:-1;45412:164:0;;;;;:::i;:::-;;:::i;82183:146::-;;;;;;;;;;-1:-1:-1;82183:146:0;;;;;:::i;:::-;;:::i;82337:126::-;;;;;;;;;;-1:-1:-1;82337:126:0;;;;;:::i;:::-;;:::i;21112:201::-;;;;;;;;;;-1:-1:-1;21112:201:0;;;;;:::i;:::-;;:::i;83229:173::-;;;;;;;;;;-1:-1:-1;83229:173:0;;;;;:::i;:::-;;:::i;79932:49::-;;;:::i;84125:22756::-;;;;;;;;;;-1:-1:-1;84125:22756:0;;;;;:::i;:::-;;:::i;81441:108::-;;;;;;;;;;-1:-1:-1;81441:108:0;;;;;:::i;:::-;;:::i;59724:224::-;59826:4;-1:-1:-1;;;;;;59850:50:0;;-1:-1:-1;;;59850:50:0;;:90;;;59904:36;59928:11;59904:23;:36::i;:::-;59843:97;59724:224;-1:-1:-1;;59724:224:0:o;82851:79::-;20092:13;:11;:13::i;:::-;82907:6:::1;:15:::0;;-1:-1:-1;;82907:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;82851:79::o;82583:124::-;20092:13;:11;:13::i;:::-;82668:31;;::::1;::::0;:12:::1;::::0;:31:::1;::::0;::::1;::::0;::::1;:::i;:::-;;82583:124:::0;:::o;43431:100::-;43485:13;43518:5;43511:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43431:100;:::o;44943:171::-;45019:7;45039:23;45054:7;45039:14;:23::i;:::-;-1:-1:-1;45082:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;45082:24:0;;44943:171::o;44461:416::-;44542:13;44558:23;44573:7;44558:14;:23::i;:::-;44542:39;;44606:5;-1:-1:-1;;;;;44600:11:0;:2;-1:-1:-1;;;;;44600:11:0;;;44592:57;;;;-1:-1:-1;;;44592:57:0;;9268:2:1;44592:57:0;;;9250:21:1;9307:2;9287:18;;;9280:30;9346:34;9326:18;;;9319:62;-1:-1:-1;;;9397:18:1;;;9390:31;9438:19;;44592:57:0;;;;;;;;;18837:10;-1:-1:-1;;;;;44684:21:0;;;;:62;;-1:-1:-1;44709:37:0;44726:5;18837:10;45412:164;:::i;44709:37::-;44662:173;;;;-1:-1:-1;;;44662:173:0;;9670:2:1;44662:173:0;;;9652:21:1;9709:2;9689:18;;;9682:30;9748:34;9728:18;;;9721:62;9819:31;9799:18;;;9792:59;9868:19;;44662:173:0;9468:425:1;44662:173:0;44848:21;44857:2;44861:7;44848:8;:21::i;:::-;44531:346;44461:416;;:::o;45643:335::-;45838:41;18837:10;45871:7;45838:18;:41::i;:::-;45830:99;;;;-1:-1:-1;;;45830:99:0;;;;;;;:::i;:::-;45942:28;45952:4;45958:2;45962:7;45942:9;:28::i;81791:128::-;20092:13;:11;:13::i;:::-;81874:16:::1;:37:::0;81791:128::o;70182:860::-;70230:16;70255:14;70272:13;60452:10;:17;;60364:113;70272:13;70255:30;-1:-1:-1;70292:13:0;;;;70463:1;70446:377;70470:6;70466:1;:10;70446:377;;;70494:13;70510:14;;;:11;:14;;;;;;70548:1;70539:10;;;;;:25;;;70562:2;70553:5;:11;;70539:25;70535:281;;;70581:7;;;;:::i;:::-;;;;70535:281;;;70619:2;70610:5;:11;;:26;;;;;70634:2;70625:5;:11;;70610:26;70606:210;;;70653:7;;;;:::i;:::-;;;;70606:210;;;70691:2;70682:5;:11;;:26;;;;;70706:2;70697:5;:11;;70682:26;70678:138;;;70725:6;;;;:::i;:::-;;;;70678:138;;;70762:2;70753:5;:11;;:27;;;;;70777:3;70768:5;:12;;70753:27;70749:67;;;70797:7;;;;:::i;:::-;;;;70749:67;-1:-1:-1;70478:3:0;;;;:::i;:::-;;;;70446:377;;;-1:-1:-1;70910:16:0;;;70924:1;70910:16;;;;;;;;;70885:22;;70910:16;;;;;;;;;;-1:-1:-1;70910:16:0;70885:41;;70944:5;70933;70939:1;70933:8;;;;;;;;:::i;:::-;;;;;;:16;;;;;70967:5;70956;70962:1;70956:8;;;;;;;;:::i;:::-;;;;;;:16;;;;;70990:4;70979:5;70985:1;70979:8;;;;;;;;:::i;:::-;;;;;;:15;;;;;71012:5;71001;71007:1;71001:8;;;;;;;;:::i;:::-;;;;;;;;;;:16;71033:5;70182:860;-1:-1:-1;;;;;;70182:860:0:o;60032:256::-;60129:7;60165:23;60182:5;60165:16;:23::i;:::-;60157:5;:31;60149:87;;;;-1:-1:-1;;;60149:87:0;;10918:2:1;60149:87:0;;;10900:21:1;10957:2;10937:18;;;10930:30;10996:34;10976:18;;;10969:62;-1:-1:-1;;;11047:18:1;;;11040:41;11098:19;;60149:87:0;10716:407:1;60149:87:0;-1:-1:-1;;;;;;60254:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;60032:256::o;46049:185::-;46187:39;46204:4;46210:2;46214:7;46187:39;;;;;;;;;;;;:16;:39::i;78074:160::-;78150:7;;78137:9;:20;;78129:51;;;;-1:-1:-1;;;78129:51:0;;;;;;;:::i;:::-;78215:11;;78200:10;78191:20;;;;:8;:20;;;;;:35;;:20;;;:35;;78215:11;;78191:35;:::i;:::-;;;;-1:-1:-1;;78074:160:0:o;78603:358::-;78663:16;78692:23;78718:17;78728:6;78718:9;:17::i;:::-;78692:43;;78746:25;78788:15;78774:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;78774:30:0;;78746:58;;78820:9;78815:113;78835:15;78831:1;:19;78815:113;;;78886:30;78906:6;78914:1;78886:19;:30::i;:::-;78872:8;78881:1;78872:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;78852:3;;;;:::i;:::-;;;;78815:113;;;-1:-1:-1;78945:8:0;78603:358;-1:-1:-1;;;78603:358:0:o;81125:86::-;20092:13;:11;:13::i;:::-;81188:4:::1;:15:::0;81125:86::o;78419:176::-;78479:4;78500:17;;;:9;:17;;;;;;;;:25;;:17;:25;78496:69;;;-1:-1:-1;78549:4:0;;78419:176;-1:-1:-1;78419:176:0:o;78496:69::-;-1:-1:-1;78582:5:0;;78419:176;-1:-1:-1;78419:176:0:o;71066:2319::-;20092:13;:11;:13::i;:::-;71226:14:::1;71243:13;60452:10:::0;:17;;60364:113;71243:13:::1;71226:30:::0;-1:-1:-1;71267:24:0::1;::::0;;;;;;;71651:1:::1;71634:490;71658:6;71654:1;:10;71634:490;;;71690:13;71706:14:::0;;;:11:::1;:14;::::0;;;;;71752:1:::1;71743:10:::0;::::1;::::0;::::1;::::0;:25:::1;;;71766:2;71757:5;:11;;71743:25;71739:370;;;71793:12:::0;::::1;::::0;::::1;:::i;:::-;;;;71739:370;;;71844:2;71835:5;:11;;:26;;;;;71859:2;71850:5;:11;;71835:26;71831:278;;;71886:13:::0;::::1;::::0;::::1;:::i;:::-;;;;71831:278;;;71938:2;71929:5;:11;;:26;;;;;71953:2;71944:5;:11;;71929:26;71925:184;;;71980:13:::0;::::1;::::0;::::1;:::i;:::-;;;;71925:184;;;72032:2;72023:5;:11;;:27;;;;;72047:3;72038:5;:12;;72023:27;72019:90;;;72075:14:::0;::::1;::::0;::::1;:::i;:::-;;;;72019:90;-1:-1:-1::0;71666:3:0;::::1;::::0;::::1;:::i;:::-;;;;71634:490;;;-1:-1:-1::0;72201:14:0;;72197:104:::1;;72255:30;72275:10:::0;72255:17;:30:::1;:::i;:::-;72236:49;;72197:104;72319:15:::0;;72315:108:::1;;72375:32;72396:11:::0;72375:18;:32:::1;:::i;:::-;72355:52;;72315:108;72441:15:::0;;72437:108:::1;;72497:32;72518:11:::0;72497:18;:32:::1;:::i;:::-;72477:52;;72437:108;72563:16:::0;;72559:112:::1;;72621:34;72643:12:::0;72621:19;:34:::1;:::i;:::-;72600:55;;72559:112;72765:1;72748:626;72772:6;72768:1;:10;72748:626;;;72804:13;72820:14:::0;;;:11:::1;:14;::::0;;;;;72866:1:::1;72857:10:::0;::::1;::::0;::::1;::::0;:25:::1;;;72880:2;72871:5;:11;;72857:25;72853:506;;;72915:10;72923:1;72915:7;:10::i;:::-;-1:-1:-1::0;;;;;72907:28:0::1;:46;72936:16;72907:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;72853:506;;;72992:2;72983:5;:11;;:26;;;;;73007:2;72998:5;:11;;72983:26;72979:380;;;73042:10;73050:1;73042:7;:10::i;:::-;-1:-1:-1::0;;;;;73034:28:0::1;:47;73063:17;73034:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;72979:380;73120:2;73111:5;:11;;:26;;;;;73135:2;73126:5;:11;;73111:26;73107:252;;;73170:10;73178:1;73170:7;:10::i;:::-;-1:-1:-1::0;;;;;73162:28:0::1;:47;73191:17;73162:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;73107:252;73248:2;73239:5;:11;;:27;;;;;73263:3;73254:5;:12;;73239:27;73235:124;;;73299:10;73307:1;73299:7;:10::i;:::-;-1:-1:-1::0;;;;;73291:28:0::1;:48;73320:18;73291:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;73235:124;-1:-1:-1::0;72780:3:0;::::1;::::0;::::1;:::i;:::-;;;;72748:626;;;;71215:2170;;;;;;;;;71066:2319:::0;;;;:::o;81219:108::-;20092:13;:11;:13::i;:::-;81293:11:::1;:26:::0;81219:108::o;60554:233::-;60629:7;60665:30;60452:10;:17;;60364:113;60665:30;60657:5;:38;60649:95;;;;-1:-1:-1;;;60649:95:0;;12164:2:1;60649:95:0;;;12146:21:1;12203:2;12183:18;;;12176:30;12242:34;12222:18;;;12215:62;-1:-1:-1;;;12293:18:1;;;12286:42;12345:19;;60649:95:0;11962:408:1;60649:95:0;60762:10;60773:5;60762:17;;;;;;;;:::i;:::-;;;;;;;;;60755:24;;60554:233;;;:::o;77724:338::-;77791:19;;;;:9;:19;;;;;;;;:28;77783:56;;;;-1:-1:-1;;;77783:56:0;;;;;;;:::i;:::-;77874:10;77888:1;77860:25;;;:13;:25;;;;;;77851:62;;;;-1:-1:-1;;;77851:62:0;;12921:2:1;77851:62:0;;;12903:21:1;12960:2;12940:18;;;12933:30;-1:-1:-1;;;12979:18:1;;;12972:50;13039:18;;77851:62:0;12719:344:1;77851:62:0;77950:16;;77925:21;;;;:11;:21;;;;;:41;;:21;;;:41;;77950:16;;77925:41;:::i;:::-;;;;-1:-1:-1;;77978:22:0;;;;:12;:22;;;;;:27;;78004:1;;77978:22;:27;;78004:1;;77978:27;:::i;:::-;;;;-1:-1:-1;;78031:10:0;78017:25;;;;:13;:25;;;;;:30;;78046:1;;78017:25;:30;;78046:1;;78017:30;:::i;:::-;;;;-1:-1:-1;;;77724:338:0:o;80912:113::-;20092:13;:11;:13::i;:::-;80991:17:::1;::::0;;;:9:::1;:17;::::0;;;;;:26;;-1:-1:-1;;80991:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;80912:113::o;82471:104::-;20092:13;:11;:13::i;:::-;82546:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;81684:99::-:0;20092:13;:11;:13::i;:::-;81774:1:::1;81750:21:::0;;;:11:::1;:21;::::0;;;;:25;81684:99::o;43141:223::-;43213:7;48028:16;;;:7;:16;;;;;;-1:-1:-1;;;;;48028:16:0;;43277:56;;;;-1:-1:-1;;;43277:56:0;;;;;;;:::i;65985:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;69101:1065::-;69148:25;69182:14;69199:13;60452:10;:17;;60364:113;69199:13;69182:30;;69219:37;69282:6;69259:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;69219:70;;69303:9;69298:247;69322:6;69318:1;:10;69298:247;;;69346:13;69362:5;:1;69366;69362:5;:::i;:::-;69346:21;;69435:5;69412:11;69424:1;69412:14;;;;;;;;:::i;:::-;;;;;;;;;;;:28;69474:15;69483:5;69474:8;:15::i;:::-;69451:11;69463:1;69451:14;;;;;;;;:::i;:::-;;;;;;;:20;;:38;;;;;69523:14;69531:5;69523:7;:14::i;:::-;69500:11;69512:1;69500:14;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;69500:37:0;;;:20;;;;:37;-1:-1:-1;69330:3:0;;;;:::i;:::-;;;;69298:247;;;;69558:9;69553:345;69577:10;69586:1;69577:6;:10;:::i;:::-;69573:1;:14;69553:345;;;69610:9;69622:5;:1;69626;69622:5;:::i;:::-;69610:17;;69605:286;69633:6;69629:1;:10;69605:286;;;69688:11;69700:1;69688:14;;;;;;;;:::i;:::-;;;;;;;:20;;;69665:11;69677:1;69665:14;;;;;;;;:::i;:::-;;;;;;;:20;;;:43;69661:219;;;69729:28;69760:11;69772:1;69760:14;;;;;;;;:::i;:::-;;;;;;;69729:45;;69810:11;69822:1;69810:14;;;;;;;;:::i;:::-;;;;;;;69793:11;69805:1;69793:14;;;;;;;;:::i;:::-;;;;;;:31;;;;69860:4;69843:11;69855:1;69843:14;;;;;;;;:::i;:::-;;;;;;:21;;;;69710:170;69661:219;69641:3;;;;:::i;:::-;;;;69605:286;;;-1:-1:-1;69589:3:0;;;;:::i;:::-;;;;69553:345;;;;69919:2;69910:6;:11;69906:257;;;69968:26;;;69991:2;69968:26;;;;;;;;;69934:31;;69968:26;;;;;;:::i;:::-;;;;;;;;;;;;;;;;69934:60;;70010:9;70005:85;70029:2;70025:1;:6;70005:85;;;70064:11;70076:1;70064:14;;;;;;;;:::i;:::-;;;;;;;70053:5;70059:1;70053:8;;;;;;;;:::i;:::-;;;;;;:25;;;;70033:3;;;;;:::i;:::-;;;;70005:85;;42872:207;42944:7;-1:-1:-1;;;;;42972:19:0;;42964:73;;;;-1:-1:-1;;;42964:73:0;;13753:2:1;42964:73:0;;;13735:21:1;13792:2;13772:18;;;13765:30;13831:34;13811:18;;;13804:62;-1:-1:-1;;;13882:18:1;;;13875:39;13931:19;;42964:73:0;13551:405:1;42964:73:0;-1:-1:-1;;;;;;43055:16:0;;;;;:9;:16;;;;;;;42872:207::o;20854:103::-;20092:13;:11;:13::i;:::-;20919:30:::1;20946:1;20919:18;:30::i;:::-;20854:103::o:0;66046:28::-;;;;;;;:::i;78243:166::-;78325:12;;78312:9;:25;;78304:56;;;;-1:-1:-1;;;78304:56:0;;;;;;;:::i;:::-;78385:10;78371:25;;;;:13;:25;;;;;:30;;78400:1;;78371:25;:30;;78400:1;;78371:30;:::i;82053:122::-;20092:13;:11;:13::i;:::-;82134::::1;:33:::0;82053:122::o;77204:182::-;77261:7;77290:19;;;:9;:19;;;;;;;;:28;77282:56;;;;-1:-1:-1;;;77282:56:0;;;;;;;:::i;:::-;-1:-1:-1;77356:21:0;;;;:11;:21;;;;;;;77204:182::o;81035:82::-;20092:13;:11;:13::i;:::-;81092:8:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;81092:17:0;;::::1;::::0;;;::::1;::::0;;81035:82::o;43600:104::-;43656:13;43689:7;43682:14;;;;;:::i;81335:98::-;20092:13;:11;:13::i;:::-;81404:7:::1;:21:::0;81335:98::o;77397:316::-;77459:19;;;;:9;:19;;;;;;;;:28;77451:56;;;;-1:-1:-1;;;77451:56:0;;;;;;;:::i;:::-;77537:10;77551:1;77528:20;;;:8;:20;;;;;;77519:52;;;;-1:-1:-1;;;77519:52:0;;14163:2:1;77519:52:0;;;14145:21:1;14202:2;14182:18;;;14175:30;-1:-1:-1;;;14221:18:1;;;14214:45;14276:18;;77519:52:0;13961:339:1;77519:52:0;77608:11;;77583:21;;;;:11;:21;;;;;:36;;:21;;;:36;;77608:11;;77583:36;:::i;:::-;;;;-1:-1:-1;;77631:17:0;;;;:7;:17;;;;;:22;;77652:1;;77631:17;:22;;77652:1;;77631:22;:::i;:::-;;;;-1:-1:-1;;77674:10:0;77665:20;;;;:8;:20;;;;;:25;;77689:1;;77665:20;:25;;77689:1;;77665:25;:::i;75859:1119::-;75920:14;75937:13;60452:10;:17;;60364:113;75937:13;75920:30;;75983:1;75969:11;:15;75961:51;;;;-1:-1:-1;;;75961:51:0;;;;;;;:::i;:::-;76055:9;;76031:20;76040:11;76031:6;:20;:::i;:::-;:33;;76023:65;;;;-1:-1:-1;;;76023:65:0;;;;;;;:::i;:::-;20279:6;;-1:-1:-1;;;;;20279:6:0;76105:10;:21;76101:368;;76201:19;;76186:10;76165:32;;;;:20;:32;;;;;;76151:46;;:11;:46;:::i;:::-;:69;;76143:110;;;;-1:-1:-1;;;76143:110:0;;15207:2:1;76143:110:0;;;15189:21:1;15246:2;15226:18;;;15219:30;15285;15265:18;;;15258:58;15333:18;;76143:110:0;15005:352:1;76143:110:0;76277:6;;;;76276:7;76268:31;;;;-1:-1:-1;;;76268:31:0;;15564:2:1;76268:31:0;;;15546:21:1;15603:2;15583:18;;;15576:30;-1:-1:-1;;;15622:18:1;;;15615:41;15673:18;;76268:31:0;15362:335:1;76268:31:0;76337:13;;76322:11;:28;;76314:66;;;;-1:-1:-1;;;76314:66:0;;15904:2:1;76314:66:0;;;15886:21:1;15943:2;15923:18;;;15916:30;-1:-1:-1;;;15962:18:1;;;15955:55;16027:18;;76314:66:0;15702:349:1;76314:66:0;76423:11;76416:4;;:18;;;;:::i;:::-;76403:9;:31;;76395:62;;;;-1:-1:-1;;;76395:62:0;;;;;;;:::i;:::-;76498:1;76481:490;76506:11;76501:1;:16;76481:490;;76539:33;76549:10;76561;76570:1;76561:6;:10;:::i;:::-;76539:9;:33::i;:::-;76587:14;76604:10;76613:1;76604:6;:10;:::i;:::-;76629:16;;;;:8;:16;;;;;;;;:29;;-1:-1:-1;;;;;;76629:29:0;76648:10;76629:29;;;;;;76673:18;;;;;;76694:15;76673:36;;76724:13;:21;;;;;:25;;;76764:11;:19;;;;;:23;;;76802:7;:15;;;;;:19;;;76836:12;:20;;;;;:24;;;76875:7;:15;;;;;:19;;;76909:32;;:20;:32;;;;;:34;;76587:27;;-1:-1:-1;76909:32:0;:34;;;:::i;:::-;;;;;;76524:447;76519:3;;;;;:::i;:::-;;;;76481:490;;83053:168;20092:13;:11;:13::i;:::-;83157:56:::1;::::0;-1:-1:-1;;;83157:56:0;;-1:-1:-1;;;;;83157:30:0;::::1;::::0;::::1;::::0;:56:::1;::::0;83188:10:::1;::::0;83200:12;;83157:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45186:155::-:0;45281:52;18837:10;45314:8;45324;45281:18;:52::i;46305:322::-;46479:41;18837:10;46512:7;46479:18;:41::i;:::-;46471:99;;;;-1:-1:-1;;;46471:99:0;;;;;;;:::i;:::-;46581:38;46595:4;46601:2;46605:7;46614:4;46581:13;:38::i;:::-;46305:322;;;;:::o;66013:26::-;;;;;;;:::i;83904:212::-;83964:4;83989:19;;;:9;:19;;;;;;;;:28;83981:56;;;;-1:-1:-1;;;83981:56:0;;;;;;;:::i;:::-;84048:13;84064:21;84076:8;84064:11;:21::i;:::-;84048:37;83904:212;-1:-1:-1;;;83904:212:0:o;66081:37::-;;;;;;;:::i;79233:532::-;79306:13;79340:16;79348:7;79340;:16::i;:::-;79332:47;;;;-1:-1:-1;;;79332:47:0;;16960:2:1;79332:47:0;;;16942:21:1;16999:2;16979:18;;;16972:30;-1:-1:-1;;;17018:18:1;;;17011:48;17076:18;;79332:47:0;16758:342:1;79332:47:0;79393:18;;;;:9;:18;;;;;;;;:26;;:18;:26;79390:77;;;79443:12;79436:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;79233:532;;;:::o;79390:77::-;79480:8;;;;;;;79477:70;;79521:14;79514:21;;;;;:::i;79477:70::-;79557:28;79588:10;:8;:10::i;:::-;79557:41;;79647:1;79622:14;79616:28;:32;:141;;;;;;;;;;;;;;;;;79688:14;79704:18;:7;:16;:18::i;:::-;79724:13;79671:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;79609:148;79233:532;-1:-1:-1;;;79233:532:0:o;73399:2430::-;20092:13;:11;:13::i;:::-;73586:14:::1;73603:13;60452:10:::0;:17;;60364:113;73603:13:::1;73586:30:::0;-1:-1:-1;73631:24:0::1;::::0;;;;;;;74043:1:::1;74026:490;74050:6;74046:1;:10;74026:490;;;74082:13;74098:14:::0;;;:11:::1;:14;::::0;;;;;74144:1:::1;74135:10:::0;::::1;::::0;::::1;::::0;:25:::1;;;74158:2;74149:5;:11;;74135:25;74131:370;;;74185:12:::0;::::1;::::0;::::1;:::i;:::-;;;;74131:370;;;74236:2;74227:5;:11;;:26;;;;;74251:2;74242:5;:11;;74227:26;74223:278;;;74278:13:::0;::::1;::::0;::::1;:::i;:::-;;;;74223:278;;;74330:2;74321:5;:11;;:26;;;;;74345:2;74336:5;:11;;74321:26;74317:184;;;74372:13:::0;::::1;::::0;::::1;:::i;:::-;;;;74317:184;;;74424:2;74415:5;:11;;:27;;;;;74439:3;74430:5;:12;;74415:27;74411:90;;;74467:14:::0;::::1;::::0;::::1;:::i;:::-;;;;74411:90;-1:-1:-1::0;74058:3:0;::::1;::::0;::::1;:::i;:::-;;;;74026:490;;;-1:-1:-1::0;74593:14:0;;74589:104:::1;;74647:30;74667:10:::0;74647:17;:30:::1;:::i;:::-;74628:49;;74589:104;74711:15:::0;;74707:108:::1;;74767:32;74788:11:::0;74767:18;:32:::1;:::i;:::-;74747:52;;74707:108;74833:15:::0;;74829:108:::1;;74889:32;74910:11:::0;74889:18;:32:::1;:::i;:::-;74869:52;;74829:108;74955:16:::0;;74951:112:::1;;75013:34;75035:12:::0;75013:19;:34:::1;:::i;:::-;74992:55;;74951:112;75157:1;75140:678;75164:6;75160:1;:10;75140:678;;;75196:13;75212:14:::0;;;:11:::1;:14;::::0;;;;;75258:1:::1;75249:10:::0;::::1;::::0;::::1;::::0;:25:::1;;;75272:2;75263:5;:11;;75249:25;75245:558;;;75306:12;-1:-1:-1::0;;;;;75299:29:0::1;;75329:10;75337:1;75329:7;:10::i;:::-;75341:16;75299:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;75245:558;;;75397:2;75388:5;:11;;:26;;;;;75412:2;75403:5;:11;;75388:26;75384:419;;;75446:12;-1:-1:-1::0;;;;;75439:29:0::1;;75469:10;75477:1;75469:7;:10::i;:::-;75481:17;75439:60;;;;;;;;;;;;;;;;:::i;75384:419::-;75538:2;75529:5;:11;;:26;;;;;75553:2;75544:5;:11;;75529:26;75525:278;;;75587:12;-1:-1:-1::0;;;;;75580:29:0::1;;75610:10;75618:1;75610:7;:10::i;:::-;75622:17;75580:60;;;;;;;;;;;;;;;;:::i;75525:278::-;75679:2;75670:5;:11;;:27;;;;;75694:3;75685:5;:12;;75670:27;75666:137;;;75729:12;-1:-1:-1::0;;;;;75722:29:0::1;;75752:10;75760:1;75752:7;:10::i;:::-;75764:18;75722:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;75666:137;-1:-1:-1::0;75172:3:0;::::1;::::0;::::1;:::i;:::-;;;;75140:678;;;;73571:2258;;;;;;;;;73399:2430:::0;;;;;:::o;81557:119::-;20092:13;:11;:13::i;:::-;81641:17:::1;::::0;;;:7:::1;:17;::::0;;;;;:27;81557:119::o;79989:137::-;20092:13;:11;:13::i;:::-;-1:-1:-1;;;;;80060:17:0::1;80080:1;80060:17:::0;;;:8:::1;:17;::::0;;;;;;;:21;;;80092:13:::1;:22:::0;;;;;:26;79989:137::o;82715:128::-;20092:13;:11;:13::i;:::-;82802:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;82938:107::-:0;20092:13;:11;:13::i;:::-;20279:6;;82989:48:::1;::::0;-1:-1:-1;;;;;20279:6:0;;;;83015:21:::1;82989:48:::0;::::1;;;::::0;::::1;::::0;;;83015:21;20279:6;82989:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;82938:107::o:0;80145:757::-;20092:13;:11;:13::i;:::-;80230:14:::1;80247:13;60452:10:::0;:17;;60364:113;80247:13:::1;80230:30;;80289:1;80279:7;:11;80271:47;;;;-1:-1:-1::0;;;80271:47:0::1;;;;;;;:::i;:::-;80357:9;::::0;80337:16:::1;80346:7:::0;80337:6;:16:::1;:::i;:::-;:29;;80329:61;;;;-1:-1:-1::0;;;80329:61:0::1;;;;;;;:::i;:::-;80430:1;80413:482;80438:7;80433:1;:12;80413:482;;80467:32;80477:9:::0;80488:10:::1;80497:1:::0;80488:6;:10:::1;:::i;80467:32::-;80515:14;80532:10;80541:1:::0;80532:6;:10:::1;:::i;:::-;-1:-1:-1::0;;;;;80557:31:0;::::1;;::::0;;;:20:::1;:31;::::0;;;;:33;;80515:27;;-1:-1:-1;80557:31:0;:33:::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;80605:16:0::1;::::0;;;:8:::1;:16;::::0;;;;;;;:28;;-1:-1:-1;;;;;;80605:28:0::1;-1:-1:-1::0;;;;;80605:28:0;::::1;;::::0;;80648:18;;;;;;80669:15:::1;80648:36:::0;;80699:13:::1;:21:::0;;;;;:25;;;80739:11:::1;:19:::0;;;;;:23;;;80777:7:::1;:15:::0;;;;;:19;;;80811:12:::1;:20:::0;;;;;:24;;;80850:7:::1;:15:::0;;;;;:19;80447:3;::::1;::::0;::::1;:::i;:::-;;;;80413:482;;81927:118:::0;20092:13;:11;:13::i;:::-;82006:12:::1;:31:::0;81927:118::o;45412:164::-;-1:-1:-1;;;;;45533:25:0;;;45509:4;45533:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;45412:164::o;82183:146::-;20092:13;:11;:13::i;:::-;82276:19:::1;:45:::0;82183:146::o;82337:126::-;20092:13;:11;:13::i;:::-;82423:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;21112:201::-:0;20092:13;:11;:13::i;:::-;-1:-1:-1;;;;;21201:22:0;::::1;21193:73;;;::::0;-1:-1:-1;;;21193:73:0;;18965:2:1;21193:73:0::1;::::0;::::1;18947:21:1::0;19004:2;18984:18;;;18977:30;19043:34;19023:18;;;19016:62;-1:-1:-1;;;19094:18:1;;;19087:36;19140:19;;21193:73:0::1;18763:402:1::0;21193:73:0::1;21277:28;21296:8;21277:18;:28::i;83229:173::-:0;20092:13;:11;:13::i;:::-;83326:68:::1;::::0;-1:-1:-1;;;83326:68:0;;83368:4:::1;83326:68;::::0;::::1;19410:34:1::0;83375:10:0::1;19460:18:1::0;;;19453:43;19512:18;;;19505:34;;;-1:-1:-1;;;;;83326:33:0;::::1;::::0;::::1;::::0;19345:18:1;;83326:68:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;83229:173:::0;;:::o;79932:49::-;20092:13;:11;:13::i;84125:22756::-;84196:19;;;;:9;:19;;;;;;;;:28;84188:56;;;;-1:-1:-1;;;84188:56:0;;;;;;;:::i;:::-;84265:21;;;;:11;:21;;;;;;84290:3;-1:-1:-1;84265:28:0;84256:59;;;;-1:-1:-1;;;84256:59:0;;19752:2:1;84256:59:0;;;19734:21:1;19791:2;19771:18;;;19764:30;-1:-1:-1;;;19810:18:1;;;19803:47;19867:18;;84256:59:0;19550:341:1;84256:59:0;84326:15;84344:21;84356:8;84344:11;:21::i;:::-;84376:17;;;;:7;:17;;;;;;;;:27;;;84504:11;;84484:7;:17;;;;;;84326:39;;-1:-1:-1;84376:17:0;;84484:31;;84504:11;84484:31;:::i;:::-;84465:16;;84440:22;;;;:12;:22;;;;;;:41;;84465:16;84440:41;:::i;:::-;:75;;;;:::i;:::-;84541:17;;;;:7;:17;;;;;;84414:101;;-1:-1:-1;84562:1:0;-1:-1:-1;84541:22:0;;;:57;;-1:-1:-1;84568:17:0;;;;:7;:17;;;;;;84589:8;-1:-1:-1;84568:29:0;84541:57;84528:22310;;;84657:17;;;;:7;:17;;;;;;84678:1;-1:-1:-1;84657:22:0;;;:53;;-1:-1:-1;84684:17:0;;;;:7;:17;;;;;;84705:4;-1:-1:-1;84684:25:0;84657:53;84631:6102;;;84758:19;:15;84776:1;84758:19;:::i;:::-;84734:21;;;;:11;:21;;;;;:43;44531:346;44461:416;;:::o;84631:6102::-;84853:17;;;;:7;:17;;;;;;84874:4;-1:-1:-1;84853:25:0;;;:56;;-1:-1:-1;84883:17:0;;;;:7;:17;;;;;;84904:4;-1:-1:-1;84883:25:0;84853:56;84828:5905;;;84957:19;:15;84975:1;84957:19;:::i;84828:5905::-;85053:17;;;;:7;:17;;;;;;85074:4;-1:-1:-1;85053:25:0;;;:56;;-1:-1:-1;85083:17:0;;;;:7;:17;;;;;;85104:4;-1:-1:-1;85083:25:0;85053:56;85027:5706;;;85157:19;:15;85175:1;85157:19;:::i;85027:5706::-;85252:17;;;;:7;:17;;;;;;85273:4;-1:-1:-1;85252:25:0;;;:56;;-1:-1:-1;85282:17:0;;;;:7;:17;;;;;;85303:4;-1:-1:-1;85282:25:0;85252:56;85227:5506;;;85356:19;:15;85374:1;85356:19;:::i;85227:5506::-;85452:17;;;;:7;:17;;;;;;85473:4;-1:-1:-1;85452:25:0;;;:56;;-1:-1:-1;85482:17:0;;;;:7;:17;;;;;;85503:4;-1:-1:-1;85482:25:0;85452:56;85426:5307;;;85556:19;:15;85574:1;85556:19;:::i;85426:5307::-;85651:17;;;;:7;:17;;;;;;85672:4;-1:-1:-1;85651:25:0;;;:57;;-1:-1:-1;85681:17:0;;;;:7;:17;;;;;;85702:5;-1:-1:-1;85681:26:0;85651:57;85626:5107;;;85756:19;:15;85774:1;85756:19;:::i;85626:5107::-;85852:17;;;;:7;:17;;;;;;85873:5;-1:-1:-1;85852:26:0;;;:58;;-1:-1:-1;85883:17:0;;;;:7;:17;;;;;;85904:5;-1:-1:-1;85883:26:0;85852:58;85826:4907;;;85958:19;:15;85976:1;85958:19;:::i;85826:4907::-;86053:17;;;;:7;:17;;;;;;86074:5;-1:-1:-1;86053:26:0;;;:58;;-1:-1:-1;86084:17:0;;;;:7;:17;;;;;;86105:5;-1:-1:-1;86084:26:0;86053:58;86028:4705;;;86159:19;:15;86177:1;86159:19;:::i;86028:4705::-;86255:17;;;;:7;:17;;;;;;86276:5;-1:-1:-1;86255:26:0;;;:58;;-1:-1:-1;86286:17:0;;;;:7;:17;;;;;;86307:5;-1:-1:-1;86286:26:0;86255:58;86229:4504;;;86361:19;:15;86379:1;86361:19;:::i;86229:4504::-;86456:17;;;;:7;:17;;;;;;86477:5;-1:-1:-1;86456:26:0;;;:58;;-1:-1:-1;86487:17:0;;;;:7;:17;;;;;;86508:5;-1:-1:-1;86487:26:0;86456:58;86431:4302;;;86562:20;:15;86580:2;86562:20;:::i;86431:4302::-;86659:17;;;;:7;:17;;;;;;86680:5;-1:-1:-1;86659:26:0;;;:58;;-1:-1:-1;86690:17:0;;;;:7;:17;;;;;;86711:5;-1:-1:-1;86690:26:0;86659:58;86633:4100;;;86765:20;:15;86783:2;86765:20;:::i;86633:4100::-;86861:17;;;;:7;:17;;;;;;86882:5;-1:-1:-1;86861:26:0;;;:59;;-1:-1:-1;86892:17:0;;;;:7;:17;;;;;;86913:6;-1:-1:-1;86892:27:0;86861:59;86836:3897;;;86968:20;:15;86986:2;86968:20;:::i;86836:3897::-;87065:17;;;;:7;:17;;;;;;87086:6;-1:-1:-1;87065:27:0;;;:60;;-1:-1:-1;87097:17:0;;;;:7;:17;;;;;;87118:6;-1:-1:-1;87097:27:0;87065:60;87039:3694;;;87173:20;:15;87191:2;87173:20;:::i;87039:3694::-;87269:17;;;;:7;:17;;;;;;87290:6;-1:-1:-1;87269:27:0;;;:60;;-1:-1:-1;87301:17:0;;;;:7;:17;;;;;;87322:6;-1:-1:-1;87301:27:0;87269:60;87244:3489;;;87377:20;:15;87395:2;87377:20;:::i;87244:3489::-;87474:17;;;;:7;:17;;;;;;87495:6;-1:-1:-1;87474:27:0;;;:60;;-1:-1:-1;87506:17:0;;;;:7;:17;;;;;;87527:6;-1:-1:-1;87506:27:0;87474:60;87448:3285;;;87582:20;:15;87600:2;87582:20;:::i;87448:3285::-;87678:17;;;;:7;:17;;;;;;87699:6;-1:-1:-1;87678:27:0;;;:60;;-1:-1:-1;87710:17:0;;;;:7;:17;;;;;;87731:6;-1:-1:-1;87710:27:0;87678:60;87653:3080;;;87786:20;:15;87804:2;87786:20;:::i;87653:3080::-;87883:17;;;;:7;:17;;;;;;87904:6;-1:-1:-1;87883:27:0;;;:60;;-1:-1:-1;87915:17:0;;;;:7;:17;;;;;;87936:6;-1:-1:-1;87915:27:0;87883:60;87857:2876;;;87991:20;:15;88009:2;87991:20;:::i;87857:2876::-;88087:17;;;;:7;:17;;;;;;88108:6;-1:-1:-1;88087:27:0;;;:61;;-1:-1:-1;88119:17:0;;;;:7;:17;;;;;;88140:7;-1:-1:-1;88119:28:0;88087:61;88062:2671;;;88196:20;:15;88214:2;88196:20;:::i;88062:2671::-;88293:17;;;;:7;:17;;;;;;88314:7;-1:-1:-1;88293:28:0;;;:62;;-1:-1:-1;88326:17:0;;;;:7;:17;;;;;;88347:7;-1:-1:-1;88326:28:0;88293:62;88267:2466;;;88403:20;:15;88421:2;88403:20;:::i;88267:2466::-;88499:17;;;;:7;:17;;;;;;88520:7;-1:-1:-1;88499:28:0;;;:62;;-1:-1:-1;88532:17:0;;;;:7;:17;;;;;;88553:7;-1:-1:-1;88532:28:0;88499:62;88474:2259;;;88609:20;:15;88627:2;88609:20;:::i;88474:2259::-;88706:17;;;;:7;:17;;;;;;88727:7;-1:-1:-1;88706:28:0;;;:62;;-1:-1:-1;88739:17:0;;;;:7;:17;;;;;;88760:7;-1:-1:-1;88739:28:0;88706:62;88680:2053;;;88816:20;:15;88834:2;88816:20;:::i;88680:2053::-;88912:17;;;;:7;:17;;;;;;88933:7;-1:-1:-1;88912:28:0;;;:62;;-1:-1:-1;88945:17:0;;;;:7;:17;;;;;;88966:7;-1:-1:-1;88945:28:0;88912:62;88887:1846;;;89022:20;:15;89040:2;89022:20;:::i;88887:1846::-;89119:17;;;;:7;:17;;;;;;89140:7;-1:-1:-1;89119:28:0;;;:63;;-1:-1:-1;89152:17:0;;;;:7;:17;;;;;;89173:8;-1:-1:-1;89152:29:0;89119:63;89093:1640;;;89230:20;:15;89248:2;89230:20;:::i;89093:1640::-;89326:17;;;;:7;:17;;;;;;89347:8;-1:-1:-1;89326:29:0;;;:64;;-1:-1:-1;89360:17:0;;;;:7;:17;;;;;;89381:8;-1:-1:-1;89360:29:0;89326:64;89301:1432;;;89438:20;:15;89456:2;89438:20;:::i;89301:1432::-;89535:17;;;;:7;:17;;;;;;89556:8;-1:-1:-1;89535:29:0;;;:64;;-1:-1:-1;89569:17:0;;;;:7;:17;;;;;;89590:8;-1:-1:-1;89569:29:0;89535:64;89509:1224;;;89647:20;:15;89665:2;89647:20;:::i;89509:1224::-;89743:17;;;;:7;:17;;;;;;89764:8;-1:-1:-1;89743:29:0;;;:64;;-1:-1:-1;89777:17:0;;;;:7;:17;;;;;;89798:8;-1:-1:-1;89777:29:0;89743:64;89718:1015;;;89855:20;:15;89873:2;89855:20;:::i;89718:1015::-;89952:17;;;;:7;:17;;;;;;89973:8;-1:-1:-1;89952:29:0;;;:64;;-1:-1:-1;89986:17:0;;;;:7;:17;;;;;;90007:8;-1:-1:-1;89986:29:0;89952:64;89926:807;;;90064:20;:15;90082:2;90064:20;:::i;89926:807::-;90160:17;;;;:7;:17;;;;;;90181:8;-1:-1:-1;90160:29:0;;;:64;;-1:-1:-1;90194:17:0;;;;:7;:17;;;;;;90215:8;-1:-1:-1;90194:29:0;90160:64;90135:598;;;90272:20;:15;90290:2;90272:20;:::i;90135:598::-;90369:17;;;;:7;:17;;;;;;90390:8;-1:-1:-1;90369:29:0;;;:64;;-1:-1:-1;90403:17:0;;;;:7;:17;;;;;;90424:8;-1:-1:-1;90403:29:0;90369:64;90343:390;;;90481:20;:15;90499:2;90481:20;:::i;90343:390::-;90577:17;;;;:7;:17;;;;;;90598:8;-1:-1:-1;90577:29:0;;;:64;;-1:-1:-1;90611:17:0;;;;:7;:17;;;;;;90632:8;-1:-1:-1;90611:29:0;90577:64;90552:181;;;90689:20;:15;90707:2;90689:20;:::i;84528:22310::-;90774:17;;;;:7;:17;;;;;;90795:8;-1:-1:-1;90774:29:0;;;:65;;-1:-1:-1;90808:17:0;;;;:7;:17;;;;;;90829:9;-1:-1:-1;90808:30:0;90774:65;90761:16077;;;90901:17;;;;:7;:17;;;;;;90922:8;-1:-1:-1;90901:29:0;;;:64;;-1:-1:-1;90935:17:0;;;;:7;:17;;;;;;90956:8;-1:-1:-1;90935:29:0;90901:64;90871:6747;;;91017:20;:15;91035:2;91017:20;:::i;90871:6747::-;91125:17;;;;:7;:17;;;;;;91146:8;-1:-1:-1;91125:29:0;;;:64;;-1:-1:-1;91159:17:0;;;;:7;:17;;;;;;91180:8;-1:-1:-1;91159:29:0;91125:64;91096:6522;;;91241:20;:15;91259:2;91241:20;:::i;91096:6522::-;91350:17;;;;:7;:17;;;;;;91371:8;-1:-1:-1;91350:29:0;;;:64;;-1:-1:-1;91384:17:0;;;;:7;:17;;;;;;91405:8;-1:-1:-1;91384:29:0;91350:64;91320:6298;;;91466:20;:15;91484:2;91466:20;:::i;91320:6298::-;91574:17;;;;:7;:17;;;;;;91595:8;-1:-1:-1;91574:29:0;;;:64;;-1:-1:-1;91608:17:0;;;;:7;:17;;;;;;91629:8;-1:-1:-1;91608:29:0;91574:64;91545:6073;;;91690:20;:15;91708:2;91690:20;:::i;91545:6073::-;91799:17;;;;:7;:17;;;;;;91820:8;-1:-1:-1;91799:29:0;;;:64;;-1:-1:-1;91833:17:0;;;;:7;:17;;;;;;91854:8;-1:-1:-1;91833:29:0;91799:64;91769:5849;;;91915:20;:15;91933:2;91915:20;:::i;91769:5849::-;92023:17;;;;:7;:17;;;;;;92044:8;-1:-1:-1;92023:29:0;;;:64;;-1:-1:-1;92057:17:0;;;;:7;:17;;;;;;92078:8;-1:-1:-1;92057:29:0;92023:64;91994:5624;;;92139:20;:15;92157:2;92139:20;:::i;91994:5624::-;92248:17;;;;:7;:17;;;;;;92269:8;-1:-1:-1;92248:29:0;;;:64;;-1:-1:-1;92282:17:0;;;;:7;:17;;;;;;92303:8;-1:-1:-1;92282:29:0;92248:64;92218:5400;;;92364:20;:15;92382:2;92364:20;:::i;92218:5400::-;92472:17;;;;:7;:17;;;;;;92493:8;-1:-1:-1;92472:29:0;;;:64;;-1:-1:-1;92506:17:0;;;;:7;:17;;;;;;92527:8;-1:-1:-1;92506:29:0;92472:64;92443:5175;;;92588:20;:15;92606:2;92588:20;:::i;92443:5175::-;92697:17;;;;:7;:17;;;;;;92718:8;-1:-1:-1;92697:29:0;;;:65;;-1:-1:-1;92731:17:0;;;;:7;:17;;;;;;92752:9;-1:-1:-1;92731:30:0;92697:65;92667:4951;;;92814:20;:15;92832:2;92814:20;:::i;92667:4951::-;92922:17;;;;:7;:17;;;;;;92943:9;-1:-1:-1;92922:30:0;;;:66;;-1:-1:-1;92957:17:0;;;;:7;:17;;;;;;92978:9;-1:-1:-1;92957:30:0;92922:66;92893:4725;;;93040:20;:15;93058:2;93040:20;:::i;92893:4725::-;93149:17;;;;:7;:17;;;;;;93170:9;-1:-1:-1;93149:30:0;;;:66;;-1:-1:-1;93184:17:0;;;;:7;:17;;;;;;93205:9;-1:-1:-1;93184:30:0;93149:66;93119:4499;;;93267:20;:15;93285:2;93267:20;:::i;93119:4499::-;93375:17;;;;:7;:17;;;;;;93396:9;-1:-1:-1;93375:30:0;;;:66;;-1:-1:-1;93410:17:0;;;;:7;:17;;;;;;93431:9;-1:-1:-1;93410:30:0;93375:66;93346:4272;;;93493:20;:15;93511:2;93493:20;:::i;93346:4272::-;93602:17;;;;:7;:17;;;;;;93623:9;-1:-1:-1;93602:30:0;;;:66;;-1:-1:-1;93637:17:0;;;;:7;:17;;;;;;93658:9;-1:-1:-1;93637:30:0;93602:66;93572:4046;;;93720:20;:15;93738:2;93720:20;:::i;93572:4046::-;93828:17;;;;:7;:17;;;;;;93849:9;-1:-1:-1;93828:30:0;;;:66;;-1:-1:-1;93863:17:0;;;;:7;:17;;;;;;93884:9;-1:-1:-1;93863:30:0;93828:66;93799:3819;;;93946:20;:15;93964:2;93946:20;:::i;93799:3819::-;94055:17;;;;:7;:17;;;;;;94076:9;-1:-1:-1;94055:30:0;;;:66;;-1:-1:-1;94090:17:0;;;;:7;:17;;;;;;94111:9;-1:-1:-1;94090:30:0;94055:66;94025:3593;;;94173:20;:15;94191:2;94173:20;:::i;94025:3593::-;94281:17;;;;:7;:17;;;;;;94302:9;-1:-1:-1;94281:30:0;;;:66;;-1:-1:-1;94316:17:0;;;;:7;:17;;;;;;94337:9;-1:-1:-1;94316:30:0;94281:66;94252:3366;;;94399:20;:15;94417:2;94399:20;:::i;94252:3366::-;94508:17;;;;:7;:17;;;;;;94529:9;-1:-1:-1;94508:30:0;;;:66;;-1:-1:-1;94543:17:0;;;;:7;:17;;;;;;94564:9;-1:-1:-1;94543:30:0;94508:66;94478:3140;;;94626:20;:15;94644:2;94626:20;:::i;94478:3140::-;94734:17;;;;:7;:17;;;;;;94755:9;-1:-1:-1;94734:30:0;;;:66;;-1:-1:-1;94769:17:0;;;;:7;:17;;;;;;94790:9;-1:-1:-1;94769:30:0;94734:66;94705:2913;;;94852:20;:15;94870:2;94852:20;:::i;94705:2913::-;94961:17;;;;:7;:17;;;;;;94982:9;-1:-1:-1;94961:30:0;;;:66;;-1:-1:-1;94996:17:0;;;;:7;:17;;;;;;95017:9;-1:-1:-1;94996:30:0;94961:66;94931:2687;;;95079:20;:15;95097:2;95079:20;:::i;94931:2687::-;95187:17;;;;:7;:17;;;;;;95208:9;-1:-1:-1;95187:30:0;;;:66;;-1:-1:-1;95222:17:0;;;;:7;:17;;;;;;95243:9;-1:-1:-1;95222:30:0;95187:66;95158:2460;;;95305:20;:15;95323:2;95305:20;:::i;95158:2460::-;95414:17;;;;:7;:17;;;;;;95435:9;-1:-1:-1;95414:30:0;;;:66;;-1:-1:-1;95449:17:0;;;;:7;:17;;;;;;95470:9;-1:-1:-1;95449:30:0;95414:66;95384:2234;;;95532:20;:15;95550:2;95532:20;:::i;95384:2234::-;95640:17;;;;:7;:17;;;;;;95661:9;-1:-1:-1;95640:30:0;;;:66;;-1:-1:-1;95675:17:0;;;;:7;:17;;;;;;95696:9;-1:-1:-1;95675:30:0;95640:66;95611:2007;;;95758:20;:15;95776:2;95758:20;:::i;95611:2007::-;95867:17;;;;:7;:17;;;;;;95888:9;-1:-1:-1;95867:30:0;;;:66;;-1:-1:-1;95902:17:0;;;;:7;:17;;;;;;95923:9;-1:-1:-1;95902:30:0;95867:66;95837:1781;;;95985:20;:15;96003:2;95985:20;:::i;95837:1781::-;96093:17;;;;:7;:17;;;;;;96114:9;-1:-1:-1;96093:30:0;;;:66;;-1:-1:-1;96128:17:0;;;;:7;:17;;;;;;96149:9;-1:-1:-1;96128:30:0;96093:66;96064:1554;;;96211:20;:15;96229:2;96211:20;:::i;96064:1554::-;96320:17;;;;:7;:17;;;;;;96341:9;-1:-1:-1;96320:30:0;;;:66;;-1:-1:-1;96355:17:0;;;;:7;:17;;;;;;96376:9;-1:-1:-1;96355:30:0;96320:66;96290:1328;;;96438:20;:15;96456:2;96438:20;:::i;96290:1328::-;96546:17;;;;:7;:17;;;;;;96567:9;-1:-1:-1;96546:30:0;;;:66;;-1:-1:-1;96581:17:0;;;;:7;:17;;;;;;96602:9;-1:-1:-1;96581:30:0;96546:66;96517:1101;;;96664:20;:15;96682:2;96664:20;:::i;96517:1101::-;96773:17;;;;:7;:17;;;;;;96794:9;-1:-1:-1;96773:30:0;;;:66;;-1:-1:-1;96808:17:0;;;;:7;:17;;;;;;96829:9;-1:-1:-1;96808:30:0;96773:66;96743:875;;;96891:20;:15;96909:2;96891:20;:::i;96743:875::-;96999:17;;;;:7;:17;;;;;;97020:9;-1:-1:-1;96999:30:0;;;:66;;-1:-1:-1;97034:17:0;;;;:7;:17;;;;;;97055:9;-1:-1:-1;97034:30:0;96999:66;96970:648;;;97117:20;:15;97135:2;97117:20;:::i;96970:648::-;97226:17;;;;:7;:17;;;;;;97247:9;-1:-1:-1;97226:30:0;;;:66;;-1:-1:-1;97261:17:0;;;;:7;:17;;;;;;97282:9;-1:-1:-1;97261:30:0;97226:66;97196:422;;;97344:20;:15;97362:2;97344:20;:::i;97196:422::-;97452:17;;;;:7;:17;;;;;;97473:9;-1:-1:-1;97452:30:0;;;:66;;-1:-1:-1;97487:17:0;;;;:7;:17;;;;;;97508:9;-1:-1:-1;97487:30:0;97452:66;97423:195;;;97570:20;:15;97588:2;97570:20;:::i;90761:16077::-;97663:17;;;;:7;:17;;;;;;97684:9;-1:-1:-1;97663:30:0;;;:67;;-1:-1:-1;97698:17:0;;;;:7;:17;;;;;;97719:10;-1:-1:-1;97698:31:0;97663:67;97650:9188;;;97792:17;;;;:7;:17;;;;;;97813:9;-1:-1:-1;97792:30:0;;;:66;;-1:-1:-1;97827:17:0;;;;:7;:17;;;;;;97848:9;-1:-1:-1;97827:30:0;97792:66;97762:9065;;;97910:20;:15;97928:2;97910:20;:::i;97762:9065::-;98018:17;;;;:7;:17;;;;;;98039:9;-1:-1:-1;98018:30:0;;;:66;;-1:-1:-1;98053:17:0;;;;:7;:17;;;;;;98074:9;-1:-1:-1;98053:30:0;98018:66;97989:8838;;;98136:20;:15;98154:2;98136:20;:::i;97989:8838::-;98245:17;;;;:7;:17;;;;;;98266:9;-1:-1:-1;98245:30:0;;;:66;;-1:-1:-1;98280:17:0;;;;:7;:17;;;;;;98301:9;-1:-1:-1;98280:30:0;98245:66;98215:8612;;;98363:20;:15;98381:2;98363:20;:::i;98215:8612::-;98471:17;;;;:7;:17;;;;;;98492:9;-1:-1:-1;98471:30:0;;;:66;;-1:-1:-1;98506:17:0;;;;:7;:17;;;;;;98527:9;-1:-1:-1;98506:30:0;98471:66;98442:8385;;;98589:20;:15;98607:2;98589:20;:::i;98442:8385::-;98698:17;;;;:7;:17;;;;;;98719:9;-1:-1:-1;98698:30:0;;;:66;;-1:-1:-1;98733:17:0;;;;:7;:17;;;;;;98754:9;-1:-1:-1;98733:30:0;98698:66;98668:8159;;;98816:20;:15;98834:2;98816:20;:::i;98668:8159::-;98924:17;;;;:7;:17;;;;;;98945:9;-1:-1:-1;98924:30:0;;;:66;;-1:-1:-1;98959:17:0;;;;:7;:17;;;;;;98980:9;-1:-1:-1;98959:30:0;98924:66;98895:7932;;;99042:20;:15;99060:2;99042:20;:::i;98895:7932::-;99151:17;;;;:7;:17;;;;;;99172:9;-1:-1:-1;99151:30:0;;;:66;;-1:-1:-1;99186:17:0;;;;:7;:17;;;;;;99207:9;-1:-1:-1;99186:30:0;99151:66;99121:7706;;;99269:20;:15;99287:2;99269:20;:::i;99121:7706::-;99377:17;;;;:7;:17;;;;;;99398:9;-1:-1:-1;99377:30:0;;;:66;;-1:-1:-1;99412:17:0;;;;:7;:17;;;;;;99433:9;-1:-1:-1;99412:30:0;99377:66;99348:7479;;;99495:20;:15;99513:2;99495:20;:::i;99348:7479::-;99604:17;;;;:7;:17;;;;;;99625:9;-1:-1:-1;99604:30:0;;;:66;;-1:-1:-1;99639:17:0;;;;:7;:17;;;;;;99660:9;-1:-1:-1;99639:30:0;99604:66;99574:7253;;;99722:20;:15;99740:2;99722:20;:::i;99574:7253::-;99830:17;;;;:7;:17;;;;;;99851:9;-1:-1:-1;99830:30:0;;;:66;;-1:-1:-1;99865:17:0;;;;:7;:17;;;;;;99886:9;-1:-1:-1;99865:30:0;99830:66;99801:7026;;;99948:20;:15;99966:2;99948:20;:::i;99801:7026::-;100057:17;;;;:7;:17;;;;;;100078:9;-1:-1:-1;100057:30:0;;;:66;;-1:-1:-1;100092:17:0;;;;:7;:17;;;;;;100113:9;-1:-1:-1;100092:30:0;100057:66;100027:6800;;;100175:20;:15;100193:2;100175:20;:::i;100027:6800::-;100283:17;;;;:7;:17;;;;;;100304:9;-1:-1:-1;100283:30:0;;;:66;;-1:-1:-1;100318:17:0;;;;:7;:17;;;;;;100339:9;-1:-1:-1;100318:30:0;100283:66;100254:6573;;;100401:20;:15;100419:2;100401:20;:::i;100254:6573::-;100510:17;;;;:7;:17;;;;;;100531:9;-1:-1:-1;100510:30:0;;;:66;;-1:-1:-1;100545:17:0;;;;:7;:17;;;;;;100566:9;-1:-1:-1;100545:30:0;100510:66;100480:6347;;;100628:20;:15;100646:2;100628:20;:::i;100480:6347::-;100736:17;;;;:7;:17;;;;;;100757:9;-1:-1:-1;100736:30:0;;;:66;;-1:-1:-1;100771:17:0;;;;:7;:17;;;;;;100792:9;-1:-1:-1;100771:30:0;100736:66;100707:6120;;;100854:20;:15;100872:2;100854:20;:::i;100707:6120::-;100963:17;;;;:7;:17;;;;;;100984:9;-1:-1:-1;100963:30:0;;;:66;;-1:-1:-1;100998:17:0;;;;:7;:17;;;;;;101019:9;-1:-1:-1;100998:30:0;100963:66;100933:5894;;;101081:20;:15;101099:2;101081:20;:::i;100933:5894::-;101189:17;;;;:7;:17;;;;;;101210:9;-1:-1:-1;101189:30:0;;;:66;;-1:-1:-1;101224:17:0;;;;:7;:17;;;;;;101245:9;-1:-1:-1;101224:30:0;101189:66;101160:5667;;;101307:20;:15;101325:2;101307:20;:::i;101160:5667::-;101416:17;;;;:7;:17;;;;;;101437:9;-1:-1:-1;101416:30:0;;;:66;;-1:-1:-1;101451:17:0;;;;:7;:17;;;;;;101472:9;-1:-1:-1;101451:30:0;101416:66;101386:5441;;;101534:20;:15;101552:2;101534:20;:::i;101386:5441::-;101642:17;;;;:7;:17;;;;;;101663:9;-1:-1:-1;101642:30:0;;;:66;;-1:-1:-1;101677:17:0;;;;:7;:17;;;;;;101698:9;-1:-1:-1;101677:30:0;101642:66;101613:5214;;;101760:20;:15;101778:2;101760:20;:::i;101613:5214::-;101869:17;;;;:7;:17;;;;;;101890:9;-1:-1:-1;101869:30:0;;;:66;;-1:-1:-1;101904:17:0;;;;:7;:17;;;;;;101925:9;-1:-1:-1;101904:30:0;101869:66;101839:4988;;;101987:20;:15;102005:2;101987:20;:::i;101839:4988::-;102095:17;;;;:7;:17;;;;;;102116:9;-1:-1:-1;102095:30:0;;;:66;;-1:-1:-1;102130:17:0;;;;:7;:17;;;;;;102151:9;-1:-1:-1;102130:30:0;102095:66;102066:4761;;;102213:20;:15;102231:2;102213:20;:::i;102066:4761::-;102322:17;;;;:7;:17;;;;;;102343:9;-1:-1:-1;102322:30:0;;;:66;;-1:-1:-1;102357:17:0;;;;:7;:17;;;;;;102378:9;-1:-1:-1;102357:30:0;102322:66;102292:4535;;;102440:20;:15;102458:2;102440:20;:::i;102292:4535::-;102548:17;;;;:7;:17;;;;;;102569:9;-1:-1:-1;102548:30:0;;;:66;;-1:-1:-1;102583:17:0;;;;:7;:17;;;;;;102604:9;-1:-1:-1;102583:30:0;102548:66;102519:4308;;;102666:20;:15;102684:2;102666:20;:::i;102519:4308::-;102775:17;;;;:7;:17;;;;;;102796:9;-1:-1:-1;102775:30:0;;;:67;;-1:-1:-1;102810:17:0;;;;:7;:17;;;;;;102831:10;-1:-1:-1;102810:31:0;102775:67;102745:4082;;;102894:20;:15;102912:2;102894:20;:::i;102745:4082::-;103002:17;;;;:7;:17;;;;;;103023:10;-1:-1:-1;103002:31:0;;;:68;;-1:-1:-1;103038:17:0;;;;:7;:17;;;;;;103059:10;-1:-1:-1;103038:31:0;103002:68;102973:3854;;;103122:20;:15;103140:2;103122:20;:::i;102973:3854::-;103231:17;;;;:7;:17;;;;;;103252:10;-1:-1:-1;103231:31:0;;;:68;;-1:-1:-1;103267:17:0;;;;:7;:17;;;;;;103288:10;-1:-1:-1;103267:31:0;103231:68;103201:3626;;;103351:20;:15;103369:2;103351:20;:::i;103201:3626::-;103459:17;;;;:7;:17;;;;;;103480:10;-1:-1:-1;103459:31:0;;;:68;;-1:-1:-1;103495:17:0;;;;:7;:17;;;;;;103516:10;-1:-1:-1;103495:31:0;103459:68;103430:3397;;;103579:20;:15;103597:2;103579:20;:::i;103430:3397::-;103688:17;;;;:7;:17;;;;;;103709:10;-1:-1:-1;103688:31:0;;;:68;;-1:-1:-1;103724:17:0;;;;:7;:17;;;;;;103745:10;-1:-1:-1;103724:31:0;103688:68;103658:3169;;;103808:20;:15;103826:2;103808:20;:::i;103658:3169::-;103916:17;;;;:7;:17;;;;;;103937:10;-1:-1:-1;103916:31:0;;;:68;;-1:-1:-1;103952:17:0;;;;:7;:17;;;;;;103973:10;-1:-1:-1;103952:31:0;103916:68;103887:2940;;;104036:20;:15;104054:2;104036:20;:::i;103887:2940::-;104145:17;;;;:7;:17;;;;;;104166:10;-1:-1:-1;104145:31:0;;;:68;;-1:-1:-1;104181:17:0;;;;:7;:17;;;;;;104202:10;-1:-1:-1;104181:31:0;104145:68;104115:2712;;;104265:20;:15;104283:2;104265:20;:::i;104115:2712::-;104373:17;;;;:7;:17;;;;;;104394:10;-1:-1:-1;104373:31:0;;;:68;;-1:-1:-1;104409:17:0;;;;:7;:17;;;;;;104430:10;-1:-1:-1;104409:31:0;104373:68;104344:2483;;;104493:20;:15;104511:2;104493:20;:::i;104344:2483::-;104602:17;;;;:7;:17;;;;;;104623:10;-1:-1:-1;104602:31:0;;;:68;;-1:-1:-1;104638:17:0;;;;:7;:17;;;;;;104659:10;-1:-1:-1;104638:31:0;104602:68;104572:2255;;;104722:20;:15;104740:2;104722:20;:::i;104572:2255::-;104830:17;;;;:7;:17;;;;;;104851:10;-1:-1:-1;104830:31:0;;;:68;;-1:-1:-1;104866:17:0;;;;:7;:17;;;;;;104887:10;-1:-1:-1;104866:31:0;104830:68;104801:2026;;;104950:20;:15;104968:2;104950:20;:::i;104801:2026::-;105059:17;;;;:7;:17;;;;;;105080:10;-1:-1:-1;105059:31:0;;;:68;;-1:-1:-1;105095:17:0;;;;:7;:17;;;;;;105116:10;-1:-1:-1;105095:31:0;105059:68;105029:1798;;;105179:20;:15;105197:2;105179:20;:::i;105029:1798::-;105287:17;;;;:7;:17;;;;;;105308:10;-1:-1:-1;105287:31:0;;;:68;;-1:-1:-1;105323:17:0;;;;:7;:17;;;;;;105344:10;-1:-1:-1;105323:31:0;105287:68;105258:1569;;;105407:20;:15;105425:2;105407:20;:::i;105258:1569::-;105516:17;;;;:7;:17;;;;;;105537:10;-1:-1:-1;105516:31:0;;;:68;;-1:-1:-1;105552:17:0;;;;:7;:17;;;;;;105573:10;-1:-1:-1;105552:31:0;105516:68;105486:1341;;;105636:20;:15;105654:2;105636:20;:::i;105486:1341::-;105744:17;;;;:7;:17;;;;;;105765:10;-1:-1:-1;105744:31:0;;;:68;;-1:-1:-1;105780:17:0;;;;:7;:17;;;;;;105801:10;-1:-1:-1;105780:31:0;105744:68;105715:1112;;;105864:20;:15;105882:2;105864:20;:::i;105715:1112::-;105973:17;;;;:7;:17;;;;;;105994:10;-1:-1:-1;105973:31:0;;;:68;;-1:-1:-1;106009:17:0;;;;:7;:17;;;;;;106030:10;-1:-1:-1;106009:31:0;105973:68;105943:884;;;106093:20;:15;106111:2;106093:20;:::i;105943:884::-;106201:17;;;;:7;:17;;;;;;106222:10;-1:-1:-1;106201:31:0;;;:68;;-1:-1:-1;106237:17:0;;;;:7;:17;;;;;;106258:10;-1:-1:-1;106237:31:0;106201:68;106172:655;;;106321:20;:15;106339:2;106321:20;:::i;106172:655::-;106430:17;;;;:7;:17;;;;;;106451:10;-1:-1:-1;106430:31:0;;;:68;;-1:-1:-1;106466:17:0;;;;:7;:17;;;;;;106487:10;-1:-1:-1;106466:31:0;106430:68;106400:427;;;106550:20;:15;106568:2;106550:20;:::i;106400:427::-;106658:17;;;;:7;:17;;;;;;106679:10;-1:-1:-1;106658:31:0;;;:68;;-1:-1:-1;106694:17:0;;;;:7;:17;;;;;;106715:10;-1:-1:-1;106694:31:0;106658:68;106629:198;;;106778:21;:15;106796:3;106778:21;:::i;81441:108::-;20092:13;:11;:13::i;:::-;81514:11:::1;:27:::0;81441:108::o;42503:305::-;42605:4;-1:-1:-1;;;;;;42642:40:0;;-1:-1:-1;;;42642:40:0;;:105;;-1:-1:-1;;;;;;;42699:48:0;;-1:-1:-1;;;42699:48:0;42642:105;:158;;;-1:-1:-1;;;;;;;;;;34044:40:0;;;42764:36;33935:157;20371:132;20279:6;;-1:-1:-1;;;;;20279:6:0;18837:10;20435:23;20427:68;;;;-1:-1:-1;;;20427:68:0;;20098:2:1;20427:68:0;;;20080:21:1;;;20117:18;;;20110:30;20176:34;20156:18;;;20149:62;20228:18;;20427:68:0;19896:356:1;54762:135:0;54844:16;54852:7;54844;:16::i;:::-;54836:53;;;;-1:-1:-1;;;54836:53:0;;;;;;;:::i;54041:174::-;54116:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;54116:29:0;-1:-1:-1;;;;;54116:29:0;;;;;;;;:24;;54170:23;54116:24;54170:14;:23::i;:::-;-1:-1:-1;;;;;54161:46:0;;;;;;;;;;;54041:174;;:::o;48660:264::-;48753:4;48770:13;48786:23;48801:7;48786:14;:23::i;:::-;48770:39;;48839:5;-1:-1:-1;;;;;48828:16:0;:7;-1:-1:-1;;;;;48828:16:0;;:52;;;;48848:32;48865:5;48872:7;48848:16;:32::i;:::-;48828:87;;;;48908:7;-1:-1:-1;;;;;48884:31:0;:20;48896:7;48884:11;:20::i;:::-;-1:-1:-1;;;;;48884:31:0;;48828:87;48820:96;48660:264;-1:-1:-1;;;;48660:264:0:o;52659:1263::-;52818:4;-1:-1:-1;;;;;52791:31:0;:23;52806:7;52791:14;:23::i;:::-;-1:-1:-1;;;;;52791:31:0;;52783:81;;;;-1:-1:-1;;;52783:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52883:16:0;;52875:65;;;;-1:-1:-1;;;52875:65:0;;20865:2:1;52875:65:0;;;20847:21:1;20904:2;20884:18;;;20877:30;20943:34;20923:18;;;20916:62;-1:-1:-1;;;20994:18:1;;;20987:34;21038:19;;52875:65:0;20663:400:1;52875:65:0;52953:42;52974:4;52980:2;52984:7;52993:1;52953:20;:42::i;:::-;53125:4;-1:-1:-1;;;;;53098:31:0;:23;53113:7;53098:14;:23::i;:::-;-1:-1:-1;;;;;53098:31:0;;53090:81;;;;-1:-1:-1;;;53090:81:0;;;;;;;:::i;:::-;53243:24;;;;:15;:24;;;;;;;;53236:31;;-1:-1:-1;;;;;;53236:31:0;;;;;;-1:-1:-1;;;;;53719:15:0;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;53719:20:0;;;53754:13;;;;;;;;;:18;;53236:31;53754:18;;;53794:16;;;:7;:16;;;;;;:21;;;;;;;;;;53833:27;;53259:7;;53833:27;;;44531:346;44461:416;;:::o;21473:191::-;21566:6;;;-1:-1:-1;;;;;21583:17:0;;;-1:-1:-1;;;;;;21583:17:0;;;;;;;21616:40;;21566:6;;;21583:17;21566:6;;21616:40;;21547:16;;21616:40;21536:128;21473:191;:::o;49266:110::-;49342:26;49352:2;49356:7;49342:26;;;;;;;;;;;;:9;:26::i;54358:315::-;54513:8;-1:-1:-1;;;;;54504:17:0;:5;-1:-1:-1;;;;;54504:17:0;;;54496:55;;;;-1:-1:-1;;;54496:55:0;;21270:2:1;54496:55:0;;;21252:21:1;21309:2;21289:18;;;21282:30;-1:-1:-1;;;21328:18:1;;;21321:55;21393:18;;54496:55:0;21068:349:1;54496:55:0;-1:-1:-1;;;;;54562:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;54562:46:0;;;;;;;;;;54624:41;;540::1;;;54624::0;;513:18:1;54624:41:0;;;;;;;54358:315;;;:::o;47508:313::-;47664:28;47674:4;47680:2;47684:7;47664:9;:28::i;:::-;47711:47;47734:4;47740:2;47744:7;47753:4;47711:22;:47::i;:::-;47703:110;;;;-1:-1:-1;;;47703:110:0;;;;;;;:::i;83410:486::-;83470:4;83495:19;;;:9;:19;;;;;;;;:28;83487:56;;;;-1:-1:-1;;;83487:56:0;;;;;;;:::i;:::-;83567:18;;;;:8;:18;;;;;;-1:-1:-1;;;;;83567:18:0;83589:10;83567:32;;:75;;-1:-1:-1;83632:10:0;83603:25;;;;:13;:25;;;;;;-1:-1:-1;;;;;83603:25:0;:39;83567:75;:115;;;-1:-1:-1;83672:10:0;83646:22;;;;:10;:22;;;;;;-1:-1:-1;;;;;83646:22:0;:36;83567:115;83554:326;;;83753:11;;83729:20;;;;:10;:20;;;;;;83768:2;;83753:11;83711:38;;:15;:38;:::i;:::-;83710:54;;;;:::i;:::-;83709:61;;;;:::i;83554:326::-;83862:11;;83835:23;;;;:13;:23;;;;;;83877:2;;83862:11;83817:41;;:15;:41;:::i;83554:326::-;83410:486;;;:::o;48365:128::-;48430:4;48028:16;;;:7;:16;;;;;;-1:-1:-1;;;;;48028:16:0;48454:31;;;48365:128::o;67981:108::-;68041:13;68074:7;68067:14;;;;;:::i;16184:716::-;16240:13;16291:14;16308:17;16319:5;16308:10;:17::i;:::-;16328:1;16308:21;16291:38;;16344:20;16378:6;16367:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16367:18:0;-1:-1:-1;16344:41:0;-1:-1:-1;16509:28:0;;;16525:2;16509:28;16566:288;-1:-1:-1;;16598:5:0;-1:-1:-1;;;16735:2:0;16724:14;;16719:30;16598:5;16706:44;16796:2;16787:11;;;-1:-1:-1;16821:10:0;16817:21;;16833:5;;16817:21;16566:288;;68097:836;68248:19;;;;:9;:19;;;;;;;;:28;68240:56;;;;-1:-1:-1;;;68240:56:0;;;;;;;:::i;:::-;68317:18;;;;:8;:18;;;;;;-1:-1:-1;;;;;68310:25:0;;;68317:18;;68310:25;68307:548;;;68430:2;68416:11;;:16;;;;:::i;:::-;68391:20;;;;:10;:20;;;;;;68373:38;;:15;:38;:::i;:::-;68372:61;;;;:::i;:::-;68352:17;;;;:7;:17;;;;;;;;:81;;;;68448:13;:23;;;;;:27;68307:548;;;68541:10;68530:22;;;;:10;:22;;;;;;-1:-1:-1;;;;;68523:29:0;;;68530:22;;68523:29;;:65;;-1:-1:-1;68577:10:0;68563:25;;;;:13;:25;;;;;;-1:-1:-1;;;;;68556:32:0;;;68563:25;;68556:32;68523:65;68520:335;;;;;;68655:1;68635:17;;;:7;:17;;;;;;;;:21;;;68671:11;:21;;;;;:25;;;68711:13;:23;;;;;68737:15;68711:41;;68767:7;:17;;;;;:21;;;68803:12;:22;;;;;:26;68520:335;68865:60;68892:5;68899:3;68904:8;68914:10;68865:26;:60::i;49603:319::-;49732:18;49738:2;49742:7;49732:5;:18::i;:::-;49783:53;49814:1;49818:2;49822:7;49831:4;49783:22;:53::i;:::-;49761:153;;;;-1:-1:-1;;;49761:153:0;;;;;;;:::i;55461:853::-;55615:4;-1:-1:-1;;;;;55636:13:0;;23199:19;:23;55632:675;;55672:71;;-1:-1:-1;;;55672:71:0;;-1:-1:-1;;;;;55672:36:0;;;;;:71;;18837:10;;55723:4;;55729:7;;55738:4;;55672:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55672:71:0;;;;;;;;-1:-1:-1;;55672:71:0;;;;;;;;;;;;:::i;:::-;;;55668:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55913:13:0;;55909:328;;55956:60;;-1:-1:-1;;;55956:60:0;;;;;;;:::i;55909:328::-;56187:6;56181:13;56172:6;56168:2;56164:15;56157:38;55668:584;-1:-1:-1;;;;;;55794:51:0;-1:-1:-1;;;55794:51:0;;-1:-1:-1;55787:58:0;;55632:675;-1:-1:-1;56291:4:0;55461:853;;;;;;:::o;13050:922::-;13103:7;;-1:-1:-1;;;13181:15:0;;13177:102;;-1:-1:-1;;;13217:15:0;;;-1:-1:-1;13261:2:0;13251:12;13177:102;13306:6;13297:5;:15;13293:102;;13342:6;13333:15;;;-1:-1:-1;13377:2:0;13367:12;13293:102;13422:6;13413:5;:15;13409:102;;13458:6;13449:15;;;-1:-1:-1;13493:2:0;13483:12;13409:102;13538:5;13529;:14;13525:99;;13573:5;13564:14;;;-1:-1:-1;13607:1:0;13597:11;13525:99;13651:5;13642;:14;13638:99;;13686:5;13677:14;;;-1:-1:-1;13720:1:0;13710:11;13638:99;13764:5;13755;:14;13751:99;;13799:5;13790:14;;;-1:-1:-1;13833:1:0;13823:11;13751:99;13877:5;13868;:14;13864:66;;13913:1;13903:11;13958:6;13050:922;-1:-1:-1;;13050:922:0:o;60861:915::-;61128:1;61116:9;:13;61112:222;;;61259:63;;-1:-1:-1;;;61259:63:0;;22791:2:1;61259:63:0;;;22773:21:1;22830:2;22810:18;;;22803:30;22869:34;22849:18;;;22842:62;-1:-1:-1;;;22920:18:1;;;22913:51;22981:19;;61259:63:0;22589:417:1;61112:222:0;61364:12;-1:-1:-1;;;;;61393:18:0;;61389:187;;61428:40;61460:7;62603:10;:17;;62576:24;;;;:15;:24;;;;;:44;;;62631:24;;;;;;;;;;;;62499:164;61428:40;61389:187;;;61498:2;-1:-1:-1;;;;;61490:10:0;:4;-1:-1:-1;;;;;61490:10:0;;61486:90;;61517:47;61550:4;61556:7;61517:32;:47::i;:::-;-1:-1:-1;;;;;61590:16:0;;61586:183;;61623:45;61660:7;61623:36;:45::i;:::-;61586:183;;;61696:4;-1:-1:-1;;;;;61690:10:0;:2;-1:-1:-1;;;;;61690:10:0;;61686:83;;61717:40;61745:2;61749:7;61717:27;:40::i;:::-;61027:749;60861:915;;;;:::o;50258:942::-;-1:-1:-1;;;;;50338:16:0;;50330:61;;;;-1:-1:-1;;;50330:61:0;;23213:2:1;50330:61:0;;;23195:21:1;;;23232:18;;;23225:30;23291:34;23271:18;;;23264:62;23343:18;;50330:61:0;23011:356:1;50330:61:0;50411:16;50419:7;50411;:16::i;:::-;50410:17;50402:58;;;;-1:-1:-1;;;50402:58:0;;;;;;;:::i;:::-;50473:48;50502:1;50506:2;50510:7;50519:1;50473:20;:48::i;:::-;50620:16;50628:7;50620;:16::i;:::-;50619:17;50611:58;;;;-1:-1:-1;;;50611:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51018:13:0;;;;;;:9;:13;;;;;;;;:18;;51035:1;51018:18;;;51060:16;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;51060:21:0;;;;;51099:33;51068:7;;51018:13;;51099:33;;51018:13;;51099:33;82668:31:::1;82583:124:::0;:::o;63290:988::-;63556:22;63606:1;63581:22;63598:4;63581:16;:22::i;:::-;:26;;;;:::i;:::-;63618:18;63639:26;;;:17;:26;;;;;;63556:51;;-1:-1:-1;63772:28:0;;;63768:328;;-1:-1:-1;;;;;63839:18:0;;63817:19;63839:18;;;:12;:18;;;;;;;;:34;;;;;;;;;63890:30;;;;;;:44;;;64007:30;;:17;:30;;;;;:43;;;63768:328;-1:-1:-1;64192:26:0;;;;:17;:26;;;;;;;;64185:33;;;-1:-1:-1;;;;;64236:18:0;;;;;:12;:18;;;;;:34;;;;;;;64229:41;63290:988::o;64573:1079::-;64851:10;:17;64826:22;;64851:21;;64871:1;;64851:21;:::i;:::-;64883:18;64904:24;;;:15;:24;;;;;;65277:10;:26;;64826:46;;-1:-1:-1;64904:24:0;;64826:46;;65277:26;;;;;;:::i;:::-;;;;;;;;;65255:48;;65341:11;65316:10;65327;65316:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;65421:28;;;:15;:28;;;;;;;:41;;;65593:24;;;;;65586:31;65628:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;64644:1008;;;64573:1079;:::o;62077:221::-;62162:14;62179:20;62196:2;62179:16;:20::i;:::-;-1:-1:-1;;;;;62210:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;62255:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;62077:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:118::-;678:5;671:13;664:21;657:5;654:32;644:60;;700:1;697;690:12;715:241;771:6;824:2;812:9;803:7;799:23;795:32;792:52;;;840:1;837;830:12;792:52;879:9;866:23;898:28;920:5;898:28;:::i;961:173::-;1029:20;;-1:-1:-1;;;;;1078:31:1;;1068:42;;1058:70;;1124:1;1121;1114:12;1139:186;1198:6;1251:2;1239:9;1230:7;1226:23;1222:32;1219:52;;;1267:1;1264;1257:12;1219:52;1290:29;1309:9;1290:29;:::i;1538:127::-;1599:10;1594:3;1590:20;1587:1;1580:31;1630:4;1627:1;1620:15;1654:4;1651:1;1644:15;1670:632;1735:5;1765:18;1806:2;1798:6;1795:14;1792:40;;;1812:18;;:::i;:::-;1887:2;1881:9;1855:2;1941:15;;-1:-1:-1;;1937:24:1;;;1963:2;1933:33;1929:42;1917:55;;;1987:18;;;2007:22;;;1984:46;1981:72;;;2033:18;;:::i;:::-;2073:10;2069:2;2062:22;2102:6;2093:15;;2132:6;2124;2117:22;2172:3;2163:6;2158:3;2154:16;2151:25;2148:45;;;2189:1;2186;2179:12;2148:45;2239:6;2234:3;2227:4;2219:6;2215:17;2202:44;2294:1;2287:4;2278:6;2270;2266:19;2262:30;2255:41;;;;1670:632;;;;;:::o;2307:451::-;2376:6;2429:2;2417:9;2408:7;2404:23;2400:32;2397:52;;;2445:1;2442;2435:12;2397:52;2485:9;2472:23;2518:18;2510:6;2507:30;2504:50;;;2550:1;2547;2540:12;2504:50;2573:22;;2626:4;2618:13;;2614:27;-1:-1:-1;2604:55:1;;2655:1;2652;2645:12;2604:55;2678:74;2744:7;2739:2;2726:16;2721:2;2717;2713:11;2678:74;:::i;2763:258::-;2835:1;2845:113;2859:6;2856:1;2853:13;2845:113;;;2935:11;;;2929:18;2916:11;;;2909:39;2881:2;2874:10;2845:113;;;2976:6;2973:1;2970:13;2967:48;;;-1:-1:-1;;3011:1:1;2993:16;;2986:27;2763:258::o;3026:::-;3068:3;3106:5;3100:12;3133:6;3128:3;3121:19;3149:63;3205:6;3198:4;3193:3;3189:14;3182:4;3175:5;3171:16;3149:63;:::i;:::-;3266:2;3245:15;-1:-1:-1;;3241:29:1;3232:39;;;;3273:4;3228:50;;3026:258;-1:-1:-1;;3026:258:1:o;3289:220::-;3438:2;3427:9;3420:21;3401:4;3458:45;3499:2;3488:9;3484:18;3476:6;3458:45;:::i;3514:180::-;3573:6;3626:2;3614:9;3605:7;3601:23;3597:32;3594:52;;;3642:1;3639;3632:12;3594:52;-1:-1:-1;3665:23:1;;3514:180;-1:-1:-1;3514:180:1:o;3699:254::-;3767:6;3775;3828:2;3816:9;3807:7;3803:23;3799:32;3796:52;;;3844:1;3841;3834:12;3796:52;3867:29;3886:9;3867:29;:::i;:::-;3857:39;3943:2;3928:18;;;;3915:32;;-1:-1:-1;;;3699:254:1:o;4140:328::-;4217:6;4225;4233;4286:2;4274:9;4265:7;4261:23;4257:32;4254:52;;;4302:1;4299;4292:12;4254:52;4325:29;4344:9;4325:29;:::i;:::-;4315:39;;4373:38;4407:2;4396:9;4392:18;4373:38;:::i;:::-;4363:48;;4458:2;4447:9;4443:18;4430:32;4420:42;;4140:328;;;;;:::o;4473:632::-;4644:2;4696:21;;;4766:13;;4669:18;;;4788:22;;;4615:4;;4644:2;4867:15;;;;4841:2;4826:18;;;4615:4;4910:169;4924:6;4921:1;4918:13;4910:169;;;4985:13;;4973:26;;5054:15;;;;5019:12;;;;4946:1;4939:9;4910:169;;;-1:-1:-1;5096:3:1;;4473:632;-1:-1:-1;;;;;;4473:632:1:o;5110:385::-;5196:6;5204;5212;5220;5273:3;5261:9;5252:7;5248:23;5244:33;5241:53;;;5290:1;5287;5280:12;5241:53;-1:-1:-1;;5313:23:1;;;5383:2;5368:18;;5355:32;;-1:-1:-1;5434:2:1;5419:18;;5406:32;;5485:2;5470:18;5457:32;;-1:-1:-1;5110:385:1;-1:-1:-1;5110:385:1:o;5500:309::-;5565:6;5573;5626:2;5614:9;5605:7;5601:23;5597:32;5594:52;;;5642:1;5639;5632:12;5594:52;5678:9;5665:23;5655:33;;5738:2;5727:9;5723:18;5710:32;5751:28;5773:5;5751:28;:::i;:::-;5798:5;5788:15;;;5500:309;;;;;:::o;5814:887::-;6053:2;6105:21;;;6175:13;;6078:18;;;6197:22;;;6024:4;;6053:2;6238;;6256:18;;;;6297:15;;;6024:4;6340:335;6354:6;6351:1;6348:13;6340:335;;;6413:13;;6451:9;;6439:22;;6501:11;;;6495:18;6481:12;;;6474:40;6558:11;;6552:18;-1:-1:-1;;;;;6548:44:1;6534:12;;;6527:66;6622:4;6613:14;;;;6650:15;;;;6589:1;6369:9;6340:335;;;-1:-1:-1;6692:3:1;;5814:887;-1:-1:-1;;;;;;;5814:887:1:o;6706:315::-;6771:6;6779;6832:2;6820:9;6811:7;6807:23;6803:32;6800:52;;;6848:1;6845;6838:12;6800:52;6871:29;6890:9;6871:29;:::i;:::-;6861:39;;6950:2;6939:9;6935:18;6922:32;6963:28;6985:5;6963:28;:::i;7026:667::-;7121:6;7129;7137;7145;7198:3;7186:9;7177:7;7173:23;7169:33;7166:53;;;7215:1;7212;7205:12;7166:53;7238:29;7257:9;7238:29;:::i;:::-;7228:39;;7286:38;7320:2;7309:9;7305:18;7286:38;:::i;:::-;7276:48;;7371:2;7360:9;7356:18;7343:32;7333:42;;7426:2;7415:9;7411:18;7398:32;7453:18;7445:6;7442:30;7439:50;;;7485:1;7482;7475:12;7439:50;7508:22;;7561:4;7553:13;;7549:27;-1:-1:-1;7539:55:1;;7590:1;7587;7580:12;7539:55;7613:74;7679:7;7674:2;7661:16;7656:2;7652;7648:11;7613:74;:::i;:::-;7603:84;;;7026:667;;;;;;;:::o;7698:460::-;7793:6;7801;7809;7817;7825;7878:3;7866:9;7857:7;7853:23;7849:33;7846:53;;;7895:1;7892;7885:12;7846:53;7918:29;7937:9;7918:29;:::i;:::-;7908:39;7994:2;7979:18;;7966:32;;-1:-1:-1;8045:2:1;8030:18;;8017:32;;8096:2;8081:18;;8068:32;;-1:-1:-1;8147:3:1;8132:19;8119:33;;-1:-1:-1;7698:460:1;-1:-1:-1;;;7698:460:1:o;8163:248::-;8231:6;8239;8292:2;8280:9;8271:7;8267:23;8263:32;8260:52;;;8308:1;8305;8298:12;8260:52;-1:-1:-1;;8331:23:1;;;8401:2;8386:18;;;8373:32;;-1:-1:-1;8163:248:1:o;8416:260::-;8484:6;8492;8545:2;8533:9;8524:7;8520:23;8516:32;8513:52;;;8561:1;8558;8551:12;8513:52;8584:29;8603:9;8584:29;:::i;:::-;8574:39;;8632:38;8666:2;8655:9;8651:18;8632:38;:::i;:::-;8622:48;;8416:260;;;;;:::o;8681:380::-;8760:1;8756:12;;;;8803;;;8824:61;;8878:4;8870:6;8866:17;8856:27;;8824:61;8931:2;8923:6;8920:14;8900:18;8897:38;8894:161;;;8977:10;8972:3;8968:20;8965:1;8958:31;9012:4;9009:1;9002:15;9040:4;9037:1;9030:15;8894:161;;8681:380;;;:::o;9898:409::-;10100:2;10082:21;;;10139:2;10119:18;;;10112:30;10178:34;10173:2;10158:18;;10151:62;-1:-1:-1;;;10244:2:1;10229:18;;10222:43;10297:3;10282:19;;9898:409::o;10312:127::-;10373:10;10368:3;10364:20;10361:1;10354:31;10404:4;10401:1;10394:15;10428:4;10425:1;10418:15;10444:135;10483:3;-1:-1:-1;;10504:17:1;;10501:43;;;10524:18;;:::i;:::-;-1:-1:-1;10571:1:1;10560:13;;10444:135::o;10584:127::-;10645:10;10640:3;10636:20;10633:1;10626:31;10676:4;10673:1;10666:15;10700:4;10697:1;10690:15;11128:342;11330:2;11312:21;;;11369:2;11349:18;;;11342:30;-1:-1:-1;;;11403:2:1;11388:18;;11381:48;11461:2;11446:18;;11128:342::o;11475:128::-;11515:3;11546:1;11542:6;11539:1;11536:13;11533:39;;;11552:18;;:::i;:::-;-1:-1:-1;11588:9:1;;11475:128::o;11740:217::-;11780:1;11806;11796:132;;11850:10;11845:3;11841:20;11838:1;11831:31;11885:4;11882:1;11875:15;11913:4;11910:1;11903:15;11796:132;-1:-1:-1;11942:9:1;;11740:217::o;12375:339::-;12577:2;12559:21;;;12616:2;12596:18;;;12589:30;-1:-1:-1;;;12650:2:1;12635:18;;12628:45;12705:2;12690:18;;12375:339::o;13068:125::-;13108:4;13136:1;13133;13130:8;13127:34;;;13141:18;;:::i;:::-;-1:-1:-1;13178:9:1;;13068:125::o;13198:348::-;13400:2;13382:21;;;13439:2;13419:18;;;13412:30;-1:-1:-1;;;13473:2:1;13458:18;;13451:54;13537:2;13522:18;;13198:348::o;14305:347::-;14507:2;14489:21;;;14546:2;14526:18;;;14519:30;-1:-1:-1;;;14580:2:1;14565:18;;14558:53;14643:2;14628:18;;14305:347::o;14657:343::-;14859:2;14841:21;;;14898:2;14878:18;;;14871:30;-1:-1:-1;;;14932:2:1;14917:18;;14910:49;14991:2;14976:18;;14657:343::o;16056:168::-;16096:7;16162:1;16158;16154:6;16150:14;16147:1;16144:21;16139:1;16132:9;16125:17;16121:45;16118:71;;;16169:18;;:::i;:::-;-1:-1:-1;16209:9:1;;16056:168::o;16229:274::-;-1:-1:-1;;;;;16421:32:1;;;;16403:51;;16485:2;16470:18;;16463:34;16391:2;16376:18;;16229:274::o;16508:245::-;16575:6;16628:2;16616:9;16607:7;16603:23;16599:32;16596:52;;;16644:1;16641;16634:12;16596:52;16676:9;16670:16;16695:28;16717:5;16695:28;:::i;17231:1527::-;17455:3;17493:6;17487:13;17519:4;17532:51;17576:6;17571:3;17566:2;17558:6;17554:15;17532:51;:::i;:::-;17646:13;;17605:16;;;;17668:55;17646:13;17605:16;17690:15;;;17668:55;:::i;:::-;17812:13;;17745:20;;;17785:1;;17872;17894:18;;;;17947;;;;17974:93;;18052:4;18042:8;18038:19;18026:31;;17974:93;18115:2;18105:8;18102:16;18082:18;18079:40;18076:167;;;-1:-1:-1;;;18142:33:1;;18198:4;18195:1;18188:15;18228:4;18149:3;18216:17;18076:167;18259:18;18286:110;;;;18410:1;18405:328;;;;18252:481;;18286:110;-1:-1:-1;;18321:24:1;;18307:39;;18366:20;;;;-1:-1:-1;18286:110:1;;18405:328;17178:1;17171:14;;;17215:4;17202:18;;18500:1;18514:169;18528:8;18525:1;18522:15;18514:169;;;18610:14;;18595:13;;;18588:37;18653:16;;;;18545:10;;18514:169;;;18518:3;;18714:8;18707:5;18703:20;18696:27;;18252:481;-1:-1:-1;18749:3:1;;17231:1527;-1:-1:-1;;;;;;;;;;;17231:1527:1:o;20257:401::-;20459:2;20441:21;;;20498:2;20478:18;;;20471:30;20537:34;20532:2;20517:18;;20510:62;-1:-1:-1;;;20603:2:1;20588:18;;20581:35;20648:3;20633:19;;20257:401::o;21422:414::-;21624:2;21606:21;;;21663:2;21643:18;;;21636:30;21702:34;21697:2;21682:18;;21675:62;-1:-1:-1;;;21768:2:1;21753:18;;21746:48;21826:3;21811:19;;21422:414::o;21841:489::-;-1:-1:-1;;;;;22110:15:1;;;22092:34;;22162:15;;22157:2;22142:18;;22135:43;22209:2;22194:18;;22187:34;;;22257:3;22252:2;22237:18;;22230:31;;;22035:4;;22278:46;;22304:19;;22296:6;22278:46;:::i;:::-;22270:54;21841:489;-1:-1:-1;;;;;;21841:489:1:o;22335:249::-;22404:6;22457:2;22445:9;22436:7;22432:23;22428:32;22425:52;;;22473:1;22470;22463:12;22425:52;22505:9;22499:16;22524:30;22548:5;22524:30;:::i;23372:352::-;23574:2;23556:21;;;23613:2;23593:18;;;23586:30;23652;23647:2;23632:18;;23625:58;23715:2;23700:18;;23372:352::o;23729:127::-;23790:10;23785:3;23781:20;23778:1;23771:31;23821:4;23818:1;23811:15;23845:4;23842:1;23835:15

Swarm Source

ipfs://2b665dea4c29da153286965e18c34f12b632e81f0b50b03281e526ecbf71db67
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.