ETH Price: $3,183.80 (+3.16%)

Token

The Wisdomians (TWD)
 

Overview

Max Total Supply

9,999 TWD

Holders

705

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
10 TWD
0xd8800558cc5ae6ab340056327043f0950022db4f
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:
TheWisdomians

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-07
*/

// SPDX-License-Identifier: MIT
// Dev : A Square
pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

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

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

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() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
   _status = _ENTERED;

        _;
        _status = _NOT_ENTERED;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
 
    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);
    }
}
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    constructor() {
        _transferOwnership(_msgSender());
    }
 
    function owner() public view virtual returns (address) {
        return _owner;
    } 
    modifier onlyOwner() {
        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);
    }
}
 
library Address { 
    function isContract(address account) internal view returns (bool) { 
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    } 
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
 
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    } 
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
 
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
 
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    } 
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
 
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
 
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else { 
            if (returndata.length > 0) { 

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
interface IERC721Receiver { 
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
 
interface IERC165 { 
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
abstract contract ERC165 is IERC165 { 
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
} 
interface IERC721 is IERC165 { 
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); 
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); 
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved); 
    function balanceOf(address owner) external view returns (uint256 balance); 
    function ownerOf(uint256 tokenId) external view returns (address owner); 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external; 
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external; 
    function approve(address to, uint256 tokenId) external;
 
    function getApproved(uint256 tokenId) external view returns (address operator); 
    function setApprovalForAll(address operator, bool _approved) external; 
    function isApprovedForAll(address owner, address operator) external view returns (bool); 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
} 
interface IERC721Enumerable is IERC721 { 
    function totalSupply() external view returns (uint256); 
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); 
    function tokenByIndex(uint256 index) external view returns (uint256);
}  
interface IERC721Metadata is IERC721 { 
    function name() external view returns (string memory); 
    function symbol() external view returns (string memory); 
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

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

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

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

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 1;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

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

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

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

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

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

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

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

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, from);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

    /**
     * @dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

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

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, from);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

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

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

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

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

contract TheWisdomians is Ownable, ERC721A, ReentrancyGuard {
  using Strings for uint256;

  uint256 public MAX_PER_Transaction = 10; // maximam amount that user can mint/Transaction
  uint256 public MAX_PER_WALLET = 10; // maximam amount that user can mint/Wallet
  uint256 public TOKEN_NUMBER = 5000;
  uint256 private constant TotalCollectionSize_ = 9999; // total number of nfts
  uint256 private constant MaxMintPerBatch_ = 20; //max mint per transaction
  uint256 public PRICE = 0.0012 ether;

  mapping(address => uint256) public publicClaimedBy;

  string private _baseTokenURI;
  string private second_baseTokenURI;
  string private _uriBeforeReveal;
  bool public revealed = false;

  uint public status = 0; //0-pause 1-Public
 
  constructor() ERC721A("The Wisdomians","TWD") {
  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }
 
  function mint(uint256 quantity) external payable callerIsUser {
    require(status == 1 , "Sale is not Active");
    require(totalSupply() + quantity <= TotalCollectionSize_, "reached max supply");
    require(quantity <= MAX_PER_Transaction,"can not mint this many");
    require(msg.value >= PRICE * quantity, "Need to send more ETH.");

    publicClaimedBy[msg.sender] += quantity;
    require(publicClaimedBy[msg.sender] <= MAX_PER_WALLET, "Purchase exceeds max allowed");

    _safeMint(msg.sender, quantity);
  }

   function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
    require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");

    if(revealed == false){
        return _uriBeforeReveal;
    }

    if(tokenId <= TOKEN_NUMBER) {
        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length > 0
            ? string(abi.encodePacked(baseURI, "/", tokenId.toString(), ".json")) : "";
    }
    else {
        return
            bytes(second_baseTokenURI).length > 0
            ? string(abi.encodePacked(second_baseTokenURI, "/", tokenId.toString(), ".json")) : "";
    }
  }

   function changeRevealStatus() public onlyOwner {
        revealed = true;
    }

  function setBaseURI(string memory baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }

  function setSecondBaseURI(string memory baseURI) external onlyOwner {
    second_baseTokenURI = baseURI;
  }

  function setURIbeforeReveal(string memory URI) external onlyOwner {
    _uriBeforeReveal = URI;
  }

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

  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }
  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return _ownershipOf(tokenId);
  }

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

  function changeMintPrice(uint256 _newPrice) external onlyOwner
  {
      PRICE = _newPrice;
  }


  function changeMAX_PER_Transaction(uint256 q) external onlyOwner
  {
      MAX_PER_Transaction = q;
  }

    function changeMAX_PER_WALLET(uint256 q) external onlyOwner
  {
      MAX_PER_WALLET = q;
  }

  function changeTOKEN_NUMBER(uint256 q) external onlyOwner
  {
      TOKEN_NUMBER = q;
  }


  function setStatus(uint256 s)external onlyOwner{
      status = s;
  }

   function getStatus()public view returns(uint){
      return status;
  }
    
  function getPrice(uint256 _quantity) public view returns (uint256) {
       
        return _quantity*PRICE;
    }

   function burnNFT(uint256 tokenId) public {
       require(ownerOf(tokenId) == msg.sender,"You are not the owner of tokenId");
        _burn(tokenId);
  }

  function airdrop(address sendTo, uint quantity)public onlyOwner{
    require(totalSupply() + quantity <= TotalCollectionSize_, "reached max supply");
    _safeMint(sendTo, quantity);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","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":"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":"MAX_PER_Transaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_NUMBER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sendTo","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","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":"burnNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_Transaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_WALLET","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeRevealStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeTOKEN_NUMBER","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setSecondBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"s","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setURIbeforeReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600a8055600a600b55611388600c5566044364c5bb0000600d556000601260006101000a81548160ff02191690831515021790555060006013553480156200004b57600080fd5b506040518060400160405280600e81526020017f54686520576973646f6d69616e730000000000000000000000000000000000008152506040518060400160405280600381526020017f5457440000000000000000000000000000000000000000000000000000000000815250620000d8620000cc6200013060201b60201c565b6200013860201b60201c565b8160039080519060200190620000f092919062000205565b5080600490805190602001906200010992919062000205565b506200011a620001fc60201b60201c565b600181905550505060016009819055506200031a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b8280546200021390620002b5565b90600052602060002090601f01602090048101928262000237576000855562000283565b82601f106200025257805160ff191683800117855562000283565b8280016001018555821562000283579182015b828111156200028257825182559160200191906001019062000265565b5b50905062000292919062000296565b5090565b5b80821115620002b157600081600090555060010162000297565b5090565b60006002820490506001821680620002ce57607f821691505b60208210811415620002e557620002e4620002eb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6147b8806200032a6000396000f3fe6080604052600436106102465760003560e01c806369ba1a7511610139578063a0712d68116100b6578063c7b8fca71161007a578063c7b8fca714610831578063c87b56dd1461085a578063dc33e68114610897578063e7572230146108d4578063e985e9c514610911578063f2fde38b1461094e57610246565b8063a0712d6814610783578063a22cb4651461079f578063a40ece7a146107c8578063ac446002146107f1578063b88d4fde1461080857610246565b80638d859f3e116100fd5780638d859f3e1461069c5780638da5cb5b146106c75780639231ab2a146106f2578063930fa27b1461072f57806395d89b411461075857610246565b806369ba1a75146105b957806370a08231146105e2578063715018a61461061f57806375236143146106365780638ba4cc3c1461067357610246565b80632d5b005d116101c7578063518302271161018b57806351830227146104d257806351d7ff93146104fd57806355f804b3146105285780636352211e1461055157806364662f681461058e57610246565b80632d5b005d146104155780633fd173661461042c57806342842e0e1461045557806345ab07ee1461047e5780634e69d560146104a757610246565b806318160ddd1161020e57806318160ddd14610344578063200d2ed21461036f57806323b872dd1461039a5780632890e0d7146103c35780632ba2865b146103ec57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f05780630f2cdd6c14610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613865565b610977565b60405161027f9190613df0565b60405180910390f35b34801561029457600080fd5b5061029d610a59565b6040516102aa9190613e0b565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613908565b610aeb565b6040516102e79190613d89565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613825565b610b67565b005b34801561032557600080fd5b5061032e610c72565b60405161033b9190613fc8565b60405180910390f35b34801561035057600080fd5b50610359610c78565b6040516103669190613fc8565b60405180910390f35b34801561037b57600080fd5b50610384610c8f565b6040516103919190613fc8565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc919061370f565b610c95565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190613908565b610ca5565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613908565b610d27565b005b34801561042157600080fd5b5061042a610dad565b005b34801561043857600080fd5b50610453600480360381019061044e9190613908565b610e46565b005b34801561046157600080fd5b5061047c6004803603810190610477919061370f565b610ecc565b005b34801561048a57600080fd5b506104a560048036038101906104a09190613908565b610eec565b005b3480156104b357600080fd5b506104bc610f72565b6040516104c99190613fc8565b60405180910390f35b3480156104de57600080fd5b506104e7610f7c565b6040516104f49190613df0565b60405180910390f35b34801561050957600080fd5b50610512610f8f565b60405161051f9190613fc8565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a91906138bf565b610f95565b005b34801561055d57600080fd5b5061057860048036038101906105739190613908565b61102b565b6040516105859190613d89565b60405180910390f35b34801561059a57600080fd5b506105a3611041565b6040516105b09190613fc8565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190613908565b611047565b005b3480156105ee57600080fd5b50610609600480360381019061060491906136a2565b6110cd565b6040516106169190613fc8565b60405180910390f35b34801561062b57600080fd5b5061063461119d565b005b34801561064257600080fd5b5061065d600480360381019061065891906136a2565b611225565b60405161066a9190613fc8565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613825565b61123d565b005b3480156106a857600080fd5b506106b161131e565b6040516106be9190613fc8565b60405180910390f35b3480156106d357600080fd5b506106dc611324565b6040516106e99190613d89565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190613908565b61134d565b6040516107269190613fad565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906138bf565b611365565b005b34801561076457600080fd5b5061076d6113fb565b60405161077a9190613e0b565b60405180910390f35b61079d60048036038101906107989190613908565b61148d565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906137e5565b611713565b005b3480156107d457600080fd5b506107ef60048036038101906107ea9190613908565b61188b565b005b3480156107fd57600080fd5b50610806611911565b005b34801561081457600080fd5b5061082f600480360381019061082a9190613762565b611a92565b005b34801561083d57600080fd5b50610858600480360381019061085391906138bf565b611b0e565b005b34801561086657600080fd5b50610881600480360381019061087c9190613908565b611ba4565b60405161088e9190613e0b565b60405180910390f35b3480156108a357600080fd5b506108be60048036038101906108b991906136a2565b611d61565b6040516108cb9190613fc8565b60405180910390f35b3480156108e057600080fd5b506108fb60048036038101906108f69190613908565b611d73565b6040516109089190613fc8565b60405180910390f35b34801561091d57600080fd5b50610938600480360381019061093391906136cf565b611d8a565b6040516109459190613df0565b60405180910390f35b34801561095a57600080fd5b50610975600480360381019061097091906136a2565b611e1e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a4257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a525750610a5182611f16565b5b9050919050565b606060038054610a68906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610a94906142ac565b8015610ae15780601f10610ab657610100808354040283529160200191610ae1565b820191906000526020600020905b815481529060010190602001808311610ac457829003601f168201915b5050505050905090565b6000610af682611f80565b610b2c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b728261102b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bda576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bf9611fce565b73ffffffffffffffffffffffffffffffffffffffff1614158015610c2b5750610c2981610c24611fce565b611d8a565b155b15610c62576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6d838383611fd6565b505050565b600b5481565b6000610c82612088565b6002546001540303905090565b60135481565b610ca0838383612091565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610cc58261102b565b73ffffffffffffffffffffffffffffffffffffffff1614610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1290613f0d565b60405180910390fd5b610d2481612547565b50565b610d2f611fce565b73ffffffffffffffffffffffffffffffffffffffff16610d4d611324565b73ffffffffffffffffffffffffffffffffffffffff1614610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90613ead565b60405180910390fd5b80600b8190555050565b610db5611fce565b73ffffffffffffffffffffffffffffffffffffffff16610dd3611324565b73ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090613ead565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b610e4e611fce565b73ffffffffffffffffffffffffffffffffffffffff16610e6c611324565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613ead565b60405180910390fd5b80600d8190555050565b610ee783838360405180602001604052806000815250611a92565b505050565b610ef4611fce565b73ffffffffffffffffffffffffffffffffffffffff16610f12611324565b73ffffffffffffffffffffffffffffffffffffffff1614610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90613ead565b60405180910390fd5b80600c8190555050565b6000601354905090565b601260009054906101000a900460ff1681565b600a5481565b610f9d611fce565b73ffffffffffffffffffffffffffffffffffffffff16610fbb611324565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890613ead565b60405180910390fd5b80600f9080519060200190611027929190613473565b5050565b600061103682612555565b600001519050919050565b600c5481565b61104f611fce565b73ffffffffffffffffffffffffffffffffffffffff1661106d611324565b73ffffffffffffffffffffffffffffffffffffffff16146110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90613ead565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611135576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6111a5611fce565b73ffffffffffffffffffffffffffffffffffffffff166111c3611324565b73ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121090613ead565b60405180910390fd5b61122360006127e4565b565b600e6020528060005260406000206000915090505481565b611245611fce565b73ffffffffffffffffffffffffffffffffffffffff16611263611324565b73ffffffffffffffffffffffffffffffffffffffff16146112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b090613ead565b60405180910390fd5b61270f816112c5610c78565b6112cf91906140cd565b1115611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790613e8d565b60405180910390fd5b61131a82826128a8565b5050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113556134f9565b61135e82612555565b9050919050565b61136d611fce565b73ffffffffffffffffffffffffffffffffffffffff1661138b611324565b73ffffffffffffffffffffffffffffffffffffffff16146113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890613ead565b60405180910390fd5b80601090805190602001906113f7929190613473565b5050565b60606004805461140a906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611436906142ac565b80156114835780601f1061145857610100808354040283529160200191611483565b820191906000526020600020905b81548152906001019060200180831161146657829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290613e6d565b60405180910390fd5b600160135414611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790613e4d565b60405180910390fd5b61270f8161154c610c78565b61155691906140cd565b1115611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90613e8d565b60405180910390fd5b600a548111156115dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d390613f4d565b60405180910390fd5b80600d546115ea9190614154565b34101561162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390613f2d565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461167b91906140cd565b92505081905550600b54600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd90613f6d565b60405180910390fd5b61171033826128a8565b50565b61171b611fce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611780576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806008600061178d611fce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661183a611fce565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161187f9190613df0565b60405180910390a35050565b611893611fce565b73ffffffffffffffffffffffffffffffffffffffff166118b1611324565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613ead565b60405180910390fd5b80600a8190555050565b611919611fce565b73ffffffffffffffffffffffffffffffffffffffff16611937611324565b73ffffffffffffffffffffffffffffffffffffffff161461198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490613ead565b60405180910390fd5b600260095414156119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90613f8d565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611a0190613d74565b60006040518083038185875af1925050503d8060008114611a3e576040519150601f19603f3d011682016040523d82523d6000602084013e611a43565b606091505b5050905080611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613eed565b60405180910390fd5b506001600981905550565b611a9d848484612091565b611abc8373ffffffffffffffffffffffffffffffffffffffff166128c6565b8015611ad15750611acf848484846128d9565b155b15611b08576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611b16611fce565b73ffffffffffffffffffffffffffffffffffffffff16611b34611324565b73ffffffffffffffffffffffffffffffffffffffff1614611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190613ead565b60405180910390fd5b8060119080519060200190611ba0929190613473565b5050565b6060611baf82611f80565b611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590613ecd565b60405180910390fd5b60001515601260009054906101000a900460ff1615151415611c9c5760118054611c17906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611c43906142ac565b8015611c905780601f10611c6557610100808354040283529160200191611c90565b820191906000526020600020905b815481529060010190602001808311611c7357829003601f168201915b50505050509050611d5c565b600c548211611d02576000611caf612a39565b90506000815111611ccf5760405180602001604052806000815250611cfa565b80611cd984612acb565b604051602001611cea929190613d00565b6040516020818303038152906040525b915050611d5c565b600060108054611d11906142ac565b905011611d2d5760405180602001604052806000815250611d59565b6010611d3883612acb565b604051602001611d49929190613d3a565b6040516020818303038152906040525b90505b919050565b6000611d6c82612c2c565b9050919050565b6000600d5482611d839190614154565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e26611fce565b73ffffffffffffffffffffffffffffffffffffffff16611e44611324565b73ffffffffffffffffffffffffffffffffffffffff1614611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9190613ead565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0190613e2d565b60405180910390fd5b611f13816127e4565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611f8b612088565b11158015611f9a575060015482105b8015611fc7575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600061209c82612555565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612107576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612128611fce565b73ffffffffffffffffffffffffffffffffffffffff161480612157575061215685612151611fce565b611d8a565b5b8061219c5750612165611fce565b73ffffffffffffffffffffffffffffffffffffffff1661218484610aeb565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806121d5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561223c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122498585856001612c96565b61225560008487611fd6565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156124d55760015482146124d457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125408585856001612c9c565b5050505050565b612552816000612ca2565b50565b61255d6134f9565b60008290508061256b612088565b1115801561257a575060015481105b156127ad576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516127ab57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461268f5780925050506127df565b5b6001156127aa57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127a55780925050506127df565b612690565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128c2828260405180602001604052806000815250613092565b5050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128ff611fce565b8786866040518563ffffffff1660e01b81526004016129219493929190613da4565b602060405180830381600087803b15801561293b57600080fd5b505af192505050801561296c57506040513d601f19601f820116820180604052508101906129699190613892565b60015b6129e6573d806000811461299c576040519150601f19603f3d011682016040523d82523d6000602084013e6129a1565b606091505b506000815114156129de576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600f8054612a48906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612a74906142ac565b8015612ac15780601f10612a9657610100808354040283529160200191612ac1565b820191906000526020600020905b815481529060010190602001808311612aa457829003601f168201915b5050505050905090565b60606000821415612b13576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c27565b600082905060005b60008214612b45578080612b2e9061430f565b915050600a82612b3e9190614123565b9150612b1b565b60008167ffffffffffffffff811115612b6157612b60614445565b5b6040519080825280601f01601f191660200182016040528015612b935781602001600182028036833780820191505090505b5090505b60008514612c2057600182612bac91906141ae565b9150600a85612bbb9190614358565b6030612bc791906140cd565b60f81b818381518110612bdd57612bdc614416565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c199190614123565b9450612b97565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b6000612cad83612555565b90506000816000015190508215612d8e5760008173ffffffffffffffffffffffffffffffffffffffff16612cdf611fce565b73ffffffffffffffffffffffffffffffffffffffff161480612d0e5750612d0d82612d08611fce565b611d8a565b5b80612d535750612d1c611fce565b73ffffffffffffffffffffffffffffffffffffffff16612d3b86610aeb565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612d8c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b612d9c816000866001612c96565b612da860008583611fd6565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561300c57600154821461300b57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461307a816000866001612c9c565b60026000815480929190600101919050555050505050565b61309f83838360016130a4565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613112576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141561314d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61315a6000868387612c96565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561332457506133238773ffffffffffffffffffffffffffffffffffffffff166128c6565b5b156133ea575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461339960008884806001019550886128d9565b6133cf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561332a5782600154146133e557600080fd5b613456565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156133eb575b81600181905550505061346c6000868387612c9c565b5050505050565b82805461347f906142ac565b90600052602060002090601f0160209004810192826134a157600085556134e8565b82601f106134ba57805160ff19168380011785556134e8565b828001600101855582156134e8579182015b828111156134e75782518255916020019190600101906134cc565b5b5090506134f5919061353c565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561355557600081600090555060010161353d565b5090565b600061356c61356784614008565b613fe3565b90508281526020810184848401111561358857613587614479565b5b61359384828561426a565b509392505050565b60006135ae6135a984614039565b613fe3565b9050828152602081018484840111156135ca576135c9614479565b5b6135d584828561426a565b509392505050565b6000813590506135ec81614726565b92915050565b6000813590506136018161473d565b92915050565b60008135905061361681614754565b92915050565b60008151905061362b81614754565b92915050565b600082601f83011261364657613645614474565b5b8135613656848260208601613559565b91505092915050565b600082601f83011261367457613673614474565b5b813561368484826020860161359b565b91505092915050565b60008135905061369c8161476b565b92915050565b6000602082840312156136b8576136b7614483565b5b60006136c6848285016135dd565b91505092915050565b600080604083850312156136e6576136e5614483565b5b60006136f4858286016135dd565b9250506020613705858286016135dd565b9150509250929050565b60008060006060848603121561372857613727614483565b5b6000613736868287016135dd565b9350506020613747868287016135dd565b92505060406137588682870161368d565b9150509250925092565b6000806000806080858703121561377c5761377b614483565b5b600061378a878288016135dd565b945050602061379b878288016135dd565b93505060406137ac8782880161368d565b925050606085013567ffffffffffffffff8111156137cd576137cc61447e565b5b6137d987828801613631565b91505092959194509250565b600080604083850312156137fc576137fb614483565b5b600061380a858286016135dd565b925050602061381b858286016135f2565b9150509250929050565b6000806040838503121561383c5761383b614483565b5b600061384a858286016135dd565b925050602061385b8582860161368d565b9150509250929050565b60006020828403121561387b5761387a614483565b5b600061388984828501613607565b91505092915050565b6000602082840312156138a8576138a7614483565b5b60006138b68482850161361c565b91505092915050565b6000602082840312156138d5576138d4614483565b5b600082013567ffffffffffffffff8111156138f3576138f261447e565b5b6138ff8482850161365f565b91505092915050565b60006020828403121561391e5761391d614483565b5b600061392c8482850161368d565b91505092915050565b61393e816141e2565b82525050565b61394d816141e2565b82525050565b61395c816141f4565b82525050565b61396b816141f4565b82525050565b600061397c8261407f565b6139868185614095565b9350613996818560208601614279565b61399f81614488565b840191505092915050565b60006139b58261408a565b6139bf81856140b1565b93506139cf818560208601614279565b6139d881614488565b840191505092915050565b60006139ee8261408a565b6139f881856140c2565b9350613a08818560208601614279565b80840191505092915050565b60008154613a21816142ac565b613a2b81866140c2565b94506001821660008114613a465760018114613a5757613a8a565b60ff19831686528186019350613a8a565b613a608561406a565b60005b83811015613a8257815481890152600182019150602081019050613a63565b838801955050505b50505092915050565b6000613aa06026836140b1565b9150613aab82614499565b604082019050919050565b6000613ac36012836140b1565b9150613ace826144e8565b602082019050919050565b6000613ae6601e836140b1565b9150613af182614511565b602082019050919050565b6000613b096012836140b1565b9150613b148261453a565b602082019050919050565b6000613b2c6005836140c2565b9150613b3782614563565b600582019050919050565b6000613b4f6020836140b1565b9150613b5a8261458c565b602082019050919050565b6000613b72602f836140b1565b9150613b7d826145b5565b604082019050919050565b6000613b956000836140a6565b9150613ba082614604565b600082019050919050565b6000613bb86010836140b1565b9150613bc382614607565b602082019050919050565b6000613bdb6020836140b1565b9150613be682614630565b602082019050919050565b6000613bfe6016836140b1565b9150613c0982614659565b602082019050919050565b6000613c216016836140b1565b9150613c2c82614682565b602082019050919050565b6000613c44601c836140b1565b9150613c4f826146ab565b602082019050919050565b6000613c67601f836140b1565b9150613c72826146d4565b602082019050919050565b6000613c8a6001836140c2565b9150613c95826146fd565b600182019050919050565b606082016000820151613cb66000850182613935565b506020820151613cc96020850182613cf1565b506040820151613cdc6040850182613953565b50505050565b613ceb8161424c565b82525050565b613cfa81614256565b82525050565b6000613d0c82856139e3565b9150613d1782613c7d565b9150613d2382846139e3565b9150613d2e82613b1f565b91508190509392505050565b6000613d468285613a14565b9150613d5182613c7d565b9150613d5d82846139e3565b9150613d6882613b1f565b91508190509392505050565b6000613d7f82613b88565b9150819050919050565b6000602082019050613d9e6000830184613944565b92915050565b6000608082019050613db96000830187613944565b613dc66020830186613944565b613dd36040830185613ce2565b8181036060830152613de58184613971565b905095945050505050565b6000602082019050613e056000830184613962565b92915050565b60006020820190508181036000830152613e2581846139aa565b905092915050565b60006020820190508181036000830152613e4681613a93565b9050919050565b60006020820190508181036000830152613e6681613ab6565b9050919050565b60006020820190508181036000830152613e8681613ad9565b9050919050565b60006020820190508181036000830152613ea681613afc565b9050919050565b60006020820190508181036000830152613ec681613b42565b9050919050565b60006020820190508181036000830152613ee681613b65565b9050919050565b60006020820190508181036000830152613f0681613bab565b9050919050565b60006020820190508181036000830152613f2681613bce565b9050919050565b60006020820190508181036000830152613f4681613bf1565b9050919050565b60006020820190508181036000830152613f6681613c14565b9050919050565b60006020820190508181036000830152613f8681613c37565b9050919050565b60006020820190508181036000830152613fa681613c5a565b9050919050565b6000606082019050613fc26000830184613ca0565b92915050565b6000602082019050613fdd6000830184613ce2565b92915050565b6000613fed613ffe565b9050613ff982826142de565b919050565b6000604051905090565b600067ffffffffffffffff82111561402357614022614445565b5b61402c82614488565b9050602081019050919050565b600067ffffffffffffffff82111561405457614053614445565b5b61405d82614488565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140d88261424c565b91506140e38361424c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561411857614117614389565b5b828201905092915050565b600061412e8261424c565b91506141398361424c565b925082614149576141486143b8565b5b828204905092915050565b600061415f8261424c565b915061416a8361424c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141a3576141a2614389565b5b828202905092915050565b60006141b98261424c565b91506141c48361424c565b9250828210156141d7576141d6614389565b5b828203905092915050565b60006141ed8261422c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561429757808201518184015260208101905061427c565b838111156142a6576000848401525b50505050565b600060028204905060018216806142c457607f821691505b602082108114156142d8576142d76143e7565b5b50919050565b6142e782614488565b810181811067ffffffffffffffff8211171561430657614305614445565b5b80604052505050565b600061431a8261424c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561434d5761434c614389565b5b600182019050919050565b60006143638261424c565b915061436e8361424c565b92508261437e5761437d6143b8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f596f7520617265206e6f7420746865206f776e6572206f6620746f6b656e4964600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b61472f816141e2565b811461473a57600080fd5b50565b614746816141f4565b811461475157600080fd5b50565b61475d81614200565b811461476857600080fd5b50565b6147748161424c565b811461477f57600080fd5b5056fea2646970667358221220851238accf411fe30275cf6d0985f67c5172c1490c5d7c2a99d4fb262885865a64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102465760003560e01c806369ba1a7511610139578063a0712d68116100b6578063c7b8fca71161007a578063c7b8fca714610831578063c87b56dd1461085a578063dc33e68114610897578063e7572230146108d4578063e985e9c514610911578063f2fde38b1461094e57610246565b8063a0712d6814610783578063a22cb4651461079f578063a40ece7a146107c8578063ac446002146107f1578063b88d4fde1461080857610246565b80638d859f3e116100fd5780638d859f3e1461069c5780638da5cb5b146106c75780639231ab2a146106f2578063930fa27b1461072f57806395d89b411461075857610246565b806369ba1a75146105b957806370a08231146105e2578063715018a61461061f57806375236143146106365780638ba4cc3c1461067357610246565b80632d5b005d116101c7578063518302271161018b57806351830227146104d257806351d7ff93146104fd57806355f804b3146105285780636352211e1461055157806364662f681461058e57610246565b80632d5b005d146104155780633fd173661461042c57806342842e0e1461045557806345ab07ee1461047e5780634e69d560146104a757610246565b806318160ddd1161020e57806318160ddd14610344578063200d2ed21461036f57806323b872dd1461039a5780632890e0d7146103c35780632ba2865b146103ec57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f05780630f2cdd6c14610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613865565b610977565b60405161027f9190613df0565b60405180910390f35b34801561029457600080fd5b5061029d610a59565b6040516102aa9190613e0b565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613908565b610aeb565b6040516102e79190613d89565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613825565b610b67565b005b34801561032557600080fd5b5061032e610c72565b60405161033b9190613fc8565b60405180910390f35b34801561035057600080fd5b50610359610c78565b6040516103669190613fc8565b60405180910390f35b34801561037b57600080fd5b50610384610c8f565b6040516103919190613fc8565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc919061370f565b610c95565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190613908565b610ca5565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613908565b610d27565b005b34801561042157600080fd5b5061042a610dad565b005b34801561043857600080fd5b50610453600480360381019061044e9190613908565b610e46565b005b34801561046157600080fd5b5061047c6004803603810190610477919061370f565b610ecc565b005b34801561048a57600080fd5b506104a560048036038101906104a09190613908565b610eec565b005b3480156104b357600080fd5b506104bc610f72565b6040516104c99190613fc8565b60405180910390f35b3480156104de57600080fd5b506104e7610f7c565b6040516104f49190613df0565b60405180910390f35b34801561050957600080fd5b50610512610f8f565b60405161051f9190613fc8565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a91906138bf565b610f95565b005b34801561055d57600080fd5b5061057860048036038101906105739190613908565b61102b565b6040516105859190613d89565b60405180910390f35b34801561059a57600080fd5b506105a3611041565b6040516105b09190613fc8565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190613908565b611047565b005b3480156105ee57600080fd5b50610609600480360381019061060491906136a2565b6110cd565b6040516106169190613fc8565b60405180910390f35b34801561062b57600080fd5b5061063461119d565b005b34801561064257600080fd5b5061065d600480360381019061065891906136a2565b611225565b60405161066a9190613fc8565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613825565b61123d565b005b3480156106a857600080fd5b506106b161131e565b6040516106be9190613fc8565b60405180910390f35b3480156106d357600080fd5b506106dc611324565b6040516106e99190613d89565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190613908565b61134d565b6040516107269190613fad565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906138bf565b611365565b005b34801561076457600080fd5b5061076d6113fb565b60405161077a9190613e0b565b60405180910390f35b61079d60048036038101906107989190613908565b61148d565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906137e5565b611713565b005b3480156107d457600080fd5b506107ef60048036038101906107ea9190613908565b61188b565b005b3480156107fd57600080fd5b50610806611911565b005b34801561081457600080fd5b5061082f600480360381019061082a9190613762565b611a92565b005b34801561083d57600080fd5b50610858600480360381019061085391906138bf565b611b0e565b005b34801561086657600080fd5b50610881600480360381019061087c9190613908565b611ba4565b60405161088e9190613e0b565b60405180910390f35b3480156108a357600080fd5b506108be60048036038101906108b991906136a2565b611d61565b6040516108cb9190613fc8565b60405180910390f35b3480156108e057600080fd5b506108fb60048036038101906108f69190613908565b611d73565b6040516109089190613fc8565b60405180910390f35b34801561091d57600080fd5b50610938600480360381019061093391906136cf565b611d8a565b6040516109459190613df0565b60405180910390f35b34801561095a57600080fd5b50610975600480360381019061097091906136a2565b611e1e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a4257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a525750610a5182611f16565b5b9050919050565b606060038054610a68906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610a94906142ac565b8015610ae15780601f10610ab657610100808354040283529160200191610ae1565b820191906000526020600020905b815481529060010190602001808311610ac457829003601f168201915b5050505050905090565b6000610af682611f80565b610b2c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b728261102b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bda576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bf9611fce565b73ffffffffffffffffffffffffffffffffffffffff1614158015610c2b5750610c2981610c24611fce565b611d8a565b155b15610c62576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6d838383611fd6565b505050565b600b5481565b6000610c82612088565b6002546001540303905090565b60135481565b610ca0838383612091565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610cc58261102b565b73ffffffffffffffffffffffffffffffffffffffff1614610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1290613f0d565b60405180910390fd5b610d2481612547565b50565b610d2f611fce565b73ffffffffffffffffffffffffffffffffffffffff16610d4d611324565b73ffffffffffffffffffffffffffffffffffffffff1614610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90613ead565b60405180910390fd5b80600b8190555050565b610db5611fce565b73ffffffffffffffffffffffffffffffffffffffff16610dd3611324565b73ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090613ead565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b610e4e611fce565b73ffffffffffffffffffffffffffffffffffffffff16610e6c611324565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613ead565b60405180910390fd5b80600d8190555050565b610ee783838360405180602001604052806000815250611a92565b505050565b610ef4611fce565b73ffffffffffffffffffffffffffffffffffffffff16610f12611324565b73ffffffffffffffffffffffffffffffffffffffff1614610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90613ead565b60405180910390fd5b80600c8190555050565b6000601354905090565b601260009054906101000a900460ff1681565b600a5481565b610f9d611fce565b73ffffffffffffffffffffffffffffffffffffffff16610fbb611324565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890613ead565b60405180910390fd5b80600f9080519060200190611027929190613473565b5050565b600061103682612555565b600001519050919050565b600c5481565b61104f611fce565b73ffffffffffffffffffffffffffffffffffffffff1661106d611324565b73ffffffffffffffffffffffffffffffffffffffff16146110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90613ead565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611135576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6111a5611fce565b73ffffffffffffffffffffffffffffffffffffffff166111c3611324565b73ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121090613ead565b60405180910390fd5b61122360006127e4565b565b600e6020528060005260406000206000915090505481565b611245611fce565b73ffffffffffffffffffffffffffffffffffffffff16611263611324565b73ffffffffffffffffffffffffffffffffffffffff16146112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b090613ead565b60405180910390fd5b61270f816112c5610c78565b6112cf91906140cd565b1115611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790613e8d565b60405180910390fd5b61131a82826128a8565b5050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113556134f9565b61135e82612555565b9050919050565b61136d611fce565b73ffffffffffffffffffffffffffffffffffffffff1661138b611324565b73ffffffffffffffffffffffffffffffffffffffff16146113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890613ead565b60405180910390fd5b80601090805190602001906113f7929190613473565b5050565b60606004805461140a906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611436906142ac565b80156114835780601f1061145857610100808354040283529160200191611483565b820191906000526020600020905b81548152906001019060200180831161146657829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290613e6d565b60405180910390fd5b600160135414611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790613e4d565b60405180910390fd5b61270f8161154c610c78565b61155691906140cd565b1115611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90613e8d565b60405180910390fd5b600a548111156115dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d390613f4d565b60405180910390fd5b80600d546115ea9190614154565b34101561162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390613f2d565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461167b91906140cd565b92505081905550600b54600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd90613f6d565b60405180910390fd5b61171033826128a8565b50565b61171b611fce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611780576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806008600061178d611fce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661183a611fce565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161187f9190613df0565b60405180910390a35050565b611893611fce565b73ffffffffffffffffffffffffffffffffffffffff166118b1611324565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613ead565b60405180910390fd5b80600a8190555050565b611919611fce565b73ffffffffffffffffffffffffffffffffffffffff16611937611324565b73ffffffffffffffffffffffffffffffffffffffff161461198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490613ead565b60405180910390fd5b600260095414156119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90613f8d565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611a0190613d74565b60006040518083038185875af1925050503d8060008114611a3e576040519150601f19603f3d011682016040523d82523d6000602084013e611a43565b606091505b5050905080611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613eed565b60405180910390fd5b506001600981905550565b611a9d848484612091565b611abc8373ffffffffffffffffffffffffffffffffffffffff166128c6565b8015611ad15750611acf848484846128d9565b155b15611b08576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611b16611fce565b73ffffffffffffffffffffffffffffffffffffffff16611b34611324565b73ffffffffffffffffffffffffffffffffffffffff1614611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190613ead565b60405180910390fd5b8060119080519060200190611ba0929190613473565b5050565b6060611baf82611f80565b611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590613ecd565b60405180910390fd5b60001515601260009054906101000a900460ff1615151415611c9c5760118054611c17906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611c43906142ac565b8015611c905780601f10611c6557610100808354040283529160200191611c90565b820191906000526020600020905b815481529060010190602001808311611c7357829003601f168201915b50505050509050611d5c565b600c548211611d02576000611caf612a39565b90506000815111611ccf5760405180602001604052806000815250611cfa565b80611cd984612acb565b604051602001611cea929190613d00565b6040516020818303038152906040525b915050611d5c565b600060108054611d11906142ac565b905011611d2d5760405180602001604052806000815250611d59565b6010611d3883612acb565b604051602001611d49929190613d3a565b6040516020818303038152906040525b90505b919050565b6000611d6c82612c2c565b9050919050565b6000600d5482611d839190614154565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e26611fce565b73ffffffffffffffffffffffffffffffffffffffff16611e44611324565b73ffffffffffffffffffffffffffffffffffffffff1614611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9190613ead565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0190613e2d565b60405180910390fd5b611f13816127e4565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611f8b612088565b11158015611f9a575060015482105b8015611fc7575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600061209c82612555565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612107576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612128611fce565b73ffffffffffffffffffffffffffffffffffffffff161480612157575061215685612151611fce565b611d8a565b5b8061219c5750612165611fce565b73ffffffffffffffffffffffffffffffffffffffff1661218484610aeb565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806121d5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561223c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122498585856001612c96565b61225560008487611fd6565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156124d55760015482146124d457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125408585856001612c9c565b5050505050565b612552816000612ca2565b50565b61255d6134f9565b60008290508061256b612088565b1115801561257a575060015481105b156127ad576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516127ab57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461268f5780925050506127df565b5b6001156127aa57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127a55780925050506127df565b612690565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128c2828260405180602001604052806000815250613092565b5050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128ff611fce565b8786866040518563ffffffff1660e01b81526004016129219493929190613da4565b602060405180830381600087803b15801561293b57600080fd5b505af192505050801561296c57506040513d601f19601f820116820180604052508101906129699190613892565b60015b6129e6573d806000811461299c576040519150601f19603f3d011682016040523d82523d6000602084013e6129a1565b606091505b506000815114156129de576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600f8054612a48906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612a74906142ac565b8015612ac15780601f10612a9657610100808354040283529160200191612ac1565b820191906000526020600020905b815481529060010190602001808311612aa457829003601f168201915b5050505050905090565b60606000821415612b13576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c27565b600082905060005b60008214612b45578080612b2e9061430f565b915050600a82612b3e9190614123565b9150612b1b565b60008167ffffffffffffffff811115612b6157612b60614445565b5b6040519080825280601f01601f191660200182016040528015612b935781602001600182028036833780820191505090505b5090505b60008514612c2057600182612bac91906141ae565b9150600a85612bbb9190614358565b6030612bc791906140cd565b60f81b818381518110612bdd57612bdc614416565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c199190614123565b9450612b97565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b6000612cad83612555565b90506000816000015190508215612d8e5760008173ffffffffffffffffffffffffffffffffffffffff16612cdf611fce565b73ffffffffffffffffffffffffffffffffffffffff161480612d0e5750612d0d82612d08611fce565b611d8a565b5b80612d535750612d1c611fce565b73ffffffffffffffffffffffffffffffffffffffff16612d3b86610aeb565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612d8c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b612d9c816000866001612c96565b612da860008583611fd6565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561300c57600154821461300b57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461307a816000866001612c9c565b60026000815480929190600101919050555050505050565b61309f83838360016130a4565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613112576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141561314d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61315a6000868387612c96565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561332457506133238773ffffffffffffffffffffffffffffffffffffffff166128c6565b5b156133ea575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461339960008884806001019550886128d9565b6133cf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561332a5782600154146133e557600080fd5b613456565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156133eb575b81600181905550505061346c6000868387612c9c565b5050505050565b82805461347f906142ac565b90600052602060002090601f0160209004810192826134a157600085556134e8565b82601f106134ba57805160ff19168380011785556134e8565b828001600101855582156134e8579182015b828111156134e75782518255916020019190600101906134cc565b5b5090506134f5919061353c565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561355557600081600090555060010161353d565b5090565b600061356c61356784614008565b613fe3565b90508281526020810184848401111561358857613587614479565b5b61359384828561426a565b509392505050565b60006135ae6135a984614039565b613fe3565b9050828152602081018484840111156135ca576135c9614479565b5b6135d584828561426a565b509392505050565b6000813590506135ec81614726565b92915050565b6000813590506136018161473d565b92915050565b60008135905061361681614754565b92915050565b60008151905061362b81614754565b92915050565b600082601f83011261364657613645614474565b5b8135613656848260208601613559565b91505092915050565b600082601f83011261367457613673614474565b5b813561368484826020860161359b565b91505092915050565b60008135905061369c8161476b565b92915050565b6000602082840312156136b8576136b7614483565b5b60006136c6848285016135dd565b91505092915050565b600080604083850312156136e6576136e5614483565b5b60006136f4858286016135dd565b9250506020613705858286016135dd565b9150509250929050565b60008060006060848603121561372857613727614483565b5b6000613736868287016135dd565b9350506020613747868287016135dd565b92505060406137588682870161368d565b9150509250925092565b6000806000806080858703121561377c5761377b614483565b5b600061378a878288016135dd565b945050602061379b878288016135dd565b93505060406137ac8782880161368d565b925050606085013567ffffffffffffffff8111156137cd576137cc61447e565b5b6137d987828801613631565b91505092959194509250565b600080604083850312156137fc576137fb614483565b5b600061380a858286016135dd565b925050602061381b858286016135f2565b9150509250929050565b6000806040838503121561383c5761383b614483565b5b600061384a858286016135dd565b925050602061385b8582860161368d565b9150509250929050565b60006020828403121561387b5761387a614483565b5b600061388984828501613607565b91505092915050565b6000602082840312156138a8576138a7614483565b5b60006138b68482850161361c565b91505092915050565b6000602082840312156138d5576138d4614483565b5b600082013567ffffffffffffffff8111156138f3576138f261447e565b5b6138ff8482850161365f565b91505092915050565b60006020828403121561391e5761391d614483565b5b600061392c8482850161368d565b91505092915050565b61393e816141e2565b82525050565b61394d816141e2565b82525050565b61395c816141f4565b82525050565b61396b816141f4565b82525050565b600061397c8261407f565b6139868185614095565b9350613996818560208601614279565b61399f81614488565b840191505092915050565b60006139b58261408a565b6139bf81856140b1565b93506139cf818560208601614279565b6139d881614488565b840191505092915050565b60006139ee8261408a565b6139f881856140c2565b9350613a08818560208601614279565b80840191505092915050565b60008154613a21816142ac565b613a2b81866140c2565b94506001821660008114613a465760018114613a5757613a8a565b60ff19831686528186019350613a8a565b613a608561406a565b60005b83811015613a8257815481890152600182019150602081019050613a63565b838801955050505b50505092915050565b6000613aa06026836140b1565b9150613aab82614499565b604082019050919050565b6000613ac36012836140b1565b9150613ace826144e8565b602082019050919050565b6000613ae6601e836140b1565b9150613af182614511565b602082019050919050565b6000613b096012836140b1565b9150613b148261453a565b602082019050919050565b6000613b2c6005836140c2565b9150613b3782614563565b600582019050919050565b6000613b4f6020836140b1565b9150613b5a8261458c565b602082019050919050565b6000613b72602f836140b1565b9150613b7d826145b5565b604082019050919050565b6000613b956000836140a6565b9150613ba082614604565b600082019050919050565b6000613bb86010836140b1565b9150613bc382614607565b602082019050919050565b6000613bdb6020836140b1565b9150613be682614630565b602082019050919050565b6000613bfe6016836140b1565b9150613c0982614659565b602082019050919050565b6000613c216016836140b1565b9150613c2c82614682565b602082019050919050565b6000613c44601c836140b1565b9150613c4f826146ab565b602082019050919050565b6000613c67601f836140b1565b9150613c72826146d4565b602082019050919050565b6000613c8a6001836140c2565b9150613c95826146fd565b600182019050919050565b606082016000820151613cb66000850182613935565b506020820151613cc96020850182613cf1565b506040820151613cdc6040850182613953565b50505050565b613ceb8161424c565b82525050565b613cfa81614256565b82525050565b6000613d0c82856139e3565b9150613d1782613c7d565b9150613d2382846139e3565b9150613d2e82613b1f565b91508190509392505050565b6000613d468285613a14565b9150613d5182613c7d565b9150613d5d82846139e3565b9150613d6882613b1f565b91508190509392505050565b6000613d7f82613b88565b9150819050919050565b6000602082019050613d9e6000830184613944565b92915050565b6000608082019050613db96000830187613944565b613dc66020830186613944565b613dd36040830185613ce2565b8181036060830152613de58184613971565b905095945050505050565b6000602082019050613e056000830184613962565b92915050565b60006020820190508181036000830152613e2581846139aa565b905092915050565b60006020820190508181036000830152613e4681613a93565b9050919050565b60006020820190508181036000830152613e6681613ab6565b9050919050565b60006020820190508181036000830152613e8681613ad9565b9050919050565b60006020820190508181036000830152613ea681613afc565b9050919050565b60006020820190508181036000830152613ec681613b42565b9050919050565b60006020820190508181036000830152613ee681613b65565b9050919050565b60006020820190508181036000830152613f0681613bab565b9050919050565b60006020820190508181036000830152613f2681613bce565b9050919050565b60006020820190508181036000830152613f4681613bf1565b9050919050565b60006020820190508181036000830152613f6681613c14565b9050919050565b60006020820190508181036000830152613f8681613c37565b9050919050565b60006020820190508181036000830152613fa681613c5a565b9050919050565b6000606082019050613fc26000830184613ca0565b92915050565b6000602082019050613fdd6000830184613ce2565b92915050565b6000613fed613ffe565b9050613ff982826142de565b919050565b6000604051905090565b600067ffffffffffffffff82111561402357614022614445565b5b61402c82614488565b9050602081019050919050565b600067ffffffffffffffff82111561405457614053614445565b5b61405d82614488565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140d88261424c565b91506140e38361424c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561411857614117614389565b5b828201905092915050565b600061412e8261424c565b91506141398361424c565b925082614149576141486143b8565b5b828204905092915050565b600061415f8261424c565b915061416a8361424c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141a3576141a2614389565b5b828202905092915050565b60006141b98261424c565b91506141c48361424c565b9250828210156141d7576141d6614389565b5b828203905092915050565b60006141ed8261422c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561429757808201518184015260208101905061427c565b838111156142a6576000848401525b50505050565b600060028204905060018216806142c457607f821691505b602082108114156142d8576142d76143e7565b5b50919050565b6142e782614488565b810181811067ffffffffffffffff8211171561430657614305614445565b5b80604052505050565b600061431a8261424c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561434d5761434c614389565b5b600182019050919050565b60006143638261424c565b915061436e8361424c565b92508261437e5761437d6143b8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f596f7520617265206e6f7420746865206f776e6572206f6620746f6b656e4964600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b61472f816141e2565b811461473a57600080fd5b50565b614746816141f4565b811461475157600080fd5b50565b61475d81614200565b811461476857600080fd5b50565b6147748161424c565b811461477f57600080fd5b5056fea2646970667358221220851238accf411fe30275cf6d0985f67c5172c1490c5d7c2a99d4fb262885865a64736f6c63430008070033

Deployed Bytecode Sourcemap

32885:4189:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15140:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18253:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19756:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19319:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33075:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14389:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33598:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20621:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36720:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36232:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35032:81;;;;;;;;;;;;;:::i;:::-;;36012:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20862:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36334:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36513:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33563:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32982:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35119:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18061:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33158:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36434:72;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15509:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5171:103;;;;;;;;;;;;;:::i;:::-;;33398:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36882:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33356:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4948:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35671:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35223:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18422:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33823:528;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20032:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36118:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35825:181;;;;;;;;;;;;;:::i;:::-;;21118:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35339:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34358:667;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35560:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36596:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20390:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5283:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15140:305;15242:4;15294:25;15279:40;;;:11;:40;;;;:105;;;;15351:33;15336:48;;;:11;:48;;;;15279:105;:158;;;;15401:36;15425:11;15401:23;:36::i;:::-;15279:158;15259:178;;15140:305;;;:::o;18253:100::-;18307:13;18340:5;18333:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18253:100;:::o;19756:204::-;19824:7;19849:16;19857:7;19849;:16::i;:::-;19844:64;;19874:34;;;;;;;;;;;;;;19844:64;19928:15;:24;19944:7;19928:24;;;;;;;;;;;;;;;;;;;;;19921:31;;19756:204;;;:::o;19319:371::-;19392:13;19408:24;19424:7;19408:15;:24::i;:::-;19392:40;;19453:5;19447:11;;:2;:11;;;19443:48;;;19467:24;;;;;;;;;;;;;;19443:48;19524:5;19508:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;19534:37;19551:5;19558:12;:10;:12::i;:::-;19534:16;:37::i;:::-;19533:38;19508:63;19504:138;;;19595:35;;;;;;;;;;;;;;19504:138;19654:28;19663:2;19667:7;19676:5;19654:8;:28::i;:::-;19381:309;19319:371;;:::o;33075:34::-;;;;:::o;14389:303::-;14433:7;14658:15;:13;:15::i;:::-;14643:12;;14627:13;;:28;:46;14620:53;;14389:303;:::o;33598:22::-;;;;:::o;20621:170::-;20755:28;20765:4;20771:2;20775:7;20755:9;:28::i;:::-;20621:170;;;:::o;36720:156::-;36799:10;36779:30;;:16;36787:7;36779;:16::i;:::-;:30;;;36771:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;36856:14;36862:7;36856:5;:14::i;:::-;36720:156;:::o;36232:96::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36321:1:::1;36304:14;:18;;;;36232:96:::0;:::o;35032:81::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35101:4:::1;35090:8;;:15;;;;;;;;;;;;;;;;;;35032:81::o:0;36012:98::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36095:9:::1;36087:5;:17;;;;36012:98:::0;:::o;20862:185::-;21000:39;21017:4;21023:2;21027:7;21000:39;;;;;;;;;;;;:16;:39::i;:::-;20862:185;;;:::o;36334:92::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36419:1:::1;36404:12;:16;;;;36334:92:::0;:::o;36513:73::-;36553:4;36574:6;;36567:13;;36513:73;:::o;33563:28::-;;;;;;;;;;;;;:::o;32982:39::-;;;;:::o;35119:98::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35204:7:::1;35188:13;:23;;;;;;;;;;;;:::i;:::-;;35119:98:::0;:::o;18061:125::-;18125:7;18152:21;18165:7;18152:12;:21::i;:::-;:26;;;18145:33;;18061:125;;;:::o;33158:34::-;;;;:::o;36434:72::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36499:1:::1;36490:6;:10;;;;36434:72:::0;:::o;15509:206::-;15573:7;15614:1;15597:19;;:5;:19;;;15593:60;;;15625:28;;;;;;;;;;;;;;15593:60;15679:12;:19;15692:5;15679:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;15671:36;;15664:43;;15509:206;;;:::o;5171:103::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5236:30:::1;5263:1;5236:18;:30::i;:::-;5171:103::o:0;33398:50::-;;;;;;;;;;;;;;;;;:::o;36882:189::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33245:4:::1;36976:8;36960:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;36952:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;37038:27;37048:6;37056:8;37038:9;:27::i;:::-;36882:189:::0;;:::o;33356:35::-;;;;:::o;4948:87::-;4994:7;5021:6;;;;;;;;;;;5014:13;;4948:87;:::o;35671:148::-;35752:21;;:::i;:::-;35792;35805:7;35792:12;:21::i;:::-;35785:28;;35671:148;;;:::o;35223:110::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35320:7:::1;35298:19;:29;;;;;;;;;;;;:::i;:::-;;35223:110:::0;:::o;18422:104::-;18478:13;18511:7;18504:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18422:104;:::o;33823:528::-;33757:10;33744:23;;:9;:23;;;33736:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33910:1:::1;33900:6;;:11;33892:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;33245:4;33966:8;33950:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;33942:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;34048:19;;34036:8;:31;;34028:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34129:8;34121:5;;:16;;;;:::i;:::-;34108:9;:29;;34100:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34204:8;34173:15;:27;34189:10;34173:27;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;34258:14;;34227:15;:27;34243:10;34227:27;;;;;;;;;;;;;;;;:45;;34219:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;34314:31;34324:10;34336:8;34314:9;:31::i;:::-;33823:528:::0;:::o;20032:287::-;20143:12;:10;:12::i;:::-;20131:24;;:8;:24;;;20127:54;;;20164:17;;;;;;;;;;;;;;20127:54;20239:8;20194:18;:32;20213:12;:10;:12::i;:::-;20194:32;;;;;;;;;;;;;;;:42;20227:8;20194:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20292:8;20263:48;;20278:12;:10;:12::i;:::-;20263:48;;;20302:8;20263:48;;;;;;:::i;:::-;;;;;;;;20032:287;;:::o;36118:106::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36217:1:::1;36195:19;:23;;;;36118:106:::0;:::o;35825:181::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2730:1:::1;2876:7;;:19;;2868:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2730:1;2937:7;:18;;;;35890:12:::2;35908:10;:15;;35931:21;35908:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35889:68;;;35972:7;35964:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;35882:124;2686:1:::1;2980:7;:22;;;;35825:181::o:0;21118:369::-;21285:28;21295:4;21301:2;21305:7;21285:9;:28::i;:::-;21328:15;:2;:13;;;:15::i;:::-;:76;;;;;21348:56;21379:4;21385:2;21389:7;21398:5;21348:30;:56::i;:::-;21347:57;21328:76;21324:156;;;21428:40;;;;;;;;;;;;;;21324:156;21118:369;;;;:::o;35339:101::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35431:3:::1;35412:16;:22;;;;;;;;;;;;:::i;:::-;;35339:101:::0;:::o;34358:667::-;34431:13;34461:16;34469:7;34461;:16::i;:::-;34453:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34552:5;34540:17;;:8;;;;;;;;;;;:17;;;34537:63;;;34576:16;34569:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34537:63;34622:12;;34611:7;:23;34608:412;;34647:21;34671:10;:8;:10::i;:::-;34647:34;;34736:1;34718:7;34712:21;:25;:113;;;;;;;;;;;;;;;;;34777:7;34791:18;:7;:16;:18::i;:::-;34760:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34712:113;34692:133;;;;;34608:412;34911:1;34881:19;34875:33;;;;;:::i;:::-;;;:37;:137;;;;;;;;;;;;;;;;;34952:19;34978:18;:7;:16;:18::i;:::-;34935:71;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34875:137;34855:157;;34358:667;;;;:::o;35560:107::-;35618:7;35641:20;35655:5;35641:13;:20::i;:::-;35634:27;;35560:107;;;:::o;36596:117::-;36654:7;36700:5;;36690:9;:15;;;;:::i;:::-;36683:22;;36596:117;;;:::o;20390:164::-;20487:4;20511:18;:25;20530:5;20511:25;;;;;;;;;;;;;;;:35;20537:8;20511:35;;;;;;;;;;;;;;;;;;;;;;;;;20504:42;;20390:164;;;;:::o;5283:201::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5392:1:::1;5372:22;;:8;:22;;;;5364:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5448:28;5467:8;5448:18;:28::i;:::-;5283:201:::0;:::o;9601:157::-;9686:4;9725:25;9710:40;;;:11;:40;;;;9703:47;;9601:157;;;:::o;21742:174::-;21799:4;21842:7;21823:15;:13;:15::i;:::-;:26;;:53;;;;;21863:13;;21853:7;:23;21823:53;:85;;;;;21881:11;:20;21893:7;21881:20;;;;;;;;;;;:27;;;;;;;;;;;;21880:28;21823:85;21816:92;;21742:174;;;:::o;4491:98::-;4544:7;4571:10;4564:17;;4491:98;:::o;29899:196::-;30041:2;30014:15;:24;30030:7;30014:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30079:7;30075:2;30059:28;;30068:5;30059:28;;;;;;;;;;;;29899:196;;;:::o;14163:92::-;14219:7;14246:1;14239:8;;14163:92;:::o;24842:2130::-;24957:35;24995:21;25008:7;24995:12;:21::i;:::-;24957:59;;25055:4;25033:26;;:13;:18;;;:26;;;25029:67;;25068:28;;;;;;;;;;;;;;25029:67;25109:22;25151:4;25135:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;25172:36;25189:4;25195:12;:10;:12::i;:::-;25172:16;:36::i;:::-;25135:73;:126;;;;25249:12;:10;:12::i;:::-;25225:36;;:20;25237:7;25225:11;:20::i;:::-;:36;;;25135:126;25109:153;;25280:17;25275:66;;25306:35;;;;;;;;;;;;;;25275:66;25370:1;25356:16;;:2;:16;;;25352:52;;;25381:23;;;;;;;;;;;;;;25352:52;25417:43;25439:4;25445:2;25449:7;25458:1;25417:21;:43::i;:::-;25525:35;25542:1;25546:7;25555:4;25525:8;:35::i;:::-;25886:1;25856:12;:18;25869:4;25856:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25930:1;25902:12;:16;25915:2;25902:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25948:31;25982:11;:20;25994:7;25982:20;;;;;;;;;;;25948:54;;26033:2;26017:8;:13;;;:18;;;;;;;;;;;;;;;;;;26083:15;26050:8;:23;;;:49;;;;;;;;;;;;;;;;;;26351:19;26383:1;26373:7;:11;26351:33;;26399:31;26433:11;:24;26445:11;26433:24;;;;;;;;;;;26399:58;;26501:1;26476:27;;:8;:13;;;;;;;;;;;;:27;;;26472:384;;;26686:13;;26671:11;:28;26667:174;;26740:4;26724:8;:13;;;:20;;;;;;;;;;;;;;;;;;26793:13;:28;;;26767:8;:23;;;:54;;;;;;;;;;;;;;;;;;26667:174;26472:384;25831:1036;;;26903:7;26899:2;26884:27;;26893:4;26884:27;;;;;;;;;;;;26922:42;26943:4;26949:2;26953:7;26962:1;26922:20;:42::i;:::-;24946:2026;;24842:2130;;;:::o;27055:89::-;27115:21;27121:7;27130:5;27115;:21::i;:::-;27055:89;:::o;16890:1109::-;16952:21;;:::i;:::-;16986:12;17001:7;16986:22;;17069:4;17050:15;:13;:15::i;:::-;:23;;:47;;;;;17084:13;;17077:4;:20;17050:47;17046:886;;;17118:31;17152:11;:17;17164:4;17152:17;;;;;;;;;;;17118:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17193:9;:16;;;17188:729;;17264:1;17238:28;;:9;:14;;;:28;;;17234:101;;17302:9;17295:16;;;;;;17234:101;17637:261;17644:4;17637:261;;;17677:6;;;;;;;;17722:11;:17;17734:4;17722:17;;;;;;;;;;;17710:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17796:1;17770:28;;:9;:14;;;:28;;;17766:109;;17838:9;17831:16;;;;;;17766:109;17637:261;;;17188:729;17099:833;17046:886;17960:31;;;;;;;;;;;;;;16890:1109;;;;:::o;5493:191::-;5567:16;5586:6;;;;;;;;;;;5567:25;;5612:8;5603:6;;:17;;;;;;;;;;;;;;;;;;5667:8;5636:40;;5657:8;5636:40;;;;;;;;;;;;5556:128;5493:191;:::o;21924:104::-;21993:27;22003:2;22007:8;21993:27;;;;;;;;;;;;:9;:27::i;:::-;21924:104;;:::o;5716:197::-;5776:4;5794:12;5861:7;5849:20;5841:28;;5904:1;5897:4;:8;5890:15;;;5716:197;;;:::o;30587:667::-;30750:4;30787:2;30771:36;;;30808:12;:10;:12::i;:::-;30822:4;30828:7;30837:5;30771:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30767:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31022:1;31005:6;:13;:18;31001:235;;;31051:40;;;;;;;;;;;;;;31001:235;31194:6;31188:13;31179:6;31175:2;31171:15;31164:38;30767:480;30900:45;;;30890:55;;;:6;:55;;;;30883:62;;;30587:667;;;;;;:::o;35446:108::-;35506:13;35535;35528:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35446:108;:::o;3108:533::-;3164:13;3204:1;3195:5;:10;3191:53;;;3222:10;;;;;;;;;;;;;;;;;;;;;3191:53;3254:12;3269:5;3254:20;;3285:14;3310:78;3325:1;3317:4;:9;3310:78;;3343:8;;;;;:::i;:::-;;;;3374:2;3366:10;;;;;:::i;:::-;;;3310:78;;;3398:19;3430:6;3420:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3398:39;;3448:154;3464:1;3455:5;:10;3448:154;;3492:1;3482:11;;;;;:::i;:::-;;;3559:2;3551:5;:10;;;;:::i;:::-;3538:2;:24;;;;:::i;:::-;3525:39;;3508:6;3515;3508:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3588:2;3579:11;;;;;:::i;:::-;;;3448:154;;;3626:6;3612:21;;;;;3108:533;;;;:::o;15797:137::-;15858:7;15893:12;:19;15906:5;15893:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;15885:41;;15878:48;;15797:137;;;:::o;31902:159::-;;;;;:::o;32720:158::-;;;;;:::o;27373:2408::-;27453:35;27491:21;27504:7;27491:12;:21::i;:::-;27453:59;;27525:12;27540:13;:18;;;27525:33;;27575:13;27571:290;;;27605:22;27647:4;27631:20;;:12;:10;:12::i;:::-;:20;;;:77;;;;27672:36;27689:4;27695:12;:10;:12::i;:::-;27672:16;:36::i;:::-;27631:77;:134;;;;27753:12;:10;:12::i;:::-;27729:36;;:20;27741:7;27729:11;:20::i;:::-;:36;;;27631:134;27605:161;;27788:17;27783:66;;27814:35;;;;;;;;;;;;;;27783:66;27590:271;27571:290;27873:51;27895:4;27909:1;27913:7;27922:1;27873:21;:51::i;:::-;27989:35;28006:1;28010:7;28019:4;27989:8;:35::i;:::-;28320:31;28354:12;:18;28367:4;28354:18;;;;;;;;;;;;;;;28320:52;;28410:1;28387:11;:19;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28454:1;28426:11;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28554:31;28588:11;:20;28600:7;28588:20;;;;;;;;;;;28554:54;;28639:4;28623:8;:13;;;:20;;;;;;;;;;;;;;;;;;28691:15;28658:8;:23;;;:49;;;;;;;;;;;;;;;;;;28740:4;28722:8;:15;;;:22;;;;;;;;;;;;;;;;;;28992:19;29024:1;29014:7;:11;28992:33;;29040:31;29074:11;:24;29086:11;29074:24;;;;;;;;;;;29040:58;;29142:1;29117:27;;:8;:13;;;;;;;;;;;;:27;;;29113:384;;;29327:13;;29312:11;:28;29308:174;;29381:4;29365:8;:13;;;:20;;;;;;;;;;;;;;;;;;29434:13;:28;;;29408:8;:23;;;:54;;;;;;;;;;;;;;;;;;29308:174;29113:384;28295:1213;;;;29552:7;29548:1;29525:35;;29534:4;29525:35;;;;;;;;;;;;29571:50;29592:4;29606:1;29610:7;29619:1;29571:20;:50::i;:::-;29748:12;;:14;;;;;;;;;;;;;27442:2339;;27373:2408;;:::o;22391:163::-;22514:32;22520:2;22524:8;22534:5;22541:4;22514:5;:32::i;:::-;22391:163;;;:::o;22813:1775::-;22952:20;22975:13;;22952:36;;23017:1;23003:16;;:2;:16;;;22999:48;;;23028:19;;;;;;;;;;;;;;22999:48;23074:1;23062:8;:13;23058:44;;;23084:18;;;;;;;;;;;;;;23058:44;23115:61;23145:1;23149:2;23153:12;23167:8;23115:21;:61::i;:::-;23488:8;23453:12;:16;23466:2;23453:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23552:8;23512:12;:16;23525:2;23512:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23611:2;23578:11;:25;23590:12;23578:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;23678:15;23628:11;:25;23640:12;23628:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;23711:20;23734:12;23711:35;;23761:11;23790:8;23775:12;:23;23761:37;;23819:4;:23;;;;;23827:15;:2;:13;;;:15::i;:::-;23819:23;23815:641;;;23863:314;23919:12;23915:2;23894:38;;23911:1;23894:38;;;;;;;;;;;;23960:69;23999:1;24003:2;24007:14;;;;;;24023:5;23960:30;:69::i;:::-;23955:174;;24065:40;;;;;;;;;;;;;;23955:174;24172:3;24156:12;:19;;23863:314;;24258:12;24241:13;;:29;24237:43;;24272:8;;;24237:43;23815:641;;;24321:120;24377:14;;;;;;24373:2;24352:40;;24369:1;24352:40;;;;;;;;;;;;24436:3;24420:12;:19;;24321:120;;23815:641;24486:12;24470:13;:28;;;;23428:1082;;24520:60;24549:1;24553:2;24557:12;24571:8;24520:20;:60::i;:::-;22941:1647;22813:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:108::-;7235:24;7253:5;7235:24;:::i;:::-;7230:3;7223:37;7158:108;;:::o;7272:118::-;7359:24;7377:5;7359:24;:::i;:::-;7354:3;7347:37;7272:118;;:::o;7396:99::-;7467:21;7482:5;7467:21;:::i;:::-;7462:3;7455:34;7396:99;;:::o;7501:109::-;7582:21;7597:5;7582:21;:::i;:::-;7577:3;7570:34;7501:109;;:::o;7616:360::-;7702:3;7730:38;7762:5;7730:38;:::i;:::-;7784:70;7847:6;7842:3;7784:70;:::i;:::-;7777:77;;7863:52;7908:6;7903:3;7896:4;7889:5;7885:16;7863:52;:::i;:::-;7940:29;7962:6;7940:29;:::i;:::-;7935:3;7931:39;7924:46;;7706:270;7616:360;;;;:::o;7982:364::-;8070:3;8098:39;8131:5;8098:39;:::i;:::-;8153:71;8217:6;8212:3;8153:71;:::i;:::-;8146:78;;8233:52;8278:6;8273:3;8266:4;8259:5;8255:16;8233:52;:::i;:::-;8310:29;8332:6;8310:29;:::i;:::-;8305:3;8301:39;8294:46;;8074:272;7982:364;;;;:::o;8352:377::-;8458:3;8486:39;8519:5;8486:39;:::i;:::-;8541:89;8623:6;8618:3;8541:89;:::i;:::-;8534:96;;8639:52;8684:6;8679:3;8672:4;8665:5;8661:16;8639:52;:::i;:::-;8716:6;8711:3;8707:16;8700:23;;8462:267;8352:377;;;;:::o;8759:845::-;8862:3;8899:5;8893:12;8928:36;8954:9;8928:36;:::i;:::-;8980:89;9062:6;9057:3;8980:89;:::i;:::-;8973:96;;9100:1;9089:9;9085:17;9116:1;9111:137;;;;9262:1;9257:341;;;;9078:520;;9111:137;9195:4;9191:9;9180;9176:25;9171:3;9164:38;9231:6;9226:3;9222:16;9215:23;;9111:137;;9257:341;9324:38;9356:5;9324:38;:::i;:::-;9384:1;9398:154;9412:6;9409:1;9406:13;9398:154;;;9486:7;9480:14;9476:1;9471:3;9467:11;9460:35;9536:1;9527:7;9523:15;9512:26;;9434:4;9431:1;9427:12;9422:17;;9398:154;;;9581:6;9576:3;9572:16;9565:23;;9264:334;;9078:520;;8866:738;;8759:845;;;;:::o;9610:366::-;9752:3;9773:67;9837:2;9832:3;9773:67;:::i;:::-;9766:74;;9849:93;9938:3;9849:93;:::i;:::-;9967:2;9962:3;9958:12;9951:19;;9610:366;;;:::o;9982:::-;10124:3;10145:67;10209:2;10204:3;10145:67;:::i;:::-;10138:74;;10221:93;10310:3;10221:93;:::i;:::-;10339:2;10334:3;10330:12;10323:19;;9982:366;;;:::o;10354:::-;10496:3;10517:67;10581:2;10576:3;10517:67;:::i;:::-;10510:74;;10593:93;10682:3;10593:93;:::i;:::-;10711:2;10706:3;10702:12;10695:19;;10354:366;;;:::o;10726:::-;10868:3;10889:67;10953:2;10948:3;10889:67;:::i;:::-;10882:74;;10965:93;11054:3;10965:93;:::i;:::-;11083:2;11078:3;11074:12;11067:19;;10726:366;;;:::o;11098:400::-;11258:3;11279:84;11361:1;11356:3;11279:84;:::i;:::-;11272:91;;11372:93;11461:3;11372:93;:::i;:::-;11490:1;11485:3;11481:11;11474:18;;11098:400;;;:::o;11504:366::-;11646:3;11667:67;11731:2;11726:3;11667:67;:::i;:::-;11660:74;;11743:93;11832:3;11743:93;:::i;:::-;11861:2;11856:3;11852:12;11845:19;;11504:366;;;:::o;11876:::-;12018:3;12039:67;12103:2;12098:3;12039:67;:::i;:::-;12032:74;;12115:93;12204:3;12115:93;:::i;:::-;12233:2;12228:3;12224:12;12217:19;;11876:366;;;:::o;12248:398::-;12407:3;12428:83;12509:1;12504:3;12428:83;:::i;:::-;12421:90;;12520:93;12609:3;12520:93;:::i;:::-;12638:1;12633:3;12629:11;12622:18;;12248:398;;;:::o;12652:366::-;12794:3;12815:67;12879:2;12874:3;12815:67;:::i;:::-;12808:74;;12891:93;12980:3;12891:93;:::i;:::-;13009:2;13004:3;13000:12;12993:19;;12652:366;;;:::o;13024:::-;13166:3;13187:67;13251:2;13246:3;13187:67;:::i;:::-;13180:74;;13263:93;13352:3;13263:93;:::i;:::-;13381:2;13376:3;13372:12;13365:19;;13024:366;;;:::o;13396:::-;13538:3;13559:67;13623:2;13618:3;13559:67;:::i;:::-;13552:74;;13635:93;13724:3;13635:93;:::i;:::-;13753:2;13748:3;13744:12;13737:19;;13396:366;;;:::o;13768:::-;13910:3;13931:67;13995:2;13990:3;13931:67;:::i;:::-;13924:74;;14007:93;14096:3;14007:93;:::i;:::-;14125:2;14120:3;14116:12;14109:19;;13768:366;;;:::o;14140:::-;14282:3;14303:67;14367:2;14362:3;14303:67;:::i;:::-;14296:74;;14379:93;14468:3;14379:93;:::i;:::-;14497:2;14492:3;14488:12;14481:19;;14140:366;;;:::o;14512:::-;14654:3;14675:67;14739:2;14734:3;14675:67;:::i;:::-;14668:74;;14751:93;14840:3;14751:93;:::i;:::-;14869:2;14864:3;14860:12;14853:19;;14512:366;;;:::o;14884:400::-;15044:3;15065:84;15147:1;15142:3;15065:84;:::i;:::-;15058:91;;15158:93;15247:3;15158:93;:::i;:::-;15276:1;15271:3;15267:11;15260:18;;14884:400;;;:::o;15360:697::-;15519:4;15514:3;15510:14;15606:4;15599:5;15595:16;15589:23;15625:63;15682:4;15677:3;15673:14;15659:12;15625:63;:::i;:::-;15534:164;15790:4;15783:5;15779:16;15773:23;15809:61;15864:4;15859:3;15855:14;15841:12;15809:61;:::i;:::-;15708:172;15964:4;15957:5;15953:16;15947:23;15983:57;16034:4;16029:3;16025:14;16011:12;15983:57;:::i;:::-;15890:160;15488:569;15360:697;;:::o;16063:118::-;16150:24;16168:5;16150:24;:::i;:::-;16145:3;16138:37;16063:118;;:::o;16187:105::-;16262:23;16279:5;16262:23;:::i;:::-;16257:3;16250:36;16187:105;;:::o;16298:967::-;16680:3;16702:95;16793:3;16784:6;16702:95;:::i;:::-;16695:102;;16814:148;16958:3;16814:148;:::i;:::-;16807:155;;16979:95;17070:3;17061:6;16979:95;:::i;:::-;16972:102;;17091:148;17235:3;17091:148;:::i;:::-;17084:155;;17256:3;17249:10;;16298:967;;;;;:::o;17271:961::-;17650:3;17672:92;17760:3;17751:6;17672:92;:::i;:::-;17665:99;;17781:148;17925:3;17781:148;:::i;:::-;17774:155;;17946:95;18037:3;18028:6;17946:95;:::i;:::-;17939:102;;18058:148;18202:3;18058:148;:::i;:::-;18051:155;;18223:3;18216:10;;17271:961;;;;;:::o;18238:379::-;18422:3;18444:147;18587:3;18444:147;:::i;:::-;18437:154;;18608:3;18601:10;;18238:379;;;:::o;18623:222::-;18716:4;18754:2;18743:9;18739:18;18731:26;;18767:71;18835:1;18824:9;18820:17;18811:6;18767:71;:::i;:::-;18623:222;;;;:::o;18851:640::-;19046:4;19084:3;19073:9;19069:19;19061:27;;19098:71;19166:1;19155:9;19151:17;19142:6;19098:71;:::i;:::-;19179:72;19247:2;19236:9;19232:18;19223:6;19179:72;:::i;:::-;19261;19329:2;19318:9;19314:18;19305:6;19261:72;:::i;:::-;19380:9;19374:4;19370:20;19365:2;19354:9;19350:18;19343:48;19408:76;19479:4;19470:6;19408:76;:::i;:::-;19400:84;;18851:640;;;;;;;:::o;19497:210::-;19584:4;19622:2;19611:9;19607:18;19599:26;;19635:65;19697:1;19686:9;19682:17;19673:6;19635:65;:::i;:::-;19497:210;;;;:::o;19713:313::-;19826:4;19864:2;19853:9;19849:18;19841:26;;19913:9;19907:4;19903:20;19899:1;19888:9;19884:17;19877:47;19941:78;20014:4;20005:6;19941:78;:::i;:::-;19933:86;;19713:313;;;;:::o;20032:419::-;20198:4;20236:2;20225:9;20221:18;20213:26;;20285:9;20279:4;20275:20;20271:1;20260:9;20256:17;20249:47;20313:131;20439:4;20313:131;:::i;:::-;20305:139;;20032:419;;;:::o;20457:::-;20623:4;20661:2;20650:9;20646:18;20638:26;;20710:9;20704:4;20700:20;20696:1;20685:9;20681:17;20674:47;20738:131;20864:4;20738:131;:::i;:::-;20730:139;;20457:419;;;:::o;20882:::-;21048:4;21086:2;21075:9;21071:18;21063:26;;21135:9;21129:4;21125:20;21121:1;21110:9;21106:17;21099:47;21163:131;21289:4;21163:131;:::i;:::-;21155:139;;20882:419;;;:::o;21307:::-;21473:4;21511:2;21500:9;21496:18;21488:26;;21560:9;21554:4;21550:20;21546:1;21535:9;21531:17;21524:47;21588:131;21714:4;21588:131;:::i;:::-;21580:139;;21307:419;;;:::o;21732:::-;21898:4;21936:2;21925:9;21921:18;21913:26;;21985:9;21979:4;21975:20;21971:1;21960:9;21956:17;21949:47;22013:131;22139:4;22013:131;:::i;:::-;22005:139;;21732:419;;;:::o;22157:::-;22323:4;22361:2;22350:9;22346:18;22338:26;;22410:9;22404:4;22400:20;22396:1;22385:9;22381:17;22374:47;22438:131;22564:4;22438:131;:::i;:::-;22430:139;;22157:419;;;:::o;22582:::-;22748:4;22786:2;22775:9;22771:18;22763:26;;22835:9;22829:4;22825:20;22821:1;22810:9;22806:17;22799:47;22863:131;22989:4;22863:131;:::i;:::-;22855:139;;22582:419;;;:::o;23007:::-;23173:4;23211:2;23200:9;23196:18;23188:26;;23260:9;23254:4;23250:20;23246:1;23235:9;23231:17;23224:47;23288:131;23414:4;23288:131;:::i;:::-;23280:139;;23007:419;;;:::o;23432:::-;23598:4;23636:2;23625:9;23621:18;23613:26;;23685:9;23679:4;23675:20;23671:1;23660:9;23656:17;23649:47;23713:131;23839:4;23713:131;:::i;:::-;23705:139;;23432:419;;;:::o;23857:::-;24023:4;24061:2;24050:9;24046:18;24038:26;;24110:9;24104:4;24100:20;24096:1;24085:9;24081:17;24074:47;24138:131;24264:4;24138:131;:::i;:::-;24130:139;;23857:419;;;:::o;24282:::-;24448:4;24486:2;24475:9;24471:18;24463:26;;24535:9;24529:4;24525:20;24521:1;24510:9;24506:17;24499:47;24563:131;24689:4;24563:131;:::i;:::-;24555:139;;24282:419;;;:::o;24707:::-;24873:4;24911:2;24900:9;24896:18;24888:26;;24960:9;24954:4;24950:20;24946:1;24935:9;24931:17;24924:47;24988:131;25114:4;24988:131;:::i;:::-;24980:139;;24707:419;;;:::o;25132:346::-;25287:4;25325:2;25314:9;25310:18;25302:26;;25338:133;25468:1;25457:9;25453:17;25444:6;25338:133;:::i;:::-;25132:346;;;;:::o;25484:222::-;25577:4;25615:2;25604:9;25600:18;25592:26;;25628:71;25696:1;25685:9;25681:17;25672:6;25628:71;:::i;:::-;25484:222;;;;:::o;25712:129::-;25746:6;25773:20;;:::i;:::-;25763:30;;25802:33;25830:4;25822:6;25802:33;:::i;:::-;25712:129;;;:::o;25847:75::-;25880:6;25913:2;25907:9;25897:19;;25847:75;:::o;25928:307::-;25989:4;26079:18;26071:6;26068:30;26065:56;;;26101:18;;:::i;:::-;26065:56;26139:29;26161:6;26139:29;:::i;:::-;26131:37;;26223:4;26217;26213:15;26205:23;;25928:307;;;:::o;26241:308::-;26303:4;26393:18;26385:6;26382:30;26379:56;;;26415:18;;:::i;:::-;26379:56;26453:29;26475:6;26453:29;:::i;:::-;26445:37;;26537:4;26531;26527:15;26519:23;;26241:308;;;:::o;26555:141::-;26604:4;26627:3;26619:11;;26650:3;26647:1;26640:14;26684:4;26681:1;26671:18;26663:26;;26555:141;;;:::o;26702:98::-;26753:6;26787:5;26781:12;26771:22;;26702:98;;;:::o;26806:99::-;26858:6;26892:5;26886:12;26876:22;;26806:99;;;:::o;26911:168::-;26994:11;27028:6;27023:3;27016:19;27068:4;27063:3;27059:14;27044:29;;26911:168;;;;:::o;27085:147::-;27186:11;27223:3;27208:18;;27085:147;;;;:::o;27238:169::-;27322:11;27356:6;27351:3;27344:19;27396:4;27391:3;27387:14;27372:29;;27238:169;;;;:::o;27413:148::-;27515:11;27552:3;27537:18;;27413:148;;;;:::o;27567:305::-;27607:3;27626:20;27644:1;27626:20;:::i;:::-;27621:25;;27660:20;27678:1;27660:20;:::i;:::-;27655:25;;27814:1;27746:66;27742:74;27739:1;27736:81;27733:107;;;27820:18;;:::i;:::-;27733:107;27864:1;27861;27857:9;27850:16;;27567:305;;;;:::o;27878:185::-;27918:1;27935:20;27953:1;27935:20;:::i;:::-;27930:25;;27969:20;27987:1;27969:20;:::i;:::-;27964:25;;28008:1;27998:35;;28013:18;;:::i;:::-;27998:35;28055:1;28052;28048:9;28043:14;;27878:185;;;;:::o;28069:348::-;28109:7;28132:20;28150:1;28132:20;:::i;:::-;28127:25;;28166:20;28184:1;28166:20;:::i;:::-;28161:25;;28354:1;28286:66;28282:74;28279:1;28276:81;28271:1;28264:9;28257:17;28253:105;28250:131;;;28361:18;;:::i;:::-;28250:131;28409:1;28406;28402:9;28391:20;;28069:348;;;;:::o;28423:191::-;28463:4;28483:20;28501:1;28483:20;:::i;:::-;28478:25;;28517:20;28535:1;28517:20;:::i;:::-;28512:25;;28556:1;28553;28550:8;28547:34;;;28561:18;;:::i;:::-;28547:34;28606:1;28603;28599:9;28591:17;;28423:191;;;;:::o;28620:96::-;28657:7;28686:24;28704:5;28686:24;:::i;:::-;28675:35;;28620:96;;;:::o;28722:90::-;28756:7;28799:5;28792:13;28785:21;28774:32;;28722:90;;;:::o;28818:149::-;28854:7;28894:66;28887:5;28883:78;28872:89;;28818:149;;;:::o;28973:126::-;29010:7;29050:42;29043:5;29039:54;29028:65;;28973:126;;;:::o;29105:77::-;29142:7;29171:5;29160:16;;29105:77;;;:::o;29188:101::-;29224:7;29264:18;29257:5;29253:30;29242:41;;29188:101;;;:::o;29295:154::-;29379:6;29374:3;29369;29356:30;29441:1;29432:6;29427:3;29423:16;29416:27;29295:154;;;:::o;29455:307::-;29523:1;29533:113;29547:6;29544:1;29541:13;29533:113;;;29632:1;29627:3;29623:11;29617:18;29613:1;29608:3;29604:11;29597:39;29569:2;29566:1;29562:10;29557:15;;29533:113;;;29664:6;29661:1;29658:13;29655:101;;;29744:1;29735:6;29730:3;29726:16;29719:27;29655:101;29504:258;29455:307;;;:::o;29768:320::-;29812:6;29849:1;29843:4;29839:12;29829:22;;29896:1;29890:4;29886:12;29917:18;29907:81;;29973:4;29965:6;29961:17;29951:27;;29907:81;30035:2;30027:6;30024:14;30004:18;30001:38;29998:84;;;30054:18;;:::i;:::-;29998:84;29819:269;29768:320;;;:::o;30094:281::-;30177:27;30199:4;30177:27;:::i;:::-;30169:6;30165:40;30307:6;30295:10;30292:22;30271:18;30259:10;30256:34;30253:62;30250:88;;;30318:18;;:::i;:::-;30250:88;30358:10;30354:2;30347:22;30137:238;30094:281;;:::o;30381:233::-;30420:3;30443:24;30461:5;30443:24;:::i;:::-;30434:33;;30489:66;30482:5;30479:77;30476:103;;;30559:18;;:::i;:::-;30476:103;30606:1;30599:5;30595:13;30588:20;;30381:233;;;:::o;30620:176::-;30652:1;30669:20;30687:1;30669:20;:::i;:::-;30664:25;;30703:20;30721:1;30703:20;:::i;:::-;30698:25;;30742:1;30732:35;;30747:18;;:::i;:::-;30732:35;30788:1;30785;30781:9;30776:14;;30620:176;;;;:::o;30802:180::-;30850:77;30847:1;30840:88;30947:4;30944:1;30937:15;30971:4;30968:1;30961:15;30988:180;31036:77;31033:1;31026:88;31133:4;31130:1;31123:15;31157:4;31154:1;31147:15;31174:180;31222:77;31219:1;31212:88;31319:4;31316:1;31309:15;31343:4;31340:1;31333:15;31360:180;31408:77;31405:1;31398:88;31505:4;31502:1;31495:15;31529:4;31526:1;31519:15;31546:180;31594:77;31591:1;31584:88;31691:4;31688:1;31681:15;31715:4;31712:1;31705:15;31732:117;31841:1;31838;31831:12;31855:117;31964:1;31961;31954:12;31978:117;32087:1;32084;32077:12;32101:117;32210:1;32207;32200:12;32224:102;32265:6;32316:2;32312:7;32307:2;32300:5;32296:14;32292:28;32282:38;;32224:102;;;:::o;32332:225::-;32472:34;32468:1;32460:6;32456:14;32449:58;32541:8;32536:2;32528:6;32524:15;32517:33;32332:225;:::o;32563:168::-;32703:20;32699:1;32691:6;32687:14;32680:44;32563:168;:::o;32737:180::-;32877:32;32873:1;32865:6;32861:14;32854:56;32737:180;:::o;32923:168::-;33063:20;33059:1;33051:6;33047:14;33040:44;32923:168;:::o;33097:155::-;33237:7;33233:1;33225:6;33221:14;33214:31;33097:155;:::o;33258:182::-;33398:34;33394:1;33386:6;33382:14;33375:58;33258:182;:::o;33446:234::-;33586:34;33582:1;33574:6;33570:14;33563:58;33655:17;33650:2;33642:6;33638:15;33631:42;33446:234;:::o;33686:114::-;;:::o;33806:166::-;33946:18;33942:1;33934:6;33930:14;33923:42;33806:166;:::o;33978:182::-;34118:34;34114:1;34106:6;34102:14;34095:58;33978:182;:::o;34166:172::-;34306:24;34302:1;34294:6;34290:14;34283:48;34166:172;:::o;34344:::-;34484:24;34480:1;34472:6;34468:14;34461:48;34344:172;:::o;34522:178::-;34662:30;34658:1;34650:6;34646:14;34639:54;34522:178;:::o;34706:181::-;34846:33;34842:1;34834:6;34830:14;34823:57;34706:181;:::o;34893:151::-;35033:3;35029:1;35021:6;35017:14;35010:27;34893:151;:::o;35050:122::-;35123:24;35141:5;35123:24;:::i;:::-;35116:5;35113:35;35103:63;;35162:1;35159;35152:12;35103:63;35050:122;:::o;35178:116::-;35248:21;35263:5;35248:21;:::i;:::-;35241:5;35238:32;35228:60;;35284:1;35281;35274:12;35228:60;35178:116;:::o;35300:120::-;35372:23;35389:5;35372:23;:::i;:::-;35365:5;35362:34;35352:62;;35410:1;35407;35400:12;35352:62;35300:120;:::o;35426:122::-;35499:24;35517:5;35499:24;:::i;:::-;35492:5;35489:35;35479:63;;35538:1;35535;35528:12;35479:63;35426:122;:::o

Swarm Source

ipfs://851238accf411fe30275cf6d0985f67c5172c1490c5d7c2a99d4fb262885865a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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