ETH Price: $2,928.83 (+3.86%)
 

Overview

TokenID

17

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
PakInternship

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-11
*/

// SPDX-License-Identifier: MIT                                          
// 
// 


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;

abstract contract ReentrancyGuard {

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        _status = _NOT_ENTERED;
    }
}

pragma solidity ^0.8.0;

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

    function toString(uint256 value) internal pure returns (string memory) {

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_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);
    }
}

pragma solidity ^0.8.0;


library EnumerableSet {


    struct Set {
        // Storage of set values
        bytes32[] _values;

        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);

            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {

        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];

                set._values[toDeleteIndex] = lastValue;
                
                set._indexes[lastValue] = valueIndex; 
            }

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        return _values(set._inner);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        assembly {
            result := store
        }

        return result;
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}

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 {

        address addr;

        uint64 startTimestamp;

        bool burned;

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

pragma solidity ^0.8.4;

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

contract ERC721A is IERC721A {

    struct TokenApprovalRef {
        address value;
    }

    uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    uint256 private constant _BITPOS_NUMBER_MINTED = 64;

    uint256 private constant _BITPOS_NUMBER_BURNED = 128;

    uint256 private constant _BITPOS_AUX = 192;

    uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    uint256 private constant _BITPOS_START_TIMESTAMP = 160;

    uint256 private constant _BITMASK_BURNED = 1 << 224;

    uint256 private constant _BITPOS_NEXT_INITIALIZED = 225;

    uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225;

    uint256 private constant _BITPOS_EXTRA_DATA = 232;

    uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;

    uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1;

    uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    uint256 private _currentIndex;

    uint256 private _burnCounter;

    string private _name;

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

        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    function _totalMinted() internal view virtual returns (uint256) {

        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 || 
            interfaceId == 0x80ac58cd || 
            interfaceId == 0x5b5e139f; 
    }

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

    function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    function _initializeOwnershipAt(uint256 index) internal virtual {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];

                    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 {

            owner := and(owner, _BITMASK_ADDRESS)

            msgSender := and(msgSender, _BITMASK_ADDRESS)

            result := or(eq(msgSender, owner), eq(msgSender, approvedAddress))
        }
    }

    function _getApprovedSlotAndAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId];

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

        if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();

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

        _beforeTokenTransfers(from, to, tokenId, 1);

        assembly {
            if approvedAddress {

                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {

            --_packedAddressData[from]; 
            ++_packedAddressData[to]; 

            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );

            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _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 {

                toMasked := and(to, _BITMASK_ADDRESS)

                log4(
                    0, 
                    0, 
                    _TRANSFER_EVENT_SIGNATURE, 
                    0, 
                    toMasked, 
                    startTokenId 
                )

                for {
                    let tokenId := add(startTokenId, 1)
                } iszero(eq(tokenId, end)) {
                    tokenId := add(tokenId, 1)
                } {

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

        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) {
            
            if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }

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

        assembly {
            if approvedAddress {
                
                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 (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

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

        unchecked {
            _burnCounter++;
        }
    }

    function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        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;
    }

    function _toString(uint256 value) internal pure virtual returns (string memory str) {
        assembly {

            let m := add(mload(0x40), 0xa0)

            mstore(0x40, m)

            str := sub(m, 0x20)

            mstore(str, 0)

            let end := str

            for { let temp := value } 1 {} {
                str := sub(str, 1)

                mstore8(str, add(48, mod(temp, 10)))

                temp := div(temp, 10)

                if iszero(temp) { break }
            }

            let length := sub(end, str)

            str := sub(str, 0x20)

            mstore(str, length)
        }
    }
}

pragma solidity ^0.8.13;

contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry constant operatorFilterRegistry =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {

        if (address(operatorFilterRegistry).code.length > 0) {
            if (subscribe) {
                operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    operatorFilterRegistry.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator() virtual {

        if (address(operatorFilterRegistry).code.length > 0) {
            if (!operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)) {
                revert OperatorNotAllowed(msg.sender);
            }
        }
        _;
    }
}

pragma solidity ^0.8.13;

contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);

    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

pragma solidity ^0.8.13;

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

pragma solidity ^0.8.4;

interface IERC721ABurnable is IERC721A {

    function burn(uint256 tokenId) external;
}

pragma solidity ^0.8.4;
abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable {
    function burn(uint256 tokenId) public virtual override {
        _burn(tokenId, true);
    }
}

pragma solidity ^0.8.16;
contract PakInternship is Ownable, ERC721A, ReentrancyGuard, ERC721ABurnable, DefaultOperatorFilterer{
string public CONTRACT_URI = "";
mapping(address => uint) public userHasMinted;
bool public REVEALED;
string public UNREVEALED_URI = "";
string public BASE_URI = "ipfs://__CID__/hidden.json";
bool public isPublicMintEnabled = false;
uint public COLLECTION_SIZE = 111;
uint public MINT_PRICE = 0.0025 ether;
uint public MAX_BATCH_SIZE = 250;
uint public SUPPLY_PER_WALLET = 250;
uint public FREE_SUPPLY_PER_WALLET = 3;
constructor() ERC721A("Pak Internship", "PAKWEB3") {}


    function MintWL(uint256 quantity, address receiver) public onlyOwner {
        require(
            totalSupply() + quantity <= COLLECTION_SIZE,
            "No more Amigos in stock!"
        );
        
        _safeMint(receiver, quantity);
    }

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }

    function getPrice(uint quantity) public view returns(uint){
        uint price;
        uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender];
        if (quantity >= free) {
            price = (MINT_PRICE) * (quantity - free);
        } else {
            price = 0;
        }
        return price;
    }

    function mint(uint quantity)
        external
        payable
        callerIsUser 
        nonReentrant
    {
        uint price;
        uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender];
        if (quantity >= free) {
            price = (MINT_PRICE) * (quantity - free);
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + free;
        } else {
            price = 0;
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + quantity;
        }

        require(isPublicMintEnabled, "Amigos not ready yet!");
        require(totalSupply() + quantity <= COLLECTION_SIZE, "No more Amigos!");

        require(balanceOf(msg.sender) + quantity <= SUPPLY_PER_WALLET, "Tried to total mint Amigos per wallet over limit");

        require(quantity <= MAX_BATCH_SIZE, "Tried to mint Amigos over limit, retry with reduced quantity");
        require(msg.value >= price, "Must send enough eth");

        _safeMint(msg.sender, quantity);

        if (msg.value > price) {
            payable(msg.sender).transfer(msg.value - price);
        }
    }

    function withdrawFunds() external onlyOwner nonReentrant {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function setPublicMintEnabled() public onlyOwner {
        isPublicMintEnabled = !isPublicMintEnabled;
    }

    function setBaseURI(bool _revealed, string memory _baseURI) public onlyOwner {
        BASE_URI = _baseURI;
        REVEALED = _revealed;
    }

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

    function setContractURI(string memory _contractURI) public onlyOwner {
        CONTRACT_URI = _contractURI;
    }

    function setCOLLECTIONsIZE(uint256 _new) external onlyOwner {
        COLLECTION_SIZE = _new;
    }

    function setPrice(uint256 _newPrice) external onlyOwner {
        MINT_PRICE = _newPrice;
    }

    function set_FREE_SUPPLY_PER_WALLET(uint256 _new) external onlyOwner {
        FREE_SUPPLY_PER_WALLET = _new;
    }

    function set_SUPPLY_PER_WALLET(uint256 _new) external onlyOwner {
        SUPPLY_PER_WALLET = _new;
    }

    function set_MAX_BATCH_SIZE(uint256 _new) external onlyOwner {
        MAX_BATCH_SIZE = _new;
    }

    function transferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator {
        super.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator {
        super.safeTransferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data)
        public payable
        override (ERC721A, IERC721A)
        onlyAllowedOperator
    {
        super.safeTransferFrom(from, to, tokenId, data);
    }

    function tokenURI(uint256 _tokenId)
        public
        view
        override (ERC721A, IERC721A)
        returns (string memory)
    {
        if (REVEALED) {
            return
                string(abi.encodePacked(BASE_URI, Strings.toString(_tokenId)));
        } else {
            return UNREVEALED_URI;
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","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":[],"name":"BASE_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLECTION_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BATCH_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"MintWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"REVEALED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNREVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"setCOLLECTIONsIZE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"set_FREE_SUPPLY_PER_WALLET","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"set_MAX_BATCH_SIZE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"set_SUPPLY_PER_WALLET","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":"userHasMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405260006080908152600a906200001a90826200039d565b50604080516020810190915260008152600d906200003990826200039d565b5060408051808201909152601a81527f697066733a2f2f5f5f4349445f5f2f68696464656e2e6a736f6e0000000000006020820152600e906200007d90826200039d565b50600f805460ff19169055606f6010556608e1bc9bf0400060115560fa60128190556013556003601455348015620000b457600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600e81526020016d050616b20496e7465726e736869760941b8152506040518060400160405280600781526020016650414b5745423360c81b8152506200012d62000127620002a460201b60201c565b620002a8565b60036200013b83826200039d565b5060046200014a82826200039d565b506000600190815560095550506daaeb6d7670e522a718067333cd4e3b156200029c578015620001ea57604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b158015620001cb57600080fd5b505af1158015620001e0573d6000803e3d6000fd5b505050506200029c565b6001600160a01b038216156200023b5760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401620001b0565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b1580156200028257600080fd5b505af115801562000297573d6000803e3d6000fd5b505050505b505062000469565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200032357607f821691505b6020821081036200034457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039857600081815260208120601f850160051c81016020861015620003735750805b601f850160051c820191505b8181101562000394578281556001016200037f565b5050505b505050565b81516001600160401b03811115620003b957620003b9620002f8565b620003d181620003ca84546200030e565b846200034a565b602080601f831160018114620004095760008415620003f05750858301515b600019600386901b1c1916600185901b17855562000394565b600085815260208120601f198616915b828110156200043a5788860151825594840194600190910190840162000419565b5085821015620004595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61229c80620004796000396000f3fe6080604052600436106102515760003560e01c8063938e3d7b11610139578063c002d23d116100b6578063e113ad951161007a578063e113ad951461064d578063e75722301461066d578063e8a3d4851461068d578063e985e9c5146106a2578063e9d541b0146106c2578063f2fde38b146106e257600080fd5b8063c002d23d146105d6578063c87b56dd146105ec578063cfdbf2541461060c578063d8258d9514610622578063dbddb26a1461063857600080fd5b8063a4cdd719116100fd578063a4cdd71914610554578063a76a958714610569578063a9527e8214610583578063a9b2d10d146105a3578063b88d4fde146105c357600080fd5b8063938e3d7b146104cc57806395d89b41146104ec5780639e1f39d614610501578063a0712d6814610521578063a22cb4651461053457600080fd5b8063336f5ec3116101d25780635fe75587116101965780635fe75587146104235780636352211e1461043957806370a0823114610459578063715018a6146104795780638da5cb5b1461048e57806391b7f5ed146104ac57600080fd5b8063336f5ec3146103a657806342842e0e146103c657806342966c68146103d9578063507862d1146103f957806356b4f6731461040e57600080fd5b80631422374f116102195780631422374f1461031457806318160ddd146103385780631d9857781461035157806323b872dd1461037e57806324600fc31461039157600080fd5b80630116bc2d1461025657806301ffc9a71461028557806306fdde03146102a5578063081812fc146102c7578063095ea7b3146102ff575b600080fd5b34801561026257600080fd5b50600f546102709060ff1681565b60405190151581526020015b60405180910390f35b34801561029157600080fd5b506102706102a0366004611bcf565b610702565b3480156102b157600080fd5b506102ba610754565b60405161027c9190611c3c565b3480156102d357600080fd5b506102e76102e2366004611c4f565b6107e6565b6040516001600160a01b03909116815260200161027c565b61031261030d366004611c7f565b61082a565b005b34801561032057600080fd5b5061032a60145481565b60405190815260200161027c565b34801561034457600080fd5b506002546001540361032a565b34801561035d57600080fd5b5061032a61036c366004611ca9565b600b6020526000908152604090205481565b61031261038c366004611cc4565b6108ca565b34801561039d57600080fd5b50610312610988565b3480156103b257600080fd5b506103126103c1366004611c4f565b610a7a565b6103126103d4366004611cc4565b610a87565b3480156103e557600080fd5b506103126103f4366004611c4f565b610b3b565b34801561040557600080fd5b506102ba610b49565b34801561041a57600080fd5b506102ba610bd7565b34801561042f57600080fd5b5061032a60135481565b34801561044557600080fd5b506102e7610454366004611c4f565b610be4565b34801561046557600080fd5b5061032a610474366004611ca9565b610bef565b34801561048557600080fd5b50610312610c3e565b34801561049a57600080fd5b506000546001600160a01b03166102e7565b3480156104b857600080fd5b506103126104c7366004611c4f565b610c52565b3480156104d857600080fd5b506103126104e7366004611dac565b610c5f565b3480156104f857600080fd5b506102ba610c77565b34801561050d57600080fd5b5061031261051c366004611def565b610c86565b61031261052f366004611c4f565b610caf565b34801561054057600080fd5b5061031261054f366004611e3f565b61102b565b34801561056057600080fd5b50610312611097565b34801561057557600080fd5b50600c546102709060ff1681565b34801561058f57600080fd5b5061031261059e366004611c4f565b6110b3565b3480156105af57600080fd5b506103126105be366004611e76565b6110c0565b6103126105d1366004611ea2565b61113b565b3480156105e257600080fd5b5061032a60115481565b3480156105f857600080fd5b506102ba610607366004611c4f565b6111f6565b34801561061857600080fd5b5061032a60125481565b34801561062e57600080fd5b5061032a60105481565b34801561064457600080fd5b506102ba6112cd565b34801561065957600080fd5b50610312610668366004611c4f565b6112da565b34801561067957600080fd5b5061032a610688366004611c4f565b6112e7565b34801561069957600080fd5b506102ba61133b565b3480156106ae57600080fd5b506102706106bd366004611f1e565b61134a565b3480156106ce57600080fd5b506103126106dd366004611c4f565b611378565b3480156106ee57600080fd5b506103126106fd366004611ca9565b611385565b60006301ffc9a760e01b6001600160e01b03198316148061073357506380ac58cd60e01b6001600160e01b03198316145b8061074e5750635b5e139f60e01b6001600160e01b03198316145b92915050565b60606003805461076390611f48565b80601f016020809104026020016040519081016040528092919081815260200182805461078f90611f48565b80156107dc5780601f106107b1576101008083540402835291602001916107dc565b820191906000526020600020905b8154815290600101906020018083116107bf57829003601f168201915b5050505050905090565b60006107f1826113fb565b61080e576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b600061083582610be4565b9050336001600160a01b0382161461086e57610851813361134a565b61086e576040516367d9dca160e11b815260040160405180910390fd5b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6daaeb6d7670e522a718067333cd4e3b1561097857604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303816000875af1158015610930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109549190611f82565b61097857604051633b79c77360e21b81523360048201526024015b60405180910390fd5b610983838383611423565b505050565b6109906115b4565b6002600954036109e25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161096f565b6002600955604051600090339047908381818185875af1925050503d8060008114610a29576040519150601f19603f3d011682016040523d82523d6000602084013e610a2e565b606091505b5050905080610a725760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161096f565b506001600955565b610a826115b4565b601255565b6daaeb6d7670e522a718067333cd4e3b15610b3057604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303816000875af1158015610aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b119190611f82565b610b3057604051633b79c77360e21b815233600482015260240161096f565b61098383838361160e565b610b46816001611629565b50565b600d8054610b5690611f48565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8290611f48565b8015610bcf5780601f10610ba457610100808354040283529160200191610bcf565b820191906000526020600020905b815481529060010190602001808311610bb257829003601f168201915b505050505081565b600a8054610b5690611f48565b600061074e82611762565b60006001600160a01b038216610c18576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526006602052604090205467ffffffffffffffff1690565b610c466115b4565b610c5060006117d0565b565b610c5a6115b4565b601155565b610c676115b4565b600a610c738282611fe5565b5050565b60606004805461076390611f48565b610c8e6115b4565b600e610c9a8282611fe5565b5050600c805460ff1916911515919091179055565b323314610cfe5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161096f565b600260095403610d505760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161096f565b6002600955336000908152600b60205260408120546014548291610d73916120bb565b9050808310610dc657610d8681846120bb565b601154610d9391906120ce565b336000908152600b6020526040902054909250610db19082906120e5565b336000908152600b6020526040902055610df5565b336000908152600b6020526040812054909250610de49084906120e5565b336000908152600b60205260409020555b600f5460ff16610e3f5760405162461bcd60e51b8152602060048201526015602482015274416d69676f73206e6f74207265616479207965742160581b604482015260640161096f565b60105483610e506002546001540390565b610e5a91906120e5565b1115610e9a5760405162461bcd60e51b815260206004820152600f60248201526e4e6f206d6f726520416d69676f732160881b604482015260640161096f565b60135483610ea733610bef565b610eb191906120e5565b1115610f185760405162461bcd60e51b815260206004820152603060248201527f547269656420746f20746f74616c206d696e7420416d69676f7320706572207760448201526f185b1b195d081bdd995c881b1a5b5a5d60821b606482015260840161096f565b601254831115610f905760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206d696e7420416d69676f73206f766572206c696d69742c60448201527f20726574727920776974682072656475636564207175616e7469747900000000606482015260840161096f565b81341015610fd75760405162461bcd60e51b815260206004820152601460248201527309aeae6e840e6cadcc840cadcdeeaced040cae8d60631b604482015260640161096f565b610fe13384611820565b8134111561102157336108fc610ff784346120bb565b6040518115909202916000818181858888f1935050505015801561101f573d6000803e3d6000fd5b505b5050600160095550565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61109f6115b4565b600f805460ff19811660ff90911615179055565b6110bb6115b4565b601455565b6110c86115b4565b601054826110d96002546001540390565b6110e391906120e5565b11156111315760405162461bcd60e51b815260206004820152601860248201527f4e6f206d6f726520416d69676f7320696e2073746f636b210000000000000000604482015260640161096f565b610c738183611820565b6daaeb6d7670e522a718067333cd4e3b156111e457604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303816000875af11580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c59190611f82565b6111e457604051633b79c77360e21b815233600482015260240161096f565b6111f08484848461183a565b50505050565b600c5460609060ff161561123657600e61120f8361187e565b6040516020016112209291906120f8565b6040516020818303038152906040529050919050565b600d805461124390611f48565b80601f016020809104026020016040519081016040528092919081815260200182805461126f90611f48565b80156112bc5780601f10611291576101008083540402835291602001916112bc565b820191906000526020600020905b81548152906001019060200180831161129f57829003601f168201915b50505050509050919050565b919050565b600e8054610b5690611f48565b6112e26115b4565b601355565b336000908152600b60205260408120546014548291829161130891906120bb565b905080841061132f5761131b81856120bb565b60115461132891906120ce565b9150611334565b600091505b5092915050565b6060600a805461076390611f48565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6113806115b4565b601055565b61138d6115b4565b6001600160a01b0381166113f25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096f565b610b46816117d0565b60006001548210801561074e575050600090815260056020526040902054600160e01b161590565b600061142e82611762565b9050836001600160a01b0316816001600160a01b0316146114615760405162a1148160e81b815260040160405180910390fd5b6000828152600760205260409020805461148d8187335b6001600160a01b039081169116811491141790565b6114b85761149b863361134a565b6114b857604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0385166114df57604051633a954ecd60e21b815260040160405180910390fd5b80156114ea57600082555b6001600160a01b038681166000908152600660205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260056020526040812091909155600160e11b8416900361157c5760018401600081815260056020526040812054900361157a57600154811461157a5760008181526005602052604090208490555b505b83856001600160a01b0316876001600160a01b031660008051602061224783398151915260405160405180910390a45b505050505050565b6000546001600160a01b03163314610c505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161096f565b6109838383836040518060200160405280600081525061113b565b600061163483611762565b90508060008061165286600090815260076020526040902080549091565b91509150841561169257611667818433611478565b61169257611675833361134a565b61169257604051632ce44b5f60e11b815260040160405180910390fd5b801561169d57600082555b6001600160a01b038316600081815260066020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260056020526040812091909155600160e11b8516900361172b576001860160008181526005602052604081205490036117295760015481146117295760008181526005602052604090208590555b505b60405186906000906001600160a01b03861690600080516020612247833981519152908390a4505060028054600101905550505050565b6000816001548110156117b75760008181526005602052604081205490600160e01b821690036117b5575b806000036117ae57506000190160008181526005602052604090205461178d565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610c73828260405180602001604052806000815250611987565b6118458484846108ca565b6001600160a01b0383163b156111f057611861848484846119f4565b6111f0576040516368d2bf6b60e11b815260040160405180910390fd5b6060816000036118a55750506040805180820190915260018152600360fc1b602082015290565b8160005b81156118cf57806118b98161217f565b91506118c89050600a836121ae565b91506118a9565b60008167ffffffffffffffff8111156118ea576118ea611d00565b6040519080825280601f01601f191660200182016040528015611914576020820181803683370190505b5090505b841561197f576119296001836120bb565b9150611936600a866121c2565b6119419060306120e5565b60f81b818381518110611956576119566121d6565b60200101906001600160f81b031916908160001a905350611978600a866121ae565b9450611918565b949350505050565b6119918383611adf565b6001600160a01b0383163b15610983576001548281035b6119bb60008683806001019450866119f4565b6119d8576040516368d2bf6b60e11b815260040160405180910390fd5b8181106119a85781600154146119ed57600080fd5b5050505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a299033908990889088906004016121ec565b6020604051808303816000875af1925050508015611a64575060408051601f3d908101601f19168201909252611a6191810190612229565b60015b611ac2573d808015611a92576040519150601f19603f3d011682016040523d82523d6000602084013e611a97565b606091505b508051600003611aba576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6001546000829003611b045760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526006602090815260408083208054680100000000000000018802019055848352600590915281206001851460e11b4260a01b178317905582840190839083906000805160206122478339815191528180a4600183015b818114611b8f5780836000600080516020612247833981519152600080a4600101611b69565b5081600003611bb057604051622e076360e81b815260040160405180910390fd5b60015550505050565b6001600160e01b031981168114610b4657600080fd5b600060208284031215611be157600080fd5b81356117ae81611bb9565b60005b83811015611c07578181015183820152602001611bef565b50506000910152565b60008151808452611c28816020860160208601611bec565b601f01601f19169290920160200192915050565b6020815260006117ae6020830184611c10565b600060208284031215611c6157600080fd5b5035919050565b80356001600160a01b03811681146112c857600080fd5b60008060408385031215611c9257600080fd5b611c9b83611c68565b946020939093013593505050565b600060208284031215611cbb57600080fd5b6117ae82611c68565b600080600060608486031215611cd957600080fd5b611ce284611c68565b9250611cf060208501611c68565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611d3157611d31611d00565b604051601f8501601f19908116603f01168101908282118183101715611d5957611d59611d00565b81604052809350858152868686011115611d7257600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611d9d57600080fd5b6117ae83833560208501611d16565b600060208284031215611dbe57600080fd5b813567ffffffffffffffff811115611dd557600080fd5b61197f84828501611d8c565b8015158114610b4657600080fd5b60008060408385031215611e0257600080fd5b8235611e0d81611de1565b9150602083013567ffffffffffffffff811115611e2957600080fd5b611e3585828601611d8c565b9150509250929050565b60008060408385031215611e5257600080fd5b611e5b83611c68565b91506020830135611e6b81611de1565b809150509250929050565b60008060408385031215611e8957600080fd5b82359150611e9960208401611c68565b90509250929050565b60008060008060808587031215611eb857600080fd5b611ec185611c68565b9350611ecf60208601611c68565b925060408501359150606085013567ffffffffffffffff811115611ef257600080fd5b8501601f81018713611f0357600080fd5b611f1287823560208401611d16565b91505092959194509250565b60008060408385031215611f3157600080fd5b611f3a83611c68565b9150611e9960208401611c68565b600181811c90821680611f5c57607f821691505b602082108103611f7c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611f9457600080fd5b81516117ae81611de1565b601f82111561098357600081815260208120601f850160051c81016020861015611fc65750805b601f850160051c820191505b818110156115ac57828155600101611fd2565b815167ffffffffffffffff811115611fff57611fff611d00565b6120138161200d8454611f48565b84611f9f565b602080601f83116001811461204857600084156120305750858301515b600019600386901b1c1916600185901b1785556115ac565b600085815260208120601f198616915b8281101561207757888601518255948401946001909101908401612058565b50858210156120955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8181038181111561074e5761074e6120a5565b808202811582820484141761074e5761074e6120a5565b8082018082111561074e5761074e6120a5565b600080845461210681611f48565b6001828116801561211e576001811461213357612162565b60ff1984168752821515830287019450612162565b8860005260208060002060005b858110156121595781548a820152908401908201612140565b50505082870194505b505050508351612176818360208801611bec565b01949350505050565b600060018201612191576121916120a5565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826121bd576121bd612198565b500490565b6000826121d1576121d1612198565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061221f90830184611c10565b9695505050505050565b60006020828403121561223b57600080fd5b81516117ae81611bb956feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220315a8818bd96ae74a52982b5359ff11748803cfa090b2cba806c055801d170f364736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102515760003560e01c8063938e3d7b11610139578063c002d23d116100b6578063e113ad951161007a578063e113ad951461064d578063e75722301461066d578063e8a3d4851461068d578063e985e9c5146106a2578063e9d541b0146106c2578063f2fde38b146106e257600080fd5b8063c002d23d146105d6578063c87b56dd146105ec578063cfdbf2541461060c578063d8258d9514610622578063dbddb26a1461063857600080fd5b8063a4cdd719116100fd578063a4cdd71914610554578063a76a958714610569578063a9527e8214610583578063a9b2d10d146105a3578063b88d4fde146105c357600080fd5b8063938e3d7b146104cc57806395d89b41146104ec5780639e1f39d614610501578063a0712d6814610521578063a22cb4651461053457600080fd5b8063336f5ec3116101d25780635fe75587116101965780635fe75587146104235780636352211e1461043957806370a0823114610459578063715018a6146104795780638da5cb5b1461048e57806391b7f5ed146104ac57600080fd5b8063336f5ec3146103a657806342842e0e146103c657806342966c68146103d9578063507862d1146103f957806356b4f6731461040e57600080fd5b80631422374f116102195780631422374f1461031457806318160ddd146103385780631d9857781461035157806323b872dd1461037e57806324600fc31461039157600080fd5b80630116bc2d1461025657806301ffc9a71461028557806306fdde03146102a5578063081812fc146102c7578063095ea7b3146102ff575b600080fd5b34801561026257600080fd5b50600f546102709060ff1681565b60405190151581526020015b60405180910390f35b34801561029157600080fd5b506102706102a0366004611bcf565b610702565b3480156102b157600080fd5b506102ba610754565b60405161027c9190611c3c565b3480156102d357600080fd5b506102e76102e2366004611c4f565b6107e6565b6040516001600160a01b03909116815260200161027c565b61031261030d366004611c7f565b61082a565b005b34801561032057600080fd5b5061032a60145481565b60405190815260200161027c565b34801561034457600080fd5b506002546001540361032a565b34801561035d57600080fd5b5061032a61036c366004611ca9565b600b6020526000908152604090205481565b61031261038c366004611cc4565b6108ca565b34801561039d57600080fd5b50610312610988565b3480156103b257600080fd5b506103126103c1366004611c4f565b610a7a565b6103126103d4366004611cc4565b610a87565b3480156103e557600080fd5b506103126103f4366004611c4f565b610b3b565b34801561040557600080fd5b506102ba610b49565b34801561041a57600080fd5b506102ba610bd7565b34801561042f57600080fd5b5061032a60135481565b34801561044557600080fd5b506102e7610454366004611c4f565b610be4565b34801561046557600080fd5b5061032a610474366004611ca9565b610bef565b34801561048557600080fd5b50610312610c3e565b34801561049a57600080fd5b506000546001600160a01b03166102e7565b3480156104b857600080fd5b506103126104c7366004611c4f565b610c52565b3480156104d857600080fd5b506103126104e7366004611dac565b610c5f565b3480156104f857600080fd5b506102ba610c77565b34801561050d57600080fd5b5061031261051c366004611def565b610c86565b61031261052f366004611c4f565b610caf565b34801561054057600080fd5b5061031261054f366004611e3f565b61102b565b34801561056057600080fd5b50610312611097565b34801561057557600080fd5b50600c546102709060ff1681565b34801561058f57600080fd5b5061031261059e366004611c4f565b6110b3565b3480156105af57600080fd5b506103126105be366004611e76565b6110c0565b6103126105d1366004611ea2565b61113b565b3480156105e257600080fd5b5061032a60115481565b3480156105f857600080fd5b506102ba610607366004611c4f565b6111f6565b34801561061857600080fd5b5061032a60125481565b34801561062e57600080fd5b5061032a60105481565b34801561064457600080fd5b506102ba6112cd565b34801561065957600080fd5b50610312610668366004611c4f565b6112da565b34801561067957600080fd5b5061032a610688366004611c4f565b6112e7565b34801561069957600080fd5b506102ba61133b565b3480156106ae57600080fd5b506102706106bd366004611f1e565b61134a565b3480156106ce57600080fd5b506103126106dd366004611c4f565b611378565b3480156106ee57600080fd5b506103126106fd366004611ca9565b611385565b60006301ffc9a760e01b6001600160e01b03198316148061073357506380ac58cd60e01b6001600160e01b03198316145b8061074e5750635b5e139f60e01b6001600160e01b03198316145b92915050565b60606003805461076390611f48565b80601f016020809104026020016040519081016040528092919081815260200182805461078f90611f48565b80156107dc5780601f106107b1576101008083540402835291602001916107dc565b820191906000526020600020905b8154815290600101906020018083116107bf57829003601f168201915b5050505050905090565b60006107f1826113fb565b61080e576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b600061083582610be4565b9050336001600160a01b0382161461086e57610851813361134a565b61086e576040516367d9dca160e11b815260040160405180910390fd5b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6daaeb6d7670e522a718067333cd4e3b1561097857604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303816000875af1158015610930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109549190611f82565b61097857604051633b79c77360e21b81523360048201526024015b60405180910390fd5b610983838383611423565b505050565b6109906115b4565b6002600954036109e25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161096f565b6002600955604051600090339047908381818185875af1925050503d8060008114610a29576040519150601f19603f3d011682016040523d82523d6000602084013e610a2e565b606091505b5050905080610a725760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161096f565b506001600955565b610a826115b4565b601255565b6daaeb6d7670e522a718067333cd4e3b15610b3057604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303816000875af1158015610aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b119190611f82565b610b3057604051633b79c77360e21b815233600482015260240161096f565b61098383838361160e565b610b46816001611629565b50565b600d8054610b5690611f48565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8290611f48565b8015610bcf5780601f10610ba457610100808354040283529160200191610bcf565b820191906000526020600020905b815481529060010190602001808311610bb257829003601f168201915b505050505081565b600a8054610b5690611f48565b600061074e82611762565b60006001600160a01b038216610c18576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526006602052604090205467ffffffffffffffff1690565b610c466115b4565b610c5060006117d0565b565b610c5a6115b4565b601155565b610c676115b4565b600a610c738282611fe5565b5050565b60606004805461076390611f48565b610c8e6115b4565b600e610c9a8282611fe5565b5050600c805460ff1916911515919091179055565b323314610cfe5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161096f565b600260095403610d505760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161096f565b6002600955336000908152600b60205260408120546014548291610d73916120bb565b9050808310610dc657610d8681846120bb565b601154610d9391906120ce565b336000908152600b6020526040902054909250610db19082906120e5565b336000908152600b6020526040902055610df5565b336000908152600b6020526040812054909250610de49084906120e5565b336000908152600b60205260409020555b600f5460ff16610e3f5760405162461bcd60e51b8152602060048201526015602482015274416d69676f73206e6f74207265616479207965742160581b604482015260640161096f565b60105483610e506002546001540390565b610e5a91906120e5565b1115610e9a5760405162461bcd60e51b815260206004820152600f60248201526e4e6f206d6f726520416d69676f732160881b604482015260640161096f565b60135483610ea733610bef565b610eb191906120e5565b1115610f185760405162461bcd60e51b815260206004820152603060248201527f547269656420746f20746f74616c206d696e7420416d69676f7320706572207760448201526f185b1b195d081bdd995c881b1a5b5a5d60821b606482015260840161096f565b601254831115610f905760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206d696e7420416d69676f73206f766572206c696d69742c60448201527f20726574727920776974682072656475636564207175616e7469747900000000606482015260840161096f565b81341015610fd75760405162461bcd60e51b815260206004820152601460248201527309aeae6e840e6cadcc840cadcdeeaced040cae8d60631b604482015260640161096f565b610fe13384611820565b8134111561102157336108fc610ff784346120bb565b6040518115909202916000818181858888f1935050505015801561101f573d6000803e3d6000fd5b505b5050600160095550565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61109f6115b4565b600f805460ff19811660ff90911615179055565b6110bb6115b4565b601455565b6110c86115b4565b601054826110d96002546001540390565b6110e391906120e5565b11156111315760405162461bcd60e51b815260206004820152601860248201527f4e6f206d6f726520416d69676f7320696e2073746f636b210000000000000000604482015260640161096f565b610c738183611820565b6daaeb6d7670e522a718067333cd4e3b156111e457604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303816000875af11580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c59190611f82565b6111e457604051633b79c77360e21b815233600482015260240161096f565b6111f08484848461183a565b50505050565b600c5460609060ff161561123657600e61120f8361187e565b6040516020016112209291906120f8565b6040516020818303038152906040529050919050565b600d805461124390611f48565b80601f016020809104026020016040519081016040528092919081815260200182805461126f90611f48565b80156112bc5780601f10611291576101008083540402835291602001916112bc565b820191906000526020600020905b81548152906001019060200180831161129f57829003601f168201915b50505050509050919050565b919050565b600e8054610b5690611f48565b6112e26115b4565b601355565b336000908152600b60205260408120546014548291829161130891906120bb565b905080841061132f5761131b81856120bb565b60115461132891906120ce565b9150611334565b600091505b5092915050565b6060600a805461076390611f48565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6113806115b4565b601055565b61138d6115b4565b6001600160a01b0381166113f25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096f565b610b46816117d0565b60006001548210801561074e575050600090815260056020526040902054600160e01b161590565b600061142e82611762565b9050836001600160a01b0316816001600160a01b0316146114615760405162a1148160e81b815260040160405180910390fd5b6000828152600760205260409020805461148d8187335b6001600160a01b039081169116811491141790565b6114b85761149b863361134a565b6114b857604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0385166114df57604051633a954ecd60e21b815260040160405180910390fd5b80156114ea57600082555b6001600160a01b038681166000908152600660205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260056020526040812091909155600160e11b8416900361157c5760018401600081815260056020526040812054900361157a57600154811461157a5760008181526005602052604090208490555b505b83856001600160a01b0316876001600160a01b031660008051602061224783398151915260405160405180910390a45b505050505050565b6000546001600160a01b03163314610c505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161096f565b6109838383836040518060200160405280600081525061113b565b600061163483611762565b90508060008061165286600090815260076020526040902080549091565b91509150841561169257611667818433611478565b61169257611675833361134a565b61169257604051632ce44b5f60e11b815260040160405180910390fd5b801561169d57600082555b6001600160a01b038316600081815260066020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260056020526040812091909155600160e11b8516900361172b576001860160008181526005602052604081205490036117295760015481146117295760008181526005602052604090208590555b505b60405186906000906001600160a01b03861690600080516020612247833981519152908390a4505060028054600101905550505050565b6000816001548110156117b75760008181526005602052604081205490600160e01b821690036117b5575b806000036117ae57506000190160008181526005602052604090205461178d565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610c73828260405180602001604052806000815250611987565b6118458484846108ca565b6001600160a01b0383163b156111f057611861848484846119f4565b6111f0576040516368d2bf6b60e11b815260040160405180910390fd5b6060816000036118a55750506040805180820190915260018152600360fc1b602082015290565b8160005b81156118cf57806118b98161217f565b91506118c89050600a836121ae565b91506118a9565b60008167ffffffffffffffff8111156118ea576118ea611d00565b6040519080825280601f01601f191660200182016040528015611914576020820181803683370190505b5090505b841561197f576119296001836120bb565b9150611936600a866121c2565b6119419060306120e5565b60f81b818381518110611956576119566121d6565b60200101906001600160f81b031916908160001a905350611978600a866121ae565b9450611918565b949350505050565b6119918383611adf565b6001600160a01b0383163b15610983576001548281035b6119bb60008683806001019450866119f4565b6119d8576040516368d2bf6b60e11b815260040160405180910390fd5b8181106119a85781600154146119ed57600080fd5b5050505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a299033908990889088906004016121ec565b6020604051808303816000875af1925050508015611a64575060408051601f3d908101601f19168201909252611a6191810190612229565b60015b611ac2573d808015611a92576040519150601f19603f3d011682016040523d82523d6000602084013e611a97565b606091505b508051600003611aba576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6001546000829003611b045760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526006602090815260408083208054680100000000000000018802019055848352600590915281206001851460e11b4260a01b178317905582840190839083906000805160206122478339815191528180a4600183015b818114611b8f5780836000600080516020612247833981519152600080a4600101611b69565b5081600003611bb057604051622e076360e81b815260040160405180910390fd5b60015550505050565b6001600160e01b031981168114610b4657600080fd5b600060208284031215611be157600080fd5b81356117ae81611bb9565b60005b83811015611c07578181015183820152602001611bef565b50506000910152565b60008151808452611c28816020860160208601611bec565b601f01601f19169290920160200192915050565b6020815260006117ae6020830184611c10565b600060208284031215611c6157600080fd5b5035919050565b80356001600160a01b03811681146112c857600080fd5b60008060408385031215611c9257600080fd5b611c9b83611c68565b946020939093013593505050565b600060208284031215611cbb57600080fd5b6117ae82611c68565b600080600060608486031215611cd957600080fd5b611ce284611c68565b9250611cf060208501611c68565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611d3157611d31611d00565b604051601f8501601f19908116603f01168101908282118183101715611d5957611d59611d00565b81604052809350858152868686011115611d7257600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611d9d57600080fd5b6117ae83833560208501611d16565b600060208284031215611dbe57600080fd5b813567ffffffffffffffff811115611dd557600080fd5b61197f84828501611d8c565b8015158114610b4657600080fd5b60008060408385031215611e0257600080fd5b8235611e0d81611de1565b9150602083013567ffffffffffffffff811115611e2957600080fd5b611e3585828601611d8c565b9150509250929050565b60008060408385031215611e5257600080fd5b611e5b83611c68565b91506020830135611e6b81611de1565b809150509250929050565b60008060408385031215611e8957600080fd5b82359150611e9960208401611c68565b90509250929050565b60008060008060808587031215611eb857600080fd5b611ec185611c68565b9350611ecf60208601611c68565b925060408501359150606085013567ffffffffffffffff811115611ef257600080fd5b8501601f81018713611f0357600080fd5b611f1287823560208401611d16565b91505092959194509250565b60008060408385031215611f3157600080fd5b611f3a83611c68565b9150611e9960208401611c68565b600181811c90821680611f5c57607f821691505b602082108103611f7c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611f9457600080fd5b81516117ae81611de1565b601f82111561098357600081815260208120601f850160051c81016020861015611fc65750805b601f850160051c820191505b818110156115ac57828155600101611fd2565b815167ffffffffffffffff811115611fff57611fff611d00565b6120138161200d8454611f48565b84611f9f565b602080601f83116001811461204857600084156120305750858301515b600019600386901b1c1916600185901b1785556115ac565b600085815260208120601f198616915b8281101561207757888601518255948401946001909101908401612058565b50858210156120955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8181038181111561074e5761074e6120a5565b808202811582820484141761074e5761074e6120a5565b8082018082111561074e5761074e6120a5565b600080845461210681611f48565b6001828116801561211e576001811461213357612162565b60ff1984168752821515830287019450612162565b8860005260208060002060005b858110156121595781548a820152908401908201612140565b50505082870194505b505050508351612176818360208801611bec565b01949350505050565b600060018201612191576121916120a5565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826121bd576121bd612198565b500490565b6000826121d1576121d1612198565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061221f90830184611c10565b9695505050505050565b60006020828403121561223b57600080fd5b81516117ae81611bb956feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220315a8818bd96ae74a52982b5359ff11748803cfa090b2cba806c055801d170f364736f6c63430008120033

Deployed Bytecode Sourcemap

34325:4701:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34626:39;;;;;;;;;;-1:-1:-1;34626:39:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;34626:39:0;;;;;;;;14822:244;;;;;;;;;;-1:-1:-1;14822:244:0;;;;;:::i;:::-;;:::i;15074:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18650:218::-;;;;;;;;;;-1:-1:-1;18650:218:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;18650:218:0;1533:203:1;18234:408:0;;;;;;:::i;:::-;;:::i;:::-;;34817:38;;;;;;;;;;;;;;;;;;;2324:25:1;;;2312:2;2297:18;34817:38:0;2178:177:1;13185:180:0;;;;;;;;;;-1:-1:-1;13316:12:0;;13300:13;;:28;13185:180;;34463:45;;;;;;;;;;-1:-1:-1;34463:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;38028:185;;;;;;:::i;:::-;;:::i;36766:191::-;;;;;;;;;;;;;:::i;37919:101::-;;;;;;;;;;-1:-1:-1;37919:101:0;;;;;:::i;:::-;;:::i;38221:193::-;;;;;;:::i;:::-;;:::i;34198:94::-;;;;;;;;;;-1:-1:-1;34198:94:0;;;;;:::i;:::-;;:::i;34534:33::-;;;;;;;;;;;;;:::i;34429:31::-;;;;;;;;;;;;;:::i;34779:35::-;;;;;;;;;;;;;;;;15722:152;;;;;;;;;;-1:-1:-1;15722:152:0;;;;;:::i;:::-;;:::i;13650:233::-;;;;;;;;;;-1:-1:-1;13650:233:0;;;;;:::i;:::-;;:::i;934:103::-;;;;;;;;;;;;;:::i;699:87::-;;;;;;;;;;-1:-1:-1;745:7:0;772:6;-1:-1:-1;;;;;772:6:0;699:87;;37574:97;;;;;;;;;;-1:-1:-1;37574:97:0;;;;;:::i;:::-;;:::i;37342:115::-;;;;;;;;;;-1:-1:-1;37342:115:0;;;;;:::i;:::-;;:::i;15182:104::-;;;;;;;;;;;;;:::i;37083:146::-;;;;;;;;;;-1:-1:-1;37083:146:0;;;;;:::i;:::-;;:::i;35645:1113::-;;;;;;:::i;:::-;;:::i;18876:234::-;;;;;;;;;;-1:-1:-1;18876:234:0;;;;;:::i;:::-;;:::i;36965:110::-;;;;;;;;;;;;;:::i;34511:20::-;;;;;;;;;;-1:-1:-1;34511:20:0;;;;;;;;37679:117;;;;;;;;;;-1:-1:-1;37679:117:0;;;;;:::i;:::-;;:::i;34921:255::-;;;;;;;;;;-1:-1:-1;34921:255:0;;;;;:::i;:::-;;:::i;38422:250::-;;;;;;:::i;:::-;;:::i;34704:37::-;;;;;;;;;;;;;;;;38680:341;;;;;;;;;;-1:-1:-1;38680:341:0;;;;;:::i;:::-;;:::i;34744:32::-;;;;;;;;;;;;;;;;34668:33;;;;;;;;;;;;;;;;34570:53;;;;;;;;;;;;;:::i;37804:107::-;;;;;;;;;;-1:-1:-1;37804:107:0;;;;;:::i;:::-;;:::i;35313:324::-;;;;;;;;;;-1:-1:-1;35313:324:0;;;;;:::i;:::-;;:::i;37237:97::-;;;;;;;;;;;;;:::i;19118:164::-;;;;;;;;;;-1:-1:-1;19118:164:0;;;;;:::i;:::-;;:::i;37465:101::-;;;;;;;;;;-1:-1:-1;37465:101:0;;;;;:::i;:::-;;:::i;1047:201::-;;;;;;;;;;-1:-1:-1;1047:201:0;;;;;:::i;:::-;;:::i;14822:244::-;14907:4;-1:-1:-1;;;;;;;;;14946:25:0;;;;:68;;-1:-1:-1;;;;;;;;;;14989:25:0;;;14946:68;:111;;;-1:-1:-1;;;;;;;;;;15032:25:0;;;14946:111;14926:131;14822:244;-1:-1:-1;;14822:244:0:o;15074:100::-;15128:13;15161:5;15154:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15074:100;:::o;18650:218::-;18726:7;18751:16;18759:7;18751;:16::i;:::-;18746:64;;18776:34;;-1:-1:-1;;;18776:34:0;;;;;;;;;;;18746:64;-1:-1:-1;18830:24:0;;;;:15;:24;;;;;:30;-1:-1:-1;;;;;18830:30:0;;18650:218::o;18234:408::-;18323:13;18339:16;18347:7;18339;:16::i;:::-;18323:32;-1:-1:-1;29757:10:0;-1:-1:-1;;;;;18372:28:0;;;18368:175;;18420:44;18437:5;29757:10;19118:164;:::i;18420:44::-;18415:128;;18492:35;;-1:-1:-1;;;18492:35:0;;;;;;;;;;;18415:128;18555:24;;;;:15;:24;;;;;;:35;;-1:-1:-1;;;;;;18555:35:0;-1:-1:-1;;;;;18555:35:0;;;;;;;;;18606:28;;18555:24;;18606:28;;;;;;;18312:330;18234:408;;:::o;38028:185::-;30645:42;31388:43;:47;31384:225;;31457:67;;-1:-1:-1;;;31457:67:0;;31506:4;31457:67;;;6899:34:1;31513:10:0;6949:18:1;;;6942:43;30645:42:0;;31457:40;;6834:18:1;;31457:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31452:146;;31552:30;;-1:-1:-1;;;31552:30:0;;31571:10;31552:30;;;1679:51:1;1652:18;;31552:30:0;;;;;;;;31452:146;38168:37:::1;38187:4;38193:2;38197:7;38168:18;:37::i;:::-;38028:185:::0;;;:::o;36766:191::-;658:13;:11;:13::i;:::-;1608:1:::1;1828:7;;:19:::0;1820:63:::1;;;::::0;-1:-1:-1;;;1820:63:0;;7448:2:1;1820:63:0::1;::::0;::::1;7430:21:1::0;7487:2;7467:18;;;7460:30;7526:33;7506:18;;;7499:61;7577:18;;1820:63:0::1;7246:355:1::0;1820:63:0::1;1608:1;1961:7;:18:::0;36853:49:::2;::::0;36835:12:::2;::::0;36853:10:::2;::::0;36876:21:::2;::::0;36835:12;36853:49;36835:12;36853:49;36876:21;36853:10;:49:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36834:68;;;36921:7;36913:36;;;::::0;-1:-1:-1;;;36913:36:0;;8018:2:1;36913:36:0::2;::::0;::::2;8000:21:1::0;8057:2;8037:18;;;8030:30;-1:-1:-1;;;8076:18:1;;;8069:46;8132:18;;36913:36:0::2;7816:340:1::0;36913:36:0::2;-1:-1:-1::0;1564:1:0::1;2006:7;:22:::0;36766:191::o;37919:101::-;658:13;:11;:13::i;:::-;37991:14:::1;:21:::0;37919:101::o;38221:193::-;30645:42;31388:43;:47;31384:225;;31457:67;;-1:-1:-1;;;31457:67:0;;31506:4;31457:67;;;6899:34:1;31513:10:0;6949:18:1;;;6942:43;30645:42:0;;31457:40;;6834:18:1;;31457:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31452:146;;31552:30;;-1:-1:-1;;;31552:30:0;;31571:10;31552:30;;;1679:51:1;1652:18;;31552:30:0;1533:203:1;31452:146:0;38365:41:::1;38388:4;38394:2;38398:7;38365:22;:41::i;34198:94::-:0;34264:20;34270:7;34279:4;34264:5;:20::i;:::-;34198:94;:::o;34534:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34429:31::-;;;;;;;:::i;15722:152::-;15794:7;15837:27;15856:7;15837:18;:27::i;13650:233::-;13722:7;-1:-1:-1;;;;;13746:19:0;;13742:60;;13774:28;;-1:-1:-1;;;13774:28:0;;;;;;;;;;;13742:60;-1:-1:-1;;;;;;13820:25:0;;;;;:18;:25;;;;;;11458:13;13820:55;;13650:233::o;934:103::-;658:13;:11;:13::i;:::-;999:30:::1;1026:1;999:18;:30::i;:::-;934:103::o:0;37574:97::-;658:13;:11;:13::i;:::-;37641:10:::1;:22:::0;37574:97::o;37342:115::-;658:13;:11;:13::i;:::-;37422:12:::1;:27;37437:12:::0;37422;:27:::1;:::i;:::-;;37342:115:::0;:::o;15182:104::-;15238:13;15271:7;15264:14;;;;;:::i;37083:146::-;658:13;:11;:13::i;:::-;37171:8:::1;:19;37182:8:::0;37171;:19:::1;:::i;:::-;-1:-1:-1::0;;37201:8:0::1;:20:::0;;-1:-1:-1;;37201:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37083:146::o;35645:1113::-;35227:9;35240:10;35227:23;35219:66;;;;-1:-1:-1;;;35219:66:0;;10567:2:1;35219:66:0;;;10549:21:1;10606:2;10586:18;;;10579:30;10645:32;10625:18;;;10618:60;10695:18;;35219:66:0;10365:354:1;35219:66:0;1608:1:::1;1828:7;;:19:::0;1820:63:::1;;;::::0;-1:-1:-1;;;1820:63:0;;7448:2:1;1820:63:0::1;::::0;::::1;7430:21:1::0;7487:2;7467:18;;;7460:30;7526:33;7506:18;;;7499:61;7577:18;;1820:63:0::1;7246:355:1::0;1820:63:0::1;1608:1;1961:7;:18:::0;35842:10:::2;35770;35828:25:::0;;;:13:::2;:25;::::0;;;;;35803:22:::2;::::0;35770:10;;35803:50:::2;::::0;::::2;:::i;:::-;35791:62;;35880:4;35868:8;:16;35864:285;;35925:15;35936:4:::0;35925:8;:15:::2;:::i;:::-;35910:10;;35909:32;;;;:::i;:::-;35998:10;35984:25;::::0;;;:13:::2;:25;::::0;;;;;35901:40;;-1:-1:-1;35984:32:0::2;::::0;36012:4;;35984:32:::2;:::i;:::-;35970:10;35956:25;::::0;;;:13:::2;:25;::::0;;;;:60;35864:285:::2;;;36115:10;36057:1;36101:25:::0;;;:13:::2;:25;::::0;;;;;36057:1;;-1:-1:-1;36101:36:0::2;::::0;36129:8;;36101:36:::2;:::i;:::-;36087:10;36073:25;::::0;;;:13:::2;:25;::::0;;;;:64;35864:285:::2;36169:19;::::0;::::2;;36161:53;;;::::0;-1:-1:-1;;;36161:53:0;;11494:2:1;36161:53:0::2;::::0;::::2;11476:21:1::0;11533:2;11513:18;;;11506:30;-1:-1:-1;;;11552:18:1;;;11545:51;11613:18;;36161:53:0::2;11292:345:1::0;36161:53:0::2;36261:15;;36249:8;36233:13;13316:12:::0;;13300:13;;:28;;13185:180;36233:13:::2;:24;;;;:::i;:::-;:43;;36225:71;;;::::0;-1:-1:-1;;;36225:71:0;;11844:2:1;36225:71:0::2;::::0;::::2;11826:21:1::0;11883:2;11863:18;;;11856:30;-1:-1:-1;;;11902:18:1;;;11895:45;11957:18;;36225:71:0::2;11642:339:1::0;36225:71:0::2;36353:17;;36341:8;36317:21;36327:10;36317:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;36309:114;;;::::0;-1:-1:-1;;;36309:114:0;;12188:2:1;36309:114:0::2;::::0;::::2;12170:21:1::0;12227:2;12207:18;;;12200:30;12266:34;12246:18;;;12239:62;-1:-1:-1;;;12317:18:1;;;12310:46;12373:19;;36309:114:0::2;11986:412:1::0;36309:114:0::2;36456:14;;36444:8;:26;;36436:99;;;::::0;-1:-1:-1;;;36436:99:0;;12605:2:1;36436:99:0::2;::::0;::::2;12587:21:1::0;12644:2;12624:18;;;12617:30;12683:34;12663:18;;;12656:62;12754:30;12734:18;;;12727:58;12802:19;;36436:99:0::2;12403:424:1::0;36436:99:0::2;36567:5;36554:9;:18;;36546:51;;;::::0;-1:-1:-1;;;36546:51:0;;13034:2:1;36546:51:0::2;::::0;::::2;13016:21:1::0;13073:2;13053:18;;;13046:30;-1:-1:-1;;;13092:18:1;;;13085:50;13152:18;;36546:51:0::2;12832:344:1::0;36546:51:0::2;36610:31;36620:10;36632:8;36610:9;:31::i;:::-;36670:5;36658:9;:17;36654:97;;;36700:10;36692:47;36721:17;36733:5:::0;36721:9:::2;:17;:::i;:::-;36692:47;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;36654:97;-1:-1:-1::0;;1564:1:0::1;2006:7;:22:::0;-1:-1:-1;35645:1113:0:o;18876:234::-;29757:10;18971:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;18971:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;18971:60:0;;;;;;;;;;19047:55;;154:41:1;;;18971:49:0;;29757:10;19047:55;;127:18:1;19047:55:0;;;;;;;18876:234;;:::o;36965:110::-;658:13;:11;:13::i;:::-;37048:19:::1;::::0;;-1:-1:-1;;37025:42:0;::::1;37048:19;::::0;;::::1;37047:20;37025:42;::::0;;36965:110::o;37679:117::-;658:13;:11;:13::i;:::-;37759:22:::1;:29:::0;37679:117::o;34921:255::-;658:13;:11;:13::i;:::-;35051:15:::1;;35039:8;35023:13;13316:12:::0;;13300:13;;:28;;13185:180;35023:13:::1;:24;;;;:::i;:::-;:43;;35001:117;;;::::0;-1:-1:-1;;;35001:117:0;;13383:2:1;35001:117:0::1;::::0;::::1;13365:21:1::0;13422:2;13402:18;;;13395:30;13461:26;13441:18;;;13434:54;13505:18;;35001:117:0::1;13181:348:1::0;35001:117:0::1;35139:29;35149:8;35159;35139:9;:29::i;38422:250::-:0;30645:42;31388:43;:47;31384:225;;31457:67;;-1:-1:-1;;;31457:67:0;;31506:4;31457:67;;;6899:34:1;31513:10:0;6949:18:1;;;6942:43;30645:42:0;;31457:40;;6834:18:1;;31457:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31452:146;;31552:30;;-1:-1:-1;;;31552:30:0;;31571:10;31552:30;;;1679:51:1;1652:18;;31552:30:0;1533:203:1;31452:146:0;38617:47:::1;38640:4;38646:2;38650:7;38659:4;38617:22;:47::i;:::-;38422:250:::0;;;;:::o;38680:341::-;38837:8;;38802:13;;38837:8;;38833:181;;;38910:8;38920:26;38937:8;38920:16;:26::i;:::-;38893:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38862:86;;38680:341;;;:::o;38833:181::-;38988:14;38981:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38680:341;;;:::o;38833:181::-;38680:341;;;:::o;34570:53::-;;;;;;;:::i;37804:107::-;658:13;:11;:13::i;:::-;37879:17:::1;:24:::0;37804:107::o;35313:324::-;35454:10;35366:4;35440:25;;;:13;:25;;;;;;35415:22;;35366:4;;;;35415:50;;35440:25;35415:50;:::i;:::-;35403:62;;35492:4;35480:8;:16;35476:131;;35537:15;35548:4;35537:8;:15;:::i;:::-;35522:10;;35521:32;;;;:::i;:::-;35513:40;;35476:131;;;35594:1;35586:9;;35476:131;-1:-1:-1;35624:5:0;35313:324;-1:-1:-1;;35313:324:0:o;37237:97::-;37281:13;37314:12;37307:19;;;;;:::i;19118:164::-;-1:-1:-1;;;;;19239:25:0;;;19215:4;19239:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;19118:164::o;37465:101::-;658:13;:11;:13::i;:::-;37536:15:::1;:22:::0;37465:101::o;1047:201::-;658:13;:11;:13::i;:::-;-1:-1:-1;;;;;1136:22:0;::::1;1128:73;;;::::0;-1:-1:-1;;;1128:73:0;;14761:2:1;1128:73:0::1;::::0;::::1;14743:21:1::0;14800:2;14780:18;;;14773:30;14839:34;14819:18;;;14812:62;-1:-1:-1;;;14890:18:1;;;14883:36;14936:19;;1128:73:0::1;14559:402:1::0;1128:73:0::1;1212:28;1231:8;1212:18;:28::i;19290:282::-:0;19355:4;19445:13;;19435:7;:23;19392:153;;;;-1:-1:-1;;19496:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;19496:44:0;:49;;19290:282::o;20385:1651::-;20527:27;20557;20576:7;20557:18;:27::i;:::-;20527:57;;20642:4;-1:-1:-1;;;;;20601:45:0;20617:19;-1:-1:-1;;;;;20601:45:0;;20597:86;;20655:28;;-1:-1:-1;;;20655:28:0;;;;;;;;;;;20597:86;20697:27;20198:24;;;:15;:24;;;;;20333:26;;20806:68;20333:26;20848:4;29757:10;20854:19;-1:-1:-1;;;;;19845:32:0;;;19788:28;;19906:20;;19928:30;;19903:56;;19580:397;20806:68;20801:180;;20894:43;20911:4;29757:10;19118:164;:::i;20894:43::-;20889:92;;20946:35;;-1:-1:-1;;;20946:35:0;;;;;;;;;;;20889:92;-1:-1:-1;;;;;20998:16:0;;20994:52;;21023:23;;-1:-1:-1;;;21023:23:0;;;;;;;;;;;20994:52;21142:15;21139:85;;;21207:1;21186:19;21179:30;21139:85;-1:-1:-1;;;;;21276:24:0;;;;;;;:18;:24;;;;;;21274:26;;-1:-1:-1;;21274:26:0;;;21318:22;;;;;;;;;21316:24;;-1:-1:-1;21316:24:0;;;17855:11;17830:23;17826:41;17813:63;-1:-1:-1;;;17813:63:0;21358:26;;;;:17;:26;;;;;:175;;;;-1:-1:-1;;;21554:47:0;;:52;;21550:370;;21659:1;21649:11;;21627:19;21685:30;;;:17;:30;;;;;;:35;;21681:224;;21766:13;;21751:11;:28;21747:139;;21810:30;;;;:17;:30;;;;;:52;;;21747:139;21608:312;21550:370;21967:7;21963:2;-1:-1:-1;;;;;21948:27:0;21957:4;-1:-1:-1;;;;;21948:27:0;-1:-1:-1;;;;;;;;;;;21948:27:0;;;;;;;;;21986:42;20516:1520;;;20385:1651;;;:::o;794:132::-;745:7;772:6;-1:-1:-1;;;;;772:6:0;29757:10;858:23;850:68;;;;-1:-1:-1;;;850:68:0;;15168:2:1;850:68:0;;;15150:21:1;;;15187:18;;;15180:30;15246:34;15226:18;;;15219:62;15298:18;;850:68:0;14966:356:1;22044:193:0;22190:39;22207:4;22213:2;22217:7;22190:39;;;;;;;;;;;;:16;:39::i;27040:1679::-;27120:27;27150;27169:7;27150:18;:27::i;:::-;27120:57;-1:-1:-1;27120:57:0;27190:12;;27312:35;27339:7;20087:27;20198:24;;;:15;:24;;;;;20333:26;;20198:24;;19985:392;27312:35;27255:92;;;;27364:13;27360:244;;;27413:68;27438:15;27455:4;29757:10;27461:19;29670:105;27413:68;27408:184;;27505:43;27522:4;29757:10;19118:164;:::i;27505:43::-;27500:92;;27557:35;;-1:-1:-1;;;27557:35:0;;;;;;;;;;;27500:92;27707:15;27704:101;;;27788:1;27767:19;27760:30;27704:101;-1:-1:-1;;;;;27855:24:0;;;;;;:18;:24;;;;;:60;;27883:32;27855:60;;;17855:11;17830:23;17826:41;17813:63;-1:-1:-1;;;17813:63:0;27932:26;;;;:17;:26;;;;;:205;;;;-1:-1:-1;;;28158:47:0;;:52;;28154:370;;28263:1;28253:11;;28231:19;28289:30;;;:17;:30;;;;;;:35;;28285:224;;28370:13;;28355:11;:28;28351:139;;28414:30;;;;:17;:30;;;;;:52;;;28351:139;28212:312;28154:370;28552:35;;28579:7;;28575:1;;-1:-1:-1;;;;;28552:35:0;;;-1:-1:-1;;;;;;;;;;;28552:35:0;28575:1;;28552:35;-1:-1:-1;;28686:12:0;:14;;;;;;-1:-1:-1;;;;27040:1679:0:o;16429:633::-;16496:7;16531;16633:13;;16626:4;:20;16622:373;;;16671:14;16688:23;;;:17;:23;;;;;;;-1:-1:-1;;;16740:24:0;;:29;;16736:240;;16800:113;16807:6;16817:1;16807:11;16800:113;;-1:-1:-1;;;16878:6:0;16860:25;;;;:17;:25;;;;;;16800:113;;;16946:6;16429:633;-1:-1:-1;;;16429:633:0:o;16736:240::-;16648:347;16622:373;17023:31;;-1:-1:-1;;;17023:31:0;;;;;;;;;;;1256:191;1330:16;1349:6;;-1:-1:-1;;;;;1366:17:0;;;-1:-1:-1;;;;;;1366:17:0;;;;;;1399:40;;1349:6;;;;;;;1399:40;;1330:16;1399:40;1319:128;1256:191;:::o;26823:112::-;26900:27;26910:2;26914:8;26900:27;;;;;;;;;;;;:9;:27::i;22245:407::-;22420:31;22433:4;22439:2;22443:7;22420:12;:31::i;:::-;-1:-1:-1;;;;;22466:14:0;;;:19;22462:183;;22505:56;22536:4;22542:2;22546:7;22555:5;22505:30;:56::i;:::-;22500:145;;22589:40;;-1:-1:-1;;;22589:40:0;;;;;;;;;;;2210:534;2266:13;2298:5;2307:1;2298:10;2294:53;;-1:-1:-1;;2325:10:0;;;;;;;;;;;;-1:-1:-1;;;2325:10:0;;;;;2210:534::o;2294:53::-;2372:5;2357:12;2413:78;2420:9;;2413:78;;2446:8;;;;:::i;:::-;;-1:-1:-1;2469:10:0;;-1:-1:-1;2477:2:0;2469:10;;:::i;:::-;;;2413:78;;;2501:19;2533:6;2523:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2523:17:0;;2501:39;;2551:154;2558:10;;2551:154;;2585:11;2595:1;2585:11;;:::i;:::-;;-1:-1:-1;2654:10:0;2662:2;2654:5;:10;:::i;:::-;2641:24;;:2;:24;:::i;:::-;2628:39;;2611:6;2618;2611:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2611:56:0;;;;;;;;-1:-1:-1;2682:11:0;2691:2;2682:11;;:::i;:::-;;;2551:154;;;2729:6;2210:534;-1:-1:-1;;;;2210:534:0:o;26126:689::-;26257:19;26263:2;26267:8;26257:5;:19::i;:::-;-1:-1:-1;;;;;26318:14:0;;;:19;26314:483;;26372:13;;26420:14;;;26453:233;26484:62;26523:1;26527:2;26531:7;;;;;;26540:5;26484:30;:62::i;:::-;26479:167;;26582:40;;-1:-1:-1;;;26582:40:0;;;;;;;;;;;26479:167;26681:3;26673:5;:11;26453:233;;26768:3;26751:13;;:20;26747:34;;26773:8;;;26747:34;26339:458;;26126:689;;;:::o;22993:716::-;23177:88;;-1:-1:-1;;;23177:88:0;;23156:4;;-1:-1:-1;;;;;23177:45:0;;;;;:88;;29757:10;;23244:4;;23250:7;;23259:5;;23177:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23177:88:0;;;;;;;;-1:-1:-1;;23177:88:0;;;;;;;;;;;;:::i;:::-;;;23173:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23460:6;:13;23477:1;23460:18;23456:235;;23506:40;;-1:-1:-1;;;23506:40:0;;;;;;;;;;;23456:235;23649:6;23643:13;23634:6;23630:2;23626:15;23619:38;23173:529;-1:-1:-1;;;;;;23336:64:0;-1:-1:-1;;;23336:64:0;;-1:-1:-1;22993:716:0;;;;;;:::o;23717:1442::-;23813:13;;23790:20;23841:13;;;23837:44;;23863:18;;-1:-1:-1;;;23863:18:0;;;;;;;;;;;23837:44;-1:-1:-1;;;;;23995:22:0;;;;;;:18;:22;;;;11529:2;23995:22;;;:71;;24033:32;24021:45;;23995:71;;;24083:31;;;:17;:31;;;;;-1:-1:-1;18192:15:0;;18166:24;18162:46;17855:11;17830:23;17826:41;17823:52;17813:63;;24083:173;;24318:23;;;;24083:31;;23995:22;;-1:-1:-1;;;;;;;;;;;23995:22:0;;24445:215;24740:1;24726:12;24722:20;24680:279;24781:3;24772:7;24769:16;24680:279;;24932:7;24922:8;24919:1;-1:-1:-1;;;;;;;;;;;24889:1:0;24886;24881:59;24834:1;24821:15;24680:279;;;24684:77;24992:8;25004:1;24992:13;24988:45;;25014:19;;-1:-1:-1;;;25014:19:0;;;;;;;;;;;24988:45;25050:13;:19;-1:-1:-1;38028:185:0;;;:::o;206:131:1:-;-1:-1:-1;;;;;;280:32:1;;270:43;;260:71;;327:1;324;317:12;342:245;400:6;453:2;441:9;432:7;428:23;424:32;421:52;;;469:1;466;459:12;421:52;508:9;495:23;527:30;551:5;527:30;:::i;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:1;;1848:42;;1838:70;;1904:1;1901;1894:12;1919:254;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:1:o;2360:186::-;2419:6;2472:2;2460:9;2451:7;2447:23;2443:32;2440:52;;;2488:1;2485;2478:12;2440:52;2511:29;2530:9;2511:29;:::i;2551:328::-;2628:6;2636;2644;2697:2;2685:9;2676:7;2672:23;2668:32;2665:52;;;2713:1;2710;2703:12;2665:52;2736:29;2755:9;2736:29;:::i;:::-;2726:39;;2784:38;2818:2;2807:9;2803:18;2784:38;:::i;:::-;2774:48;;2869:2;2858:9;2854:18;2841:32;2831:42;;2551:328;;;;;:::o;2884:127::-;2945:10;2940:3;2936:20;2933:1;2926:31;2976:4;2973:1;2966:15;3000:4;2997:1;2990:15;3016:632;3081:5;3111:18;3152:2;3144:6;3141:14;3138:40;;;3158:18;;:::i;:::-;3233:2;3227:9;3201:2;3287:15;;-1:-1:-1;;3283:24:1;;;3309:2;3279:33;3275:42;3263:55;;;3333:18;;;3353:22;;;3330:46;3327:72;;;3379:18;;:::i;:::-;3419:10;3415:2;3408:22;3448:6;3439:15;;3478:6;3470;3463:22;3518:3;3509:6;3504:3;3500:16;3497:25;3494:45;;;3535:1;3532;3525:12;3494:45;3585:6;3580:3;3573:4;3565:6;3561:17;3548:44;3640:1;3633:4;3624:6;3616;3612:19;3608:30;3601:41;;;;3016:632;;;;;:::o;3653:222::-;3696:5;3749:3;3742:4;3734:6;3730:17;3726:27;3716:55;;3767:1;3764;3757:12;3716:55;3789:80;3865:3;3856:6;3843:20;3836:4;3828:6;3824:17;3789:80;:::i;3880:322::-;3949:6;4002:2;3990:9;3981:7;3977:23;3973:32;3970:52;;;4018:1;4015;4008:12;3970:52;4058:9;4045:23;4091:18;4083:6;4080:30;4077:50;;;4123:1;4120;4113:12;4077:50;4146;4188:7;4179:6;4168:9;4164:22;4146:50;:::i;4207:118::-;4293:5;4286:13;4279:21;4272:5;4269:32;4259:60;;4315:1;4312;4305:12;4330:451;4405:6;4413;4466:2;4454:9;4445:7;4441:23;4437:32;4434:52;;;4482:1;4479;4472:12;4434:52;4521:9;4508:23;4540:28;4562:5;4540:28;:::i;:::-;4587:5;-1:-1:-1;4643:2:1;4628:18;;4615:32;4670:18;4659:30;;4656:50;;;4702:1;4699;4692:12;4656:50;4725;4767:7;4758:6;4747:9;4743:22;4725:50;:::i;:::-;4715:60;;;4330:451;;;;;:::o;4786:315::-;4851:6;4859;4912:2;4900:9;4891:7;4887:23;4883:32;4880:52;;;4928:1;4925;4918:12;4880:52;4951:29;4970:9;4951:29;:::i;:::-;4941:39;;5030:2;5019:9;5015:18;5002:32;5043:28;5065:5;5043:28;:::i;:::-;5090:5;5080:15;;;4786:315;;;;;:::o;5106:254::-;5174:6;5182;5235:2;5223:9;5214:7;5210:23;5206:32;5203:52;;;5251:1;5248;5241:12;5203:52;5287:9;5274:23;5264:33;;5316:38;5350:2;5339:9;5335:18;5316:38;:::i;:::-;5306:48;;5106:254;;;;;:::o;5365:667::-;5460:6;5468;5476;5484;5537:3;5525:9;5516:7;5512:23;5508:33;5505:53;;;5554:1;5551;5544:12;5505:53;5577:29;5596:9;5577:29;:::i;:::-;5567:39;;5625:38;5659:2;5648:9;5644:18;5625:38;:::i;:::-;5615:48;;5710:2;5699:9;5695:18;5682:32;5672:42;;5765:2;5754:9;5750:18;5737:32;5792:18;5784:6;5781:30;5778:50;;;5824:1;5821;5814:12;5778:50;5847:22;;5900:4;5892:13;;5888:27;-1:-1:-1;5878:55:1;;5929:1;5926;5919:12;5878:55;5952:74;6018:7;6013:2;6000:16;5995:2;5991;5987:11;5952:74;:::i;:::-;5942:84;;;5365:667;;;;;;;:::o;6037:260::-;6105:6;6113;6166:2;6154:9;6145:7;6141:23;6137:32;6134:52;;;6182:1;6179;6172:12;6134:52;6205:29;6224:9;6205:29;:::i;:::-;6195:39;;6253:38;6287:2;6276:9;6272:18;6253:38;:::i;6302:380::-;6381:1;6377:12;;;;6424;;;6445:61;;6499:4;6491:6;6487:17;6477:27;;6445:61;6552:2;6544:6;6541:14;6521:18;6518:38;6515:161;;6598:10;6593:3;6589:20;6586:1;6579:31;6633:4;6630:1;6623:15;6661:4;6658:1;6651:15;6515:161;;6302:380;;;:::o;6996:245::-;7063:6;7116:2;7104:9;7095:7;7091:23;7087:32;7084:52;;;7132:1;7129;7122:12;7084:52;7164:9;7158:16;7183:28;7205:5;7183:28;:::i;8287:545::-;8389:2;8384:3;8381:11;8378:448;;;8425:1;8450:5;8446:2;8439:17;8495:4;8491:2;8481:19;8565:2;8553:10;8549:19;8546:1;8542:27;8536:4;8532:38;8601:4;8589:10;8586:20;8583:47;;;-1:-1:-1;8624:4:1;8583:47;8679:2;8674:3;8670:12;8667:1;8663:20;8657:4;8653:31;8643:41;;8734:82;8752:2;8745:5;8742:13;8734:82;;;8797:17;;;8778:1;8767:13;8734:82;;9008:1352;9134:3;9128:10;9161:18;9153:6;9150:30;9147:56;;;9183:18;;:::i;:::-;9212:97;9302:6;9262:38;9294:4;9288:11;9262:38;:::i;:::-;9256:4;9212:97;:::i;:::-;9364:4;;9428:2;9417:14;;9445:1;9440:663;;;;10147:1;10164:6;10161:89;;;-1:-1:-1;10216:19:1;;;10210:26;10161:89;-1:-1:-1;;8965:1:1;8961:11;;;8957:24;8953:29;8943:40;8989:1;8985:11;;;8940:57;10263:81;;9410:944;;9440:663;8234:1;8227:14;;;8271:4;8258:18;;-1:-1:-1;;9476:20:1;;;9594:236;9608:7;9605:1;9602:14;9594:236;;;9697:19;;;9691:26;9676:42;;9789:27;;;;9757:1;9745:14;;;;9624:19;;9594:236;;;9598:3;9858:6;9849:7;9846:19;9843:201;;;9919:19;;;9913:26;-1:-1:-1;;10002:1:1;9998:14;;;10014:3;9994:24;9990:37;9986:42;9971:58;9956:74;;9843:201;-1:-1:-1;;;;;10090:1:1;10074:14;;;10070:22;10057:36;;-1:-1:-1;9008:1352:1:o;10724:127::-;10785:10;10780:3;10776:20;10773:1;10766:31;10816:4;10813:1;10806:15;10840:4;10837:1;10830:15;10856:128;10923:9;;;10944:11;;;10941:37;;;10958:18;;:::i;10989:168::-;11062:9;;;11093;;11110:15;;;11104:22;;11090:37;11080:71;;11131:18;;:::i;11162:125::-;11227:9;;;11248:10;;;11245:36;;;11261:18;;:::i;13534:1020::-;13710:3;13739:1;13772:6;13766:13;13802:36;13828:9;13802:36;:::i;:::-;13857:1;13874:18;;;13901:133;;;;14048:1;14043:356;;;;13867:532;;13901:133;-1:-1:-1;;13934:24:1;;13922:37;;14007:14;;14000:22;13988:35;;13979:45;;;-1:-1:-1;13901:133:1;;14043:356;14074:6;14071:1;14064:17;14104:4;14149:2;14146:1;14136:16;14174:1;14188:165;14202:6;14199:1;14196:13;14188:165;;;14280:14;;14267:11;;;14260:35;14323:16;;;;14217:10;;14188:165;;;14192:3;;;14382:6;14377:3;14373:16;14366:23;;13867:532;;;;;14430:6;14424:13;14446:68;14505:8;14500:3;14493:4;14485:6;14481:17;14446:68;:::i;:::-;14530:18;;13534:1020;-1:-1:-1;;;;13534:1020:1:o;15327:135::-;15366:3;15387:17;;;15384:43;;15407:18;;:::i;:::-;-1:-1:-1;15454:1:1;15443:13;;15327:135::o;15467:127::-;15528:10;15523:3;15519:20;15516:1;15509:31;15559:4;15556:1;15549:15;15583:4;15580:1;15573:15;15599:120;15639:1;15665;15655:35;;15670:18;;:::i;:::-;-1:-1:-1;15704:9:1;;15599:120::o;15724:112::-;15756:1;15782;15772:35;;15787:18;;:::i;:::-;-1:-1:-1;15821:9:1;;15724:112::o;15841:127::-;15902:10;15897:3;15893:20;15890:1;15883:31;15933:4;15930:1;15923:15;15957:4;15954:1;15947:15;15973:489;-1:-1:-1;;;;;16242:15:1;;;16224:34;;16294:15;;16289:2;16274:18;;16267:43;16341:2;16326:18;;16319:34;;;16389:3;16384:2;16369:18;;16362:31;;;16167:4;;16410:46;;16436:19;;16428:6;16410:46;:::i;:::-;16402:54;15973:489;-1:-1:-1;;;;;;15973:489:1:o;16467:249::-;16536:6;16589:2;16577:9;16568:7;16564:23;16560:32;16557:52;;;16605:1;16602;16595:12;16557:52;16637:9;16631:16;16656:30;16680:5;16656:30;:::i

Swarm Source

ipfs://315a8818bd96ae74a52982b5359ff11748803cfa090b2cba806c055801d170f3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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