ETH Price: $3,110.37 (+0.22%)

Token

Atom (ATOM)
 

Overview

Max Total Supply

700 ATOM

Holders

412

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
azima.eth
Balance
1 ATOM
0x9d156bc7c8768294510A4A41883d5A4EB15b15E3
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:
Atom

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-11
*/

// File: https://github.com/distractedm1nd/solmate/blob/main/src/tokens/ERC721.sol


pragma solidity >=0.8.0;

/// @notice Modern, minimalist, and gas efficient ERC-721 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
/// @dev Note that balanceOf does not revert if passed the zero address, in defiance of the ERC.
abstract contract ERC721 {
    /*///////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

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

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

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

    /*///////////////////////////////////////////////////////////////
                          METADATA STORAGE/LOGIC
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    function tokenURI(uint256 id) public view virtual returns (string memory);

    /*///////////////////////////////////////////////////////////////
                            ERC721 STORAGE                        
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(uint256 => address) public ownerOf;

    mapping(uint256 => address) public getApproved;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*///////////////////////////////////////////////////////////////
                              CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
    }

    /*///////////////////////////////////////////////////////////////
                              ERC721 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 id) public virtual {
        address owner = ownerOf[id];

        require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED");

        getApproved[id] = spender;

        emit Approval(owner, spender, id);
    }

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

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

    function transferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        require(from == ownerOf[id], "WRONG_FROM");

        require(to != address(0), "INVALID_RECIPIENT");

        require(
            msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender],
            "NOT_AUTHORIZED"
        );

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            balanceOf[from]--;

            balanceOf[to]++;
        }

        ownerOf[id] = to;

        delete getApproved[id];

        emit Transfer(from, to, id);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes memory data
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    /*///////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 id) internal virtual {
        require(to != address(0), "INVALID_RECIPIENT");

        require(ownerOf[id] == address(0), "ALREADY_MINTED");

        // Counter overflow is incredibly unrealistic.
        unchecked {
            totalSupply++;

            balanceOf[to]++;
        }

        ownerOf[id] = to;

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

    function _burn(uint256 id) internal virtual {
        address owner = ownerOf[id];

        require(ownerOf[id] != address(0), "NOT_MINTED");

        // Ownership check above ensures no underflow.
        unchecked {
            totalSupply--;

            balanceOf[owner]--;
        }

        delete ownerOf[id];

        delete getApproved[id];

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

    /*///////////////////////////////////////////////////////////////
                       INTERNAL SAFE MINT LOGIC
    //////////////////////////////////////////////////////////////*/

    function _safeMint(address to, uint256 id) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _safeMint(
        address to,
        uint256 id,
        bytes memory data
    ) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }
}

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
interface ERC721TokenReceiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 id,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


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

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Tree proofs.
 *
 * The tree and the proofs can be generated using our
 * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].
 * You will find a quickstart guide in the readme.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 * OpenZeppelin's JavaScript library generates merkle trees that are safe
 * against this attack out of the box.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     *
     * _Available since v4.7._
     */
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     *
     * _Available since v4.7._
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * _Available since v4.7._
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

// 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: contracts/Atom.sol

pragma solidity ^0.8.4;





