ETH Price: $1,760.39 (+11.44%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...219105612025-02-23 17:37:4758 days ago1740332267IN
0xE3677bdd...73fF5fe05
0 ETH0.00004651.74506761
Set Approval For...219105592025-02-23 17:37:2358 days ago1740332243IN
0xE3677bdd...73fF5fe05
0 ETH0.000083031.78391225
Set Approval For...219008842025-02-22 9:09:2359 days ago1740215363IN
0xE3677bdd...73fF5fe05
0 ETH0.00005541.19034828
Withdraw209419052024-10-11 10:53:11193 days ago1728643991IN
0xE3677bdd...73fF5fe05
0 ETH0.0005091316.52866335
Set Approval For...207075952024-09-08 18:10:59226 days ago1725819059IN
0xE3677bdd...73fF5fe05
0 ETH0.000093882.01707026
Set Approval For...200943112024-06-15 2:45:47311 days ago1718419547IN
0xE3677bdd...73fF5fe05
0 ETH0.000132372.84379893
Set Approval For...199044012024-05-19 13:52:35338 days ago1716126755IN
0xE3677bdd...73fF5fe05
0 ETH0.000143323.07908034
Mint198556842024-05-12 18:19:47345 days ago1715537987IN
0xE3677bdd...73fF5fe05
0 ETH0.000405243.6517649
Mint198555782024-05-12 17:58:35345 days ago1715536715IN
0xE3677bdd...73fF5fe05
0 ETH0.000513934.19172951
Mint198555772024-05-12 17:58:23345 days ago1715536703IN
0xE3677bdd...73fF5fe05
0 ETH0.00052714.29910843
Mint198555682024-05-12 17:56:35345 days ago1715536595IN
0xE3677bdd...73fF5fe05
0 ETH0.000538154.38925762
Mint198555452024-05-12 17:51:59345 days ago1715536319IN
0xE3677bdd...73fF5fe05
0 ETH0.000466323.80337899
Mint198554492024-05-12 17:32:47345 days ago1715535167IN
0xE3677bdd...73fF5fe05
0 ETH0.000394373.32177364
Mint198554452024-05-12 17:31:59345 days ago1715535119IN
0xE3677bdd...73fF5fe05
0 ETH0.000442853.61199111
Mint192689202024-02-20 12:29:11427 days ago1708432151IN
0xE3677bdd...73fF5fe05
0 ETH0.004249934.65940651
Set Approval For...192613782024-02-19 11:06:59428 days ago1708340819IN
0xE3677bdd...73fF5fe05
0 ETH0.001391629.84287736
Mint192291132024-02-14 22:16:35433 days ago1707948995IN
0xE3677bdd...73fF5fe05
0.006 ETH0.0029813926.87881474
Mint192226012024-02-14 0:19:59433 days ago1707869999IN
0xE3677bdd...73fF5fe05
0 ETH0.0026980122.00539935
Set Approval For...191248222024-01-31 6:56:11447 days ago1706684171IN
0xE3677bdd...73fF5fe05
0 ETH0.0008458218.17142812
Set Approval For...189235522024-01-03 1:26:11475 days ago1704245171IN
0xE3677bdd...73fF5fe05
0 ETH0.0009059819.46380886
Mint189232592024-01-03 0:27:23475 days ago1704241643IN
0xE3677bdd...73fF5fe05
0 ETH0.0017585915.31300287
Set Approval For...189052732023-12-31 11:50:23478 days ago1704023423IN
0xE3677bdd...73fF5fe05
0 ETH0.0006797614.60392079
Mint189007242023-12-30 20:31:47479 days ago1703968307IN
0xE3677bdd...73fF5fe05
0 ETH0.0041692836.32068032
Set Approval For...188686122023-12-26 8:15:11483 days ago1703578511IN
0xE3677bdd...73fF5fe05
0 ETH0.0006448313.85345472
Withdraw188478982023-12-23 10:24:23486 days ago1703327063IN
0xE3677bdd...73fF5fe05
0 ETH0.0005508517.88324991
View all transactions

Latest 4 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer209419052024-10-11 10:53:11193 days ago1728643991
0xE3677bdd...73fF5fe05
0.006 ETH
Transfer188478982023-12-23 10:24:23486 days ago1703327063
0xE3677bdd...73fF5fe05
0.003 ETH
Transfer183856472023-10-19 16:44:11551 days ago1697733851
0xE3677bdd...73fF5fe05
0.024 ETH
Transfer183617092023-10-16 8:21:47554 days ago1697444507
0xE3677bdd...73fF5fe05
0.2496 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CalamigosNFT

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-15
*/

pragma solidity ^0.8.0;
abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {

        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {

        _status = _NOT_ENTERED;
    }
}

pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.0;

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

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

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

    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 result) {
        unchecked {

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

            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;
            uint256 inverse = (3 * denominator) ^ 2;

            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
            result = prod0 * inverse;
            return result;
        }
    }

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

    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 result = 1 << (log2(a) >> 1);

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

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

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// ERC721A Contracts v4.2.3
// Creator: Chiru Labs

pragma solidity ^0.8.4;

interface IERC721A {

    error ApprovalCallerNotOwnerNorApproved();

    error ApprovalQueryForNonexistentToken();

    error BalanceQueryForZeroAddress();

    error MintToZeroAddress();

    error MintZeroQuantity();

    error OwnerQueryForNonexistentToken();

    error TransferCallerNotOwnerNorApproved();

    error TransferFromIncorrectOwner();

    error TransferToNonERC721ReceiverImplementer();

    error TransferToZeroAddress();

    error URIQueryForNonexistentToken();

    error MintERC2309QuantityExceedsLimit();

    error OwnershipNotInitializedForExtraData();

    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Stores the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
        // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}.
        uint24 extraData;
    }

    function totalSupply() external view returns (uint256);

    function supportsInterface(bytes4 interfaceId) external view returns (bool);

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

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

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

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

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

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

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

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

    function approve(address to, uint256 tokenId) external payable;
    function setApprovalForAll(address operator, bool _approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);

    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}

// ERC721A Contracts v4.2.3
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Interface of ERC721 token receiver.
 */
interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721A is IERC721A {
    // Bypass for a `--via-ir` bug (https://github.com/chiru-labs/ERC721A/pull/364).
    struct TokenApprovalRef {
        address value;
    }

    // Mask of an entry in packed address data.
    uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    // The bit position of `numberMinted` in packed address data.
    uint256 private constant _BITPOS_NUMBER_MINTED = 64;

    // The bit position of `numberBurned` in packed address data.
    uint256 private constant _BITPOS_NUMBER_BURNED = 128;

    // The bit position of `aux` in packed address data.
    uint256 private constant _BITPOS_AUX = 192;

    // Mask of all 256 bits in packed address data except the 64 bits for `aux`.
    uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    // The bit position of `startTimestamp` in packed ownership.
    uint256 private constant _BITPOS_START_TIMESTAMP = 160;

    // The bit mask of the `burned` bit in packed ownership.
    uint256 private constant _BITMASK_BURNED = 1 << 224;

    // The bit position of the `nextInitialized` bit in packed ownership.
    uint256 private constant _BITPOS_NEXT_INITIALIZED = 225;

    // The bit mask of the `nextInitialized` bit in packed ownership.
    uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225;

    // The bit position of `extraData` in packed ownership.
    uint256 private constant _BITPOS_EXTRA_DATA = 232;

    // Mask of all 256 bits in a packed ownership except the 24 bits for `extraData`.
    uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;

    // The mask of the lower 160 bits for addresses.
    uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1;
    uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

    // The `Transfer` event signature is given by:
    // `keccak256(bytes("Transfer(address,address,uint256)"))`.
    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    uint256 private _currentIndex;

    // The number of tokens burned.
    uint256 private _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    mapping(uint256 => uint256) private _packedOwnerships;
    mapping(address => uint256) private _packedAddressData;
    mapping(uint256 => TokenApprovalRef) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    function _nextTokenId() internal view virtual returns (uint256) {
        return _currentIndex;
    }

    function totalSupply() public view virtual override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than `_currentIndex - _startTokenId()` times.
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    function _totalMinted() internal view virtual returns (uint256) {
        // Counter underflow is impossible as `_currentIndex` does not decrement,
        // and it is initialized to `_startTokenId()`.
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    function _totalBurned() internal view virtual returns (uint256) {
        return _burnCounter;
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> _BITPOS_AUX);
    }

    function _setAux(address owner, uint64 aux) internal virtual {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        // Cast `aux` with assembly to avoid redundant masking.
        assembly {
            auxCasted := aux
        }
        packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {

        return
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

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

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

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';
    }

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

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    /**
     * @dev Returns the unpacked `TokenOwnership` struct at `index`.
     */
    function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    /**
     * @dev Initializes the ownership slot minted at `index` for efficiency purposes.
     */
    function _initializeOwnershipAt(uint256 index) internal virtual {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    /**
     * Returns the packed ownership data of `tokenId`.
     */
    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                    // If not burned.
                    if (packed & _BITMASK_BURNED == 0) {

                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP);
        ownership.burned = packed & _BITMASK_BURNED != 0;
        ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA);
    }

    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
            owner := and(owner, _BITMASK_ADDRESS)
            // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`.
            result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        // For branchless setting of the `nextInitialized` flag.
        assembly {
            // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`.
            result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

    function approve(address to, uint256 tokenId) public payable virtual override {
        address owner = ownerOf(tokenId);

        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();
            }

        _tokenApprovals[tokenId].value = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId].value;
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }

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

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned.
    }

    function _isSenderApprovedOrOwner(
        address approvedAddress,
        address owner,
        address msgSender
    ) private pure returns (bool result) {
        assembly {
            // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
            owner := and(owner, _BITMASK_ADDRESS)
            // Mask `msgSender` to the lower 160 bits, in case the upper bits somehow aren't clean.
            msgSender := and(msgSender, _BITMASK_ADDRESS)
            // `msgSender == owner || msgSender == approvedAddress`.
            result := or(eq(msgSender, owner), eq(msgSender, approvedAddress))
        }
    }

    function _getApprovedSlotAndAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId];
        // The following is equivalent to `approvedAddress = _tokenApprovals[tokenId].value`.
        assembly {
            approvedAddressSlot := tokenApproval.slot
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        // The nested ifs save around 20+ gas over a compound boolean condition.
        if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();

        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner.
        assembly {
            if approvedAddress {
                // This is equivalent to `delete _tokenApprovals[tokenId]`.
                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {
            // We can directly increment and decrement the balances.
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.
            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public payable virtual override {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

 
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    function _mint(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            uint256 toMasked;
            uint256 end = startTokenId + quantity;

            assembly {
                // Mask `to` to the lower 160 bits, in case the upper bits somehow aren't clean.
                toMasked := and(to, _BITMASK_ADDRESS)
                // Emit the `Transfer` event.
                log4(
                    0, // Start of data (0, since no data).
                    0, // End of data (0, since no data).
                    _TRANSFER_EVENT_SIGNATURE, // Signature.
                    0, // `address(0)`.
                    toMasked, // `to`.
                    startTokenId // `tokenId`.
                )

                for {
                    let tokenId := add(startTokenId, 1)
                } iszero(eq(tokenId, end)) {
                    tokenId := add(tokenId, 1)
                } {
                    // Emit the `Transfer` event. Similar to above.
                    log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId)
                }
            }
            if (toMasked == 0) revert MintToZeroAddress();

            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _mintERC2309(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are unrealistic due to the above check for `quantity` to be below the limit.
        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to);

            _currentIndex = startTokenId + quantity;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal virtual {
        _mint(to, quantity);

        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                // Reentrancy protection.
                if (_currentIndex != end) revert();
            }
        }
    }

    function _safeMint(address to, uint256 quantity) internal virtual {
        _safeMint(to, quantity, '');
    }

    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        if (approvalCheck) {
            // The nested ifs save around 20+ gas over a compound boolean condition.
            if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        // Clear approvals from the previous owner.
        assembly {
            if approvedAddress {
                // This is equivalent to `delete _tokenApprovals[tokenId]`.
                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {

            _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1;

            _packedOwnerships[tokenId] = _packOwnershipData(
                from,
                (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
            );

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        // Cast `extraData` with assembly to avoid redundant masking.
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

    function _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA;
    }

    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    /**
     * @dev Converts a uint256 to its ASCII string decimal representation.
     */
    function _toString(uint256 value) internal pure virtual returns (string memory str) {
        assembly {
            let m := add(mload(0x40), 0xa0)
            // Update the free memory pointer to allocate.
            mstore(0x40, m)
            // Assign the `str` to the end.
            str := sub(m, 0x20)
            // Zeroize the slot after the string.
            mstore(str, 0)

            // Cache the end of the memory to calculate the length later.
            let end := str

            for { let temp := value } 1 {} {
                str := sub(str, 1)
                // Write the character to the pointer.
                // The ASCII index of the '0' character is 48.
                mstore8(str, add(48, mod(temp, 10)))
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
                // prettier-ignore
                if iszero(temp) { break }
            }

            let length := sub(end, str)
            // Move the pointer 32 bytes leftwards to make room for the length.
            str := sub(str, 0x20)
            // Store the length.
            mstore(str, length)
        }
    }
}

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;
contract CalamigosNFT  is ERC721A, Ownable, ReentrancyGuard {
	using Strings for uint256;

	uint256 public maxSupply = 3333;
    uint256 public maxFreeSupply = 3333;
    uint256 public cost = 0.0003 ether;
    uint256 public notPayableAmount = 3;
    uint256 public maxPerWallet = 40;

    bool public isRevealed = true;
	bool public pause = false;

    string private baseURL = "";
    string public hiddenMetadataUrl = "REVEALED";

    mapping(address => uint256) public userBalance;

	constructor(
        string memory _baseMetadataUrl
	)
	ERC721A("CALAMIGOS", "CLMGS") {
        setBaseUri(_baseMetadataUrl);
    }

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

    function setBaseUri(string memory _baseURL) public onlyOwner {
	    baseURL = _baseURL;
	}

    function mint(uint256 mintAmount) external payable {
		require(!pause, "Sale is on pause");
        if(userBalance[msg.sender] >= notPayableAmount) require(msg.value >= cost * mintAmount, "Insufficient funds");
        else{
            if(totalSupply() + mintAmount <= maxFreeSupply){
                if(mintAmount > (notPayableAmount - userBalance[msg.sender])) require(msg.value >= cost * (mintAmount - (notPayableAmount - userBalance[msg.sender])), "Insufficient funds");
            }
            else require(msg.value >= cost * mintAmount, "Insufficient funds");
        }
        require(_totalMinted() + mintAmount <= maxSupply,"Exceeds max supply");
        require(userBalance[msg.sender] + mintAmount <= maxPerWallet, "Exceeds max token per wallet");
        _safeMint(msg.sender, mintAmount);
        userBalance[msg.sender] = userBalance[msg.sender] + mintAmount;
	}

    function airdrop(address to, uint256 mintAmount) external onlyOwner {
		require(
			_totalMinted() + mintAmount <= maxSupply,
			"Exceeds max supply"
		);
		_safeMint(to, mintAmount);
        
	}

    function sethiddenMetadataUrl(string memory _hiddenMetadataUrl) public onlyOwner {
	    hiddenMetadataUrl = _hiddenMetadataUrl;
	}

    function reveal(bool _state) external onlyOwner {
	    isRevealed = _state;
	}

	function _startTokenId() internal view virtual override returns (uint256) {
    	return 1;
  	}

	function setMaxSupply(uint256 newMaxSupply) external onlyOwner {
		maxSupply = newMaxSupply;
	}

    function setMaxFreeSupply(uint256 newMaxFreeSupply) external onlyOwner {
		maxFreeSupply = newMaxFreeSupply;
	}

	function tokenURI(uint256 tokenId)
		public
		view
		override
		returns (string memory)
	{
        require(_exists(tokenId), "Token doesn't exist");
        if(isRevealed == false) {
            return hiddenMetadataUrl;
        }
        else return bytes(_baseURI()).length > 0 
            ? string(abi.encodePacked(_baseURI(), tokenId.toString(), ".json"))
            : "";
	}

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

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

    function setNotPayableAmount(uint256 _newAmt) public onlyOwner{
        require(_newAmt < maxPerWallet, "Not possible");
        notPayableAmount = _newAmt;
    }

    function setMaxPerWallet(uint256 _newAmt) public  onlyOwner{
        require(_newAmt > notPayableAmount, "Not possible");
        maxPerWallet = _newAmt;
    }

	function withdraw() external onlyOwner {
		(bool success, ) = payable(owner()).call{
            value: address(this).balance
        }("");
        require(success);
	}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"_baseMetadataUrl","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notPayableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","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":"_baseURL","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxFreeSupply","type":"uint256"}],"name":"setMaxFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmt","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmt","type":"uint256"}],"name":"setNotPayableAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUrl","type":"string"}],"name":"sethiddenMetadataUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052610d05600a55610d05600b55660110d9316ec000600c556003600d556028600e556001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff02191690831515021790555060405180602001604052806000815250601090816200007b91906200060f565b506040518060400160405280600881526020017f52455645414c454400000000000000000000000000000000000000000000000081525060119081620000c291906200060f565b50348015620000d057600080fd5b5060405162003ee938038062003ee98339818101604052810190620000f691906200085a565b6040518060400160405280600981526020017f43414c414d49474f5300000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f434c4d475300000000000000000000000000000000000000000000000000000081525081600290816200017391906200060f565b5080600390816200018591906200060f565b5062000196620001de60201b60201c565b6000819055505050620001be620001b2620001e760201b60201c565b620001ef60201b60201c565b6001600981905550620001d781620002b560201b60201c565b506200092e565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002c5620002da60201b60201c565b8060109081620002d691906200060f565b5050565b620002ea620001e760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003106200036b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000360906200090c565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200041757607f821691505b6020821081036200042d576200042c620003cf565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000458565b620004a3868362000458565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004f0620004ea620004e484620004bb565b620004c5565b620004bb565b9050919050565b6000819050919050565b6200050c83620004cf565b620005246200051b82620004f7565b84845462000465565b825550505050565b600090565b6200053b6200052c565b6200054881848462000501565b505050565b5b8181101562000570576200056460008262000531565b6001810190506200054e565b5050565b601f821115620005bf57620005898162000433565b620005948462000448565b81016020851015620005a4578190505b620005bc620005b38562000448565b8301826200054d565b50505b505050565b600082821c905092915050565b6000620005e460001984600802620005c4565b1980831691505092915050565b6000620005ff8383620005d1565b9150826002028217905092915050565b6200061a8262000395565b67ffffffffffffffff811115620006365762000635620003a0565b5b620006428254620003fe565b6200064f82828562000574565b600060209050601f83116001811462000687576000841562000672578287015190505b6200067e8582620005f1565b865550620006ee565b601f198416620006978662000433565b60005b82811015620006c1578489015182556001820191506020850194506020810190506200069a565b86831015620006e15784890151620006dd601f891682620005d1565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620007308262000714565b810181811067ffffffffffffffff82111715620007525762000751620003a0565b5b80604052505050565b600062000767620006f6565b905062000775828262000725565b919050565b600067ffffffffffffffff821115620007985762000797620003a0565b5b620007a38262000714565b9050602081019050919050565b60005b83811015620007d0578082015181840152602081019050620007b3565b60008484015250505050565b6000620007f3620007ed846200077a565b6200075b565b9050828152602081018484840111156200081257620008116200070f565b5b6200081f848285620007b0565b509392505050565b600082601f8301126200083f576200083e6200070a565b5b815162000851848260208601620007dc565b91505092915050565b60006020828403121562000873576200087262000700565b5b600082015167ffffffffffffffff81111562000894576200089362000705565b5b620008a28482850162000827565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620008f4602083620008ab565b91506200090182620008bc565b602082019050919050565b600060208201905081810360008301526200092781620008e5565b9050919050565b6135ab806200093e6000396000f3fe6080604052600436106102255760003560e01c806370a0823111610123578063a22cb465116100ab578063cb2b1c5e1161006f578063cb2b1c5e1461079c578063d5abeb01146107c5578063e268e4d3146107f0578063e985e9c514610819578063f2fde38b1461085657610225565b8063a22cb465146106c6578063abfc4efa146106ef578063b88d4fde1461071a578063bedb86fb14610736578063c87b56dd1461075f57610225565b80638da5cb5b116100f25780638da5cb5b14610602578063940cd05b1461062d57806395d89b4114610656578063a0712d6814610681578063a0bcfc7f1461069d57610225565b806370a082311461055a578063715018a6146105975780638456cb59146105ae5780638ba4cc3c146105d957610225565b80633ccfd60b116101b15780634751333411610175578063475133341461047557806354214f69146104a05780635b28fd91146104cb5780636352211e146104f45780636f8b44b01461053157610225565b80633ccfd60b146103c55780633d6d652a146103dc57806342842e0e1461040557806344a0d68a14610421578063453c23101461044a57610225565b8063095ea7b3116101f8578063095ea7b31461030c57806313faede6146103285780631638fef01461035357806318160ddd1461037e57806323b872dd146103a957610225565b80630103c92b1461022a57806301ffc9a71461026757806306fdde03146102a4578063081812fc146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906125ca565b61087f565b60405161025e9190612610565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190612683565b610897565b60405161029b91906126cb565b60405180910390f35b3480156102b057600080fd5b506102b9610929565b6040516102c69190612776565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f191906127c4565b6109bb565b6040516103039190612800565b60405180910390f35b6103266004803603810190610321919061281b565b610a3a565b005b34801561033457600080fd5b5061033d610b7e565b60405161034a9190612610565b60405180910390f35b34801561035f57600080fd5b50610368610b84565b6040516103759190612776565b60405180910390f35b34801561038a57600080fd5b50610393610c12565b6040516103a09190612610565b60405180910390f35b6103c360048036038101906103be919061285b565b610c29565b005b3480156103d157600080fd5b506103da610f4b565b005b3480156103e857600080fd5b5061040360048036038101906103fe91906127c4565b610fd3565b005b61041f600480360381019061041a919061285b565b611029565b005b34801561042d57600080fd5b50610448600480360381019061044391906127c4565b611049565b005b34801561045657600080fd5b5061045f61105b565b60405161046c9190612610565b60405180910390f35b34801561048157600080fd5b5061048a611061565b6040516104979190612610565b60405180910390f35b3480156104ac57600080fd5b506104b5611067565b6040516104c291906126cb565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed91906127c4565b61107a565b005b34801561050057600080fd5b5061051b600480360381019061051691906127c4565b61108c565b6040516105289190612800565b60405180910390f35b34801561053d57600080fd5b50610558600480360381019061055391906127c4565b61109e565b005b34801561056657600080fd5b50610581600480360381019061057c91906125ca565b6110b0565b60405161058e9190612610565b60405180910390f35b3480156105a357600080fd5b506105ac611168565b005b3480156105ba57600080fd5b506105c361117c565b6040516105d091906126cb565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb919061281b565b61118f565b005b34801561060e57600080fd5b506106176111fc565b6040516106249190612800565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f91906128da565b611226565b005b34801561066257600080fd5b5061066b61124b565b6040516106789190612776565b60405180910390f35b61069b600480360381019061069691906127c4565b6112dd565b005b3480156106a957600080fd5b506106c460048036038101906106bf9190612a3c565b6116b9565b005b3480156106d257600080fd5b506106ed60048036038101906106e89190612a85565b6116d4565b005b3480156106fb57600080fd5b506107046117df565b6040516107119190612610565b60405180910390f35b610734600480360381019061072f9190612b66565b6117e5565b005b34801561074257600080fd5b5061075d600480360381019061075891906128da565b611858565b005b34801561076b57600080fd5b50610786600480360381019061078191906127c4565b61187d565b6040516107939190612776565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be9190612a3c565b6119d3565b005b3480156107d157600080fd5b506107da6119ee565b6040516107e79190612610565b60405180910390f35b3480156107fc57600080fd5b50610817600480360381019061081291906127c4565b6119f4565b005b34801561082557600080fd5b50610840600480360381019061083b9190612be9565b611a4a565b60405161084d91906126cb565b60405180910390f35b34801561086257600080fd5b5061087d600480360381019061087891906125ca565b611ade565b005b60126020528060005260406000206000915090505481565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f257506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109225750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461093890612c58565b80601f016020809104026020016040519081016040528092919081815260200182805461096490612c58565b80156109b15780601f10610986576101008083540402835291602001916109b1565b820191906000526020600020905b81548152906001019060200180831161099457829003601f168201915b5050505050905090565b60006109c682611b61565b6109fc576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a458261108c565b90508073ffffffffffffffffffffffffffffffffffffffff16610a66611bc0565b73ffffffffffffffffffffffffffffffffffffffff1614610ac957610a9281610a8d611bc0565b611a4a565b610ac8576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600c5481565b60118054610b9190612c58565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612c58565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b505050505081565b6000610c1c611bc8565b6001546000540303905090565b6000610c3482611bd1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c9b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610ca784611c9d565b91509150610cbd8187610cb8611bc0565b611cc4565b610d0957610cd286610ccd611bc0565b611a4a565b610d08576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d6f576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d7c8686866001611d08565b8015610d8757600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610e5585610e31888887611d0e565b7c020000000000000000000000000000000000000000000000000000000017611d36565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603610edb5760006001850190506000600460008381526020019081526020016000205403610ed9576000548114610ed8578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f438686866001611d61565b505050505050565b610f53611d67565b6000610f5d6111fc565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f8090612cba565b60006040518083038185875af1925050503d8060008114610fbd576040519150601f19603f3d011682016040523d82523d6000602084013e610fc2565b606091505b5050905080610fd057600080fd5b50565b610fdb611d67565b600e54811061101f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101690612d1b565b60405180910390fd5b80600d8190555050565b611044838383604051806020016040528060008152506117e5565b505050565b611051611d67565b80600c8190555050565b600e5481565b600b5481565b600f60009054906101000a900460ff1681565b611082611d67565b80600b8190555050565b600061109782611bd1565b9050919050565b6110a6611d67565b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611117576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611170611d67565b61117a6000611de5565b565b600f60019054906101000a900460ff1681565b611197611d67565b600a54816111a3611eab565b6111ad9190612d6a565b11156111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590612dea565b60405180910390fd5b6111f88282611ebe565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61122e611d67565b80600f60006101000a81548160ff02191690831515021790555050565b60606003805461125a90612c58565b80601f016020809104026020016040519081016040528092919081815260200182805461128690612c58565b80156112d35780601f106112a8576101008083540402835291602001916112d3565b820191906000526020600020905b8154815290600101906020018083116112b657829003601f168201915b5050505050905090565b600f60019054906101000a900460ff161561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490612e56565b60405180910390fd5b600d54601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106113ca5780600c546113839190612e76565b3410156113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90612f04565b60405180910390fd5b611538565b600b54816113d6610c12565b6113e09190612d6a565b116114e657601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d546114329190612f24565b8111156114e157601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d546114869190612f24565b816114919190612f24565b600c5461149e9190612e76565b3410156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790612f04565b60405180910390fd5b5b611537565b80600c546114f49190612e76565b341015611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d90612f04565b60405180910390fd5b5b5b600a5481611544611eab565b61154e9190612d6a565b111561158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690612dea565b60405180910390fd5b600e5481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115dd9190612d6a565b111561161e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161590612fa4565b60405180910390fd5b6116283382611ebe565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116739190612d6a565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6116c1611d67565b80601090816116d09190613170565b5050565b80600760006116e1611bc0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661178e611bc0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117d391906126cb565b60405180910390a35050565b600d5481565b6117f0848484610c29565b60008373ffffffffffffffffffffffffffffffffffffffff163b146118525761181b84848484611edc565b611851576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611860611d67565b80600f60016101000a81548160ff02191690831515021790555050565b606061188882611b61565b6118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be9061328e565b60405180910390fd5b60001515600f60009054906101000a900460ff1615150361197457601180546118ef90612c58565b80601f016020809104026020016040519081016040528092919081815260200182805461191b90612c58565b80156119685780601f1061193d57610100808354040283529160200191611968565b820191906000526020600020905b81548152906001019060200180831161194b57829003601f168201915b505050505090506119ce565b600061197e61202c565b511161199957604051806020016040528060008152506119cb565b6119a161202c565b6119aa836120be565b6040516020016119bb929190613336565b6040516020818303038152906040525b90505b919050565b6119db611d67565b80601190816119ea9190613170565b5050565b600a5481565b6119fc611d67565b600d548111611a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3790612d1b565b60405180910390fd5b80600e8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ae6611d67565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906133d7565b60405180910390fd5b611b5e81611de5565b50565b600081611b6c611bc8565b11158015611b7b575060005482105b8015611bb9575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b60006001905090565b60008082905080611be0611bc8565b11611c6657600054811015611c655760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603611c63575b60008103611c59576004600083600190039350838152602001908152602001600020549050611c2f565b8092505050611c98565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611d2586868461218c565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b611d6f612195565b73ffffffffffffffffffffffffffffffffffffffff16611d8d6111fc565b73ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda90613443565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611eb5611bc8565b60005403905090565b611ed882826040518060200160405280600081525061219d565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f02611bc0565b8786866040518563ffffffff1660e01b8152600401611f2494939291906134b8565b6020604051808303816000875af1925050508015611f6057506040513d601f19601f82011682018060405250810190611f5d9190613519565b60015b611fd9573d8060008114611f90576040519150601f19603f3d011682016040523d82523d6000602084013e611f95565b606091505b506000815103611fd1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606010805461203b90612c58565b80601f016020809104026020016040519081016040528092919081815260200182805461206790612c58565b80156120b45780601f10612089576101008083540402835291602001916120b4565b820191906000526020600020905b81548152906001019060200180831161209757829003601f168201915b5050505050905090565b6060600060016120cd8461223a565b01905060008167ffffffffffffffff8111156120ec576120eb612911565b5b6040519080825280601f01601f19166020018201604052801561211e5781602001600182028036833780820191505090505b509050600082602001820190505b600115612181578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161217557612174613546565b5b0494506000850361212c575b819350505050919050565b60009392505050565b600033905090565b6121a7838361238d565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461223557600080549050600083820390505b6121e76000868380600101945086611edc565b61221d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106121d457816000541461223257600080fd5b50505b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612298577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161228e5761228d613546565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106122d5576d04ee2d6d415b85acef810000000083816122cb576122ca613546565b5b0492506020810190505b662386f26fc10000831061230457662386f26fc1000083816122fa576122f9613546565b5b0492506010810190505b6305f5e100831061232d576305f5e100838161232357612322613546565b5b0492506008810190505b612710831061235257612710838161234857612347613546565b5b0492506004810190505b60648310612375576064838161236b5761236a613546565b5b0492506002810190505b600a8310612384576001810190505b80915050919050565b600080549050600082036123cd576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123da6000848385611d08565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612451836124426000866000611d0e565b61244b85612548565b17611d36565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b8181146124f257808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001810190506124b7565b506000820361252d576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506125436000848385611d61565b505050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125978261256c565b9050919050565b6125a78161258c565b81146125b257600080fd5b50565b6000813590506125c48161259e565b92915050565b6000602082840312156125e0576125df612562565b5b60006125ee848285016125b5565b91505092915050565b6000819050919050565b61260a816125f7565b82525050565b60006020820190506126256000830184612601565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126608161262b565b811461266b57600080fd5b50565b60008135905061267d81612657565b92915050565b60006020828403121561269957612698612562565b5b60006126a78482850161266e565b91505092915050565b60008115159050919050565b6126c5816126b0565b82525050565b60006020820190506126e060008301846126bc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612720578082015181840152602081019050612705565b60008484015250505050565b6000601f19601f8301169050919050565b6000612748826126e6565b61275281856126f1565b9350612762818560208601612702565b61276b8161272c565b840191505092915050565b60006020820190508181036000830152612790818461273d565b905092915050565b6127a1816125f7565b81146127ac57600080fd5b50565b6000813590506127be81612798565b92915050565b6000602082840312156127da576127d9612562565b5b60006127e8848285016127af565b91505092915050565b6127fa8161258c565b82525050565b600060208201905061281560008301846127f1565b92915050565b6000806040838503121561283257612831612562565b5b6000612840858286016125b5565b9250506020612851858286016127af565b9150509250929050565b60008060006060848603121561287457612873612562565b5b6000612882868287016125b5565b9350506020612893868287016125b5565b92505060406128a4868287016127af565b9150509250925092565b6128b7816126b0565b81146128c257600080fd5b50565b6000813590506128d4816128ae565b92915050565b6000602082840312156128f0576128ef612562565b5b60006128fe848285016128c5565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6129498261272c565b810181811067ffffffffffffffff8211171561296857612967612911565b5b80604052505050565b600061297b612558565b90506129878282612940565b919050565b600067ffffffffffffffff8211156129a7576129a6612911565b5b6129b08261272c565b9050602081019050919050565b82818337600083830152505050565b60006129df6129da8461298c565b612971565b9050828152602081018484840111156129fb576129fa61290c565b5b612a068482856129bd565b509392505050565b600082601f830112612a2357612a22612907565b5b8135612a338482602086016129cc565b91505092915050565b600060208284031215612a5257612a51612562565b5b600082013567ffffffffffffffff811115612a7057612a6f612567565b5b612a7c84828501612a0e565b91505092915050565b60008060408385031215612a9c57612a9b612562565b5b6000612aaa858286016125b5565b9250506020612abb858286016128c5565b9150509250929050565b600067ffffffffffffffff821115612ae057612adf612911565b5b612ae98261272c565b9050602081019050919050565b6000612b09612b0484612ac5565b612971565b905082815260208101848484011115612b2557612b2461290c565b5b612b308482856129bd565b509392505050565b600082601f830112612b4d57612b4c612907565b5b8135612b5d848260208601612af6565b91505092915050565b60008060008060808587031215612b8057612b7f612562565b5b6000612b8e878288016125b5565b9450506020612b9f878288016125b5565b9350506040612bb0878288016127af565b925050606085013567ffffffffffffffff811115612bd157612bd0612567565b5b612bdd87828801612b38565b91505092959194509250565b60008060408385031215612c0057612bff612562565b5b6000612c0e858286016125b5565b9250506020612c1f858286016125b5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c7057607f821691505b602082108103612c8357612c82612c29565b5b50919050565b600081905092915050565b50565b6000612ca4600083612c89565b9150612caf82612c94565b600082019050919050565b6000612cc582612c97565b9150819050919050565b7f4e6f7420706f737369626c650000000000000000000000000000000000000000600082015250565b6000612d05600c836126f1565b9150612d1082612ccf565b602082019050919050565b60006020820190508181036000830152612d3481612cf8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d75826125f7565b9150612d80836125f7565b9250828201905080821115612d9857612d97612d3b565b5b92915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b6000612dd46012836126f1565b9150612ddf82612d9e565b602082019050919050565b60006020820190508181036000830152612e0381612dc7565b9050919050565b7f53616c65206973206f6e20706175736500000000000000000000000000000000600082015250565b6000612e406010836126f1565b9150612e4b82612e0a565b602082019050919050565b60006020820190508181036000830152612e6f81612e33565b9050919050565b6000612e81826125f7565b9150612e8c836125f7565b9250828202612e9a816125f7565b91508282048414831517612eb157612eb0612d3b565b5b5092915050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b6000612eee6012836126f1565b9150612ef982612eb8565b602082019050919050565b60006020820190508181036000830152612f1d81612ee1565b9050919050565b6000612f2f826125f7565b9150612f3a836125f7565b9250828203905081811115612f5257612f51612d3b565b5b92915050565b7f45786365656473206d617820746f6b656e207065722077616c6c657400000000600082015250565b6000612f8e601c836126f1565b9150612f9982612f58565b602082019050919050565b60006020820190508181036000830152612fbd81612f81565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026130267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612fe9565b6130308683612fe9565b95508019841693508086168417925050509392505050565b6000819050919050565b600061306d613068613063846125f7565b613048565b6125f7565b9050919050565b6000819050919050565b61308783613052565b61309b61309382613074565b848454612ff6565b825550505050565b600090565b6130b06130a3565b6130bb81848461307e565b505050565b5b818110156130df576130d46000826130a8565b6001810190506130c1565b5050565b601f821115613124576130f581612fc4565b6130fe84612fd9565b8101602085101561310d578190505b61312161311985612fd9565b8301826130c0565b50505b505050565b600082821c905092915050565b600061314760001984600802613129565b1980831691505092915050565b60006131608383613136565b9150826002028217905092915050565b613179826126e6565b67ffffffffffffffff81111561319257613191612911565b5b61319c8254612c58565b6131a78282856130e3565b600060209050601f8311600181146131da57600084156131c8578287015190505b6131d28582613154565b86555061323a565b601f1984166131e886612fc4565b60005b82811015613210578489015182556001820191506020850194506020810190506131eb565b8683101561322d5784890151613229601f891682613136565b8355505b6001600288020188555050505b505050505050565b7f546f6b656e20646f65736e277420657869737400000000000000000000000000600082015250565b60006132786013836126f1565b915061328382613242565b602082019050919050565b600060208201905081810360008301526132a78161326b565b9050919050565b600081905092915050565b60006132c4826126e6565b6132ce81856132ae565b93506132de818560208601612702565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006133206005836132ae565b915061332b826132ea565b600582019050919050565b600061334282856132b9565b915061334e82846132b9565b915061335982613313565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133c16026836126f1565b91506133cc82613365565b604082019050919050565b600060208201905081810360008301526133f0816133b4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061342d6020836126f1565b9150613438826133f7565b602082019050919050565b6000602082019050818103600083015261345c81613420565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061348a82613463565b613494818561346e565b93506134a4818560208601612702565b6134ad8161272c565b840191505092915050565b60006080820190506134cd60008301876127f1565b6134da60208301866127f1565b6134e76040830185612601565b81810360608301526134f9818461347f565b905095945050505050565b60008151905061351381612657565b92915050565b60006020828403121561352f5761352e612562565b5b600061353d84828501613504565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea2646970667358221220ac5aff23d50edabbd8f8e60d0175171e743fbcaad3445b8c3eee2fc74a19472764736f6c6343000813003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569686632336b65777a633777326e3678353675636132326c756e37783768746b78676d6c64756d69766b7466626b727276616c72342f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102255760003560e01c806370a0823111610123578063a22cb465116100ab578063cb2b1c5e1161006f578063cb2b1c5e1461079c578063d5abeb01146107c5578063e268e4d3146107f0578063e985e9c514610819578063f2fde38b1461085657610225565b8063a22cb465146106c6578063abfc4efa146106ef578063b88d4fde1461071a578063bedb86fb14610736578063c87b56dd1461075f57610225565b80638da5cb5b116100f25780638da5cb5b14610602578063940cd05b1461062d57806395d89b4114610656578063a0712d6814610681578063a0bcfc7f1461069d57610225565b806370a082311461055a578063715018a6146105975780638456cb59146105ae5780638ba4cc3c146105d957610225565b80633ccfd60b116101b15780634751333411610175578063475133341461047557806354214f69146104a05780635b28fd91146104cb5780636352211e146104f45780636f8b44b01461053157610225565b80633ccfd60b146103c55780633d6d652a146103dc57806342842e0e1461040557806344a0d68a14610421578063453c23101461044a57610225565b8063095ea7b3116101f8578063095ea7b31461030c57806313faede6146103285780631638fef01461035357806318160ddd1461037e57806323b872dd146103a957610225565b80630103c92b1461022a57806301ffc9a71461026757806306fdde03146102a4578063081812fc146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906125ca565b61087f565b60405161025e9190612610565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190612683565b610897565b60405161029b91906126cb565b60405180910390f35b3480156102b057600080fd5b506102b9610929565b6040516102c69190612776565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f191906127c4565b6109bb565b6040516103039190612800565b60405180910390f35b6103266004803603810190610321919061281b565b610a3a565b005b34801561033457600080fd5b5061033d610b7e565b60405161034a9190612610565b60405180910390f35b34801561035f57600080fd5b50610368610b84565b6040516103759190612776565b60405180910390f35b34801561038a57600080fd5b50610393610c12565b6040516103a09190612610565b60405180910390f35b6103c360048036038101906103be919061285b565b610c29565b005b3480156103d157600080fd5b506103da610f4b565b005b3480156103e857600080fd5b5061040360048036038101906103fe91906127c4565b610fd3565b005b61041f600480360381019061041a919061285b565b611029565b005b34801561042d57600080fd5b50610448600480360381019061044391906127c4565b611049565b005b34801561045657600080fd5b5061045f61105b565b60405161046c9190612610565b60405180910390f35b34801561048157600080fd5b5061048a611061565b6040516104979190612610565b60405180910390f35b3480156104ac57600080fd5b506104b5611067565b6040516104c291906126cb565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed91906127c4565b61107a565b005b34801561050057600080fd5b5061051b600480360381019061051691906127c4565b61108c565b6040516105289190612800565b60405180910390f35b34801561053d57600080fd5b50610558600480360381019061055391906127c4565b61109e565b005b34801561056657600080fd5b50610581600480360381019061057c91906125ca565b6110b0565b60405161058e9190612610565b60405180910390f35b3480156105a357600080fd5b506105ac611168565b005b3480156105ba57600080fd5b506105c361117c565b6040516105d091906126cb565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb919061281b565b61118f565b005b34801561060e57600080fd5b506106176111fc565b6040516106249190612800565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f91906128da565b611226565b005b34801561066257600080fd5b5061066b61124b565b6040516106789190612776565b60405180910390f35b61069b600480360381019061069691906127c4565b6112dd565b005b3480156106a957600080fd5b506106c460048036038101906106bf9190612a3c565b6116b9565b005b3480156106d257600080fd5b506106ed60048036038101906106e89190612a85565b6116d4565b005b3480156106fb57600080fd5b506107046117df565b6040516107119190612610565b60405180910390f35b610734600480360381019061072f9190612b66565b6117e5565b005b34801561074257600080fd5b5061075d600480360381019061075891906128da565b611858565b005b34801561076b57600080fd5b50610786600480360381019061078191906127c4565b61187d565b6040516107939190612776565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be9190612a3c565b6119d3565b005b3480156107d157600080fd5b506107da6119ee565b6040516107e79190612610565b60405180910390f35b3480156107fc57600080fd5b50610817600480360381019061081291906127c4565b6119f4565b005b34801561082557600080fd5b50610840600480360381019061083b9190612be9565b611a4a565b60405161084d91906126cb565b60405180910390f35b34801561086257600080fd5b5061087d600480360381019061087891906125ca565b611ade565b005b60126020528060005260406000206000915090505481565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f257506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109225750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461093890612c58565b80601f016020809104026020016040519081016040528092919081815260200182805461096490612c58565b80156109b15780601f10610986576101008083540402835291602001916109b1565b820191906000526020600020905b81548152906001019060200180831161099457829003601f168201915b5050505050905090565b60006109c682611b61565b6109fc576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a458261108c565b90508073ffffffffffffffffffffffffffffffffffffffff16610a66611bc0565b73ffffffffffffffffffffffffffffffffffffffff1614610ac957610a9281610a8d611bc0565b611a4a565b610ac8576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600c5481565b60118054610b9190612c58565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612c58565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b505050505081565b6000610c1c611bc8565b6001546000540303905090565b6000610c3482611bd1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c9b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610ca784611c9d565b91509150610cbd8187610cb8611bc0565b611cc4565b610d0957610cd286610ccd611bc0565b611a4a565b610d08576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d6f576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d7c8686866001611d08565b8015610d8757600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610e5585610e31888887611d0e565b7c020000000000000000000000000000000000000000000000000000000017611d36565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603610edb5760006001850190506000600460008381526020019081526020016000205403610ed9576000548114610ed8578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f438686866001611d61565b505050505050565b610f53611d67565b6000610f5d6111fc565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f8090612cba565b60006040518083038185875af1925050503d8060008114610fbd576040519150601f19603f3d011682016040523d82523d6000602084013e610fc2565b606091505b5050905080610fd057600080fd5b50565b610fdb611d67565b600e54811061101f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101690612d1b565b60405180910390fd5b80600d8190555050565b611044838383604051806020016040528060008152506117e5565b505050565b611051611d67565b80600c8190555050565b600e5481565b600b5481565b600f60009054906101000a900460ff1681565b611082611d67565b80600b8190555050565b600061109782611bd1565b9050919050565b6110a6611d67565b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611117576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611170611d67565b61117a6000611de5565b565b600f60019054906101000a900460ff1681565b611197611d67565b600a54816111a3611eab565b6111ad9190612d6a565b11156111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590612dea565b60405180910390fd5b6111f88282611ebe565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61122e611d67565b80600f60006101000a81548160ff02191690831515021790555050565b60606003805461125a90612c58565b80601f016020809104026020016040519081016040528092919081815260200182805461128690612c58565b80156112d35780601f106112a8576101008083540402835291602001916112d3565b820191906000526020600020905b8154815290600101906020018083116112b657829003601f168201915b5050505050905090565b600f60019054906101000a900460ff161561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490612e56565b60405180910390fd5b600d54601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106113ca5780600c546113839190612e76565b3410156113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90612f04565b60405180910390fd5b611538565b600b54816113d6610c12565b6113e09190612d6a565b116114e657601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d546114329190612f24565b8111156114e157601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d546114869190612f24565b816114919190612f24565b600c5461149e9190612e76565b3410156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790612f04565b60405180910390fd5b5b611537565b80600c546114f49190612e76565b341015611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d90612f04565b60405180910390fd5b5b5b600a5481611544611eab565b61154e9190612d6a565b111561158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690612dea565b60405180910390fd5b600e5481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115dd9190612d6a565b111561161e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161590612fa4565b60405180910390fd5b6116283382611ebe565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116739190612d6a565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6116c1611d67565b80601090816116d09190613170565b5050565b80600760006116e1611bc0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661178e611bc0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117d391906126cb565b60405180910390a35050565b600d5481565b6117f0848484610c29565b60008373ffffffffffffffffffffffffffffffffffffffff163b146118525761181b84848484611edc565b611851576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611860611d67565b80600f60016101000a81548160ff02191690831515021790555050565b606061188882611b61565b6118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be9061328e565b60405180910390fd5b60001515600f60009054906101000a900460ff1615150361197457601180546118ef90612c58565b80601f016020809104026020016040519081016040528092919081815260200182805461191b90612c58565b80156119685780601f1061193d57610100808354040283529160200191611968565b820191906000526020600020905b81548152906001019060200180831161194b57829003601f168201915b505050505090506119ce565b600061197e61202c565b511161199957604051806020016040528060008152506119cb565b6119a161202c565b6119aa836120be565b6040516020016119bb929190613336565b6040516020818303038152906040525b90505b919050565b6119db611d67565b80601190816119ea9190613170565b5050565b600a5481565b6119fc611d67565b600d548111611a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3790612d1b565b60405180910390fd5b80600e8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ae6611d67565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906133d7565b60405180910390fd5b611b5e81611de5565b50565b600081611b6c611bc8565b11158015611b7b575060005482105b8015611bb9575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b60006001905090565b60008082905080611be0611bc8565b11611c6657600054811015611c655760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603611c63575b60008103611c59576004600083600190039350838152602001908152602001600020549050611c2f565b8092505050611c98565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611d2586868461218c565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b611d6f612195565b73ffffffffffffffffffffffffffffffffffffffff16611d8d6111fc565b73ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda90613443565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611eb5611bc8565b60005403905090565b611ed882826040518060200160405280600081525061219d565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f02611bc0565b8786866040518563ffffffff1660e01b8152600401611f2494939291906134b8565b6020604051808303816000875af1925050508015611f6057506040513d601f19601f82011682018060405250810190611f5d9190613519565b60015b611fd9573d8060008114611f90576040519150601f19603f3d011682016040523d82523d6000602084013e611f95565b606091505b506000815103611fd1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606010805461203b90612c58565b80601f016020809104026020016040519081016040528092919081815260200182805461206790612c58565b80156120b45780601f10612089576101008083540402835291602001916120b4565b820191906000526020600020905b81548152906001019060200180831161209757829003601f168201915b5050505050905090565b6060600060016120cd8461223a565b01905060008167ffffffffffffffff8111156120ec576120eb612911565b5b6040519080825280601f01601f19166020018201604052801561211e5781602001600182028036833780820191505090505b509050600082602001820190505b600115612181578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161217557612174613546565b5b0494506000850361212c575b819350505050919050565b60009392505050565b600033905090565b6121a7838361238d565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461223557600080549050600083820390505b6121e76000868380600101945086611edc565b61221d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106121d457816000541461223257600080fd5b50505b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612298577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161228e5761228d613546565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106122d5576d04ee2d6d415b85acef810000000083816122cb576122ca613546565b5b0492506020810190505b662386f26fc10000831061230457662386f26fc1000083816122fa576122f9613546565b5b0492506010810190505b6305f5e100831061232d576305f5e100838161232357612322613546565b5b0492506008810190505b612710831061235257612710838161234857612347613546565b5b0492506004810190505b60648310612375576064838161236b5761236a613546565b5b0492506002810190505b600a8310612384576001810190505b80915050919050565b600080549050600082036123cd576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123da6000848385611d08565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612451836124426000866000611d0e565b61244b85612548565b17611d36565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b8181146124f257808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001810190506124b7565b506000820361252d576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506125436000848385611d61565b505050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125978261256c565b9050919050565b6125a78161258c565b81146125b257600080fd5b50565b6000813590506125c48161259e565b92915050565b6000602082840312156125e0576125df612562565b5b60006125ee848285016125b5565b91505092915050565b6000819050919050565b61260a816125f7565b82525050565b60006020820190506126256000830184612601565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126608161262b565b811461266b57600080fd5b50565b60008135905061267d81612657565b92915050565b60006020828403121561269957612698612562565b5b60006126a78482850161266e565b91505092915050565b60008115159050919050565b6126c5816126b0565b82525050565b60006020820190506126e060008301846126bc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612720578082015181840152602081019050612705565b60008484015250505050565b6000601f19601f8301169050919050565b6000612748826126e6565b61275281856126f1565b9350612762818560208601612702565b61276b8161272c565b840191505092915050565b60006020820190508181036000830152612790818461273d565b905092915050565b6127a1816125f7565b81146127ac57600080fd5b50565b6000813590506127be81612798565b92915050565b6000602082840312156127da576127d9612562565b5b60006127e8848285016127af565b91505092915050565b6127fa8161258c565b82525050565b600060208201905061281560008301846127f1565b92915050565b6000806040838503121561283257612831612562565b5b6000612840858286016125b5565b9250506020612851858286016127af565b9150509250929050565b60008060006060848603121561287457612873612562565b5b6000612882868287016125b5565b9350506020612893868287016125b5565b92505060406128a4868287016127af565b9150509250925092565b6128b7816126b0565b81146128c257600080fd5b50565b6000813590506128d4816128ae565b92915050565b6000602082840312156128f0576128ef612562565b5b60006128fe848285016128c5565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6129498261272c565b810181811067ffffffffffffffff8211171561296857612967612911565b5b80604052505050565b600061297b612558565b90506129878282612940565b919050565b600067ffffffffffffffff8211156129a7576129a6612911565b5b6129b08261272c565b9050602081019050919050565b82818337600083830152505050565b60006129df6129da8461298c565b612971565b9050828152602081018484840111156129fb576129fa61290c565b5b612a068482856129bd565b509392505050565b600082601f830112612a2357612a22612907565b5b8135612a338482602086016129cc565b91505092915050565b600060208284031215612a5257612a51612562565b5b600082013567ffffffffffffffff811115612a7057612a6f612567565b5b612a7c84828501612a0e565b91505092915050565b60008060408385031215612a9c57612a9b612562565b5b6000612aaa858286016125b5565b9250506020612abb858286016128c5565b9150509250929050565b600067ffffffffffffffff821115612ae057612adf612911565b5b612ae98261272c565b9050602081019050919050565b6000612b09612b0484612ac5565b612971565b905082815260208101848484011115612b2557612b2461290c565b5b612b308482856129bd565b509392505050565b600082601f830112612b4d57612b4c612907565b5b8135612b5d848260208601612af6565b91505092915050565b60008060008060808587031215612b8057612b7f612562565b5b6000612b8e878288016125b5565b9450506020612b9f878288016125b5565b9350506040612bb0878288016127af565b925050606085013567ffffffffffffffff811115612bd157612bd0612567565b5b612bdd87828801612b38565b91505092959194509250565b60008060408385031215612c0057612bff612562565b5b6000612c0e858286016125b5565b9250506020612c1f858286016125b5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c7057607f821691505b602082108103612c8357612c82612c29565b5b50919050565b600081905092915050565b50565b6000612ca4600083612c89565b9150612caf82612c94565b600082019050919050565b6000612cc582612c97565b9150819050919050565b7f4e6f7420706f737369626c650000000000000000000000000000000000000000600082015250565b6000612d05600c836126f1565b9150612d1082612ccf565b602082019050919050565b60006020820190508181036000830152612d3481612cf8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d75826125f7565b9150612d80836125f7565b9250828201905080821115612d9857612d97612d3b565b5b92915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b6000612dd46012836126f1565b9150612ddf82612d9e565b602082019050919050565b60006020820190508181036000830152612e0381612dc7565b9050919050565b7f53616c65206973206f6e20706175736500000000000000000000000000000000600082015250565b6000612e406010836126f1565b9150612e4b82612e0a565b602082019050919050565b60006020820190508181036000830152612e6f81612e33565b9050919050565b6000612e81826125f7565b9150612e8c836125f7565b9250828202612e9a816125f7565b91508282048414831517612eb157612eb0612d3b565b5b5092915050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b6000612eee6012836126f1565b9150612ef982612eb8565b602082019050919050565b60006020820190508181036000830152612f1d81612ee1565b9050919050565b6000612f2f826125f7565b9150612f3a836125f7565b9250828203905081811115612f5257612f51612d3b565b5b92915050565b7f45786365656473206d617820746f6b656e207065722077616c6c657400000000600082015250565b6000612f8e601c836126f1565b9150612f9982612f58565b602082019050919050565b60006020820190508181036000830152612fbd81612f81565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026130267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612fe9565b6130308683612fe9565b95508019841693508086168417925050509392505050565b6000819050919050565b600061306d613068613063846125f7565b613048565b6125f7565b9050919050565b6000819050919050565b61308783613052565b61309b61309382613074565b848454612ff6565b825550505050565b600090565b6130b06130a3565b6130bb81848461307e565b505050565b5b818110156130df576130d46000826130a8565b6001810190506130c1565b5050565b601f821115613124576130f581612fc4565b6130fe84612fd9565b8101602085101561310d578190505b61312161311985612fd9565b8301826130c0565b50505b505050565b600082821c905092915050565b600061314760001984600802613129565b1980831691505092915050565b60006131608383613136565b9150826002028217905092915050565b613179826126e6565b67ffffffffffffffff81111561319257613191612911565b5b61319c8254612c58565b6131a78282856130e3565b600060209050601f8311600181146131da57600084156131c8578287015190505b6131d28582613154565b86555061323a565b601f1984166131e886612fc4565b60005b82811015613210578489015182556001820191506020850194506020810190506131eb565b8683101561322d5784890151613229601f891682613136565b8355505b6001600288020188555050505b505050505050565b7f546f6b656e20646f65736e277420657869737400000000000000000000000000600082015250565b60006132786013836126f1565b915061328382613242565b602082019050919050565b600060208201905081810360008301526132a78161326b565b9050919050565b600081905092915050565b60006132c4826126e6565b6132ce81856132ae565b93506132de818560208601612702565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006133206005836132ae565b915061332b826132ea565b600582019050919050565b600061334282856132b9565b915061334e82846132b9565b915061335982613313565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133c16026836126f1565b91506133cc82613365565b604082019050919050565b600060208201905081810360008301526133f0816133b4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061342d6020836126f1565b9150613438826133f7565b602082019050919050565b6000602082019050818103600083015261345c81613420565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061348a82613463565b613494818561346e565b93506134a4818560208601612702565b6134ad8161272c565b840191505092915050565b60006080820190506134cd60008301876127f1565b6134da60208301866127f1565b6134e76040830185612601565b81810360608301526134f9818461347f565b905095945050505050565b60008151905061351381612657565b92915050565b60006020828403121561352f5761352e612562565b5b600061353d84828501613504565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea2646970667358221220ac5aff23d50edabbd8f8e60d0175171e743fbcaad3445b8c3eee2fc74a19472764736f6c63430008130033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569686632336b65777a633777326e3678353675636132326c756e37783768746b78676d6c64756d69766b7466626b727276616c72342f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _baseMetadataUrl (string): ipfs://bafybeihf23kewzc7w2n6x56uca22lun7x7htkxgmldumivktfbkrrvalr4/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [2] : 697066733a2f2f62616679626569686632336b65777a633777326e3678353675
Arg [3] : 636132326c756e37783768746b78676d6c64756d69766b7466626b727276616c
Arg [4] : 72342f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38614:3582:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39067:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19718:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20080:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23960:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23544:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38789:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39014:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17803:323;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26050:2337;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42019:174;;;;;;;;;;;;;:::i;:::-;;41679:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28395:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41519:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38872:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38747:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38913:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41002:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20728:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40897:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18548:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1471:103;;;;;;;;;;;;;:::i;:::-;;38946:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40360:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1236:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40710:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20188:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39459:893;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39359:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24186:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38830:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28596:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41600:71;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41120:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40570:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38709:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41852:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24428:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1582:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39067:46;;;;;;;;;;;;;;;;;:::o;19718:354::-;19803:4;19857:10;19842:25;;:11;:25;;;;:102;;;;19934:10;19919:25;;:11;:25;;;;19842:102;:179;;;;20011:10;19996:25;;:11;:25;;;;19842:179;19822:199;;19718:354;;;:::o;20080:100::-;20134:13;20167:5;20160:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20080:100;:::o;23960:218::-;24036:7;24061:16;24069:7;24061;:16::i;:::-;24056:64;;24086:34;;;;;;;;;;;;;;24056:64;24140:15;:24;24156:7;24140:24;;;;;;;;;;;:30;;;;;;;;;;;;24133:37;;23960:218;;;:::o;23544:408::-;23633:13;23649:16;23657:7;23649;:16::i;:::-;23633:32;;23705:5;23682:28;;:19;:17;:19::i;:::-;:28;;;23678:175;;23730:44;23747:5;23754:19;:17;:19::i;:::-;23730:16;:44::i;:::-;23725:128;;23802:35;;;;;;;;;;;;;;23725:128;23678:175;23898:2;23865:15;:24;23881:7;23865:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;23936:7;23932:2;23916:28;;23925:5;23916:28;;;;;;;;;;;;23622:330;23544:408;;:::o;38789:34::-;;;;:::o;39014:44::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17803:323::-;17864:7;18092:15;:13;:15::i;:::-;18077:12;;18061:13;;:28;:46;18054:53;;17803:323;:::o;26050:2337::-;26192:27;26222;26241:7;26222:18;:27::i;:::-;26192:57;;26307:4;26266:45;;26282:19;26266:45;;;26262:86;;26320:28;;;;;;;;;;;;;;26262:86;26362:27;26391:23;26418:35;26445:7;26418:26;:35::i;:::-;26361:92;;;;26553:68;26578:15;26595:4;26601:19;:17;:19::i;:::-;26553:24;:68::i;:::-;26548:180;;26641:43;26658:4;26664:19;:17;:19::i;:::-;26641:16;:43::i;:::-;26636:92;;26693:35;;;;;;;;;;;;;;26636:92;26548:180;26759:1;26745:16;;:2;:16;;;26741:52;;26770:23;;;;;;;;;;;;;;26741:52;26806:43;26828:4;26834:2;26838:7;26847:1;26806:21;:43::i;:::-;26942:15;26939:160;;;27082:1;27061:19;27054:30;26939:160;27219:18;:24;27238:4;27219:24;;;;;;;;;;;;;;;;27217:26;;;;;;;;;;;;27288:18;:22;27307:2;27288:22;;;;;;;;;;;;;;;;27286:24;;;;;;;;;;;27382:146;27419:2;27468:45;27483:4;27489:2;27493:19;27468:14;:45::i;:::-;16196:8;27440:73;27382:18;:146::i;:::-;27353:17;:26;27371:7;27353:26;;;;;;;;;;;:175;;;;27699:1;16196:8;27648:19;:47;:52;27644:627;;27721:19;27753:1;27743:7;:11;27721:33;;27910:1;27876:17;:30;27894:11;27876:30;;;;;;;;;;;;:35;27872:384;;28014:13;;27999:11;:28;27995:242;;28194:19;28161:17;:30;28179:11;28161:30;;;;;;;;;;;:52;;;;27995:242;27872:384;27702:569;27644:627;28318:7;28314:2;28299:27;;28308:4;28299:27;;;;;;;;;;;;28337:42;28358:4;28364:2;28368:7;28377:1;28337:20;:42::i;:::-;26181:2206;;;26050:2337;;;:::o;42019:174::-;1195:13;:11;:13::i;:::-;42064:12:::1;42090:7;:5;:7::i;:::-;42082:21;;42125;42082:79;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42063:98;;;42180:7;42172:16;;;::::0;::::1;;42058:135;42019:174::o:0;41679:165::-;1195:13;:11;:13::i;:::-;41770:12:::1;;41760:7;:22;41752:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41829:7;41810:16;:26;;;;41679:165:::0;:::o;28395:193::-;28541:39;28558:4;28564:2;28568:7;28541:39;;;;;;;;;;;;:16;:39::i;:::-;28395:193;;;:::o;41519:76::-;1195:13;:11;:13::i;:::-;41582:8:::1;41575:4;:15;;;;41519:76:::0;:::o;38872:32::-;;;;:::o;38747:35::-;;;;:::o;38913:29::-;;;;;;;;;;;;;:::o;41002:113::-;1195:13;:11;:13::i;:::-;41094:16:::1;41078:13;:32;;;;41002:113:::0;:::o;20728:152::-;20800:7;20843:27;20862:7;20843:18;:27::i;:::-;20820:52;;20728:152;;;:::o;40897:97::-;1195:13;:11;:13::i;:::-;40977:12:::1;40965:9;:24;;;;40897:97:::0;:::o;18548:233::-;18620:7;18661:1;18644:19;;:5;:19;;;18640:60;;18672:28;;;;;;;;;;;;;;18640:60;15140:13;18718:18;:25;18737:5;18718:25;;;;;;;;;;;;;;;;:55;18711:62;;18548:233;;;:::o;1471:103::-;1195:13;:11;:13::i;:::-;1536:30:::1;1563:1;1536:18;:30::i;:::-;1471:103::o:0;38946:25::-;;;;;;;;;;;;;:::o;40360:202::-;1195:13;:11;:13::i;:::-;40477:9:::1;;40463:10;40446:14;:12;:14::i;:::-;:27;;;;:::i;:::-;:40;;40433:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;40522:25;40532:2;40536:10;40522:9;:25::i;:::-;40360:202:::0;;:::o;1236:87::-;1282:7;1309:6;;;;;;;;;;;1302:13;;1236:87;:::o;40710:80::-;1195:13;:11;:13::i;:::-;40779:6:::1;40766:10;;:19;;;;;;;;;;;;;;;;;;40710:80:::0;:::o;20188:104::-;20244:13;20277:7;20270:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20188:104;:::o;39459:893::-;39524:5;;;;;;;;;;;39523:6;39515:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;39591:16;;39564:11;:23;39576:10;39564:23;;;;;;;;;;;;;;;;:43;39561:485;;39637:10;39630:4;;:17;;;;:::i;:::-;39617:9;:30;;39609:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39561:485;;;39733:13;;39719:10;39703:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:43;39700:334;;39802:11;:23;39814:10;39802:23;;;;;;;;;;;;;;;;39783:16;;:42;;;;:::i;:::-;39769:10;:57;39766:172;;;39890:11;:23;39902:10;39890:23;;;;;;;;;;;;;;;;39871:16;;:42;;;;:::i;:::-;39857:10;:57;;;;:::i;:::-;39849:4;;:66;;;;:::i;:::-;39836:9;:79;;39828:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;39766:172;39700:334;;;40001:10;39994:4;;:17;;;;:::i;:::-;39981:9;:30;;39973:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39700:334;39561:485;40095:9;;40081:10;40064:14;:12;:14::i;:::-;:27;;;;:::i;:::-;:40;;40056:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;40185:12;;40171:10;40145:11;:23;40157:10;40145:23;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:52;;40137:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;40241:33;40251:10;40263;40241:9;:33::i;:::-;40337:10;40311:11;:23;40323:10;40311:23;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;40285:11;:23;40297:10;40285:23;;;;;;;;;;;;;;;:62;;;;39459:893;:::o;39359:92::-;1195:13;:11;:13::i;:::-;39438:8:::1;39428:7;:18;;;;;;:::i;:::-;;39359:92:::0;:::o;24186:234::-;24333:8;24281:18;:39;24300:19;:17;:19::i;:::-;24281:39;;;;;;;;;;;;;;;:49;24321:8;24281:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;24393:8;24357:55;;24372:19;:17;:19::i;:::-;24357:55;;;24403:8;24357:55;;;;;;:::i;:::-;;;;;;;;24186:234;;:::o;38830:35::-;;;;:::o;28596:407::-;28771:31;28784:4;28790:2;28794:7;28771:12;:31::i;:::-;28835:1;28817:2;:14;;;:19;28813:183;;28856:56;28887:4;28893:2;28897:7;28906:5;28856:30;:56::i;:::-;28851:145;;28940:40;;;;;;;;;;;;;;28851:145;28813:183;28596:407;;;;:::o;41600:71::-;1195:13;:11;:13::i;:::-;41660:6:::1;41652:5;;:14;;;;;;;;;;;;;;;;;;41600:71:::0;:::o;41120:394::-;41197:13;41233:16;41241:7;41233;:16::i;:::-;41225:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41301:5;41287:19;;:10;;;;;;;;;;;:19;;;41284:225;;41330:17;41323:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41284:225;41408:1;41387:10;:8;:10::i;:::-;41381:24;:28;:128;;;;;;;;;;;;;;;;;41450:10;:8;:10::i;:::-;41462:18;:7;:16;:18::i;:::-;41433:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41381:128;41374:135;;41120:394;;;;:::o;40570:132::-;1195:13;:11;:13::i;:::-;40679:18:::1;40659:17;:38;;;;;;:::i;:::-;;40570:132:::0;:::o;38709:31::-;;;;:::o;41852:162::-;1195:13;:11;:13::i;:::-;41940:16:::1;;41930:7;:26;41922:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;41999:7;41984:12;:22;;;;41852:162:::0;:::o;24428:164::-;24525:4;24549:18;:25;24568:5;24549:25;;;;;;;;;;;;;;;:35;24575:8;24549:35;;;;;;;;;;;;;;;;;;;;;;;;;24542:42;;24428:164;;;;:::o;1582:201::-;1195:13;:11;:13::i;:::-;1691:1:::1;1671:22;;:8;:22;;::::0;1663:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1747:28;1766:8;1747:18;:28::i;:::-;1582:201:::0;:::o;24600:282::-;24665:4;24721:7;24702:15;:13;:15::i;:::-;:26;;:66;;;;;24755:13;;24745:7;:23;24702:66;:153;;;;;24854:1;15916:8;24806:17;:26;24824:7;24806:26;;;;;;;;;;;;:44;:49;24702:153;24682:173;;24600:282;;;:::o;37151:105::-;37211:7;37238:10;37231:17;;37151:105;:::o;40795:97::-;40860:7;40884:1;40877:8;;40795:97;:::o;21702:670::-;21769:7;21789:12;21804:7;21789:22;;21872:4;21853:15;:13;:15::i;:::-;:23;21849:456;;21906:13;;21899:4;:20;21895:410;;;21944:14;21961:17;:23;21979:4;21961:23;;;;;;;;;;;;21944:40;;22078:1;15916:8;22050:6;:24;:29;22046:240;;22110:113;22127:1;22117:6;:11;22110:113;;22170:17;:25;22188:6;;;;;;;22170:25;;;;;;;;;;;;22161:34;;22110:113;;;22256:6;22249:13;;;;;;22046:240;21921:384;21895:410;21849:456;22333:31;;;;;;;;;;;;;;21702:670;;;;:::o;25557:485::-;25659:27;25688:23;25729:38;25770:15;:24;25786:7;25770:24;;;;;;;;;;;25729:65;;25947:18;25924:41;;26004:19;25998:26;25979:45;;25909:126;25557:485;;;:::o;24890:659::-;25039:11;25204:16;25197:5;25193:28;25184:37;;25364:16;25353:9;25349:32;25336:45;;25514:15;25503:9;25500:30;25492:5;25481:9;25478:20;25475:56;25465:66;;24890:659;;;;;:::o;29011:159::-;;;;;:::o;36832:311::-;36967:7;36987:16;16320:3;37013:19;:41;;36987:68;;16320:3;37081:31;37092:4;37098:2;37102:9;37081:10;:31::i;:::-;37073:40;;:62;;37066:69;;;36832:311;;;;;:::o;22754:450::-;22834:14;23002:16;22995:5;22991:28;22982:37;;23179:5;23165:11;23140:23;23136:41;23133:52;23126:5;23123:63;23113:73;;22754:450;;;;:::o;29181:158::-;;;;;:::o;1331:132::-;1406:12;:10;:12::i;:::-;1395:23;;:7;:5;:7::i;:::-;:23;;;1387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1331:132::o;1791:191::-;1865:16;1884:6;;;;;;;;;;;1865:25;;1910:8;1901:6;;:17;;;;;;;;;;;;;;;;;;1965:8;1934:40;;1955:8;1934:40;;;;;;;;;;;;1854:128;1791:191;:::o;18134:296::-;18189:7;18396:15;:13;:15::i;:::-;18380:13;;:31;18373:38;;18134:296;:::o;33604:112::-;33681:27;33691:2;33695:8;33681:27;;;;;;;;;;;;:9;:27::i;:::-;33604:112;;:::o;29347:716::-;29510:4;29556:2;29531:45;;;29577:19;:17;:19::i;:::-;29598:4;29604:7;29613:5;29531:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29527:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29831:1;29814:6;:13;:18;29810:235;;29860:40;;;;;;;;;;;;;;29810:235;30003:6;29997:13;29988:6;29984:2;29980:15;29973:38;29527:529;29700:54;;;29690:64;;;:6;:64;;;;29683:71;;;29347:716;;;;;;:::o;39260:91::-;39312:13;39339:7;39332:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39260:91;:::o;10231:716::-;10287:13;10338:14;10375:1;10355:17;10366:5;10355:10;:17::i;:::-;:21;10338:38;;10391:20;10425:6;10414:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10391:41;;10447:11;10576:6;10572:2;10568:15;10560:6;10556:28;10549:35;;10613:288;10620:4;10613:288;;;10645:5;;;;;;;;10787:8;10782:2;10775:5;10771:14;10766:30;10761:3;10753:44;10843:2;10834:11;;;;;;:::i;:::-;;;;;10877:1;10868:5;:10;10613:288;10864:21;10613:288;10922:6;10915:13;;;;;10231:716;;;:::o;36677:147::-;36814:6;36677:147;;;;;:::o;682:98::-;735:7;762:10;755:17;;682:98;:::o;32907:689::-;33038:19;33044:2;33048:8;33038:5;:19::i;:::-;33117:1;33099:2;:14;;;:19;33095:483;;33139:11;33153:13;;33139:27;;33185:13;33207:8;33201:3;:14;33185:30;;33234:233;33265:62;33304:1;33308:2;33312:7;;;;;;33321:5;33265:30;:62::i;:::-;33260:167;;33363:40;;;;;;;;;;;;;;33260:167;33462:3;33454:5;:11;33234:233;;33549:3;33532:13;;:20;33528:34;;33554:8;;;33528:34;33120:458;;33095:483;32907:689;;;:::o;7819:922::-;7872:7;7892:14;7909:1;7892:18;;7959:6;7950:5;:15;7946:102;;7995:6;7986:15;;;;;;:::i;:::-;;;;;8030:2;8020:12;;;;7946:102;8075:6;8066:5;:15;8062:102;;8111:6;8102:15;;;;;;:::i;:::-;;;;;8146:2;8136:12;;;;8062:102;8191:6;8182:5;:15;8178:102;;8227:6;8218:15;;;;;;:::i;:::-;;;;;8262:2;8252:12;;;;8178:102;8307:5;8298;:14;8294:99;;8342:5;8333:14;;;;;;:::i;:::-;;;;;8376:1;8366:11;;;;8294:99;8420:5;8411;:14;8407:99;;8455:5;8446:14;;;;;;:::i;:::-;;;;;8489:1;8479:11;;;;8407:99;8533:5;8524;:14;8520:99;;8568:5;8559:14;;;;;;:::i;:::-;;;;;8602:1;8592:11;;;;8520:99;8646:5;8637;:14;8633:66;;8682:1;8672:11;;;;8633:66;8727:6;8720:13;;;7819:922;;;:::o;30071:1770::-;30144:20;30167:13;;30144:36;;30207:1;30195:8;:13;30191:44;;30217:18;;;;;;;;;;;;;;30191:44;30248:61;30278:1;30282:2;30286:12;30300:8;30248:21;:61::i;:::-;30418:1;15278:2;30388:1;:26;;30387:32;30375:8;:45;30349:18;:22;30368:2;30349:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;30471:139;30508:2;30562:33;30585:1;30589:2;30593:1;30562:14;:33::i;:::-;30529:30;30550:8;30529:20;:30::i;:::-;:66;30471:18;:139::i;:::-;30437:17;:31;30455:12;30437:31;;;;;;;;;;;:173;;;;30627:16;30658:11;30687:8;30672:12;:23;30658:37;;30858:16;30854:2;30850:25;30838:37;;31230:12;31190:8;31149:1;31087:25;31028:1;30967;30940:335;31355:1;31341:12;31337:20;31295:346;31396:3;31387:7;31384:16;31295:346;;31614:7;31604:8;31601:1;31574:25;31571:1;31568;31563:59;31449:1;31440:7;31436:15;31425:26;;31295:346;;;31299:77;31686:1;31674:8;:13;31670:45;;31696:19;;;;;;;;;;;;;;31670:45;31748:3;31732:13;:19;;;;30322:1441;;31773:60;31802:1;31806:2;31810:12;31824:8;31773:20;:60::i;:::-;30133:1708;30071:1770;;:::o;23212:324::-;23282:14;23515:1;23505:8;23502:15;23476:24;23472:46;23462:56;;23212:324;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:149::-;1647:7;1687:66;1680:5;1676:78;1665:89;;1611:149;;;:::o;1766:120::-;1838:23;1855:5;1838:23;:::i;:::-;1831:5;1828:34;1818:62;;1876:1;1873;1866:12;1818:62;1766:120;:::o;1892:137::-;1937:5;1975:6;1962:20;1953:29;;1991:32;2017:5;1991:32;:::i;:::-;1892:137;;;;:::o;2035:327::-;2093:6;2142:2;2130:9;2121:7;2117:23;2113:32;2110:119;;;2148:79;;:::i;:::-;2110:119;2268:1;2293:52;2337:7;2328:6;2317:9;2313:22;2293:52;:::i;:::-;2283:62;;2239:116;2035:327;;;;:::o;2368:90::-;2402:7;2445:5;2438:13;2431:21;2420:32;;2368:90;;;:::o;2464:109::-;2545:21;2560:5;2545:21;:::i;:::-;2540:3;2533:34;2464:109;;:::o;2579:210::-;2666:4;2704:2;2693:9;2689:18;2681:26;;2717:65;2779:1;2768:9;2764:17;2755:6;2717:65;:::i;:::-;2579:210;;;;:::o;2795:99::-;2847:6;2881:5;2875:12;2865:22;;2795:99;;;:::o;2900:169::-;2984:11;3018:6;3013:3;3006:19;3058:4;3053:3;3049:14;3034:29;;2900:169;;;;:::o;3075:246::-;3156:1;3166:113;3180:6;3177:1;3174:13;3166:113;;;3265:1;3260:3;3256:11;3250:18;3246:1;3241:3;3237:11;3230:39;3202:2;3199:1;3195:10;3190:15;;3166:113;;;3313:1;3304:6;3299:3;3295:16;3288:27;3137:184;3075:246;;;:::o;3327:102::-;3368:6;3419:2;3415:7;3410:2;3403:5;3399:14;3395:28;3385:38;;3327:102;;;:::o;3435:377::-;3523:3;3551:39;3584:5;3551:39;:::i;:::-;3606:71;3670:6;3665:3;3606:71;:::i;:::-;3599:78;;3686:65;3744:6;3739:3;3732:4;3725:5;3721:16;3686:65;:::i;:::-;3776:29;3798:6;3776:29;:::i;:::-;3771:3;3767:39;3760:46;;3527:285;3435:377;;;;:::o;3818:313::-;3931:4;3969:2;3958:9;3954:18;3946:26;;4018:9;4012:4;4008:20;4004:1;3993:9;3989:17;3982:47;4046:78;4119:4;4110:6;4046:78;:::i;:::-;4038:86;;3818:313;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:329::-;4469:6;4518:2;4506:9;4497:7;4493:23;4489:32;4486:119;;;4524:79;;:::i;:::-;4486:119;4644:1;4669:53;4714:7;4705:6;4694:9;4690:22;4669:53;:::i;:::-;4659:63;;4615:117;4410:329;;;;:::o;4745:118::-;4832:24;4850:5;4832:24;:::i;:::-;4827:3;4820:37;4745:118;;:::o;4869:222::-;4962:4;5000:2;4989:9;4985:18;4977:26;;5013:71;5081:1;5070:9;5066:17;5057:6;5013:71;:::i;:::-;4869:222;;;;:::o;5097:474::-;5165:6;5173;5222:2;5210:9;5201:7;5197:23;5193:32;5190:119;;;5228:79;;:::i;:::-;5190:119;5348:1;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5319:117;5475:2;5501:53;5546:7;5537:6;5526:9;5522:22;5501:53;:::i;:::-;5491:63;;5446:118;5097:474;;;;;:::o;5577:619::-;5654:6;5662;5670;5719:2;5707:9;5698:7;5694:23;5690:32;5687:119;;;5725:79;;:::i;:::-;5687:119;5845:1;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5816:117;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;6100:2;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6071:118;5577:619;;;;;:::o;6202:116::-;6272:21;6287:5;6272:21;:::i;:::-;6265:5;6262:32;6252:60;;6308:1;6305;6298:12;6252:60;6202:116;:::o;6324:133::-;6367:5;6405:6;6392:20;6383:29;;6421:30;6445:5;6421:30;:::i;:::-;6324:133;;;;:::o;6463:323::-;6519:6;6568:2;6556:9;6547:7;6543:23;6539:32;6536:119;;;6574:79;;:::i;:::-;6536:119;6694:1;6719:50;6761:7;6752:6;6741:9;6737:22;6719:50;:::i;:::-;6709:60;;6665:114;6463:323;;;;:::o;6792:117::-;6901:1;6898;6891:12;6915:117;7024:1;7021;7014:12;7038:180;7086:77;7083:1;7076:88;7183:4;7180:1;7173:15;7207:4;7204:1;7197:15;7224:281;7307:27;7329:4;7307:27;:::i;:::-;7299:6;7295:40;7437:6;7425:10;7422:22;7401:18;7389:10;7386:34;7383:62;7380:88;;;7448:18;;:::i;:::-;7380:88;7488:10;7484:2;7477:22;7267:238;7224:281;;:::o;7511:129::-;7545:6;7572:20;;:::i;:::-;7562:30;;7601:33;7629:4;7621:6;7601:33;:::i;:::-;7511:129;;;:::o;7646:308::-;7708:4;7798:18;7790:6;7787:30;7784:56;;;7820:18;;:::i;:::-;7784:56;7858:29;7880:6;7858:29;:::i;:::-;7850:37;;7942:4;7936;7932:15;7924:23;;7646:308;;;:::o;7960:146::-;8057:6;8052:3;8047;8034:30;8098:1;8089:6;8084:3;8080:16;8073:27;7960:146;;;:::o;8112:425::-;8190:5;8215:66;8231:49;8273:6;8231:49;:::i;:::-;8215:66;:::i;:::-;8206:75;;8304:6;8297:5;8290:21;8342:4;8335:5;8331:16;8380:3;8371:6;8366:3;8362:16;8359:25;8356:112;;;8387:79;;:::i;:::-;8356:112;8477:54;8524:6;8519:3;8514;8477:54;:::i;:::-;8196:341;8112:425;;;;;:::o;8557:340::-;8613:5;8662:3;8655:4;8647:6;8643:17;8639:27;8629:122;;8670:79;;:::i;:::-;8629:122;8787:6;8774:20;8812:79;8887:3;8879:6;8872:4;8864:6;8860:17;8812:79;:::i;:::-;8803:88;;8619:278;8557:340;;;;:::o;8903:509::-;8972:6;9021:2;9009:9;9000:7;8996:23;8992:32;8989:119;;;9027:79;;:::i;:::-;8989:119;9175:1;9164:9;9160:17;9147:31;9205:18;9197:6;9194:30;9191:117;;;9227:79;;:::i;:::-;9191:117;9332:63;9387:7;9378:6;9367:9;9363:22;9332:63;:::i;:::-;9322:73;;9118:287;8903:509;;;;:::o;9418:468::-;9483:6;9491;9540:2;9528:9;9519:7;9515:23;9511:32;9508:119;;;9546:79;;:::i;:::-;9508:119;9666:1;9691:53;9736:7;9727:6;9716:9;9712:22;9691:53;:::i;:::-;9681:63;;9637:117;9793:2;9819:50;9861:7;9852:6;9841:9;9837:22;9819:50;:::i;:::-;9809:60;;9764:115;9418:468;;;;;:::o;9892:307::-;9953:4;10043:18;10035:6;10032:30;10029:56;;;10065:18;;:::i;:::-;10029:56;10103:29;10125:6;10103:29;:::i;:::-;10095:37;;10187:4;10181;10177:15;10169:23;;9892:307;;;:::o;10205:423::-;10282:5;10307:65;10323:48;10364:6;10323:48;:::i;:::-;10307:65;:::i;:::-;10298:74;;10395:6;10388:5;10381:21;10433:4;10426:5;10422:16;10471:3;10462:6;10457:3;10453:16;10450:25;10447:112;;;10478:79;;:::i;:::-;10447:112;10568:54;10615:6;10610:3;10605;10568:54;:::i;:::-;10288:340;10205:423;;;;;:::o;10647:338::-;10702:5;10751:3;10744:4;10736:6;10732:17;10728:27;10718:122;;10759:79;;:::i;:::-;10718:122;10876:6;10863:20;10901:78;10975:3;10967:6;10960:4;10952:6;10948:17;10901:78;:::i;:::-;10892:87;;10708:277;10647:338;;;;:::o;10991:943::-;11086:6;11094;11102;11110;11159:3;11147:9;11138:7;11134:23;11130:33;11127:120;;;11166:79;;:::i;:::-;11127:120;11286:1;11311:53;11356:7;11347:6;11336:9;11332:22;11311:53;:::i;:::-;11301:63;;11257:117;11413:2;11439:53;11484:7;11475:6;11464:9;11460:22;11439:53;:::i;:::-;11429:63;;11384:118;11541:2;11567:53;11612:7;11603:6;11592:9;11588:22;11567:53;:::i;:::-;11557:63;;11512:118;11697:2;11686:9;11682:18;11669:32;11728:18;11720:6;11717:30;11714:117;;;11750:79;;:::i;:::-;11714:117;11855:62;11909:7;11900:6;11889:9;11885:22;11855:62;:::i;:::-;11845:72;;11640:287;10991:943;;;;;;;:::o;11940:474::-;12008:6;12016;12065:2;12053:9;12044:7;12040:23;12036:32;12033:119;;;12071:79;;:::i;:::-;12033:119;12191:1;12216:53;12261:7;12252:6;12241:9;12237:22;12216:53;:::i;:::-;12206:63;;12162:117;12318:2;12344:53;12389:7;12380:6;12369:9;12365:22;12344:53;:::i;:::-;12334:63;;12289:118;11940:474;;;;;:::o;12420:180::-;12468:77;12465:1;12458:88;12565:4;12562:1;12555:15;12589:4;12586:1;12579:15;12606:320;12650:6;12687:1;12681:4;12677:12;12667:22;;12734:1;12728:4;12724:12;12755:18;12745:81;;12811:4;12803:6;12799:17;12789:27;;12745:81;12873:2;12865:6;12862:14;12842:18;12839:38;12836:84;;12892:18;;:::i;:::-;12836:84;12657:269;12606:320;;;:::o;12932:147::-;13033:11;13070:3;13055:18;;12932:147;;;;:::o;13085:114::-;;:::o;13205:398::-;13364:3;13385:83;13466:1;13461:3;13385:83;:::i;:::-;13378:90;;13477:93;13566:3;13477:93;:::i;:::-;13595:1;13590:3;13586:11;13579:18;;13205:398;;;:::o;13609:379::-;13793:3;13815:147;13958:3;13815:147;:::i;:::-;13808:154;;13979:3;13972:10;;13609:379;;;:::o;13994:162::-;14134:14;14130:1;14122:6;14118:14;14111:38;13994:162;:::o;14162:366::-;14304:3;14325:67;14389:2;14384:3;14325:67;:::i;:::-;14318:74;;14401:93;14490:3;14401:93;:::i;:::-;14519:2;14514:3;14510:12;14503:19;;14162:366;;;:::o;14534:419::-;14700:4;14738:2;14727:9;14723:18;14715:26;;14787:9;14781:4;14777:20;14773:1;14762:9;14758:17;14751:47;14815:131;14941:4;14815:131;:::i;:::-;14807:139;;14534:419;;;:::o;14959:180::-;15007:77;15004:1;14997:88;15104:4;15101:1;15094:15;15128:4;15125:1;15118:15;15145:191;15185:3;15204:20;15222:1;15204:20;:::i;:::-;15199:25;;15238:20;15256:1;15238:20;:::i;:::-;15233:25;;15281:1;15278;15274:9;15267:16;;15302:3;15299:1;15296:10;15293:36;;;15309:18;;:::i;:::-;15293:36;15145:191;;;;:::o;15342:168::-;15482:20;15478:1;15470:6;15466:14;15459:44;15342:168;:::o;15516:366::-;15658:3;15679:67;15743:2;15738:3;15679:67;:::i;:::-;15672:74;;15755:93;15844:3;15755:93;:::i;:::-;15873:2;15868:3;15864:12;15857:19;;15516:366;;;:::o;15888:419::-;16054:4;16092:2;16081:9;16077:18;16069:26;;16141:9;16135:4;16131:20;16127:1;16116:9;16112:17;16105:47;16169:131;16295:4;16169:131;:::i;:::-;16161:139;;15888:419;;;:::o;16313:166::-;16453:18;16449:1;16441:6;16437:14;16430:42;16313:166;:::o;16485:366::-;16627:3;16648:67;16712:2;16707:3;16648:67;:::i;:::-;16641:74;;16724:93;16813:3;16724:93;:::i;:::-;16842:2;16837:3;16833:12;16826:19;;16485:366;;;:::o;16857:419::-;17023:4;17061:2;17050:9;17046:18;17038:26;;17110:9;17104:4;17100:20;17096:1;17085:9;17081:17;17074:47;17138:131;17264:4;17138:131;:::i;:::-;17130:139;;16857:419;;;:::o;17282:410::-;17322:7;17345:20;17363:1;17345:20;:::i;:::-;17340:25;;17379:20;17397:1;17379:20;:::i;:::-;17374:25;;17434:1;17431;17427:9;17456:30;17474:11;17456:30;:::i;:::-;17445:41;;17635:1;17626:7;17622:15;17619:1;17616:22;17596:1;17589:9;17569:83;17546:139;;17665:18;;:::i;:::-;17546:139;17330:362;17282:410;;;;:::o;17698:168::-;17838:20;17834:1;17826:6;17822:14;17815:44;17698:168;:::o;17872:366::-;18014:3;18035:67;18099:2;18094:3;18035:67;:::i;:::-;18028:74;;18111:93;18200:3;18111:93;:::i;:::-;18229:2;18224:3;18220:12;18213:19;;17872:366;;;:::o;18244:419::-;18410:4;18448:2;18437:9;18433:18;18425:26;;18497:9;18491:4;18487:20;18483:1;18472:9;18468:17;18461:47;18525:131;18651:4;18525:131;:::i;:::-;18517:139;;18244:419;;;:::o;18669:194::-;18709:4;18729:20;18747:1;18729:20;:::i;:::-;18724:25;;18763:20;18781:1;18763:20;:::i;:::-;18758:25;;18807:1;18804;18800:9;18792:17;;18831:1;18825:4;18822:11;18819:37;;;18836:18;;:::i;:::-;18819:37;18669:194;;;;:::o;18869:178::-;19009:30;19005:1;18997:6;18993:14;18986:54;18869:178;:::o;19053:366::-;19195:3;19216:67;19280:2;19275:3;19216:67;:::i;:::-;19209:74;;19292:93;19381:3;19292:93;:::i;:::-;19410:2;19405:3;19401:12;19394:19;;19053:366;;;:::o;19425:419::-;19591:4;19629:2;19618:9;19614:18;19606:26;;19678:9;19672:4;19668:20;19664:1;19653:9;19649:17;19642:47;19706:131;19832:4;19706:131;:::i;:::-;19698:139;;19425:419;;;:::o;19850:141::-;19899:4;19922:3;19914:11;;19945:3;19942:1;19935:14;19979:4;19976:1;19966:18;19958:26;;19850:141;;;:::o;19997:93::-;20034:6;20081:2;20076;20069:5;20065:14;20061:23;20051:33;;19997:93;;;:::o;20096:107::-;20140:8;20190:5;20184:4;20180:16;20159:37;;20096:107;;;;:::o;20209:393::-;20278:6;20328:1;20316:10;20312:18;20351:97;20381:66;20370:9;20351:97;:::i;:::-;20469:39;20499:8;20488:9;20469:39;:::i;:::-;20457:51;;20541:4;20537:9;20530:5;20526:21;20517:30;;20590:4;20580:8;20576:19;20569:5;20566:30;20556:40;;20285:317;;20209:393;;;;;:::o;20608:60::-;20636:3;20657:5;20650:12;;20608:60;;;:::o;20674:142::-;20724:9;20757:53;20775:34;20784:24;20802:5;20784:24;:::i;:::-;20775:34;:::i;:::-;20757:53;:::i;:::-;20744:66;;20674:142;;;:::o;20822:75::-;20865:3;20886:5;20879:12;;20822:75;;;:::o;20903:269::-;21013:39;21044:7;21013:39;:::i;:::-;21074:91;21123:41;21147:16;21123:41;:::i;:::-;21115:6;21108:4;21102:11;21074:91;:::i;:::-;21068:4;21061:105;20979:193;20903:269;;;:::o;21178:73::-;21223:3;21178:73;:::o;21257:189::-;21334:32;;:::i;:::-;21375:65;21433:6;21425;21419:4;21375:65;:::i;:::-;21310:136;21257:189;;:::o;21452:186::-;21512:120;21529:3;21522:5;21519:14;21512:120;;;21583:39;21620:1;21613:5;21583:39;:::i;:::-;21556:1;21549:5;21545:13;21536:22;;21512:120;;;21452:186;;:::o;21644:543::-;21745:2;21740:3;21737:11;21734:446;;;21779:38;21811:5;21779:38;:::i;:::-;21863:29;21881:10;21863:29;:::i;:::-;21853:8;21849:44;22046:2;22034:10;22031:18;22028:49;;;22067:8;22052:23;;22028:49;22090:80;22146:22;22164:3;22146:22;:::i;:::-;22136:8;22132:37;22119:11;22090:80;:::i;:::-;21749:431;;21734:446;21644:543;;;:::o;22193:117::-;22247:8;22297:5;22291:4;22287:16;22266:37;;22193:117;;;;:::o;22316:169::-;22360:6;22393:51;22441:1;22437:6;22429:5;22426:1;22422:13;22393:51;:::i;:::-;22389:56;22474:4;22468;22464:15;22454:25;;22367:118;22316:169;;;;:::o;22490:295::-;22566:4;22712:29;22737:3;22731:4;22712:29;:::i;:::-;22704:37;;22774:3;22771:1;22767:11;22761:4;22758:21;22750:29;;22490:295;;;;:::o;22790:1395::-;22907:37;22940:3;22907:37;:::i;:::-;23009:18;23001:6;22998:30;22995:56;;;23031:18;;:::i;:::-;22995:56;23075:38;23107:4;23101:11;23075:38;:::i;:::-;23160:67;23220:6;23212;23206:4;23160:67;:::i;:::-;23254:1;23278:4;23265:17;;23310:2;23302:6;23299:14;23327:1;23322:618;;;;23984:1;24001:6;23998:77;;;24050:9;24045:3;24041:19;24035:26;24026:35;;23998:77;24101:67;24161:6;24154:5;24101:67;:::i;:::-;24095:4;24088:81;23957:222;23292:887;;23322:618;23374:4;23370:9;23362:6;23358:22;23408:37;23440:4;23408:37;:::i;:::-;23467:1;23481:208;23495:7;23492:1;23489:14;23481:208;;;23574:9;23569:3;23565:19;23559:26;23551:6;23544:42;23625:1;23617:6;23613:14;23603:24;;23672:2;23661:9;23657:18;23644:31;;23518:4;23515:1;23511:12;23506:17;;23481:208;;;23717:6;23708:7;23705:19;23702:179;;;23775:9;23770:3;23766:19;23760:26;23818:48;23860:4;23852:6;23848:17;23837:9;23818:48;:::i;:::-;23810:6;23803:64;23725:156;23702:179;23927:1;23923;23915:6;23911:14;23907:22;23901:4;23894:36;23329:611;;;23292:887;;22882:1303;;;22790:1395;;:::o;24191:169::-;24331:21;24327:1;24319:6;24315:14;24308:45;24191:169;:::o;24366:366::-;24508:3;24529:67;24593:2;24588:3;24529:67;:::i;:::-;24522:74;;24605:93;24694:3;24605:93;:::i;:::-;24723:2;24718:3;24714:12;24707:19;;24366:366;;;:::o;24738:419::-;24904:4;24942:2;24931:9;24927:18;24919:26;;24991:9;24985:4;24981:20;24977:1;24966:9;24962:17;24955:47;25019:131;25145:4;25019:131;:::i;:::-;25011:139;;24738:419;;;:::o;25163:148::-;25265:11;25302:3;25287:18;;25163:148;;;;:::o;25317:390::-;25423:3;25451:39;25484:5;25451:39;:::i;:::-;25506:89;25588:6;25583:3;25506:89;:::i;:::-;25499:96;;25604:65;25662:6;25657:3;25650:4;25643:5;25639:16;25604:65;:::i;:::-;25694:6;25689:3;25685:16;25678:23;;25427:280;25317:390;;;;:::o;25713:155::-;25853:7;25849:1;25841:6;25837:14;25830:31;25713:155;:::o;25874:400::-;26034:3;26055:84;26137:1;26132:3;26055:84;:::i;:::-;26048:91;;26148:93;26237:3;26148:93;:::i;:::-;26266:1;26261:3;26257:11;26250:18;;25874:400;;;:::o;26280:701::-;26561:3;26583:95;26674:3;26665:6;26583:95;:::i;:::-;26576:102;;26695:95;26786:3;26777:6;26695:95;:::i;:::-;26688:102;;26807:148;26951:3;26807:148;:::i;:::-;26800:155;;26972:3;26965:10;;26280:701;;;;;:::o;26987:225::-;27127:34;27123:1;27115:6;27111:14;27104:58;27196:8;27191:2;27183:6;27179:15;27172:33;26987:225;:::o;27218:366::-;27360:3;27381:67;27445:2;27440:3;27381:67;:::i;:::-;27374:74;;27457:93;27546:3;27457:93;:::i;:::-;27575:2;27570:3;27566:12;27559:19;;27218:366;;;:::o;27590:419::-;27756:4;27794:2;27783:9;27779:18;27771:26;;27843:9;27837:4;27833:20;27829:1;27818:9;27814:17;27807:47;27871:131;27997:4;27871:131;:::i;:::-;27863:139;;27590:419;;;:::o;28015:182::-;28155:34;28151:1;28143:6;28139:14;28132:58;28015:182;:::o;28203:366::-;28345:3;28366:67;28430:2;28425:3;28366:67;:::i;:::-;28359:74;;28442:93;28531:3;28442:93;:::i;:::-;28560:2;28555:3;28551:12;28544:19;;28203:366;;;:::o;28575:419::-;28741:4;28779:2;28768:9;28764:18;28756:26;;28828:9;28822:4;28818:20;28814:1;28803:9;28799:17;28792:47;28856:131;28982:4;28856:131;:::i;:::-;28848:139;;28575:419;;;:::o;29000:98::-;29051:6;29085:5;29079:12;29069:22;;29000:98;;;:::o;29104:168::-;29187:11;29221:6;29216:3;29209:19;29261:4;29256:3;29252:14;29237:29;;29104:168;;;;:::o;29278:373::-;29364:3;29392:38;29424:5;29392:38;:::i;:::-;29446:70;29509:6;29504:3;29446:70;:::i;:::-;29439:77;;29525:65;29583:6;29578:3;29571:4;29564:5;29560:16;29525:65;:::i;:::-;29615:29;29637:6;29615:29;:::i;:::-;29610:3;29606:39;29599:46;;29368:283;29278:373;;;;:::o;29657:640::-;29852:4;29890:3;29879:9;29875:19;29867:27;;29904:71;29972:1;29961:9;29957:17;29948:6;29904:71;:::i;:::-;29985:72;30053:2;30042:9;30038:18;30029:6;29985:72;:::i;:::-;30067;30135:2;30124:9;30120:18;30111:6;30067:72;:::i;:::-;30186:9;30180:4;30176:20;30171:2;30160:9;30156:18;30149:48;30214:76;30285:4;30276:6;30214:76;:::i;:::-;30206:84;;29657:640;;;;;;;:::o;30303:141::-;30359:5;30390:6;30384:13;30375:22;;30406:32;30432:5;30406:32;:::i;:::-;30303:141;;;;:::o;30450:349::-;30519:6;30568:2;30556:9;30547:7;30543:23;30539:32;30536:119;;;30574:79;;:::i;:::-;30536:119;30694:1;30719:63;30774:7;30765:6;30754:9;30750:22;30719:63;:::i;:::-;30709:73;;30665:127;30450:349;;;;:::o;30805:180::-;30853:77;30850:1;30843:88;30950:4;30947:1;30940:15;30974:4;30971:1;30964:15

Swarm Source

ipfs://ac5aff23d50edabbd8f8e60d0175171e743fbcaad3445b8c3eee2fc74a194727

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.