contract Atom is ERC721, Ownable {
    using Strings for uint256;
    address public receivingAddress = 0x859c163e57Ee1Ab69d8EEB0Fdd6b85796C678C5d;

    constructor() ERC721("Atom","ATOM") {
        unchecked {
            balanceOf[receivingAddress] += 100;
            totalSupply += 100;
            for (uint256 i = 0; i < 100; i++) {
                ownerOf[i] = receivingAddress;
                emit Transfer(address(0), receivingAddress, i);
            }
        }
    }

    enum MintStatus {
        PAUSED,
        WLMINT,
        PUBLIC
    }
    MintStatus public theStatus;

    mapping (address => bool) public mintedAlready;
    uint256 public maxSupply = 2222;
    bytes32 public merkleRoot;
    string public baseURI;
    uint256 public price = 0.004 ether;

    // Function to stage the status of the mint
    function changeStatus(uint _status) public onlyOwner {
        if      (_status == 0) { theStatus = MintStatus.PAUSED; }
        else if (_status == 1) { theStatus = MintStatus.WLMINT; }
        else if (_status == 2) { theStatus = MintStatus.PUBLIC; }
    }

    // Function to receive the metadata
    function tokenURI(uint256 id) public view override virtual returns (string memory) {
        return string(abi.encodePacked(baseURI, id.toString()));
    }

    // Function to change the base URI
    function setBaseURI(string memory _baseURI) public onlyOwner {
        baseURI = _baseURI;
    }

    // Function to manually change the merkle proof
    function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner {
        merkleRoot = _merkleRoot;
    }

     // Function for the public mint
    function publicMint() public payable {
        require(theStatus == MintStatus.PUBLIC, "We're not in the public mint phase.");
        require(msg.value == price, "You didn't send enough ether.");

        require(totalSupply < maxSupply, "The supply has minted out.");
        require(msg.sender == tx.origin, "Preventing bots from minting.");
        require(!mintedAlready[msg.sender], "You already minted.");

        mintedAlready[msg.sender] = true;
        _mint(msg.sender, totalSupply);
    }

    // Function for the whitelist mint
    function whitelistMint(bytes32[] calldata _merkleProof) public payable {
        require(theStatus == MintStatus.WLMINT, "We're not in the whitelist mint phase.");
        require(msg.value == price, "You didn't send enough ether.");

        require(totalSupply < maxSupply, "The supply has minted out.");
        require(msg.sender == tx.origin, "Preventing bots from minting.");
        require(!mintedAlready[msg.sender], "You already minted.");
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "You are not whitelisted");

        mintedAlready[msg.sender] = true;
        _mint(msg.sender, totalSupply);
    }

    // Airdrop function
    function airdrop(address sendTo) public onlyOwner {
        require(totalSupply < maxSupply, "Minted out");
        _mint(sendTo, totalSupply);
    }

    // In case the receiving address needs to be changed
    function changeReceivingAddress(address _receivingAddress) public onlyOwner {
        receivingAddress = _receivingAddress;
    }
    
    // Withdrawing funds function
    function withdraw() public onlyOwner {
        (bool success, ) = payable(receivingAddress).call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"sendTo","type":"address"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receivingAddress","type":"address"}],"name":"changeReceivingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_status","type":"uint256"}],"name":"changeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedAlready","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"receivingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"theStatus","outputs":[{"internalType":"enum Atom.MintStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"id","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":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405273859c163e57ee1ab69d8eeb0fdd6b85796c678c5d600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506108ae600a55660e35fa931a0000600d553480156200007757600080fd5b506040518060400160405280600481526020017f41746f6d000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f41544f4d000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000fc9291906200039b565b508060019080519060200190620001159291906200039b565b505050620001386200012c620002cd60201b60201c565b620002d560201b60201c565b606460036000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550606460026000828254019250508190555060005b6064811015620002c657600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48080600101915050620001bc565b50620004b0565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003a9906200044b565b90600052602060002090601f016020900481019282620003cd576000855562000419565b82601f10620003e857805160ff191683800117855562000419565b8280016001018555821562000419579182015b8281111562000418578251825591602001919060010190620003fb565b5b5090506200042891906200042c565b5090565b5b80821115620004475760008160009055506001016200042d565b5090565b600060028204905060018216806200046457607f821691505b602082108114156200047b576200047a62000481565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6137f880620004c06000396000f3fe6080604052600436106101e35760003560e01c80636c0360eb11610102578063a22cb46511610095578063e8025d7711610064578063e8025d77146106a0578063e985e9c5146106c9578063f2fde38b14610706578063fd7c074f1461072f576101e3565b8063a22cb465146105e6578063b88d4fde1461060f578063c87b56dd14610638578063d5abeb0114610675576101e3565b80637cb64759116100d15780637cb647591461053c5780638da5cb5b1461056557806395d89b4114610590578063a035b1fe146105bb576101e3565b80636c0360eb1461048057806370a08231146104ab578063715018a6146104e857806371cbcc82146104ff576101e3565b806326092b831161017a57806342842e0e1161014957806342842e0e146103c657806355f804b3146103ef5780636102ca36146104185780636352211e14610443576101e3565b806326092b831461035e5780632eb4a7ab14610368578063372f657c146103935780633ccfd60b146103af576101e3565b806318160ddd116101b657806318160ddd146102b65780631db87be8146102e157806321860a051461030c57806323b872dd14610335576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a91906127e4565b610758565b60405161021c9190612db3565b60405180910390f35b34801561023157600080fd5b5061023a6107ea565b6040516102479190612e04565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612887565b610878565b6040516102849190612d02565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af919061272a565b6108ab565b005b3480156102c257600080fd5b506102cb610a94565b6040516102d89190613026565b60405180910390f35b3480156102ed57600080fd5b506102f6610a9a565b6040516103039190612d02565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e91906125a7565b610ac0565b005b34801561034157600080fd5b5061035c60048036038101906103579190612614565b610b1d565b005b610366610f1d565b005b34801561037457600080fd5b5061037d61117d565b60405161038a9190612dce565b60405180910390f35b6103ad60048036038101906103a8919061276a565b611183565b005b3480156103bb57600080fd5b506103c461149f565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190612614565b611578565b005b3480156103fb57600080fd5b506104166004803603810190610411919061283e565b6116bf565b005b34801561042457600080fd5b5061042d6116e1565b60405161043a9190612de9565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190612887565b6116f4565b6040516104779190612d02565b60405180910390f35b34801561048c57600080fd5b50610495611727565b6040516104a29190612e04565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd91906125a7565b6117b5565b6040516104df9190613026565b60405180910390f35b3480156104f457600080fd5b506104fd6117cd565b005b34801561050b57600080fd5b50610526600480360381019061052191906125a7565b6117e1565b6040516105339190612db3565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e91906127b7565b611801565b005b34801561057157600080fd5b5061057a611813565b6040516105879190612d02565b60405180910390f35b34801561059c57600080fd5b506105a561183d565b6040516105b29190612e04565b60405180910390f35b3480156105c757600080fd5b506105d06118cb565b6040516105dd9190613026565b60405180910390f35b3480156105f257600080fd5b5061060d600480360381019061060891906126ea565b6118d1565b005b34801561061b57600080fd5b5061063660048036038101906106319190612667565b6119ce565b005b34801561064457600080fd5b5061065f600480360381019061065a9190612887565b611b18565b60405161066c9190612e04565b60405180910390f35b34801561068157600080fd5b5061068a611b4c565b6040516106979190613026565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190612887565b611b52565b005b3480156106d557600080fd5b506106f060048036038101906106eb91906125d4565b611c06565b6040516106fd9190612db3565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906125a7565b611c35565b005b34801561073b57600080fd5b50610756600480360381019061075191906125a7565b611cb9565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107b357506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107e35750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080546107f790613210565b80601f016020809104026020016040519081016040528092919081815260200182805461082390613210565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109a35750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d990612fe6565b60405180910390fd5b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60025481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ac8611d05565b600a5460025410610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0590612f86565b60405180910390fd5b610b1a81600254611d83565b50565b6004600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb590613006565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2590612e86565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cc657506005600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610d575750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90612fe6565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600280811115610f3057610f2f61333e565b5b600860149054906101000a900460ff166002811115610f5257610f5161333e565b5b14610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990612ea6565b60405180910390fd5b600d543414610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90612f26565b60405180910390fd5b600a546002541061101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390612ec6565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190612e66565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e90612e46565b60405180910390fd5b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061117b33600254611d83565b565b600b5481565b600160028111156111975761119661333e565b5b600860149054906101000a900460ff1660028111156111b9576111b861333e565b5b146111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f090612fa6565b60405180910390fd5b600d54341461123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490612f26565b60405180910390fd5b600a5460025410611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a90612ec6565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e890612e66565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590612e46565b60405180910390fd5b6000336040516020016113919190612cae565b6040516020818303038152906040528051906020012090506113f7838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600b5483611fa8565b611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90612ee6565b60405180910390fd5b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061149a33600254611d83565b505050565b6114a7611d05565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516114ef90612ced565b60006040518083038185875af1925050503d806000811461152c576040519150601f19603f3d011682016040523d82523d6000602084013e611531565b606091505b5050905080611575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156c90612f66565b60405180910390fd5b50565b611583838383610b1d565b60008273ffffffffffffffffffffffffffffffffffffffff163b148061167b575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b815260040161160893929190612d69565b602060405180830381600087803b15801561162257600080fd5b505af1158015611636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165a9190612811565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b6116ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b190612f06565b60405180910390fd5b505050565b6116c7611d05565b80600c90805190602001906116dd929190612350565b5050565b600860149054906101000a900460ff1681565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c805461173490613210565b80601f016020809104026020016040519081016040528092919081815260200182805461176090613210565b80156117ad5780601f10611782576101008083540402835291602001916117ad565b820191906000526020600020905b81548152906001019060200180831161179057829003601f168201915b505050505081565b60036020528060005260406000206000915090505481565b6117d5611d05565b6117df6000611fbf565b565b60096020528060005260406000206000915054906101000a900460ff1681565b611809611d05565b80600b8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6001805461184a90613210565b80601f016020809104026020016040519081016040528092919081815260200182805461187690613210565b80156118c35780601f10611898576101008083540402835291602001916118c3565b820191906000526020600020905b8154815290600101906020018083116118a657829003601f168201915b505050505081565b600d5481565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119c29190612db3565b60405180910390a35050565b6119d9848484610b1d565b60008373ffffffffffffffffffffffffffffffffffffffff163b1480611ad3575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401611a609493929190612d1d565b602060405180830381600087803b158015611a7a57600080fd5b505af1158015611a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab29190612811565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0990612f06565b60405180910390fd5b50505050565b6060600c611b2583612085565b604051602001611b36929190612cc9565b6040516020818303038152906040529050919050565b600a5481565b611b5a611d05565b6000811415611b93576000600860146101000a81548160ff02191690836002811115611b8957611b8861333e565b5b0217905550611c03565b6001811415611bcc576001600860146101000a81548160ff02191690836002811115611bc257611bc161333e565b5b0217905550611c02565b6002811415611c01576002600860146101000a81548160ff02191690836002811115611bfb57611bfa61333e565b5b02179055505b5b5b50565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b611c3d611d05565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490612e26565b60405180910390fd5b611cb681611fbf565b50565b611cc1611d05565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d0d61215d565b73ffffffffffffffffffffffffffffffffffffffff16611d2b611813565b73ffffffffffffffffffffffffffffffffffffffff1614611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890612f46565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90612e86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90612fc6565b60405180910390fd5b600260008154809291906001019190505550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600082611fb58584612165565b1490509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606060006001612094846121bb565b01905060008167ffffffffffffffff8111156120b3576120b26133cb565b5b6040519080825280601f01601f1916602001820160405280156120e55781602001600182028036833780820191505090505b509050600082602001820190505b600115612152578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161213c5761213b61330f565b5b049450600085141561214d57612152565b6120f3565b819350505050919050565b600033905090565b60008082905060005b84518110156121b05761219b8286838151811061218e5761218d61339c565b5b602002602001015161230e565b915080806121a890613273565b91505061216e565b508091505092915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612219577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161220f5761220e61330f565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612256576d04ee2d6d415b85acef8100000000838161224c5761224b61330f565b5b0492506020810190505b662386f26fc10000831061228557662386f26fc10000838161227b5761227a61330f565b5b0492506010810190505b6305f5e10083106122ae576305f5e10083816122a4576122a361330f565b5b0492506008810190505b61271083106122d35761271083816122c9576122c861330f565b5b0492506004810190505b606483106122f657606483816122ec576122eb61330f565b5b0492506002810190505b600a8310612305576001810190505b80915050919050565b6000818310612326576123218284612339565b612331565b6123308383612339565b5b905092915050565b600082600052816020526040600020905092915050565b82805461235c90613210565b90600052602060002090601f01602090048101928261237e57600085556123c5565b82601f1061239757805160ff19168380011785556123c5565b828001600101855582156123c5579182015b828111156123c45782518255916020019190600101906123a9565b5b5090506123d291906123d6565b5090565b5b808211156123ef5760008160009055506001016123d7565b5090565b600061240661240184613066565b613041565b90508281526020810184848401111561242257612421613409565b5b61242d8482856131ce565b509392505050565b600061244861244384613097565b613041565b90508281526020810184848401111561246457612463613409565b5b61246f8482856131ce565b509392505050565b6000813590506124868161374f565b92915050565b60008083601f8401126124a2576124a16133ff565b5b8235905067ffffffffffffffff8111156124bf576124be6133fa565b5b6020830191508360208202830111156124db576124da613404565b5b9250929050565b6000813590506124f181613766565b92915050565b6000813590506125068161377d565b92915050565b60008135905061251b81613794565b92915050565b60008151905061253081613794565b92915050565b600082601f83011261254b5761254a6133ff565b5b813561255b8482602086016123f3565b91505092915050565b600082601f830112612579576125786133ff565b5b8135612589848260208601612435565b91505092915050565b6000813590506125a1816137ab565b92915050565b6000602082840312156125bd576125bc613413565b5b60006125cb84828501612477565b91505092915050565b600080604083850312156125eb576125ea613413565b5b60006125f985828601612477565b925050602061260a85828601612477565b9150509250929050565b60008060006060848603121561262d5761262c613413565b5b600061263b86828701612477565b935050602061264c86828701612477565b925050604061265d86828701612592565b9150509250925092565b6000806000806080858703121561268157612680613413565b5b600061268f87828801612477565b94505060206126a087828801612477565b93505060406126b187828801612592565b925050606085013567ffffffffffffffff8111156126d2576126d161340e565b5b6126de87828801612536565b91505092959194509250565b6000806040838503121561270157612700613413565b5b600061270f85828601612477565b9250506020612720858286016124e2565b9150509250929050565b6000806040838503121561274157612740613413565b5b600061274f85828601612477565b925050602061276085828601612592565b9150509250929050565b6000806020838503121561278157612780613413565b5b600083013567ffffffffffffffff81111561279f5761279e61340e565b5b6127ab8582860161248c565b92509250509250929050565b6000602082840312156127cd576127cc613413565b5b60006127db848285016124f7565b91505092915050565b6000602082840312156127fa576127f9613413565b5b60006128088482850161250c565b91505092915050565b60006020828403121561282757612826613413565b5b600061283584828501612521565b91505092915050565b60006020828403121561285457612853613413565b5b600082013567ffffffffffffffff8111156128725761287161340e565b5b61287e84828501612564565b91505092915050565b60006020828403121561289d5761289c613413565b5b60006128ab84828501612592565b91505092915050565b6128bd8161312b565b82525050565b6128d46128cf8261312b565b6132bc565b82525050565b6128e38161313d565b82525050565b6128f281613149565b82525050565b6000612903826130dd565b61290d81856130f3565b935061291d8185602086016131dd565b61292681613418565b840191505092915050565b61293a816131bc565b82525050565b600061294b826130e8565b612955818561310f565b93506129658185602086016131dd565b61296e81613418565b840191505092915050565b6000612984826130e8565b61298e8185613120565b935061299e8185602086016131dd565b80840191505092915050565b600081546129b781613210565b6129c18186613120565b945060018216600081146129dc57600181146129ed57612a20565b60ff19831686528186019350612a20565b6129f6856130c8565b60005b83811015612a18578154818901526001820191506020810190506129f9565b838801955050505b50505092915050565b6000612a3660268361310f565b9150612a4182613436565b604082019050919050565b6000612a5960138361310f565b9150612a6482613485565b602082019050919050565b6000612a7c601d8361310f565b9150612a87826134ae565b602082019050919050565b6000612a9f60118361310f565b9150612aaa826134d7565b602082019050919050565b6000612ac260238361310f565b9150612acd82613500565b604082019050919050565b6000612ae5601a8361310f565b9150612af08261354f565b602082019050919050565b6000612b0860178361310f565b9150612b1382613578565b602082019050919050565b6000612b2b60108361310f565b9150612b36826135a1565b602082019050919050565b6000612b4e601d8361310f565b9150612b59826135ca565b602082019050919050565b6000612b7160208361310f565b9150612b7c826135f3565b602082019050919050565b6000612b946000836130f3565b9150612b9f8261361c565b600082019050919050565b6000612bb7600083613104565b9150612bc28261361c565b600082019050919050565b6000612bda60108361310f565b9150612be58261361f565b602082019050919050565b6000612bfd600a8361310f565b9150612c0882613648565b602082019050919050565b6000612c2060268361310f565b9150612c2b82613671565b604082019050919050565b6000612c43600e8361310f565b9150612c4e826136c0565b602082019050919050565b6000612c66600e8361310f565b9150612c71826136e9565b602082019050919050565b6000612c89600a8361310f565b9150612c9482613712565b602082019050919050565b612ca8816131b2565b82525050565b6000612cba82846128c3565b60148201915081905092915050565b6000612cd582856129aa565b9150612ce18284612979565b91508190509392505050565b6000612cf882612baa565b9150819050919050565b6000602082019050612d1760008301846128b4565b92915050565b6000608082019050612d3260008301876128b4565b612d3f60208301866128b4565b612d4c6040830185612c9f565b8181036060830152612d5e81846128f8565b905095945050505050565b6000608082019050612d7e60008301866128b4565b612d8b60208301856128b4565b612d986040830184612c9f565b8181036060830152612da981612b87565b9050949350505050565b6000602082019050612dc860008301846128da565b92915050565b6000602082019050612de360008301846128e9565b92915050565b6000602082019050612dfe6000830184612931565b92915050565b60006020820190508181036000830152612e1e8184612940565b905092915050565b60006020820190508181036000830152612e3f81612a29565b9050919050565b60006020820190508181036000830152612e5f81612a4c565b9050919050565b60006020820190508181036000830152612e7f81612a6f565b9050919050565b60006020820190508181036000830152612e9f81612a92565b9050919050565b60006020820190508181036000830152612ebf81612ab5565b9050919050565b60006020820190508181036000830152612edf81612ad8565b9050919050565b60006020820190508181036000830152612eff81612afb565b9050919050565b60006020820190508181036000830152612f1f81612b1e565b9050919050565b60006020820190508181036000830152612f3f81612b41565b9050919050565b60006020820190508181036000830152612f5f81612b64565b9050919050565b60006020820190508181036000830152612f7f81612bcd565b9050919050565b60006020820190508181036000830152612f9f81612bf0565b9050919050565b60006020820190508181036000830152612fbf81612c13565b9050919050565b60006020820190508181036000830152612fdf81612c36565b9050919050565b60006020820190508181036000830152612fff81612c59565b9050919050565b6000602082019050818103600083015261301f81612c7c565b9050919050565b600060208201905061303b6000830184612c9f565b92915050565b600061304b61305c565b90506130578282613242565b919050565b6000604051905090565b600067ffffffffffffffff821115613081576130806133cb565b5b61308a82613418565b9050602081019050919050565b600067ffffffffffffffff8211156130b2576130b16133cb565b5b6130bb82613418565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061313682613192565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061318d8261373b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006131c78261317f565b9050919050565b82818337600083830152505050565b60005b838110156131fb5780820151818401526020810190506131e0565b8381111561320a576000848401525b50505050565b6000600282049050600182168061322857607f821691505b6020821081141561323c5761323b61336d565b5b50919050565b61324b82613418565b810181811067ffffffffffffffff8211171561326a576132696133cb565b5b80604052505050565b600061327e826131b2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132b1576132b06132e0565b5b600182019050919050565b60006132c7826132ce565b9050919050565b60006132d982613429565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f7520616c7265616479206d696e7465642e00000000000000000000000000600082015250565b7f50726576656e74696e6720626f74732066726f6d206d696e74696e672e000000600082015250565b7f494e56414c49445f524543495049454e54000000000000000000000000000000600082015250565b7f5765277265206e6f7420696e20746865207075626c6963206d696e742070686160008201527f73652e0000000000000000000000000000000000000000000000000000000000602082015250565b7f54686520737570706c7920686173206d696e746564206f75742e000000000000600082015250565b7f596f7520617265206e6f742077686974656c6973746564000000000000000000600082015250565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b7f596f75206469646e27742073656e6420656e6f7567682065746865722e000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4d696e746564206f757400000000000000000000000000000000000000000000600082015250565b7f5765277265206e6f7420696e207468652077686974656c697374206d696e742060008201527f70686173652e0000000000000000000000000000000000000000000000000000602082015250565b7f414c52454144595f4d494e544544000000000000000000000000000000000000600082015250565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b7f57524f4e475f46524f4d00000000000000000000000000000000000000000000600082015250565b6003811061374c5761374b61333e565b5b50565b6137588161312b565b811461376357600080fd5b50565b61376f8161313d565b811461377a57600080fd5b50565b61378681613149565b811461379157600080fd5b50565b61379d81613153565b81146137a857600080fd5b50565b6137b4816131b2565b81146137bf57600080fd5b5056fea2646970667358221220bdc6e18f37c6541df44bef9bd7db85f19a70900e0def302dbcd4c3c889d2c81f64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101e35760003560e01c80636c0360eb11610102578063a22cb46511610095578063e8025d7711610064578063e8025d77146106a0578063e985e9c5146106c9578063f2fde38b14610706578063fd7c074f1461072f576101e3565b8063a22cb465146105e6578063b88d4fde1461060f578063c87b56dd14610638578063d5abeb0114610675576101e3565b80637cb64759116100d15780637cb647591461053c5780638da5cb5b1461056557806395d89b4114610590578063a035b1fe146105bb576101e3565b80636c0360eb1461048057806370a08231146104ab578063715018a6146104e857806371cbcc82146104ff576101e3565b806326092b831161017a57806342842e0e1161014957806342842e0e146103c657806355f804b3146103ef5780636102ca36146104185780636352211e14610443576101e3565b806326092b831461035e5780632eb4a7ab14610368578063372f657c146103935780633ccfd60b146103af576101e3565b806318160ddd116101b657806318160ddd146102b65780631db87be8146102e157806321860a051461030c57806323b872dd14610335576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a91906127e4565b610758565b60405161021c9190612db3565b60405180910390f35b34801561023157600080fd5b5061023a6107ea565b6040516102479190612e04565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612887565b610878565b6040516102849190612d02565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af919061272a565b6108ab565b005b3480156102c257600080fd5b506102cb610a94565b6040516102d89190613026565b60405180910390f35b3480156102ed57600080fd5b506102f6610a9a565b6040516103039190612d02565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e91906125a7565b610ac0565b005b34801561034157600080fd5b5061035c60048036038101906103579190612614565b610b1d565b005b610366610f1d565b005b34801561037457600080fd5b5061037d61117d565b60405161038a9190612dce565b60405180910390f35b6103ad60048036038101906103a8919061276a565b611183565b005b3480156103bb57600080fd5b506103c461149f565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190612614565b611578565b005b3480156103fb57600080fd5b506104166004803603810190610411919061283e565b6116bf565b005b34801561042457600080fd5b5061042d6116e1565b60405161043a9190612de9565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190612887565b6116f4565b6040516104779190612d02565b60405180910390f35b34801561048c57600080fd5b50610495611727565b6040516104a29190612e04565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd91906125a7565b6117b5565b6040516104df9190613026565b60405180910390f35b3480156104f457600080fd5b506104fd6117cd565b005b34801561050b57600080fd5b50610526600480360381019061052191906125a7565b6117e1565b6040516105339190612db3565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e91906127b7565b611801565b005b34801561057157600080fd5b5061057a611813565b6040516105879190612d02565b60405180910390f35b34801561059c57600080fd5b506105a561183d565b6040516105b29190612e04565b60405180910390f35b3480156105c757600080fd5b506105d06118cb565b6040516105dd9190613026565b60405180910390f35b3480156105f257600080fd5b5061060d600480360381019061060891906126ea565b6118d1565b005b34801561061b57600080fd5b5061063660048036038101906106319190612667565b6119ce565b005b34801561064457600080fd5b5061065f600480360381019061065a9190612887565b611b18565b60405161066c9190612e04565b60405180910390f35b34801561068157600080fd5b5061068a611b4c565b6040516106979190613026565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190612887565b611b52565b005b3480156106d557600080fd5b506106f060048036038101906106eb91906125d4565b611c06565b6040516106fd9190612db3565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906125a7565b611c35565b005b34801561073b57600080fd5b50610756600480360381019061075191906125a7565b611cb9565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107b357506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107e35750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080546107f790613210565b80601f016020809104026020016040519081016040528092919081815260200182805461082390613210565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109a35750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d990612fe6565b60405180910390fd5b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60025481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ac8611d05565b600a5460025410610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0590612f86565b60405180910390fd5b610b1a81600254611d83565b50565b6004600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb590613006565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2590612e86565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cc657506005600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610d575750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90612fe6565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600280811115610f3057610f2f61333e565b5b600860149054906101000a900460ff166002811115610f5257610f5161333e565b5b14610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990612ea6565b60405180910390fd5b600d543414610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90612f26565b60405180910390fd5b600a546002541061101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390612ec6565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190612e66565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e90612e46565b60405180910390fd5b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061117b33600254611d83565b565b600b5481565b600160028111156111975761119661333e565b5b600860149054906101000a900460ff1660028111156111b9576111b861333e565b5b146111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f090612fa6565b60405180910390fd5b600d54341461123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490612f26565b60405180910390fd5b600a5460025410611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a90612ec6565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e890612e66565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590612e46565b60405180910390fd5b6000336040516020016113919190612cae565b6040516020818303038152906040528051906020012090506113f7838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600b5483611fa8565b611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90612ee6565b60405180910390fd5b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061149a33600254611d83565b505050565b6114a7611d05565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516114ef90612ced565b60006040518083038185875af1925050503d806000811461152c576040519150601f19603f3d011682016040523d82523d6000602084013e611531565b606091505b5050905080611575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156c90612f66565b60405180910390fd5b50565b611583838383610b1d565b60008273ffffffffffffffffffffffffffffffffffffffff163b148061167b575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b815260040161160893929190612d69565b602060405180830381600087803b15801561162257600080fd5b505af1158015611636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165a9190612811565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b6116ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b190612f06565b60405180910390fd5b505050565b6116c7611d05565b80600c90805190602001906116dd929190612350565b5050565b600860149054906101000a900460ff1681565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c805461173490613210565b80601f016020809104026020016040519081016040528092919081815260200182805461176090613210565b80156117ad5780601f10611782576101008083540402835291602001916117ad565b820191906000526020600020905b81548152906001019060200180831161179057829003601f168201915b505050505081565b60036020528060005260406000206000915090505481565b6117d5611d05565b6117df6000611fbf565b565b60096020528060005260406000206000915054906101000a900460ff1681565b611809611d05565b80600b8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6001805461184a90613210565b80601f016020809104026020016040519081016040528092919081815260200182805461187690613210565b80156118c35780601f10611898576101008083540402835291602001916118c3565b820191906000526020600020905b8154815290600101906020018083116118a657829003601f168201915b505050505081565b600d5481565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119c29190612db3565b60405180910390a35050565b6119d9848484610b1d565b60008373ffffffffffffffffffffffffffffffffffffffff163b1480611ad3575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401611a609493929190612d1d565b602060405180830381600087803b158015611a7a57600080fd5b505af1158015611a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab29190612811565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0990612f06565b60405180910390fd5b50505050565b6060600c611b2583612085565b604051602001611b36929190612cc9565b6040516020818303038152906040529050919050565b600a5481565b611b5a611d05565b6000811415611b93576000600860146101000a81548160ff02191690836002811115611b8957611b8861333e565b5b0217905550611c03565b6001811415611bcc576001600860146101000a81548160ff02191690836002811115611bc257611bc161333e565b5b0217905550611c02565b6002811415611c01576002600860146101000a81548160ff02191690836002811115611bfb57611bfa61333e565b5b02179055505b5b5b50565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b611c3d611d05565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490612e26565b60405180910390fd5b611cb681611fbf565b50565b611cc1611d05565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d0d61215d565b73ffffffffffffffffffffffffffffffffffffffff16611d2b611813565b73ffffffffffffffffffffffffffffffffffffffff1614611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890612f46565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90612e86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90612fc6565b60405180910390fd5b600260008154809291906001019190505550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600082611fb58584612165565b1490509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606060006001612094846121bb565b01905060008167ffffffffffffffff8111156120b3576120b26133cb565b5b6040519080825280601f01601f1916602001820160405280156120e55781602001600182028036833780820191505090505b509050600082602001820190505b600115612152578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161213c5761213b61330f565b5b049450600085141561214d57612152565b6120f3565b819350505050919050565b600033905090565b60008082905060005b84518110156121b05761219b8286838151811061218e5761218d61339c565b5b602002602001015161230e565b915080806121a890613273565b91505061216e565b508091505092915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612219577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161220f5761220e61330f565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612256576d04ee2d6d415b85acef8100000000838161224c5761224b61330f565b5b0492506020810190505b662386f26fc10000831061228557662386f26fc10000838161227b5761227a61330f565b5b0492506010810190505b6305f5e10083106122ae576305f5e10083816122a4576122a361330f565b5b0492506008810190505b61271083106122d35761271083816122c9576122c861330f565b5b0492506004810190505b606483106122f657606483816122ec576122eb61330f565b5b0492506002810190505b600a8310612305576001810190505b80915050919050565b6000818310612326576123218284612339565b612331565b6123308383612339565b5b905092915050565b600082600052816020526040600020905092915050565b82805461235c90613210565b90600052602060002090601f01602090048101928261237e57600085556123c5565b82601f1061239757805160ff19168380011785556123c5565b828001600101855582156123c5579182015b828111156123c45782518255916020019190600101906123a9565b5b5090506123d291906123d6565b5090565b5b808211156123ef5760008160009055506001016123d7565b5090565b600061240661240184613066565b613041565b90508281526020810184848401111561242257612421613409565b5b61242d8482856131ce565b509392505050565b600061244861244384613097565b613041565b90508281526020810184848401111561246457612463613409565b5b61246f8482856131ce565b509392505050565b6000813590506124868161374f565b92915050565b60008083601f8401126124a2576124a16133ff565b5b8235905067ffffffffffffffff8111156124bf576124be6133fa565b5b6020830191508360208202830111156124db576124da613404565b5b9250929050565b6000813590506124f181613766565b92915050565b6000813590506125068161377d565b92915050565b60008135905061251b81613794565b92915050565b60008151905061253081613794565b92915050565b600082601f83011261254b5761254a6133ff565b5b813561255b8482602086016123f3565b91505092915050565b600082601f830112612579576125786133ff565b5b8135612589848260208601612435565b91505092915050565b6000813590506125a1816137ab565b92915050565b6000602082840312156125bd576125bc613413565b5b60006125cb84828501612477565b91505092915050565b600080604083850312156125eb576125ea613413565b5b60006125f985828601612477565b925050602061260a85828601612477565b9150509250929050565b60008060006060848603121561262d5761262c613413565b5b600061263b86828701612477565b935050602061264c86828701612477565b925050604061265d86828701612592565b9150509250925092565b6000806000806080858703121561268157612680613413565b5b600061268f87828801612477565b94505060206126a087828801612477565b93505060406126b187828801612592565b925050606085013567ffffffffffffffff8111156126d2576126d161340e565b5b6126de87828801612536565b91505092959194509250565b6000806040838503121561270157612700613413565b5b600061270f85828601612477565b9250506020612720858286016124e2565b9150509250929050565b6000806040838503121561274157612740613413565b5b600061274f85828601612477565b925050602061276085828601612592565b9150509250929050565b6000806020838503121561278157612780613413565b5b600083013567ffffffffffffffff81111561279f5761279e61340e565b5b6127ab8582860161248c565b92509250509250929050565b6000602082840312156127cd576127cc613413565b5b60006127db848285016124f7565b91505092915050565b6000602082840312156127fa576127f9613413565b5b60006128088482850161250c565b91505092915050565b60006020828403121561282757612826613413565b5b600061283584828501612521565b91505092915050565b60006020828403121561285457612853613413565b5b600082013567ffffffffffffffff8111156128725761287161340e565b5b61287e84828501612564565b91505092915050565b60006020828403121561289d5761289c613413565b5b60006128ab84828501612592565b91505092915050565b6128bd8161312b565b82525050565b6128d46128cf8261312b565b6132bc565b82525050565b6128e38161313d565b82525050565b6128f281613149565b82525050565b6000612903826130dd565b61290d81856130f3565b935061291d8185602086016131dd565b61292681613418565b840191505092915050565b61293a816131bc565b82525050565b600061294b826130e8565b612955818561310f565b93506129658185602086016131dd565b61296e81613418565b840191505092915050565b6000612984826130e8565b61298e8185613120565b935061299e8185602086016131dd565b80840191505092915050565b600081546129b781613210565b6129c18186613120565b945060018216600081146129dc57600181146129ed57612a20565b60ff19831686528186019350612a20565b6129f6856130c8565b60005b83811015612a18578154818901526001820191506020810190506129f9565b838801955050505b50505092915050565b6000612a3660268361310f565b9150612a4182613436565b604082019050919050565b6000612a5960138361310f565b9150612a6482613485565b602082019050919050565b6000612a7c601d8361310f565b9150612a87826134ae565b602082019050919050565b6000612a9f60118361310f565b9150612aaa826134d7565b602082019050919050565b6000612ac260238361310f565b9150612acd82613500565b604082019050919050565b6000612ae5601a8361310f565b9150612af08261354f565b602082019050919050565b6000612b0860178361310f565b9150612b1382613578565b602082019050919050565b6000612b2b60108361310f565b9150612b36826135a1565b602082019050919050565b6000612b4e601d8361310f565b9150612b59826135ca565b602082019050919050565b6000612b7160208361310f565b9150612b7c826135f3565b602082019050919050565b6000612b946000836130f3565b9150612b9f8261361c565b600082019050919050565b6000612bb7600083613104565b9150612bc28261361c565b600082019050919050565b6000612bda60108361310f565b9150612be58261361f565b602082019050919050565b6000612bfd600a8361310f565b9150612c0882613648565b602082019050919050565b6000612c2060268361310f565b9150612c2b82613671565b604082019050919050565b6000612c43600e8361310f565b9150612c4e826136c0565b602082019050919050565b6000612c66600e8361310f565b9150612c71826136e9565b602082019050919050565b6000612c89600a8361310f565b9150612c9482613712565b602082019050919050565b612ca8816131b2565b82525050565b6000612cba82846128c3565b60148201915081905092915050565b6000612cd582856129aa565b9150612ce18284612979565b91508190509392505050565b6000612cf882612baa565b9150819050919050565b6000602082019050612d1760008301846128b4565b92915050565b6000608082019050612d3260008301876128b4565b612d3f60208301866128b4565b612d4c6040830185612c9f565b8181036060830152612d5e81846128f8565b905095945050505050565b6000608082019050612d7e60008301866128b4565b612d8b60208301856128b4565b612d986040830184612c9f565b8181036060830152612da981612b87565b9050949350505050565b6000602082019050612dc860008301846128da565b92915050565b6000602082019050612de360008301846128e9565b92915050565b6000602082019050612dfe6000830184612931565b92915050565b60006020820190508181036000830152612e1e8184612940565b905092915050565b60006020820190508181036000830152612e3f81612a29565b9050919050565b60006020820190508181036000830152612e5f81612a4c565b9050919050565b60006020820190508181036000830152612e7f81612a6f565b9050919050565b60006020820190508181036000830152612e9f81612a92565b9050919050565b60006020820190508181036000830152612ebf81612ab5565b9050919050565b60006020820190508181036000830152612edf81612ad8565b9050919050565b60006020820190508181036000830152612eff81612afb565b9050919050565b60006020820190508181036000830152612f1f81612b1e565b9050919050565b60006020820190508181036000830152612f3f81612b41565b9050919050565b60006020820190508181036000830152612f5f81612b64565b9050919050565b60006020820190508181036000830152612f7f81612bcd565b9050919050565b60006020820190508181036000830152612f9f81612bf0565b9050919050565b60006020820190508181036000830152612fbf81612c13565b9050919050565b60006020820190508181036000830152612fdf81612c36565b9050919050565b60006020820190508181036000830152612fff81612c59565b9050919050565b6000602082019050818103600083015261301f81612c7c565b9050919050565b600060208201905061303b6000830184612c9f565b92915050565b600061304b61305c565b90506130578282613242565b919050565b6000604051905090565b600067ffffffffffffffff821115613081576130806133cb565b5b61308a82613418565b9050602081019050919050565b600067ffffffffffffffff8211156130b2576130b16133cb565b5b6130bb82613418565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061313682613192565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061318d8261373b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006131c78261317f565b9050919050565b82818337600083830152505050565b60005b838110156131fb5780820151818401526020810190506131e0565b8381111561320a576000848401525b50505050565b6000600282049050600182168061322857607f821691505b6020821081141561323c5761323b61336d565b5b50919050565b61324b82613418565b810181811067ffffffffffffffff8211171561326a576132696133cb565b5b80604052505050565b600061327e826131b2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132b1576132b06132e0565b5b600182019050919050565b60006132c7826132ce565b9050919050565b60006132d982613429565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f7520616c7265616479206d696e7465642e00000000000000000000000000600082015250565b7f50726576656e74696e6720626f74732066726f6d206d696e74696e672e000000600082015250565b7f494e56414c49445f524543495049454e54000000000000000000000000000000600082015250565b7f5765277265206e6f7420696e20746865207075626c6963206d696e742070686160008201527f73652e0000000000000000000000000000000000000000000000000000000000602082015250565b7f54686520737570706c7920686173206d696e746564206f75742e000000000000600082015250565b7f596f7520617265206e6f742077686974656c6973746564000000000000000000600082015250565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b7f596f75206469646e27742073656e6420656e6f7567682065746865722e000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4d696e746564206f757400000000000000000000000000000000000000000000600082015250565b7f5765277265206e6f7420696e207468652077686974656c697374206d696e742060008201527f70686173652e0000000000000000000000000000000000000000000000000000602082015250565b7f414c52454144595f4d494e544544000000000000000000000000000000000000600082015250565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b7f57524f4e475f46524f4d00000000000000000000000000000000000000000000600082015250565b6003811061374c5761374b61333e565b5b50565b6137588161312b565b811461376357600080fd5b50565b61376f8161313d565b811461377a57600080fd5b50565b61378681613149565b811461379157600080fd5b50565b61379d81613153565b81146137a857600080fd5b50565b6137b4816131b2565b81146137bf57600080fd5b5056fea2646970667358221220bdc6e18f37c6541df44bef9bd7db85f19a70900e0def302dbcd4c3c889d2c81f64736f6c63430008070033

Deployed Bytecode Sourcemap

35662:3571:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4512:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1062:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1550:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2177:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1411:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35734:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38648:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2689:764;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37346:511;;;:::i;:::-;;36369:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37905:710;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39044:186;;;;;;;;;;;;;:::i;:::-;;3461:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37037:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36242:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1499:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36401:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1446:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34779:103;;;;;;;;;;;;;:::i;:::-;;36278:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37196:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34131:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1089:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36429:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2474:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3878:439;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36832:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36331:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36521:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1605:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35037:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38866:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4512:340;4588:4;4640:10;4625:25;;:11;:25;;;;:101;;;;4716:10;4701:25;;:11;:25;;;;4625:101;:177;;;;4792:10;4777:25;;:11;:25;;;;4625:177;4605:197;;4512:340;;;:::o;1062:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1550:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;2177:289::-;2249:13;2265:7;:11;2273:2;2265:11;;;;;;;;;;;;;;;;;;;;;2249:27;;2311:5;2297:19;;:10;:19;;;:58;;;;2320:16;:23;2337:5;2320:23;;;;;;;;;;;;;;;:35;2344:10;2320:35;;;;;;;;;;;;;;;;;;;;;;;;;2297:58;2289:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;2405:7;2387:11;:15;2399:2;2387:15;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;2455:2;2446:7;2430:28;;2439:5;2430:28;;;;;;;;;;;;2238:228;2177:289;;:::o;1411:26::-;;;;:::o;35734:76::-;;;;;;;;;;;;;:::o;38648:152::-;34017:13;:11;:13::i;:::-;38731:9:::1;;38717:11;;:23;38709:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;38766:26;38772:6;38780:11;;38766:5;:26::i;:::-;38648:152:::0;:::o;2689:764::-;2825:7;:11;2833:2;2825:11;;;;;;;;;;;;;;;;;;;;;2817:19;;:4;:19;;;2809:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;2886:1;2872:16;;:2;:16;;;;2864:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2959:4;2945:18;;:10;:18;;;:51;;;;2981:11;:15;2993:2;2981:15;;;;;;;;;;;;;;;;;;;;;2967:29;;:10;:29;;;2945:51;:89;;;;3000:16;:22;3017:4;3000:22;;;;;;;;;;;;;;;:34;3023:10;3000:34;;;;;;;;;;;;;;;;;;;;;;;;;2945:89;2923:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;3281:9;:15;3291:4;3281:15;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;;;3315:9;:13;3325:2;3315:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;3368:2;3354:7;:11;3362:2;3354:11;;;;;;;;;;;;:16;;;;;;;;;;;;;;;;;;3390:11;:15;3402:2;3390:15;;;;;;;;;;;;3383:22;;;;;;;;;;;3442:2;3438;3423:22;;3432:4;3423:22;;;;;;;;;;;;2689:764;;;:::o;37346:511::-;37415:17;37402:30;;;;;;;;:::i;:::-;;:9;;;;;;;;;;;:30;;;;;;;;:::i;:::-;;;37394:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;37504:5;;37491:9;:18;37483:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37578:9;;37564:11;;:23;37556:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37651:9;37637:23;;:10;:23;;;37629:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37714:13;:25;37728:10;37714:25;;;;;;;;;;;;;;;;;;;;;;;;;37713:26;37705:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37804:4;37776:13;:25;37790:10;37776:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;37819:30;37825:10;37837:11;;37819:5;:30::i;:::-;37346:511::o;36369:25::-;;;;:::o;37905:710::-;38008:17;37995:30;;;;;;;;:::i;:::-;;:9;;;;;;;;;;;:30;;;;;;;;:::i;:::-;;;37987:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;38100:5;;38087:9;:18;38079:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38174:9;;38160:11;;:23;38152:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;38247:9;38233:23;;:10;:23;;;38225:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38310:13;:25;38324:10;38310:25;;;;;;;;;;;;;;;;;;;;;;;;;38309:26;38301:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38370:12;38412:10;38395:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;38385:39;;;;;;38370:54;;38443:50;38462:12;;38443:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38476:10;;38488:4;38443:18;:50::i;:::-;38435:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;38562:4;38534:13;:25;38548:10;38534:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;38577:30;38583:10;38595:11;;38577:5;:30::i;:::-;37976:639;37905:710;;:::o;39044:186::-;34017:13;:11;:13::i;:::-;39093:12:::1;39119:16;;;;;;;;;;;39111:30;;39149:21;39111:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39092:83;;;39194:7;39186:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;39081:149;39044:186::o:0;3461:409::-;3585:26;3598:4;3604:2;3608;3585:12;:26::i;:::-;3664:1;3646:2;:14;;;:19;:172;;;;3773:45;;;3686:132;;;3706:2;3686:40;;;3727:10;3739:4;3745:2;3686:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:132;;;;3646:172;3624:238;;;;;;;;;;;;:::i;:::-;;;;;;;;;3461:409;;;:::o;37037:98::-;34017:13;:11;:13::i;:::-;37119:8:::1;37109:7;:18;;;;;;;;;;;;:::i;:::-;;37037:98:::0;:::o;36242:27::-;;;;;;;;;;;;;:::o;1499:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;36401:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1446:44::-;;;;;;;;;;;;;;;;;:::o;34779:103::-;34017:13;:11;:13::i;:::-;34844:30:::1;34871:1;34844:18;:30::i;:::-;34779:103::o:0;36278:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;37196:104::-;34017:13;:11;:13::i;:::-;37281:11:::1;37268:10;:24;;;;37196:104:::0;:::o;34131:87::-;34177:7;34204:6;;;;;;;;;;;34197:13;;34131:87;:::o;1089:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36429:34::-;;;;:::o;2474:207::-;2601:8;2560:16;:28;2577:10;2560:28;;;;;;;;;;;;;;;:38;2589:8;2560:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;2654:8;2627:46;;2642:10;2627:46;;;2664:8;2627:46;;;;;;:::i;:::-;;;;;;;;2474:207;;:::o;3878:439::-;4030:26;4043:4;4049:2;4053;4030:12;:26::i;:::-;4109:1;4091:2;:14;;;:19;:174;;;;4220:45;;;4131:134;;;4151:2;4131:40;;;4172:10;4184:4;4190:2;4194:4;4131:68;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:134;;;;4091:174;4069:240;;;;;;;;;;;;:::i;:::-;;;;;;;;;3878:439;;;;:::o;36832:157::-;36900:13;36957:7;36966:13;:2;:11;:13::i;:::-;36940:40;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36926:55;;36832:157;;;:::o;36331:31::-;;;;:::o;36521:262::-;34017:13;:11;:13::i;:::-;36605:1:::1;36594:7;:12;36585:191;;;36622:17;36610:9;;:29;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;36585:191;;;36672:1;36661:7;:12;36657:119;;;36689:17;36677:9;;:29;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;36657:119;;;36739:1;36728:7;:12;36724:52;;;36756:17;36744:9;;:29;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;36724:52;36657:119;36585:191;36521:262:::0;:::o;1605:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35037:201::-;34017:13;:11;:13::i;:::-;35146:1:::1;35126:22;;:8;:22;;;;35118:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35202:28;35221:8;35202:18;:28::i;:::-;35037:201:::0;:::o;38866:131::-;34017:13;:11;:13::i;:::-;38972:17:::1;38953:16;;:36;;;;;;;;;;;;;;;;;;38866:131:::0;:::o;34296:132::-;34371:12;:10;:12::i;:::-;34360:23;;:7;:5;:7::i;:::-;:23;;;34352:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34296:132::o;5052:411::-;5141:1;5127:16;;:2;:16;;;;5119:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5209:1;5186:25;;:7;:11;5194:2;5186:11;;;;;;;;;;;;;;;;;;;;;:25;;;5178:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;5324:11;;:13;;;;;;;;;;;;;5354:9;:13;5364:2;5354:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;5407:2;5393:7;:11;5401:2;5393:11;;;;;;;;;;;;:16;;;;;;;;;;;;;;;;;;5452:2;5448;5427:28;;5444:1;5427:28;;;;;;;;;;;;5052:411;;:::o;8465:190::-;8590:4;8643;8614:25;8627:5;8634:4;8614:12;:25::i;:::-;:33;8607:40;;8465:190;;;;;:::o;35398:191::-;35472:16;35491:6;;;;;;;;;;;35472:25;;35517:8;35508:6;;:17;;;;;;;;;;;;;;;;;;35572:8;35541:40;;35562:8;35541:40;;;;;;;;;;;;35461:128;35398:191;:::o;30109:716::-;30165:13;30216:14;30253:1;30233:17;30244:5;30233:10;:17::i;:::-;:21;30216:38;;30269:20;30303:6;30292:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30269:41;;30325:11;30454:6;30450:2;30446:15;30438:6;30434:28;30427:35;;30491:288;30498:4;30491:288;;;30523:5;;;;;;;;30665:8;30660:2;30653:5;30649:14;30644:30;30639:3;30631:44;30721:2;30712:11;;;;;;:::i;:::-;;;;;30755:1;30746:5;:10;30742:21;;;30758:5;;30742:21;30491:288;;;30800:6;30793:13;;;;;30109:716;;;:::o;32682:98::-;32735:7;32762:10;32755:17;;32682:98;:::o;9332:296::-;9415:7;9435:20;9458:4;9435:27;;9478:9;9473:118;9497:5;:12;9493:1;:16;9473:118;;;9546:33;9556:12;9570:5;9576:1;9570:8;;;;;;;;:::i;:::-;;;;;;;;9546:9;:33::i;:::-;9531:48;;9511:3;;;;;:::i;:::-;;;;9473:118;;;;9608:12;9601:19;;;9332:296;;;;:::o;26975:922::-;27028:7;27048:14;27065:1;27048:18;;27115:6;27106:5;:15;27102:102;;27151:6;27142:15;;;;;;:::i;:::-;;;;;27186:2;27176:12;;;;27102:102;27231:6;27222:5;:15;27218:102;;27267:6;27258:15;;;;;;:::i;:::-;;;;;27302:2;27292:12;;;;27218:102;27347:6;27338:5;:15;27334:102;;27383:6;27374:15;;;;;;:::i;:::-;;;;;27418:2;27408:12;;;;27334:102;27463:5;27454;:14;27450:99;;27498:5;27489:14;;;;;;:::i;:::-;;;;;27532:1;27522:11;;;;27450:99;27576:5;27567;:14;27563:99;;27611:5;27602:14;;;;;;:::i;:::-;;;;;27645:1;27635:11;;;;27563:99;27689:5;27680;:14;27676:99;;27724:5;27715:14;;;;;;:::i;:::-;;;;;27758:1;27748:11;;;;27676:99;27802:5;27793;:14;27789:66;;27838:1;27828:11;;;;27789:66;27883:6;27876:13;;;26975:922;;;:::o;16372:149::-;16435:7;16466:1;16462;:5;:51;;16493:20;16508:1;16511;16493:14;:20::i;:::-;16462:51;;;16470:20;16485:1;16488;16470:14;:20::i;:::-;16462:51;16455:58;;16372:149;;;;:::o;16529:268::-;16597:13;16704:1;16698:4;16691:15;16733:1;16727:4;16720:15;16774:4;16768;16758:21;16749:30;;16529:268;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:559::-;6442:6;6450;6499:2;6487:9;6478:7;6474:23;6470:32;6467:119;;;6505:79;;:::i;:::-;6467:119;6653:1;6642:9;6638:17;6625:31;6683:18;6675:6;6672:30;6669:117;;;6705:79;;:::i;:::-;6669:117;6818:80;6890:7;6881:6;6870:9;6866:22;6818:80;:::i;:::-;6800:98;;;;6596:312;6356:559;;;;;:::o;6921:329::-;6980:6;7029:2;7017:9;7008:7;7004:23;7000:32;6997:119;;;7035:79;;:::i;:::-;6997:119;7155:1;7180:53;7225:7;7216:6;7205:9;7201:22;7180:53;:::i;:::-;7170:63;;7126:117;6921:329;;;;:::o;7256:327::-;7314:6;7363:2;7351:9;7342:7;7338:23;7334:32;7331:119;;;7369:79;;:::i;:::-;7331:119;7489:1;7514:52;7558:7;7549:6;7538:9;7534:22;7514:52;:::i;:::-;7504:62;;7460:116;7256:327;;;;:::o;7589:349::-;7658:6;7707:2;7695:9;7686:7;7682:23;7678:32;7675:119;;;7713:79;;:::i;:::-;7675:119;7833:1;7858:63;7913:7;7904:6;7893:9;7889:22;7858:63;:::i;:::-;7848:73;;7804:127;7589:349;;;;:::o;7944:509::-;8013:6;8062:2;8050:9;8041:7;8037:23;8033:32;8030:119;;;8068:79;;:::i;:::-;8030:119;8216:1;8205:9;8201:17;8188:31;8246:18;8238:6;8235:30;8232:117;;;8268:79;;:::i;:::-;8232:117;8373:63;8428:7;8419:6;8408:9;8404:22;8373:63;:::i;:::-;8363:73;;8159:287;7944:509;;;;:::o;8459:329::-;8518:6;8567:2;8555:9;8546:7;8542:23;8538:32;8535:119;;;8573:79;;:::i;:::-;8535:119;8693:1;8718:53;8763:7;8754:6;8743:9;8739:22;8718:53;:::i;:::-;8708:63;;8664:117;8459:329;;;;:::o;8794:118::-;8881:24;8899:5;8881:24;:::i;:::-;8876:3;8869:37;8794:118;;:::o;8918:157::-;9023:45;9043:24;9061:5;9043:24;:::i;:::-;9023:45;:::i;:::-;9018:3;9011:58;8918:157;;:::o;9081:109::-;9162:21;9177:5;9162:21;:::i;:::-;9157:3;9150:34;9081:109;;:::o;9196:118::-;9283:24;9301:5;9283:24;:::i;:::-;9278:3;9271:37;9196:118;;:::o;9320:360::-;9406:3;9434:38;9466:5;9434:38;:::i;:::-;9488:70;9551:6;9546:3;9488:70;:::i;:::-;9481:77;;9567:52;9612:6;9607:3;9600:4;9593:5;9589:16;9567:52;:::i;:::-;9644:29;9666:6;9644:29;:::i;:::-;9639:3;9635:39;9628:46;;9410:270;9320:360;;;;:::o;9686:157::-;9786:50;9830:5;9786:50;:::i;:::-;9781:3;9774:63;9686:157;;:::o;9849:364::-;9937:3;9965:39;9998:5;9965:39;:::i;:::-;10020:71;10084:6;10079:3;10020:71;:::i;:::-;10013:78;;10100:52;10145:6;10140:3;10133:4;10126:5;10122:16;10100:52;:::i;:::-;10177:29;10199:6;10177:29;:::i;:::-;10172:3;10168:39;10161:46;;9941:272;9849:364;;;;:::o;10219:377::-;10325:3;10353:39;10386:5;10353:39;:::i;:::-;10408:89;10490:6;10485:3;10408:89;:::i;:::-;10401:96;;10506:52;10551:6;10546:3;10539:4;10532:5;10528:16;10506:52;:::i;:::-;10583:6;10578:3;10574:16;10567:23;;10329:267;10219:377;;;;:::o;10626:845::-;10729:3;10766:5;10760:12;10795:36;10821:9;10795:36;:::i;:::-;10847:89;10929:6;10924:3;10847:89;:::i;:::-;10840:96;;10967:1;10956:9;10952:17;10983:1;10978:137;;;;11129:1;11124:341;;;;10945:520;;10978:137;11062:4;11058:9;11047;11043:25;11038:3;11031:38;11098:6;11093:3;11089:16;11082:23;;10978:137;;11124:341;11191:38;11223:5;11191:38;:::i;:::-;11251:1;11265:154;11279:6;11276:1;11273:13;11265:154;;;11353:7;11347:14;11343:1;11338:3;11334:11;11327:35;11403:1;11394:7;11390:15;11379:26;;11301:4;11298:1;11294:12;11289:17;;11265:154;;;11448:6;11443:3;11439:16;11432:23;;11131:334;;10945:520;;10733:738;;10626:845;;;;:::o;11477:366::-;11619:3;11640:67;11704:2;11699:3;11640:67;:::i;:::-;11633:74;;11716:93;11805:3;11716:93;:::i;:::-;11834:2;11829:3;11825:12;11818:19;;11477:366;;;:::o;11849:::-;11991:3;12012:67;12076:2;12071:3;12012:67;:::i;:::-;12005:74;;12088:93;12177:3;12088:93;:::i;:::-;12206:2;12201:3;12197:12;12190:19;;11849:366;;;:::o;12221:::-;12363:3;12384:67;12448:2;12443:3;12384:67;:::i;:::-;12377:74;;12460:93;12549:3;12460:93;:::i;:::-;12578:2;12573:3;12569:12;12562:19;;12221:366;;;:::o;12593:::-;12735:3;12756:67;12820:2;12815:3;12756:67;:::i;:::-;12749:74;;12832:93;12921:3;12832:93;:::i;:::-;12950:2;12945:3;12941:12;12934:19;;12593:366;;;:::o;12965:::-;13107:3;13128:67;13192:2;13187:3;13128:67;:::i;:::-;13121:74;;13204:93;13293:3;13204:93;:::i;:::-;13322:2;13317:3;13313:12;13306:19;;12965:366;;;:::o;13337:::-;13479:3;13500:67;13564:2;13559:3;13500:67;:::i;:::-;13493:74;;13576:93;13665:3;13576:93;:::i;:::-;13694:2;13689:3;13685:12;13678:19;;13337:366;;;:::o;13709:::-;13851:3;13872:67;13936:2;13931:3;13872:67;:::i;:::-;13865:74;;13948:93;14037:3;13948:93;:::i;:::-;14066:2;14061:3;14057:12;14050:19;;13709:366;;;:::o;14081:::-;14223:3;14244:67;14308:2;14303:3;14244:67;:::i;:::-;14237:74;;14320:93;14409:3;14320:93;:::i;:::-;14438:2;14433:3;14429:12;14422:19;;14081:366;;;:::o;14453:::-;14595:3;14616:67;14680:2;14675:3;14616:67;:::i;:::-;14609:74;;14692:93;14781:3;14692:93;:::i;:::-;14810:2;14805:3;14801:12;14794:19;;14453:366;;;:::o;14825:::-;14967:3;14988:67;15052:2;15047:3;14988:67;:::i;:::-;14981:74;;15064:93;15153:3;15064:93;:::i;:::-;15182:2;15177:3;15173:12;15166:19;;14825:366;;;:::o;15197:362::-;15338:3;15359:65;15422:1;15417:3;15359:65;:::i;:::-;15352:72;;15433:93;15522:3;15433:93;:::i;:::-;15551:1;15546:3;15542:11;15535:18;;15197:362;;;:::o;15565:398::-;15724:3;15745:83;15826:1;15821:3;15745:83;:::i;:::-;15738:90;;15837:93;15926:3;15837:93;:::i;:::-;15955:1;15950:3;15946:11;15939:18;;15565:398;;;:::o;15969:366::-;16111:3;16132:67;16196:2;16191:3;16132:67;:::i;:::-;16125:74;;16208:93;16297:3;16208:93;:::i;:::-;16326:2;16321:3;16317:12;16310:19;;15969:366;;;:::o;16341:::-;16483:3;16504:67;16568:2;16563:3;16504:67;:::i;:::-;16497:74;;16580:93;16669:3;16580:93;:::i;:::-;16698:2;16693:3;16689:12;16682:19;;16341:366;;;:::o;16713:::-;16855:3;16876:67;16940:2;16935:3;16876:67;:::i;:::-;16869:74;;16952:93;17041:3;16952:93;:::i;:::-;17070:2;17065:3;17061:12;17054:19;;16713:366;;;:::o;17085:::-;17227:3;17248:67;17312:2;17307:3;17248:67;:::i;:::-;17241:74;;17324:93;17413:3;17324:93;:::i;:::-;17442:2;17437:3;17433:12;17426:19;;17085:366;;;:::o;17457:::-;17599:3;17620:67;17684:2;17679:3;17620:67;:::i;:::-;17613:74;;17696:93;17785:3;17696:93;:::i;:::-;17814:2;17809:3;17805:12;17798:19;;17457:366;;;:::o;17829:::-;17971:3;17992:67;18056:2;18051:3;17992:67;:::i;:::-;17985:74;;18068:93;18157:3;18068:93;:::i;:::-;18186:2;18181:3;18177:12;18170:19;;17829:366;;;:::o;18201:118::-;18288:24;18306:5;18288:24;:::i;:::-;18283:3;18276:37;18201:118;;:::o;18325:256::-;18437:3;18452:75;18523:3;18514:6;18452:75;:::i;:::-;18552:2;18547:3;18543:12;18536:19;;18572:3;18565:10;;18325:256;;;;:::o;18587:429::-;18764:3;18786:92;18874:3;18865:6;18786:92;:::i;:::-;18779:99;;18895:95;18986:3;18977:6;18895:95;:::i;:::-;18888:102;;19007:3;19000:10;;18587:429;;;;;:::o;19022:379::-;19206:3;19228:147;19371:3;19228:147;:::i;:::-;19221:154;;19392:3;19385:10;;19022:379;;;:::o;19407:222::-;19500:4;19538:2;19527:9;19523:18;19515:26;;19551:71;19619:1;19608:9;19604:17;19595:6;19551:71;:::i;:::-;19407:222;;;;:::o;19635:640::-;19830:4;19868:3;19857:9;19853:19;19845:27;;19882:71;19950:1;19939:9;19935:17;19926:6;19882:71;:::i;:::-;19963:72;20031:2;20020:9;20016:18;20007:6;19963:72;:::i;:::-;20045;20113:2;20102:9;20098:18;20089:6;20045:72;:::i;:::-;20164:9;20158:4;20154:20;20149:2;20138:9;20134:18;20127:48;20192:76;20263:4;20254:6;20192:76;:::i;:::-;20184:84;;19635:640;;;;;;;:::o;20281:748::-;20530:4;20568:3;20557:9;20553:19;20545:27;;20582:71;20650:1;20639:9;20635:17;20626:6;20582:71;:::i;:::-;20663:72;20731:2;20720:9;20716:18;20707:6;20663:72;:::i;:::-;20745;20813:2;20802:9;20798:18;20789:6;20745:72;:::i;:::-;20864:9;20858:4;20854:20;20849:2;20838:9;20834:18;20827:48;20892:130;21017:4;20892:130;:::i;:::-;20884:138;;20281:748;;;;;;:::o;21035:210::-;21122:4;21160:2;21149:9;21145:18;21137:26;;21173:65;21235:1;21224:9;21220:17;21211:6;21173:65;:::i;:::-;21035:210;;;;:::o;21251:222::-;21344:4;21382:2;21371:9;21367:18;21359:26;;21395:71;21463:1;21452:9;21448:17;21439:6;21395:71;:::i;:::-;21251:222;;;;:::o;21479:248::-;21585:4;21623:2;21612:9;21608:18;21600:26;;21636:84;21717:1;21706:9;21702:17;21693:6;21636:84;:::i;:::-;21479:248;;;;:::o;21733:313::-;21846:4;21884:2;21873:9;21869:18;21861:26;;21933:9;21927:4;21923:20;21919:1;21908:9;21904:17;21897:47;21961:78;22034:4;22025:6;21961:78;:::i;:::-;21953:86;;21733:313;;;;:::o;22052:419::-;22218:4;22256:2;22245:9;22241:18;22233:26;;22305:9;22299:4;22295:20;22291:1;22280:9;22276:17;22269:47;22333:131;22459:4;22333:131;:::i;:::-;22325:139;;22052:419;;;:::o;22477:::-;22643:4;22681:2;22670:9;22666:18;22658:26;;22730:9;22724:4;22720:20;22716:1;22705:9;22701:17;22694:47;22758:131;22884:4;22758:131;:::i;:::-;22750:139;;22477:419;;;:::o;22902:::-;23068:4;23106:2;23095:9;23091:18;23083:26;;23155:9;23149:4;23145:20;23141:1;23130:9;23126:17;23119:47;23183:131;23309:4;23183:131;:::i;:::-;23175:139;;22902:419;;;:::o;23327:::-;23493:4;23531:2;23520:9;23516:18;23508:26;;23580:9;23574:4;23570:20;23566:1;23555:9;23551:17;23544:47;23608:131;23734:4;23608:131;:::i;:::-;23600:139;;23327:419;;;:::o;23752:::-;23918:4;23956:2;23945:9;23941:18;23933:26;;24005:9;23999:4;23995:20;23991:1;23980:9;23976:17;23969:47;24033:131;24159:4;24033:131;:::i;:::-;24025:139;;23752:419;;;:::o;24177:::-;24343:4;24381:2;24370:9;24366:18;24358:26;;24430:9;24424:4;24420:20;24416:1;24405:9;24401:17;24394:47;24458:131;24584:4;24458:131;:::i;:::-;24450:139;;24177:419;;;:::o;24602:::-;24768:4;24806:2;24795:9;24791:18;24783:26;;24855:9;24849:4;24845:20;24841:1;24830:9;24826:17;24819:47;24883:131;25009:4;24883:131;:::i;:::-;24875:139;;24602:419;;;:::o;25027:::-;25193:4;25231:2;25220:9;25216:18;25208:26;;25280:9;25274:4;25270:20;25266:1;25255:9;25251:17;25244:47;25308:131;25434:4;25308:131;:::i;:::-;25300:139;;25027:419;;;:::o;25452:::-;25618:4;25656:2;25645:9;25641:18;25633:26;;25705:9;25699:4;25695:20;25691:1;25680:9;25676:17;25669:47;25733:131;25859:4;25733:131;:::i;:::-;25725:139;;25452:419;;;:::o;25877:::-;26043:4;26081:2;26070:9;26066:18;26058:26;;26130:9;26124:4;26120:20;26116:1;26105:9;26101:17;26094:47;26158:131;26284:4;26158:131;:::i;:::-;26150:139;;25877:419;;;:::o;26302:::-;26468:4;26506:2;26495:9;26491:18;26483:26;;26555:9;26549:4;26545:20;26541:1;26530:9;26526:17;26519:47;26583:131;26709:4;26583:131;:::i;:::-;26575:139;;26302:419;;;:::o;26727:::-;26893:4;26931:2;26920:9;26916:18;26908:26;;26980:9;26974:4;26970:20;26966:1;26955:9;26951:17;26944:47;27008:131;27134:4;27008:131;:::i;:::-;27000:139;;26727:419;;;:::o;27152:::-;27318:4;27356:2;27345:9;27341:18;27333:26;;27405:9;27399:4;27395:20;27391:1;27380:9;27376:17;27369:47;27433:131;27559:4;27433:131;:::i;:::-;27425:139;;27152:419;;;:::o;27577:::-;27743:4;27781:2;27770:9;27766:18;27758:26;;27830:9;27824:4;27820:20;27816:1;27805:9;27801:17;27794:47;27858:131;27984:4;27858:131;:::i;:::-;27850:139;;27577:419;;;:::o;28002:::-;28168:4;28206:2;28195:9;28191:18;28183:26;;28255:9;28249:4;28245:20;28241:1;28230:9;28226:17;28219:47;28283:131;28409:4;28283:131;:::i;:::-;28275:139;;28002:419;;;:::o;28427:::-;28593:4;28631:2;28620:9;28616:18;28608:26;;28680:9;28674:4;28670:20;28666:1;28655:9;28651:17;28644:47;28708:131;28834:4;28708:131;:::i;:::-;28700:139;;28427:419;;;:::o;28852:222::-;28945:4;28983:2;28972:9;28968:18;28960:26;;28996:71;29064:1;29053:9;29049:17;29040:6;28996:71;:::i;:::-;28852:222;;;;:::o;29080:129::-;29114:6;29141:20;;:::i;:::-;29131:30;;29170:33;29198:4;29190:6;29170:33;:::i;:::-;29080:129;;;:::o;29215:75::-;29248:6;29281:2;29275:9;29265:19;;29215:75;:::o;29296:307::-;29357:4;29447:18;29439:6;29436:30;29433:56;;;29469:18;;:::i;:::-;29433:56;29507:29;29529:6;29507:29;:::i;:::-;29499:37;;29591:4;29585;29581:15;29573:23;;29296:307;;;:::o;29609:308::-;29671:4;29761:18;29753:6;29750:30;29747:56;;;29783:18;;:::i;:::-;29747:56;29821:29;29843:6;29821:29;:::i;:::-;29813:37;;29905:4;29899;29895:15;29887:23;;29609:308;;;:::o;29923:141::-;29972:4;29995:3;29987:11;;30018:3;30015:1;30008:14;30052:4;30049:1;30039:18;30031:26;;29923:141;;;:::o;30070:98::-;30121:6;30155:5;30149:12;30139:22;;30070:98;;;:::o;30174:99::-;30226:6;30260:5;30254:12;30244:22;;30174:99;;;:::o;30279:168::-;30362:11;30396:6;30391:3;30384:19;30436:4;30431:3;30427:14;30412:29;;30279:168;;;;:::o;30453:147::-;30554:11;30591:3;30576:18;;30453:147;;;;:::o;30606:169::-;30690:11;30724:6;30719:3;30712:19;30764:4;30759:3;30755:14;30740:29;;30606:169;;;;:::o;30781:148::-;30883:11;30920:3;30905:18;;30781:148;;;;:::o;30935:96::-;30972:7;31001:24;31019:5;31001:24;:::i;:::-;30990:35;;30935:96;;;:::o;31037:90::-;31071:7;31114:5;31107:13;31100:21;31089:32;;31037:90;;;:::o;31133:77::-;31170:7;31199:5;31188:16;;31133:77;;;:::o;31216:149::-;31252:7;31292:66;31285:5;31281:78;31270:89;;31216:149;;;:::o;31371:141::-;31423:7;31452:5;31441:16;;31458:48;31500:5;31458:48;:::i;:::-;31371:141;;;:::o;31518:126::-;31555:7;31595:42;31588:5;31584:54;31573:65;;31518:126;;;:::o;31650:77::-;31687:7;31716:5;31705:16;;31650:77;;;:::o;31733:141::-;31796:9;31829:39;31862:5;31829:39;:::i;:::-;31816:52;;31733:141;;;:::o;31880:154::-;31964:6;31959:3;31954;31941:30;32026:1;32017:6;32012:3;32008:16;32001:27;31880:154;;;:::o;32040:307::-;32108:1;32118:113;32132:6;32129:1;32126:13;32118:113;;;32217:1;32212:3;32208:11;32202:18;32198:1;32193:3;32189:11;32182:39;32154:2;32151:1;32147:10;32142:15;;32118:113;;;32249:6;32246:1;32243:13;32240:101;;;32329:1;32320:6;32315:3;32311:16;32304:27;32240:101;32089:258;32040:307;;;:::o;32353:320::-;32397:6;32434:1;32428:4;32424:12;32414:22;;32481:1;32475:4;32471:12;32502:18;32492:81;;32558:4;32550:6;32546:17;32536:27;;32492:81;32620:2;32612:6;32609:14;32589:18;32586:38;32583:84;;;32639:18;;:::i;:::-;32583:84;32404:269;32353:320;;;:::o;32679:281::-;32762:27;32784:4;32762:27;:::i;:::-;32754:6;32750:40;32892:6;32880:10;32877:22;32856:18;32844:10;32841:34;32838:62;32835:88;;;32903:18;;:::i;:::-;32835:88;32943:10;32939:2;32932:22;32722:238;32679:281;;:::o;32966:233::-;33005:3;33028:24;33046:5;33028:24;:::i;:::-;33019:33;;33074:66;33067:5;33064:77;33061:103;;;33144:18;;:::i;:::-;33061:103;33191:1;33184:5;33180:13;33173:20;;32966:233;;;:::o;33205:100::-;33244:7;33273:26;33293:5;33273:26;:::i;:::-;33262:37;;33205:100;;;:::o;33311:94::-;33350:7;33379:20;33393:5;33379:20;:::i;:::-;33368:31;;33311:94;;;:::o;33411:180::-;33459:77;33456:1;33449:88;33556:4;33553:1;33546:15;33580:4;33577:1;33570:15;33597:180;33645:77;33642:1;33635:88;33742:4;33739:1;33732:15;33766:4;33763:1;33756:15;33783:180;33831:77;33828:1;33821:88;33928:4;33925:1;33918:15;33952:4;33949:1;33942:15;33969:180;34017:77;34014:1;34007:88;34114:4;34111:1;34104:15;34138:4;34135:1;34128:15;34155:180;34203:77;34200:1;34193:88;34300:4;34297:1;34290:15;34324:4;34321:1;34314:15;34341:180;34389:77;34386:1;34379:88;34486:4;34483:1;34476:15;34510:4;34507:1;34500:15;34527:117;34636:1;34633;34626:12;34650:117;34759:1;34756;34749:12;34773:117;34882:1;34879;34872:12;34896:117;35005:1;35002;34995:12;35019:117;35128:1;35125;35118:12;35142:117;35251:1;35248;35241:12;35265:102;35306:6;35357:2;35353:7;35348:2;35341:5;35337:14;35333:28;35323:38;;35265:102;;;:::o;35373:94::-;35406:8;35454:5;35450:2;35446:14;35425:35;;35373:94;;;:::o;35473:225::-;35613:34;35609:1;35601:6;35597:14;35590:58;35682:8;35677:2;35669:6;35665:15;35658:33;35473:225;:::o;35704:169::-;35844:21;35840:1;35832:6;35828:14;35821:45;35704:169;:::o;35879:179::-;36019:31;36015:1;36007:6;36003:14;35996:55;35879:179;:::o;36064:167::-;36204:19;36200:1;36192:6;36188:14;36181:43;36064:167;:::o;36237:222::-;36377:34;36373:1;36365:6;36361:14;36354:58;36446:5;36441:2;36433:6;36429:15;36422:30;36237:222;:::o;36465:176::-;36605:28;36601:1;36593:6;36589:14;36582:52;36465:176;:::o;36647:173::-;36787:25;36783:1;36775:6;36771:14;36764:49;36647:173;:::o;36826:166::-;36966:18;36962:1;36954:6;36950:14;36943:42;36826:166;:::o;36998:179::-;37138:31;37134:1;37126:6;37122:14;37115:55;36998:179;:::o;37183:182::-;37323:34;37319:1;37311:6;37307:14;37300:58;37183:182;:::o;37371:114::-;;:::o;37491:166::-;37631:18;37627:1;37619:6;37615:14;37608:42;37491:166;:::o;37663:160::-;37803:12;37799:1;37791:6;37787:14;37780:36;37663:160;:::o;37829:225::-;37969:34;37965:1;37957:6;37953:14;37946:58;38038:8;38033:2;38025:6;38021:15;38014:33;37829:225;:::o;38060:164::-;38200:16;38196:1;38188:6;38184:14;38177:40;38060:164;:::o;38230:::-;38370:16;38366:1;38358:6;38354:14;38347:40;38230:164;:::o;38400:160::-;38540:12;38536:1;38528:6;38524:14;38517:36;38400:160;:::o;38566:120::-;38654:1;38647:5;38644:12;38634:46;;38660:18;;:::i;:::-;38634:46;38566:120;:::o;38692:122::-;38765:24;38783:5;38765:24;:::i;:::-;38758:5;38755:35;38745:63;;38804:1;38801;38794:12;38745:63;38692:122;:::o;38820:116::-;38890:21;38905:5;38890:21;:::i;:::-;38883:5;38880:32;38870:60;;38926:1;38923;38916:12;38870:60;38820:116;:::o;38942:122::-;39015:24;39033:5;39015:24;:::i;:::-;39008:5;39005:35;38995:63;;39054:1;39051;39044:12;38995:63;38942:122;:::o;39070:120::-;39142:23;39159:5;39142:23;:::i;:::-;39135:5;39132:34;39122:62;;39180:1;39177;39170:12;39122:62;39070:120;:::o;39196:122::-;39269:24;39287:5;39269:24;:::i;:::-;39262:5;39259:35;39249:63;;39308:1;39305;39298:12;39249:63;39196:122;:::o

Swarm Source

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