Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,197 FoR
Holders
247
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 FoRLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FACES_OF_REKT_CONTRACT
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-03 */ // By interacting with this contract, you agree to our terms and conditions. Please check our website for the latest version. // SPDX-License-Identifier: UNLICENSED /* ______ ___ ______ ______ _____ ____ ______ ____ ______ __ __ ______ / ____/ / | / ____/ / ____/ / ___/ / __ \ / ____/ / __ \ / ____/ / //_/ /_ __/ / /_ / /| | / / / __/ \__ \ / / / / / /_ / /_/ / / __/ / ,< / / / __/ / ___ |/ /___ / /___ ___/ / / /_/ / / __/ / _, _/ / /___ / /| | / / /_/ /_/ |_|\____/ /_____/ /____/ \____/ /_/ /_/ |_| /_____/ /_/ |_| /_/ */ /* ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOOOOO,,,,,,,,,,,,O,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOOOOOOOOO,,,,,,,,,,,,OOOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,°OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOIFOOOOROOOOOOOOOOELSEOOOOOOOOOOOOOOOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOOOOOOOOOOOOOOOOOOE###OOOOOOWHILEOOOOOOOOOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOOOOOOOOOOO#####OOOOOOOOOOOOOO##OOOOOOOOOOOOOOOOO°],,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOFOROOOOOOOOOOOOOOOOOOOOOEE#OOOOO]°°]OOOOOOOOOOOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOOOOOOOOOOO]°.....°(OOOOOOOOO.°...........,O,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O]°O.........°OOOOOOO].............]OOOOO°..O,,,,,,,,,,,,,°°°,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O...........OO°........°..........°.....°OO.O,,,,,,,,°°°°°°°°°°°,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O..............OOO}}°..............OO°}},...O,,,,,,,,,}}°°}}]°}}],,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O....E........OOOOOO}}............COODE}}]..O,,,,,,,,,}}}}]°°°°°°°°,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O.............,COOODE]............,COODE}}.°O,,,,,,,,,,}}°}}°°°°°°°°,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O....°,........COOODE].............COODE}}.O,,,,,,,,,,,,,}}]°°°°°°°°,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O.....O........COOODE].............COODE]°.O,,,,,,,,,,,,]°]°°°°°°°°,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O°,,,,O,...........COOODE].............COODE}}.O,,,,,,,,,,,}}°°°°}}],,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O,..}}].............COOODE].............COODE}}.O,,,,,,,,,,,,]°],,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O..°°}}.............COOODE].............COODE}}.O,,,,,,,,,,,]°°,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O..°°°°°............COOODE].............COODE]°..O,,,,,,,,,,}}°°°°°°°°,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O....°°°...........COOOODE]............COODE}}..O,,,,,,,,,,,}}]°°°°°°°,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OO...O...........COOODE}}.°.°......O.COODE}}].°O,,,,,,,,,,,,°]°°°°°°°,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O.................°°....°OOOOO°......°°°..O,,,,,,°]°°°°]°°°°°°,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O.......................................°O,,,,,],,}}}}°,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O................. OOO. .OOOOOO°....O,,O°°°°°°°°°O,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O°..........., ,° ,°,,,°°OOOOOE}}}}COOODE#COOOOODE##O,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O°.......°..OOOOE...................COOODE°°°°°°°°###O,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O°°.....°O°....................°O,,,,,,O#°°°°°°°###O,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O°°°°°°°°°°°°O,,,,,,,,,,,,,,,,,COOOODE,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O°°°°°°°°°°°°O,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OO#O]°°..°...]..°OO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OE###OOOO.......°...OO#EO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOO##O####O °OO.....OO.O###E°,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOO############O######O O. O####O######OOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,OE###############OO########O #OO###EOO O###OOO###########EE°,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,O###################O#########OOO. O####O O#####O##############O,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,O#####################O#########O O####O O####O###############O,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,O###############################O#E.#######O OO#####################O,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,O################################O##########OO#O#####################O,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,O#################################O#####OOOO####O#####################O,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,O#################################O#######O#####O#####################O,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,O##################################O#(#####O#####O#####################O,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,O################O#################O((##,##O#####O#############O########O,,,,,,,,,,,,,,,,,,,,,,,, */ 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; } } pragma solidity ^0.8.0; library MerkleProof { function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } function verifyCalldata( bytes32[] calldata proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } pragma solidity ^0.8.0; 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); } } pragma solidity ^0.8.0; library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } 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); } } pragma solidity ^0.8.1; library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 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); } } } } pragma solidity ^0.8.4; interface IERC721A { error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); error MintERC2309QuantityExceedsLimit(); error OwnershipNotInitializedForExtraData(); struct TokenOwnership { address addr; uint64 startTimestamp; bool burned; uint24 extraData; } function totalSupply() external view returns (uint256); function supportsInterface(bytes4 interfaceId) external view returns (bool); event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; 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 setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); } pragma solidity ^0.8.4; interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } contract ERC721A is IERC721A { struct TokenApprovalRef { address value; } uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; uint256 private constant _BITPOS_NUMBER_MINTED = 64; uint256 private constant _BITPOS_NUMBER_BURNED = 128; uint256 private constant _BITPOS_AUX = 192; uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; uint256 private constant _BITPOS_START_TIMESTAMP = 160; uint256 private constant _BITMASK_BURNED = 1 << 224; uint256 private constant _BITPOS_NEXT_INITIALIZED = 225; uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225; uint256 private constant _BITPOS_EXTRA_DATA = 232; uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1; uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1; uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000; bytes32 private constant _TRANSFER_EVENT_SIGNATURE = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef; uint256 private _currentIndex; uint256 private _burnCounter; string private _name; string private _symbol; mapping(uint256 => uint256) private _packedOwnerships; mapping(address => uint256) private _packedAddressData; mapping(uint256 => TokenApprovalRef) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } function _startTokenId() internal view virtual returns (uint256) { return 0; } function _nextTokenId() internal view virtual returns (uint256) { return _currentIndex; } function totalSupply() public view virtual override returns (uint256) { unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } function __burn_non_minted_token(uint16 amount) internal virtual { _currentIndex += amount; } function _totalMinted() internal view virtual returns (uint256) { unchecked { return _currentIndex - _startTokenId(); } } function _totalBurned() internal view virtual returns (uint256) { return _burnCounter; } function balanceOf(address owner) public view virtual override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY; } function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY; } function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY; } function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> _BITPOS_AUX); } function _setAux(address owner, uint64 aux) internal virtual { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; assembly { auxCasted := aux } packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX); _packedAddressData[owner] = packed; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == 0x01ffc9a7 || interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } function _baseURI() internal view virtual returns (string memory) { return ''; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } function _initializeOwnershipAt(uint256 index) internal virtual { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; if (packed & _BITMASK_BURNED == 0) { while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP); ownership.burned = packed & _BITMASK_BURNED != 0; ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA); } function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) { assembly { owner := and(owner, _BITMASK_ADDRESS) result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags)) } } function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) { assembly { result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1)) } } function approve(address to, uint256 tokenId) public virtual override { address owner = ownerOf(tokenId); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId].value = to; emit Approval(owner, to, tokenId); } function getApproved(uint256 tokenId) public view virtual returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId].value; } function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; } function _isSenderApprovedOrOwner( address approvedAddress, address owner, address msgSender ) private pure returns (bool result) { assembly { owner := and(owner, _BITMASK_ADDRESS) msgSender := and(msgSender, _BITMASK_ADDRESS) result := or(eq(msgSender, owner), eq(msgSender, approvedAddress)) } } function _getApprovedSlotAndAddress(uint256 tokenId) private view returns (uint256 approvedAddressSlot, address approvedAddress) { TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId]; assembly { approvedAddressSlot := tokenApproval.slot approvedAddress := sload(approvedAddressSlot) } } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); assembly { if approvedAddress { sstore(approvedAddressSlot, 0) } } unchecked { --_packedAddressData[from]; ++_packedAddressData[to]; _packedOwnerships[tokenId] = _packOwnershipData( to, _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked) ); if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; if (_packedOwnerships[nextTokenId] == 0) { if (nextTokenId != _currentIndex) { _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { transferFrom(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } function _mint(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); uint256 toMasked; uint256 end = startTokenId + quantity; assembly { toMasked := and(to, _BITMASK_ADDRESS) log4( 0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, startTokenId ) for { let tokenId := add(startTokenId, 1) } iszero(eq(tokenId, end)) { tokenId := add(tokenId, 1) } { log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId) } } if (toMasked == 0) revert MintToZeroAddress(); _currentIndex = end; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _mintERC2309(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to); _currentIndex = startTokenId + quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _safeMint( address to, uint256 quantity, bytes memory _data ) internal virtual { _mint(to, quantity); unchecked { if (to.code.length != 0) { uint256 end = _currentIndex; uint256 index = end - quantity; do { if (!_checkContractOnERC721Received(address(0), to, index++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (index < end); if (_currentIndex != end) revert(); } } } function _safeMint(address to, uint256 quantity) internal virtual { _safeMint(to, quantity, ''); } function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); if (approvalCheck) { if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); assembly { if approvedAddress { sstore(approvedAddressSlot, 0) } } unchecked { _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1; _packedOwnerships[tokenId] = _packOwnershipData( from, (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked) ); if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; if (_packedOwnerships[nextTokenId] == 0) { if (nextTokenId != _currentIndex) { _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); unchecked { _burnCounter++; } } function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual { uint256 packed = _packedOwnerships[index]; if (packed == 0) revert OwnershipNotInitializedForExtraData(); uint256 extraDataCasted; assembly { extraDataCasted := extraData } packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA); _packedOwnerships[index] = packed; } function _extraData( address from, address to, uint24 previousExtraData ) internal view virtual returns (uint24) {} function _nextExtraData( address from, address to, uint256 prevOwnershipPacked ) private view returns (uint256) { uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA); return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA; } function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } function _toString(uint256 value) internal pure virtual returns (string memory str) { assembly { str := add(mload(0x40), 0x80) mstore(0x40, str) let end := str for { let temp := value } 1 {} { str := sub(str, 1) mstore8(str, add(48, mod(temp, 10))) temp := div(temp, 10) if iszero(temp) { break } } let length := sub(end, str) str := sub(str, 0x20) mstore(str, length) } } } // ERC 721A END pragma solidity ^0.8.14; contract FACES_OF_REKT_CONTRACT is ERC721A, Ownable, ReentrancyGuard { using ECDSA for bytes32; string public _baseURIextended = "ipfs://QmPNh2m595pWnxRbSUSXxnTL91KHLQv1TQEgG8H4HUdDfR/"; bool public mint_paused = true; bool public whitelist_mint = true; struct token { uint256 experience; bool is_staked; uint256 stake_date; } struct airdrop { uint8 amount; address to; } mapping(uint256 => token) public face_of_rekt; mapping(uint8 => bytes32) public whiteListMapping; uint256 public experience_bonus_multiplier = 1; address public interactor_address; uint public wl_mint_price = 0.01 ether; uint public public_mint_price = 0.02 ether; mapping(address => uint8) private free_mint_already_minted ; uint8 public mint_limit_per_wallet = 5; constructor() ERC721A("Faces of Rekt", "FoR") { whiteListMapping[0] = 0x75eb3524d993cf03d8d1bed0ac85793a0ebd090cd08d497838619018af7bc72f; whiteListMapping[1] = 0x4e86997fc1292744c02df775932a2de5653a1c9616e57a06198b19c72810a193; } function set_Base_URI(string memory baseURI_) external onlyOwner() { _baseURIextended = baseURI_; } function switch_Mint_State() external onlyOwner() { mint_paused = !mint_paused; } function switch_Whitelist_Mint_State() external onlyOwner() { whitelist_mint = !whitelist_mint; } function set_mint_price(uint256 wl, uint256 pb) external onlyOwner { wl_mint_price = wl; public_mint_price = pb; } function set_limit_mint(uint8 limit) external onlyOwner { mint_limit_per_wallet = limit; } function burn(uint16 amount) external onlyOwner() { __burn_non_minted_token(amount); } function _baseURI() internal view virtual override returns (string memory) { return _baseURIextended; } function set_Whitelist_MerkleRoot(bytes32 newMerkleRoot_, uint8 _id) external onlyOwner { whiteListMapping[_id] = newMerkleRoot_; } function bulk_give_Exp (uint256 xp_amount, uint16[]memory id_array) external { require(msg.sender == interactor_address || msg.sender == owner(), "Not an interactor"); for (uint index = 0; index < id_array.length; index++) { face_of_rekt[id_array[index]].experience += xp_amount; } } function set_experience_bonus_multiplier (bytes32[] memory proof, uint256 _experience_bonus_multiplier) external { require(MerkleProof.verify( proof, whiteListMapping[2], keccak256(abi.encodePacked(msg.sender))) || msg.sender == owner(), "Not whitelisted"); experience_bonus_multiplier = _experience_bonus_multiplier; } function M_I_N_T(bytes32[] memory proof, uint16 quantity) external payable { require(_numberMinted(msg.sender) + quantity <= mint_limit_per_wallet, "Can't mint more than limit"); require((totalSupply() + quantity) < 5555, "Sold out"); if (whitelist_mint) { require(msg.value >= (wl_mint_price * quantity)); require(MerkleProof.verify( proof, whiteListMapping[0], keccak256(abi.encodePacked(msg.sender))), "Not whitelisted"); } else { require(msg.value >= (public_mint_price * quantity)); } require(!mint_paused, ">MINT PAUSED< The mint is paused >MINT PAUSED<"); _safeMint(msg.sender, quantity); } function get_experience_bonus(uint16 tokenId) external { require(ownerOf(tokenId) == msg.sender, "You're not the owner of this token"); face_of_rekt[tokenId].experience += (block.timestamp - face_of_rekt[tokenId].stake_date) * experience_bonus_multiplier; face_of_rekt[tokenId].stake_date = block.timestamp; } function batch_switch_stake(uint16[] memory face_array) external { for(uint16 i = 0; i < face_array.length; i++ ) { require(ownerOf(face_array[i]) == msg.sender, "You're not the owner of this token"); face_of_rekt[face_array[i]].is_staked ? face_of_rekt[face_array[i]].experience += (block.timestamp - face_of_rekt[face_array[i]].stake_date) : face_of_rekt[face_array[i]].stake_date = block.timestamp; face_of_rekt[face_array[i]].is_staked = !face_of_rekt[face_array[i]].is_staked; } } function expell_from_stake(uint16[] memory face_array) external onlyOwner { for(uint16 i = 0; i < face_array.length; i++ ) { face_of_rekt[face_array[i]].experience += (block.timestamp - face_of_rekt[face_array[i]].stake_date); face_of_rekt[face_array[i]].is_staked = false; } } function check_experience_owned(uint16 tokenId)public view returns (uint256) { return face_of_rekt[tokenId].is_staked ? (block.timestamp - face_of_rekt[tokenId].stake_date + face_of_rekt[tokenId].experience) * experience_bonus_multiplier: face_of_rekt[tokenId].experience; } function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual override { face_of_rekt[startTokenId].is_staked = false; face_of_rekt[startTokenId].experience = 0; face_of_rekt[startTokenId].stake_date = 0; } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed"); } function dev_mint_to(address to, uint16 quantity) external onlyOwner { require((totalSupply() + quantity) < 5555, "Sold out"); _safeMint(to, quantity); } function free_M_I_N_T(bytes32[] memory proof) external { require(totalSupply() + 1 < 5555, "Sold out"); require(MerkleProof.verify( proof, whiteListMapping[1], keccak256(abi.encodePacked(msg.sender))), "Not whitelisted"); require(free_mint_already_minted[msg.sender] < 1, "Only one free mint please"); require(!mint_paused, ">MINT PAUSED< The mint is paused >MINT PAUSED<"); _safeMint(msg.sender, 1); free_mint_already_minted[msg.sender] += 1; } function bulk_air_drop(airdrop[] memory airdropArray) external onlyOwner { for(uint16 i = 0; i < airdropArray.length; i++ ) { require(totalSupply() + airdropArray[i].amount < 5555, "Sold out"); _safeMint(airdropArray[i].to, airdropArray[i].amount); } } } /*//////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////@#(@///////////////////////////////////////////////////////////////////////////// ////////////////////@##@//////////////////////////////////////////////////////////////////////////// ///////////////////@@@#@/@////@@@/////////////////////////////////////////////////////////////////// ////////////////////////@@#////@@@/////////@%###%@%%###########%(/////////////////////////////////// ////////////////////////////( @////#%########################%%@@/////////////////////////////// ///////////////////////@##@***** @@%################################&//////////////////////////// ////////////////////////////(.....* @&########################%%@@//////////////////////////////// ////////////////////////////@##@....@@%###############################@///////////////////////////// //////////////////////////@#####%@%###########%#########%@@@@%#########%@/////////////////////////// /////////////////////////@%%&@@%####%@@&###%@@@@//%#####%*......,/@@.@%%@/////////////////////////// ////////////////////////////&############@.@@@@@@@@, .,..,..@@@@@@@...#//////////////////////////// ///////////////////////////@%##########%/. ..,.....,.......,............@/////////////////////////// ////////////////////////////&#######%@@,.,..@@@@@/...........@@@@//,...#//////////////////////////// ///////////////////////////@##########@......@@@@@/..........@@@@@//(@////////////////////////////// ////////////////////////////&#########%,.,...@@@@@/..........@@@@@//...#//////////////////////////// /////////////////////////////@%######@.......@@@@@/....,* ..,@@@@@//@/////////////////////////////// ////////////////////////////(,.....@#%@.///..@@@@@/.., ...,.@@@@@//@/////////////////////////////// //////////////////////@@(@//(..///,...., ..,@@@@@/..........@@@@@//@/////////////////////////////// //////////////////////@@#@//( .,/,/.....**...@@@@@/..........@@@@@//.@////////////////////////////// ////////////////////////////(..,..,.........@@@@@@/........,.@@@@@//.@////////////////////////////// ////////////////////////////////@@@..........@@@//.,,,,...,@.@@@(//.,@////////////////////////////// //////////////////////////////////@..., ................,,...........@////////////////////////////// /////////////////////////////////@...,. ..*............,,///,......*..@///////////////////////////// ///////////////////////////////////@...*........./@@@@%((#@@@%%%,*.....#//////////////////////////// ////////////////////////////////////@/.,..*............,/@%((%@%#@@///////////////////////////////// ///////////////////////////////////////,..................,@((%%(@////////////////////////////////// ////////////////////////////////////////@@@///#,@@@@..@@@@//@((((@///@@///////////////////////////// ////////////////////////////////////////////@&%,,,,,../,,%%&@((%%%@/%(@///////////////////////////// ///////////////////////////////////////%@@@###%...........@###@%((((%@////////////////////////////// ////////////////////////@#%@@@@@&%#######@&###%/,..........@###%%#########%///////////////////////// /////////////////////////%###############%@@%%@ .@@/,..,%@,@%@@%###########@/////////////////////// ////////////////////////@,,(@@&&#########&%&&&& ,((, /( @##&###########@//////////////////////// //////////////////////@( ,@%#################&% &############&&#%@%///////////////////// /////////////////////#, (@@@&%##########&% &#############%. (%///////////////////// ////////////////////// @&#############&%%&# &#########@*,@@@ ,///////////////////// ////////////////////@. @###########&% &########@( #@/////////////////// //////////////////, ,(@@@, @###########&#& ,%&%#########@ ,(@@,,@////////////////// //////////////////((, ,(&@############%& %#########@ ,#/////////////////*/
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint16","name":"quantity","type":"uint16"}],"name":"M_I_N_T","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"_baseURIextended","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"face_array","type":"uint16[]"}],"name":"batch_switch_stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint8","name":"amount","type":"uint8"},{"internalType":"address","name":"to","type":"address"}],"internalType":"struct FACES_OF_REKT_CONTRACT.airdrop[]","name":"airdropArray","type":"tuple[]"}],"name":"bulk_air_drop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"xp_amount","type":"uint256"},{"internalType":"uint16[]","name":"id_array","type":"uint16[]"}],"name":"bulk_give_Exp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"amount","type":"uint16"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"check_experience_owned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint16","name":"quantity","type":"uint16"}],"name":"dev_mint_to","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"face_array","type":"uint16[]"}],"name":"expell_from_stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"experience_bonus_multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"face_of_rekt","outputs":[{"internalType":"uint256","name":"experience","type":"uint256"},{"internalType":"bool","name":"is_staked","type":"bool"},{"internalType":"uint256","name":"stake_date","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"free_M_I_N_T","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":"uint16","name":"tokenId","type":"uint16"}],"name":"get_experience_bonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"interactor_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint_limit_per_wallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"public_mint_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"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":"set_Base_URI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newMerkleRoot_","type":"bytes32"},{"internalType":"uint8","name":"_id","type":"uint8"}],"name":"set_Whitelist_MerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"_experience_bonus_multiplier","type":"uint256"}],"name":"set_experience_bonus_multiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"limit","type":"uint8"}],"name":"set_limit_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wl","type":"uint256"},{"internalType":"uint256","name":"pb","type":"uint256"}],"name":"set_mint_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"switch_Mint_State","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switch_Whitelist_Mint_State","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"whiteListMapping","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelist_mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wl_mint_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e0604052603660808181529062002dfe60a03980516200002991600a91602090910190620001d6565b50600b805461010161ffff199091161790556001600e55662386f26fc1000060105566470de4df8200006011556013805460ff191660051790553480156200007057600080fd5b50604080518082018252600d81526c119858d95cc81bd98814995add609a1b6020808301918252835180850190945260038452622337a960e91b908401528151919291620000c191600291620001d6565b508051620000d7906003906020840190620001d6565b50506000805550620000e93362000184565b60016009819055600d6020527f75eb3524d993cf03d8d1bed0ac85793a0ebd090cd08d497838619018af7bc72f7f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee556000527f4e86997fc1292744c02df775932a2de5653a1c9616e57a06198b19c72810a1937ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c555620002b8565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001e4906200027c565b90600052602060002090601f01602090048101928262000208576000855562000253565b82601f106200022357805160ff191683800117855562000253565b8280016001018555821562000253579182015b828111156200025357825182559160200191906001019062000236565b506200026192915062000265565b5090565b5b8082111562000261576000815560010162000266565b600181811c908216806200029157607f821691505b602082108103620002b257634e487b7160e01b600052602260045260246000fd5b50919050565b612b3680620002c86000396000f3fe6080604052600436106102715760003560e01c8063715018a61161014f578063c52e7121116100c1578063dd9acb491161007a578063dd9acb491461077c578063e16c090414610792578063e985e9c5146107be578063edd8f96914610807578063eee9a0951461081d578063f2fde38b1461083057600080fd5b8063c52e7121146106c2578063c7d27228146106e2578063c87b56dd146106fc578063ca5059301461071c578063cae45c851461073c578063cb3d535f1461075c57600080fd5b8063a22cb46511610113578063a22cb465146105de578063a30e206c146105fe578063aa59a2b21461061e578063ac44600214610633578063b88d4fde14610648578063c1dd1f291461066857600080fd5b8063715018a614610561578063777142571461057657806381ca52ad146105965780638da5cb5b146105ab57806395d89b41146105c957600080fd5b8063251a95c3116101e85780634b89e004116101ac5780634b89e0041461049557806356ab561c146104c25780635af79923146104e15780636352211e146105015780636a10adf01461052157806370a082311461054157600080fd5b8063251a95c3146103f557806331bf3cfd146104155780633b8b8a0b1461043557806342842e0e146104555780634abd07211461047557600080fd5b8063095ea7b31161023a578063095ea7b31461033c5780630a1867661461035c57806318160ddd1461037c57806319ac6f691461039f5780631c4df70e146103bf57806323b872dd146103d557600080fd5b80625ae1131461027657806301ffc9a71461029857806306fdde03146102cd578063081812fc146102ef5780630928fc2214610327575b600080fd5b34801561028257600080fd5b50610296610291366004612271565b610850565b005b3480156102a457600080fd5b506102b86102b33660046122bb565b610a82565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e2610ad4565b6040516102c49190612330565b3480156102fb57600080fd5b5061030f61030a366004612343565b610b66565b6040516001600160a01b0390911681526020016102c4565b34801561033357600080fd5b506102e2610baa565b34801561034857600080fd5b50610296610357366004612373565b610c38565b34801561036857600080fd5b506102966103773660046123ae565b610cd8565b34801561038857600080fd5b50600154600054035b6040519081526020016102c4565b3480156103ab57600080fd5b506102966103ba3660046123c9565b610d18565b3480156103cb57600080fd5b5061039160105481565b3480156103e157600080fd5b506102966103f03660046123e4565b610d4e565b34801561040157600080fd5b50610296610410366004612420565b610ef3565b34801561042157600080fd5b50610296610430366004612466565b610fc2565b34801561044157600080fd5b50610296610450366004612581565b6110b9565b34801561046157600080fd5b506102966104703660046123e4565b6110f6565b34801561048157600080fd5b50610296610490366004612271565b611111565b3480156104a157600080fd5b506103916104b03660046123ae565b600d6020526000908152604090205481565b3480156104ce57600080fd5b50600b546102b890610100900460ff1681565b3480156104ed57600080fd5b506102966104fc3660046125c9565b61123e565b34801561050d57600080fd5b5061030f61051c366004612343565b611273565b34801561052d57600080fd5b5061029661053c3660046125eb565b61127e565b34801561054d57600080fd5b5061039161055c36600461261e565b6112f2565b34801561056d57600080fd5b50610296611340565b34801561058257600080fd5b50610296610591366004612694565b611376565b3480156105a257600080fd5b50610296611506565b3480156105b757600080fd5b506008546001600160a01b031661030f565b3480156105d557600080fd5b506102e2611544565b3480156105ea57600080fd5b506102966105f93660046126c8565b611553565b34801561060a57600080fd5b50600f5461030f906001600160a01b031681565b34801561062a57600080fd5b506102966115e8565b34801561063f57600080fd5b5061029661162f565b34801561065457600080fd5b50610296610663366004612704565b611742565b34801561067457600080fd5b506106a7610683366004612343565b600c60205260009081526040902080546001820154600290920154909160ff169083565b604080519384529115156020840152908201526060016102c4565b3480156106ce57600080fd5b506102966106dd36600461277f565b61178c565b3480156106ee57600080fd5b50600b546102b89060ff1681565b34801561070857600080fd5b506102e2610717366004612343565b6117ca565b34801561072857600080fd5b506102966107373660046123c9565b61184e565b34801561074857600080fd5b506102966107573660046127a2565b6118f3565b34801561076857600080fd5b506103916107773660046123c9565b61197f565b34801561078857600080fd5b5061039160115481565b34801561079e57600080fd5b506013546107ac9060ff1681565b60405160ff90911681526020016102c4565b3480156107ca57600080fd5b506102b86107d93660046127e6565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561081357600080fd5b50610391600e5481565b61029661082b366004612810565b6119f2565b34801561083c57600080fd5b5061029661084b36600461261e565b611baf565b60005b81518161ffff161015610a7e57336001600160a01b0316610894838361ffff168151811061088357610883612854565b602002602001015161ffff16611273565b6001600160a01b0316146108c35760405162461bcd60e51b81526004016108ba9061286a565b60405180910390fd5b600c6000838361ffff16815181106108dd576108dd612854565b60209081029190910181015161ffff1682528101919091526040016000206001015460ff166109465742600c6000848461ffff168151811061092157610921612854565b602002602001015161ffff1681526020019081526020016000206002018190556109d6565b600c6000838361ffff168151811061096057610960612854565b602002602001015161ffff168152602001908152602001600020600201544261098991906128c2565b600c6000848461ffff16815181106109a3576109a3612854565b602002602001015161ffff16815260200190815260200160002060000160008282546109cf91906128d9565b9250508190555b50600c6000838361ffff16815181106109f1576109f1612854565b602002602001015161ffff16815260200190815260200160002060010160009054906101000a900460ff1615600c6000848461ffff1681518110610a3757610a37612854565b602002602001015161ffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508080610a76906128f1565b915050610853565b5050565b60006301ffc9a760e01b6001600160e01b031983161480610ab357506380ac58cd60e01b6001600160e01b03198316145b80610ace5750635b5e139f60e01b6001600160e01b03198316145b92915050565b606060028054610ae390612912565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0f90612912565b8015610b5c5780601f10610b3157610100808354040283529160200191610b5c565b820191906000526020600020905b815481529060010190602001808311610b3f57829003601f168201915b5050505050905090565b6000610b7182611c47565b610b8e576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600a8054610bb790612912565b80601f0160208091040260200160405190810160405280929190818152602001828054610be390612912565b8015610c305780601f10610c0557610100808354040283529160200191610c30565b820191906000526020600020905b815481529060010190602001808311610c1357829003601f168201915b505050505081565b6000610c4382611273565b9050336001600160a01b03821614610c7c57610c5f81336107d9565b610c7c576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b03163314610d025760405162461bcd60e51b81526004016108ba9061294c565b6013805460ff191660ff92909216919091179055565b6008546001600160a01b03163314610d425760405162461bcd60e51b81526004016108ba9061294c565b610d4b81611c6e565b50565b6000610d5982611c8b565b9050836001600160a01b0316816001600160a01b031614610d8c5760405162a1148160e81b815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b03881690911417610dd957610dbc86336107d9565b610dd957604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610e0057604051633a954ecd60e21b815260040160405180910390fd5b610e0d8686866001611cf2565b8015610e1857600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b84169003610eaa57600184016000818152600460205260408120549003610ea8576000548114610ea85760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b600f546001600160a01b0316331480610f1657506008546001600160a01b031633145b610f565760405162461bcd60e51b81526020600482015260116024820152702737ba1030b71034b73a32b930b1ba37b960791b60448201526064016108ba565b60005b8151811015610fbd5782600c6000848481518110610f7957610f79612854565b602002602001015161ffff1681526020019081526020016000206000016000828254610fa591906128d9565b90915550819050610fb581612981565b915050610f59565b505050565b6008546001600160a01b03163314610fec5760405162461bcd60e51b81526004016108ba9061294c565b60005b81518161ffff161015610a7e576115b3828261ffff168151811061101557611015612854565b60200260200101516000015160ff166110316001546000540390565b61103b91906128d9565b106110585760405162461bcd60e51b81526004016108ba9061299a565b6110a7828261ffff168151811061107157611071612854565b602002602001015160200151838361ffff168151811061109357611093612854565b60200260200101516000015160ff16611d18565b806110b1816128f1565b915050610fef565b6008546001600160a01b031633146110e35760405162461bcd60e51b81526004016108ba9061294c565b8051610a7e90600a9060208401906120be565b610fbd83838360405180602001604052806000815250611742565b6008546001600160a01b0316331461113b5760405162461bcd60e51b81526004016108ba9061294c565b60005b81518161ffff161015610a7e57600c6000838361ffff168151811061116557611165612854565b602002602001015161ffff168152602001908152602001600020600201544261118e91906128c2565b600c6000848461ffff16815181106111a8576111a8612854565b602002602001015161ffff16815260200190815260200160002060000160008282546111d491906128d9565b925050819055506000600c6000848461ffff16815181106111f7576111f7612854565b602002602001015161ffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508080611236906128f1565b91505061113e565b6008546001600160a01b031633146112685760405162461bcd60e51b81526004016108ba9061294c565b601091909155601155565b6000610ace82611c8b565b6008546001600160a01b031633146112a85760405162461bcd60e51b81526004016108ba9061294c565b6115b38161ffff166112bd6001546000540390565b6112c791906128d9565b106112e45760405162461bcd60e51b81526004016108ba9061299a565b610a7e828261ffff16611d18565b60006001600160a01b03821661131b576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b0316331461136a5760405162461bcd60e51b81526004016108ba9061294c565b6113746000611d32565b565b6115b36113866001546000540390565b6113919060016128d9565b106113ae5760405162461bcd60e51b81526004016108ba9061299a565b6001600052600d60209081527ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c5546040516001600160601b03193360601b169281019290925261141a918391906034015b60405160208183030381529060405280519060200120611d84565b6114365760405162461bcd60e51b81526004016108ba906129bc565b33600090815260126020526040902054600160ff9091161061149a5760405162461bcd60e51b815260206004820152601960248201527f4f6e6c79206f6e652066726565206d696e7420706c656173650000000000000060448201526064016108ba565b600b5460ff16156114bd5760405162461bcd60e51b81526004016108ba906129e5565b6114c8336001611d18565b3360009081526012602052604081208054600192906114eb90849060ff16612a33565b92506101000a81548160ff021916908360ff16021790555050565b6008546001600160a01b031633146115305760405162461bcd60e51b81526004016108ba9061294c565b600b805460ff19811660ff90911615179055565b606060038054610ae390612912565b336001600160a01b0383160361157c5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b031633146116125760405162461bcd60e51b81526004016108ba9061294c565b600b805461ff001981166101009182900460ff1615909102179055565b6008546001600160a01b031633146116595760405162461bcd60e51b81526004016108ba9061294c565b6002600954036116ab5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108ba565b6002600955604051600090339047908381818185875af1925050503d80600081146116f2576040519150601f19603f3d011682016040523d82523d6000602084013e6116f7565b606091505b505090508061173a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016108ba565b506001600955565b61174d848484610d4e565b6001600160a01b0383163b156117865761176984848484611d9a565b611786576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6008546001600160a01b031633146117b65760405162461bcd60e51b81526004016108ba9061294c565b60ff166000908152600d6020526040902055565b60606117d582611c47565b6117f257604051630a14c4b560e41b815260040160405180910390fd5b60006117fc611e86565b9050805160000361181c5760405180602001604052806000815250611847565b8061182684611e95565b604051602001611837929190612a58565b6040516020818303038152906040525b9392505050565b3361185c61ffff8316611273565b6001600160a01b0316146118825760405162461bcd60e51b81526004016108ba9061286a565b600e5461ffff82166000908152600c60205260409020600201546118a690426128c2565b6118b09190612a87565b61ffff82166000908152600c6020526040812080549091906118d39084906128d9565b909155505061ffff166000908152600c6020526040902042600290910155565b6002600052600d60209081527f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc249546040516001600160601b03193360601b1692810192909252611948918491906034016113ff565b8061195d57506008546001600160a01b031633145b6119795760405162461bcd60e51b81526004016108ba906129bc565b600e5550565b61ffff81166000908152600c602052604081206001015460ff166119b65761ffff82166000908152600c6020526040902054610ace565b600e5461ffff83166000908152600c6020526040902080546002909101546119de90426128c2565b6119e891906128d9565b610ace9190612a87565b60135460ff1661ffff8216611a29336001600160a01b03166000908152600560205260409081902054901c6001600160401b031690565b611a3391906128d9565b1115611a815760405162461bcd60e51b815260206004820152601a60248201527f43616e2774206d696e74206d6f7265207468616e206c696d697400000000000060448201526064016108ba565b6115b38161ffff16611a966001546000540390565b611aa091906128d9565b10611abd5760405162461bcd60e51b81526004016108ba9061299a565b600b54610100900460ff1615611b60578061ffff16601054611adf9190612a87565b341015611aeb57600080fd5b60008052600d60209081527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee546040516001600160601b03193360601b1692810192909252611b3f918491906034016113ff565b611b5b5760405162461bcd60e51b81526004016108ba906129bc565b611b7e565b8061ffff16601154611b729190612a87565b341015611b7e57600080fd5b600b5460ff1615611ba15760405162461bcd60e51b81526004016108ba906129e5565b610a7e338261ffff16611d18565b6008546001600160a01b03163314611bd95760405162461bcd60e51b81526004016108ba9061294c565b6001600160a01b038116611c3e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ba565b610d4b81611d32565b6000805482108015610ace575050600090815260046020526040902054600160e01b161590565b8061ffff16600080828254611c8391906128d9565b909155505050565b600081600054811015611cd95760008181526004602052604081205490600160e01b82169003611cd7575b80600003611847575060001901600081815260046020526040902054611cb6565b505b604051636f96cda160e11b815260040160405180910390fd5b506000908152600c6020526040812060018101805460ff19169055818155600201555050565b610a7e828260405180602001604052806000815250611ecd565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600082611d918584611f3a565b14949350505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611dcf903390899088908890600401612aa6565b6020604051808303816000875af1925050508015611e0a575060408051601f3d908101601f19168201909252611e0791810190612ae3565b60015b611e68573d808015611e38576040519150601f19603f3d011682016040523d82523d6000602084013e611e3d565b606091505b508051600003611e60576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a8054610ae390612912565b604080516080019081905280825b600183039250600a81066030018353600a900480611ea35750819003601f19909101908152919050565b611ed78383611f87565b6001600160a01b0383163b15610fbd576000548281035b611f016000868380600101945086611d9a565b611f1e576040516368d2bf6b60e11b815260040160405180910390fd5b818110611eee578160005414611f3357600080fd5b5050505050565b600081815b8451811015611f7f57611f6b82868381518110611f5e57611f5e612854565b6020026020010151612092565b915080611f7781612981565b915050611f3f565b509392505050565b6000805490829003611fac5760405163b562e8dd60e01b815260040160405180910390fd5b611fb96000848385611cf2565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461206857808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101612030565b508160000361208957604051622e076360e81b815260040160405180910390fd5b60005550505050565b60008183106120ae576000828152602084905260409020611847565b5060009182526020526040902090565b8280546120ca90612912565b90600052602060002090601f0160209004810192826120ec5760008555612132565b82601f1061210557805160ff1916838001178555612132565b82800160010185558215612132579182015b82811115612132578251825591602001919060010190612117565b5061213e929150612142565b5090565b5b8082111561213e5760008155600101612143565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561218f5761218f612157565b60405290565b604051601f8201601f191681016001600160401b03811182821017156121bd576121bd612157565b604052919050565b60006001600160401b038211156121de576121de612157565b5060051b60200190565b803561ffff811681146121fa57600080fd5b919050565b600082601f83011261221057600080fd5b81356020612225612220836121c5565b612195565b82815260059290921b8401810191818101908684111561224457600080fd5b8286015b8481101561226657612259816121e8565b8352918301918301612248565b509695505050505050565b60006020828403121561228357600080fd5b81356001600160401b0381111561229957600080fd5b611e7e848285016121ff565b6001600160e01b031981168114610d4b57600080fd5b6000602082840312156122cd57600080fd5b8135611847816122a5565b60005b838110156122f35781810151838201526020016122db565b838111156117865750506000910152565b6000815180845261231c8160208601602086016122d8565b601f01601f19169290920160200192915050565b6020815260006118476020830184612304565b60006020828403121561235557600080fd5b5035919050565b80356001600160a01b03811681146121fa57600080fd5b6000806040838503121561238657600080fd5b61238f8361235c565b946020939093013593505050565b803560ff811681146121fa57600080fd5b6000602082840312156123c057600080fd5b6118478261239d565b6000602082840312156123db57600080fd5b611847826121e8565b6000806000606084860312156123f957600080fd5b6124028461235c565b92506124106020850161235c565b9150604084013590509250925092565b6000806040838503121561243357600080fd5b8235915060208301356001600160401b0381111561245057600080fd5b61245c858286016121ff565b9150509250929050565b6000602080838503121561247957600080fd5b82356001600160401b0381111561248f57600080fd5b8301601f810185136124a057600080fd5b80356124ae612220826121c5565b81815260069190911b820183019083810190878311156124cd57600080fd5b928401925b8284101561251f57604084890312156124eb5760008081fd5b6124f361216d565b6124fc8561239d565b815261250986860161235c565b81870152825260409390930192908401906124d2565b979650505050505050565b60006001600160401b0383111561254357612543612157565b612556601f8401601f1916602001612195565b905082815283838301111561256a57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561259357600080fd5b81356001600160401b038111156125a957600080fd5b8201601f810184136125ba57600080fd5b611e7e8482356020840161252a565b600080604083850312156125dc57600080fd5b50508035926020909101359150565b600080604083850312156125fe57600080fd5b6126078361235c565b9150612615602084016121e8565b90509250929050565b60006020828403121561263057600080fd5b6118478261235c565b600082601f83011261264a57600080fd5b8135602061265a612220836121c5565b82815260059290921b8401810191818101908684111561267957600080fd5b8286015b84811015612266578035835291830191830161267d565b6000602082840312156126a657600080fd5b81356001600160401b038111156126bc57600080fd5b611e7e84828501612639565b600080604083850312156126db57600080fd5b6126e48361235c565b9150602083013580151581146126f957600080fd5b809150509250929050565b6000806000806080858703121561271a57600080fd5b6127238561235c565b93506127316020860161235c565b92506040850135915060608501356001600160401b0381111561275357600080fd5b8501601f8101871361276457600080fd5b6127738782356020840161252a565b91505092959194509250565b6000806040838503121561279257600080fd5b823591506126156020840161239d565b600080604083850312156127b557600080fd5b82356001600160401b038111156127cb57600080fd5b6127d785828601612639565b95602094909401359450505050565b600080604083850312156127f957600080fd5b6128028361235c565b91506126156020840161235c565b6000806040838503121561282357600080fd5b82356001600160401b0381111561283957600080fd5b61284585828601612639565b925050612615602084016121e8565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f596f75277265206e6f7420746865206f776e6572206f66207468697320746f6b60408201526132b760f11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000828210156128d4576128d46128ac565b500390565b600082198211156128ec576128ec6128ac565b500190565b600061ffff808316818103612908576129086128ac565b6001019392505050565b600181811c9082168061292657607f821691505b60208210810361294657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060018201612993576129936128ac565b5060010190565b60208082526008908201526714dbdb19081bdd5d60c21b604082015260600190565b6020808252600f908201526e139bdd081dda1a5d195b1a5cdd1959608a1b604082015260600190565b6020808252602e908201527f3e4d494e54205041555345443c20546865206d696e742069732070617573656460408201526d080f935253950814105554d1510f60921b606082015260800190565b600060ff821660ff84168060ff03821115612a5057612a506128ac565b019392505050565b60008351612a6a8184602088016122d8565b835190830190612a7e8183602088016122d8565b01949350505050565b6000816000190483118215151615612aa157612aa16128ac565b500290565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ad990830184612304565b9695505050505050565b600060208284031215612af557600080fd5b8151611847816122a556fea2646970667358221220f2d7f433305e7f9962a427666e4fc252a42d4c2456f534898171dd2d8a6b159c64736f6c634300080e0033697066733a2f2f516d504e68326d35393570576e78526253555358786e544c39314b484c51763154514567473848344855644466522f
Deployed Bytecode
0x6080604052600436106102715760003560e01c8063715018a61161014f578063c52e7121116100c1578063dd9acb491161007a578063dd9acb491461077c578063e16c090414610792578063e985e9c5146107be578063edd8f96914610807578063eee9a0951461081d578063f2fde38b1461083057600080fd5b8063c52e7121146106c2578063c7d27228146106e2578063c87b56dd146106fc578063ca5059301461071c578063cae45c851461073c578063cb3d535f1461075c57600080fd5b8063a22cb46511610113578063a22cb465146105de578063a30e206c146105fe578063aa59a2b21461061e578063ac44600214610633578063b88d4fde14610648578063c1dd1f291461066857600080fd5b8063715018a614610561578063777142571461057657806381ca52ad146105965780638da5cb5b146105ab57806395d89b41146105c957600080fd5b8063251a95c3116101e85780634b89e004116101ac5780634b89e0041461049557806356ab561c146104c25780635af79923146104e15780636352211e146105015780636a10adf01461052157806370a082311461054157600080fd5b8063251a95c3146103f557806331bf3cfd146104155780633b8b8a0b1461043557806342842e0e146104555780634abd07211461047557600080fd5b8063095ea7b31161023a578063095ea7b31461033c5780630a1867661461035c57806318160ddd1461037c57806319ac6f691461039f5780631c4df70e146103bf57806323b872dd146103d557600080fd5b80625ae1131461027657806301ffc9a71461029857806306fdde03146102cd578063081812fc146102ef5780630928fc2214610327575b600080fd5b34801561028257600080fd5b50610296610291366004612271565b610850565b005b3480156102a457600080fd5b506102b86102b33660046122bb565b610a82565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e2610ad4565b6040516102c49190612330565b3480156102fb57600080fd5b5061030f61030a366004612343565b610b66565b6040516001600160a01b0390911681526020016102c4565b34801561033357600080fd5b506102e2610baa565b34801561034857600080fd5b50610296610357366004612373565b610c38565b34801561036857600080fd5b506102966103773660046123ae565b610cd8565b34801561038857600080fd5b50600154600054035b6040519081526020016102c4565b3480156103ab57600080fd5b506102966103ba3660046123c9565b610d18565b3480156103cb57600080fd5b5061039160105481565b3480156103e157600080fd5b506102966103f03660046123e4565b610d4e565b34801561040157600080fd5b50610296610410366004612420565b610ef3565b34801561042157600080fd5b50610296610430366004612466565b610fc2565b34801561044157600080fd5b50610296610450366004612581565b6110b9565b34801561046157600080fd5b506102966104703660046123e4565b6110f6565b34801561048157600080fd5b50610296610490366004612271565b611111565b3480156104a157600080fd5b506103916104b03660046123ae565b600d6020526000908152604090205481565b3480156104ce57600080fd5b50600b546102b890610100900460ff1681565b3480156104ed57600080fd5b506102966104fc3660046125c9565b61123e565b34801561050d57600080fd5b5061030f61051c366004612343565b611273565b34801561052d57600080fd5b5061029661053c3660046125eb565b61127e565b34801561054d57600080fd5b5061039161055c36600461261e565b6112f2565b34801561056d57600080fd5b50610296611340565b34801561058257600080fd5b50610296610591366004612694565b611376565b3480156105a257600080fd5b50610296611506565b3480156105b757600080fd5b506008546001600160a01b031661030f565b3480156105d557600080fd5b506102e2611544565b3480156105ea57600080fd5b506102966105f93660046126c8565b611553565b34801561060a57600080fd5b50600f5461030f906001600160a01b031681565b34801561062a57600080fd5b506102966115e8565b34801561063f57600080fd5b5061029661162f565b34801561065457600080fd5b50610296610663366004612704565b611742565b34801561067457600080fd5b506106a7610683366004612343565b600c60205260009081526040902080546001820154600290920154909160ff169083565b604080519384529115156020840152908201526060016102c4565b3480156106ce57600080fd5b506102966106dd36600461277f565b61178c565b3480156106ee57600080fd5b50600b546102b89060ff1681565b34801561070857600080fd5b506102e2610717366004612343565b6117ca565b34801561072857600080fd5b506102966107373660046123c9565b61184e565b34801561074857600080fd5b506102966107573660046127a2565b6118f3565b34801561076857600080fd5b506103916107773660046123c9565b61197f565b34801561078857600080fd5b5061039160115481565b34801561079e57600080fd5b506013546107ac9060ff1681565b60405160ff90911681526020016102c4565b3480156107ca57600080fd5b506102b86107d93660046127e6565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561081357600080fd5b50610391600e5481565b61029661082b366004612810565b6119f2565b34801561083c57600080fd5b5061029661084b36600461261e565b611baf565b60005b81518161ffff161015610a7e57336001600160a01b0316610894838361ffff168151811061088357610883612854565b602002602001015161ffff16611273565b6001600160a01b0316146108c35760405162461bcd60e51b81526004016108ba9061286a565b60405180910390fd5b600c6000838361ffff16815181106108dd576108dd612854565b60209081029190910181015161ffff1682528101919091526040016000206001015460ff166109465742600c6000848461ffff168151811061092157610921612854565b602002602001015161ffff1681526020019081526020016000206002018190556109d6565b600c6000838361ffff168151811061096057610960612854565b602002602001015161ffff168152602001908152602001600020600201544261098991906128c2565b600c6000848461ffff16815181106109a3576109a3612854565b602002602001015161ffff16815260200190815260200160002060000160008282546109cf91906128d9565b9250508190555b50600c6000838361ffff16815181106109f1576109f1612854565b602002602001015161ffff16815260200190815260200160002060010160009054906101000a900460ff1615600c6000848461ffff1681518110610a3757610a37612854565b602002602001015161ffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508080610a76906128f1565b915050610853565b5050565b60006301ffc9a760e01b6001600160e01b031983161480610ab357506380ac58cd60e01b6001600160e01b03198316145b80610ace5750635b5e139f60e01b6001600160e01b03198316145b92915050565b606060028054610ae390612912565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0f90612912565b8015610b5c5780601f10610b3157610100808354040283529160200191610b5c565b820191906000526020600020905b815481529060010190602001808311610b3f57829003601f168201915b5050505050905090565b6000610b7182611c47565b610b8e576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600a8054610bb790612912565b80601f0160208091040260200160405190810160405280929190818152602001828054610be390612912565b8015610c305780601f10610c0557610100808354040283529160200191610c30565b820191906000526020600020905b815481529060010190602001808311610c1357829003601f168201915b505050505081565b6000610c4382611273565b9050336001600160a01b03821614610c7c57610c5f81336107d9565b610c7c576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b03163314610d025760405162461bcd60e51b81526004016108ba9061294c565b6013805460ff191660ff92909216919091179055565b6008546001600160a01b03163314610d425760405162461bcd60e51b81526004016108ba9061294c565b610d4b81611c6e565b50565b6000610d5982611c8b565b9050836001600160a01b0316816001600160a01b031614610d8c5760405162a1148160e81b815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b03881690911417610dd957610dbc86336107d9565b610dd957604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610e0057604051633a954ecd60e21b815260040160405180910390fd5b610e0d8686866001611cf2565b8015610e1857600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b84169003610eaa57600184016000818152600460205260408120549003610ea8576000548114610ea85760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b600f546001600160a01b0316331480610f1657506008546001600160a01b031633145b610f565760405162461bcd60e51b81526020600482015260116024820152702737ba1030b71034b73a32b930b1ba37b960791b60448201526064016108ba565b60005b8151811015610fbd5782600c6000848481518110610f7957610f79612854565b602002602001015161ffff1681526020019081526020016000206000016000828254610fa591906128d9565b90915550819050610fb581612981565b915050610f59565b505050565b6008546001600160a01b03163314610fec5760405162461bcd60e51b81526004016108ba9061294c565b60005b81518161ffff161015610a7e576115b3828261ffff168151811061101557611015612854565b60200260200101516000015160ff166110316001546000540390565b61103b91906128d9565b106110585760405162461bcd60e51b81526004016108ba9061299a565b6110a7828261ffff168151811061107157611071612854565b602002602001015160200151838361ffff168151811061109357611093612854565b60200260200101516000015160ff16611d18565b806110b1816128f1565b915050610fef565b6008546001600160a01b031633146110e35760405162461bcd60e51b81526004016108ba9061294c565b8051610a7e90600a9060208401906120be565b610fbd83838360405180602001604052806000815250611742565b6008546001600160a01b0316331461113b5760405162461bcd60e51b81526004016108ba9061294c565b60005b81518161ffff161015610a7e57600c6000838361ffff168151811061116557611165612854565b602002602001015161ffff168152602001908152602001600020600201544261118e91906128c2565b600c6000848461ffff16815181106111a8576111a8612854565b602002602001015161ffff16815260200190815260200160002060000160008282546111d491906128d9565b925050819055506000600c6000848461ffff16815181106111f7576111f7612854565b602002602001015161ffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508080611236906128f1565b91505061113e565b6008546001600160a01b031633146112685760405162461bcd60e51b81526004016108ba9061294c565b601091909155601155565b6000610ace82611c8b565b6008546001600160a01b031633146112a85760405162461bcd60e51b81526004016108ba9061294c565b6115b38161ffff166112bd6001546000540390565b6112c791906128d9565b106112e45760405162461bcd60e51b81526004016108ba9061299a565b610a7e828261ffff16611d18565b60006001600160a01b03821661131b576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b0316331461136a5760405162461bcd60e51b81526004016108ba9061294c565b6113746000611d32565b565b6115b36113866001546000540390565b6113919060016128d9565b106113ae5760405162461bcd60e51b81526004016108ba9061299a565b6001600052600d60209081527ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c5546040516001600160601b03193360601b169281019290925261141a918391906034015b60405160208183030381529060405280519060200120611d84565b6114365760405162461bcd60e51b81526004016108ba906129bc565b33600090815260126020526040902054600160ff9091161061149a5760405162461bcd60e51b815260206004820152601960248201527f4f6e6c79206f6e652066726565206d696e7420706c656173650000000000000060448201526064016108ba565b600b5460ff16156114bd5760405162461bcd60e51b81526004016108ba906129e5565b6114c8336001611d18565b3360009081526012602052604081208054600192906114eb90849060ff16612a33565b92506101000a81548160ff021916908360ff16021790555050565b6008546001600160a01b031633146115305760405162461bcd60e51b81526004016108ba9061294c565b600b805460ff19811660ff90911615179055565b606060038054610ae390612912565b336001600160a01b0383160361157c5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b031633146116125760405162461bcd60e51b81526004016108ba9061294c565b600b805461ff001981166101009182900460ff1615909102179055565b6008546001600160a01b031633146116595760405162461bcd60e51b81526004016108ba9061294c565b6002600954036116ab5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108ba565b6002600955604051600090339047908381818185875af1925050503d80600081146116f2576040519150601f19603f3d011682016040523d82523d6000602084013e6116f7565b606091505b505090508061173a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016108ba565b506001600955565b61174d848484610d4e565b6001600160a01b0383163b156117865761176984848484611d9a565b611786576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6008546001600160a01b031633146117b65760405162461bcd60e51b81526004016108ba9061294c565b60ff166000908152600d6020526040902055565b60606117d582611c47565b6117f257604051630a14c4b560e41b815260040160405180910390fd5b60006117fc611e86565b9050805160000361181c5760405180602001604052806000815250611847565b8061182684611e95565b604051602001611837929190612a58565b6040516020818303038152906040525b9392505050565b3361185c61ffff8316611273565b6001600160a01b0316146118825760405162461bcd60e51b81526004016108ba9061286a565b600e5461ffff82166000908152600c60205260409020600201546118a690426128c2565b6118b09190612a87565b61ffff82166000908152600c6020526040812080549091906118d39084906128d9565b909155505061ffff166000908152600c6020526040902042600290910155565b6002600052600d60209081527f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc249546040516001600160601b03193360601b1692810192909252611948918491906034016113ff565b8061195d57506008546001600160a01b031633145b6119795760405162461bcd60e51b81526004016108ba906129bc565b600e5550565b61ffff81166000908152600c602052604081206001015460ff166119b65761ffff82166000908152600c6020526040902054610ace565b600e5461ffff83166000908152600c6020526040902080546002909101546119de90426128c2565b6119e891906128d9565b610ace9190612a87565b60135460ff1661ffff8216611a29336001600160a01b03166000908152600560205260409081902054901c6001600160401b031690565b611a3391906128d9565b1115611a815760405162461bcd60e51b815260206004820152601a60248201527f43616e2774206d696e74206d6f7265207468616e206c696d697400000000000060448201526064016108ba565b6115b38161ffff16611a966001546000540390565b611aa091906128d9565b10611abd5760405162461bcd60e51b81526004016108ba9061299a565b600b54610100900460ff1615611b60578061ffff16601054611adf9190612a87565b341015611aeb57600080fd5b60008052600d60209081527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee546040516001600160601b03193360601b1692810192909252611b3f918491906034016113ff565b611b5b5760405162461bcd60e51b81526004016108ba906129bc565b611b7e565b8061ffff16601154611b729190612a87565b341015611b7e57600080fd5b600b5460ff1615611ba15760405162461bcd60e51b81526004016108ba906129e5565b610a7e338261ffff16611d18565b6008546001600160a01b03163314611bd95760405162461bcd60e51b81526004016108ba9061294c565b6001600160a01b038116611c3e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ba565b610d4b81611d32565b6000805482108015610ace575050600090815260046020526040902054600160e01b161590565b8061ffff16600080828254611c8391906128d9565b909155505050565b600081600054811015611cd95760008181526004602052604081205490600160e01b82169003611cd7575b80600003611847575060001901600081815260046020526040902054611cb6565b505b604051636f96cda160e11b815260040160405180910390fd5b506000908152600c6020526040812060018101805460ff19169055818155600201555050565b610a7e828260405180602001604052806000815250611ecd565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600082611d918584611f3a565b14949350505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611dcf903390899088908890600401612aa6565b6020604051808303816000875af1925050508015611e0a575060408051601f3d908101601f19168201909252611e0791810190612ae3565b60015b611e68573d808015611e38576040519150601f19603f3d011682016040523d82523d6000602084013e611e3d565b606091505b508051600003611e60576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a8054610ae390612912565b604080516080019081905280825b600183039250600a81066030018353600a900480611ea35750819003601f19909101908152919050565b611ed78383611f87565b6001600160a01b0383163b15610fbd576000548281035b611f016000868380600101945086611d9a565b611f1e576040516368d2bf6b60e11b815260040160405180910390fd5b818110611eee578160005414611f3357600080fd5b5050505050565b600081815b8451811015611f7f57611f6b82868381518110611f5e57611f5e612854565b6020026020010151612092565b915080611f7781612981565b915050611f3f565b509392505050565b6000805490829003611fac5760405163b562e8dd60e01b815260040160405180910390fd5b611fb96000848385611cf2565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461206857808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101612030565b508160000361208957604051622e076360e81b815260040160405180910390fd5b60005550505050565b60008183106120ae576000828152602084905260409020611847565b5060009182526020526040902090565b8280546120ca90612912565b90600052602060002090601f0160209004810192826120ec5760008555612132565b82601f1061210557805160ff1916838001178555612132565b82800160010185558215612132579182015b82811115612132578251825591602001919060010190612117565b5061213e929150612142565b5090565b5b8082111561213e5760008155600101612143565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561218f5761218f612157565b60405290565b604051601f8201601f191681016001600160401b03811182821017156121bd576121bd612157565b604052919050565b60006001600160401b038211156121de576121de612157565b5060051b60200190565b803561ffff811681146121fa57600080fd5b919050565b600082601f83011261221057600080fd5b81356020612225612220836121c5565b612195565b82815260059290921b8401810191818101908684111561224457600080fd5b8286015b8481101561226657612259816121e8565b8352918301918301612248565b509695505050505050565b60006020828403121561228357600080fd5b81356001600160401b0381111561229957600080fd5b611e7e848285016121ff565b6001600160e01b031981168114610d4b57600080fd5b6000602082840312156122cd57600080fd5b8135611847816122a5565b60005b838110156122f35781810151838201526020016122db565b838111156117865750506000910152565b6000815180845261231c8160208601602086016122d8565b601f01601f19169290920160200192915050565b6020815260006118476020830184612304565b60006020828403121561235557600080fd5b5035919050565b80356001600160a01b03811681146121fa57600080fd5b6000806040838503121561238657600080fd5b61238f8361235c565b946020939093013593505050565b803560ff811681146121fa57600080fd5b6000602082840312156123c057600080fd5b6118478261239d565b6000602082840312156123db57600080fd5b611847826121e8565b6000806000606084860312156123f957600080fd5b6124028461235c565b92506124106020850161235c565b9150604084013590509250925092565b6000806040838503121561243357600080fd5b8235915060208301356001600160401b0381111561245057600080fd5b61245c858286016121ff565b9150509250929050565b6000602080838503121561247957600080fd5b82356001600160401b0381111561248f57600080fd5b8301601f810185136124a057600080fd5b80356124ae612220826121c5565b81815260069190911b820183019083810190878311156124cd57600080fd5b928401925b8284101561251f57604084890312156124eb5760008081fd5b6124f361216d565b6124fc8561239d565b815261250986860161235c565b81870152825260409390930192908401906124d2565b979650505050505050565b60006001600160401b0383111561254357612543612157565b612556601f8401601f1916602001612195565b905082815283838301111561256a57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561259357600080fd5b81356001600160401b038111156125a957600080fd5b8201601f810184136125ba57600080fd5b611e7e8482356020840161252a565b600080604083850312156125dc57600080fd5b50508035926020909101359150565b600080604083850312156125fe57600080fd5b6126078361235c565b9150612615602084016121e8565b90509250929050565b60006020828403121561263057600080fd5b6118478261235c565b600082601f83011261264a57600080fd5b8135602061265a612220836121c5565b82815260059290921b8401810191818101908684111561267957600080fd5b8286015b84811015612266578035835291830191830161267d565b6000602082840312156126a657600080fd5b81356001600160401b038111156126bc57600080fd5b611e7e84828501612639565b600080604083850312156126db57600080fd5b6126e48361235c565b9150602083013580151581146126f957600080fd5b809150509250929050565b6000806000806080858703121561271a57600080fd5b6127238561235c565b93506127316020860161235c565b92506040850135915060608501356001600160401b0381111561275357600080fd5b8501601f8101871361276457600080fd5b6127738782356020840161252a565b91505092959194509250565b6000806040838503121561279257600080fd5b823591506126156020840161239d565b600080604083850312156127b557600080fd5b82356001600160401b038111156127cb57600080fd5b6127d785828601612639565b95602094909401359450505050565b600080604083850312156127f957600080fd5b6128028361235c565b91506126156020840161235c565b6000806040838503121561282357600080fd5b82356001600160401b0381111561283957600080fd5b61284585828601612639565b925050612615602084016121e8565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f596f75277265206e6f7420746865206f776e6572206f66207468697320746f6b60408201526132b760f11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000828210156128d4576128d46128ac565b500390565b600082198211156128ec576128ec6128ac565b500190565b600061ffff808316818103612908576129086128ac565b6001019392505050565b600181811c9082168061292657607f821691505b60208210810361294657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060018201612993576129936128ac565b5060010190565b60208082526008908201526714dbdb19081bdd5d60c21b604082015260600190565b6020808252600f908201526e139bdd081dda1a5d195b1a5cdd1959608a1b604082015260600190565b6020808252602e908201527f3e4d494e54205041555345443c20546865206d696e742069732070617573656460408201526d080f935253950814105554d1510f60921b606082015260800190565b600060ff821660ff84168060ff03821115612a5057612a506128ac565b019392505050565b60008351612a6a8184602088016122d8565b835190830190612a7e8183602088016122d8565b01949350505050565b6000816000190483118215151615612aa157612aa16128ac565b500290565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ad990830184612304565b9695505050505050565b600060208284031215612af557600080fd5b8151611847816122a556fea2646970667358221220f2d7f433305e7f9962a427666e4fc252a42d4c2456f534898171dd2d8a6b159c64736f6c634300080e0033
Deployed Bytecode Sourcemap
42851:6906:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46901:585;;;;;;;;;;-1:-1:-1;46901:585:0;;;;;:::i;:::-;;:::i;:::-;;28132:227;;;;;;;;;;-1:-1:-1;28132:227:0;;;;;:::i;:::-;;:::i;:::-;;;2611:14:1;;2604:22;2586:41;;2574:2;2559:18;28132:227:0;;;;;;;;28369:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31583:209::-;;;;;;;;;;-1:-1:-1;31583:209:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3738:32:1;;;3720:51;;3708:2;3693:18;31583:209:0;3574:203:1;42961:89:0;;;;;;;;;;;;;:::i;31175:400::-;;;;;;;;;;-1:-1:-1;31175:400:0;;;;;:::i;:::-;;:::i;44506:104::-;;;;;;;;;;-1:-1:-1;44506:104:0;;;;;:::i;:::-;;:::i;26471:166::-;;;;;;;;;;-1:-1:-1;26592:12:0;;26532:7;26576:13;:28;26471:166;;;4713:25:1;;;4701:2;4686:18;26471:166:0;4567:177:1;44618:104:0;;;;;;;;;;-1:-1:-1;44618:104:0;;;;;:::i;:::-;;:::i;43537:38::-;;;;;;;;;;;;;;;;33313:1567;;;;;;;;;;-1:-1:-1;33313:1567:0;;;;;:::i;:::-;;:::i;45012:338::-;;;;;;;;;;-1:-1:-1;45012:338:0;;;;;:::i;:::-;;:::i;49451:301::-;;;;;;;;;;-1:-1:-1;49451:301:0;;;;;:::i;:::-;;:::i;44010:113::-;;;;;;;;;;-1:-1:-1;44010:113:0;;;;;:::i;:::-;;:::i;34888:185::-;;;;;;;;;;-1:-1:-1;34888:185:0;;;;;:::i;:::-;;:::i;47494:330::-;;;;;;;;;;-1:-1:-1;47494:330:0;;;;;:::i;:::-;;:::i;43382:49::-;;;;;;;;;;-1:-1:-1;43382:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;43098:33;;;;;;;;;;-1:-1:-1;43098:33:0;;;;;;;;;;;44361:137;;;;;;;;;;-1:-1:-1;44361:137:0;;;;;:::i;:::-;;:::i;29019:152::-;;;;;;;;;;-1:-1:-1;29019:152:0;;;;;:::i;:::-;;:::i;48698:176::-;;;;;;;;;;-1:-1:-1;48698:176:0;;;;;:::i;:::-;;:::i;27025:233::-;;;;;;;;;;-1:-1:-1;27025:233:0;;;;;:::i;:::-;;:::i;18003:103::-;;;;;;;;;;;;;:::i;48882:561::-;;;;;;;;;;-1:-1:-1;48882:561:0;;;;;:::i;:::-;;:::i;44131:99::-;;;;;;;;;;;;;:::i;17780:87::-;;;;;;;;;;-1:-1:-1;17853:6:0;;-1:-1:-1;;;;;17853:6:0;17780:87;;28477:104;;;;;;;;;;;;;:::i;31800:308::-;;;;;;;;;;-1:-1:-1;31800:308:0;;;;;:::i;:::-;;:::i;43495:33::-;;;;;;;;;;-1:-1:-1;43495:33:0;;;;-1:-1:-1;;;;;43495:33:0;;;44238:115;;;;;;;;;;;;;:::i;48500:190::-;;;;;;;;;;;;;:::i;35081:399::-;;;;;;;;;;-1:-1:-1;35081:399:0;;;;;:::i;:::-;;:::i;43328:45::-;;;;;;;;;;-1:-1:-1;43328:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10893:25:1;;;10961:14;;10954:22;10949:2;10934:18;;10927:50;10993:18;;;10986:34;10881:2;10866:18;43328:45:0;10697:329:1;44859:145:0;;;;;;;;;;-1:-1:-1;44859:145:0;;;;;:::i;:::-;;:::i;43059:30::-;;;;;;;;;;-1:-1:-1;43059:30:0;;;;;;;;28589:318;;;;;;;;;;-1:-1:-1;28589:318:0;;;;;:::i;:::-;;:::i;46546:347::-;;;;;;;;;;-1:-1:-1;46546:347:0;;;;;:::i;:::-;;:::i;45358:385::-;;;;;;;;;;-1:-1:-1;45358:385:0;;;;;:::i;:::-;;:::i;47832:315::-;;;;;;;;;;-1:-1:-1;47832:315:0;;;;;:::i;:::-;;:::i;43584:42::-;;;;;;;;;;;;;;;;43703:38;;;;;;;;;;-1:-1:-1;43703:38:0;;;;;;;;;;;11879:4:1;11867:17;;;11849:36;;11837:2;11822:18;43703:38:0;11707:184:1;32116:164:0;;;;;;;;;;-1:-1:-1;32116:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32237:25:0;;;32213:4;32237:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;32116:164;43440:46;;;;;;;;;;;;;;;;45751:787;;;;;;:::i;:::-;;:::i;18114:201::-;;;;;;;;;;-1:-1:-1;18114:201:0;;;;;:::i;:::-;;:::i;46901:585::-;46983:8;46979:498;47001:10;:17;46997:1;:21;;;46979:498;;;47075:10;-1:-1:-1;;;;;47049:36:0;:22;47057:10;47068:1;47057:13;;;;;;;;;;:::i;:::-;;;;;;;47049:22;;:7;:22::i;:::-;-1:-1:-1;;;;;47049:36:0;;47041:83;;;;-1:-1:-1;;;47041:83:0;;;;;;;:::i;:::-;;;;;;;;;47141:12;:27;47154:10;47165:1;47154:13;;;;;;;;;;:::i;:::-;;;;;;;;;;;;47141:27;;;;;;;;;;;;-1:-1:-1;47141:27:0;:37;;;;;:229;;47355:15;47314:12;:27;47327:10;47338:1;47327:13;;;;;;;;;;:::i;:::-;;;;;;;47314:27;;;;;;;;;;;;;:38;;:56;;;47141:229;;;47257:12;:27;47270:10;47281:1;47270:13;;;;;;;;;;:::i;:::-;;;;;;;47257:27;;;;;;;;;;;;;:38;;;47239:15;:56;;;;:::i;:::-;47196:12;:27;47209:10;47220:1;47209:13;;;;;;;;;;:::i;:::-;;;;;;;47196:27;;;;;;;;;;;;;:38;;;:100;;;;;;;:::i;:::-;;;;;;;47141:229;;47428:12;:27;47441:10;47452:1;47441:13;;;;;;;;;;:::i;:::-;;;;;;;47428:27;;;;;;;;;;;;;:37;;;;;;;;;;;;47427:38;47387:12;:27;47400:10;47411:1;47400:13;;;;;;;;;;:::i;:::-;;;;;;;47387:27;;;;;;;;;;;;;:37;;;:78;;;;;;;;;;;;;;;;;;47020:3;;;;;:::i;:::-;;;;46979:498;;;;46901:585;:::o;28132:227::-;28217:4;-1:-1:-1;;;;;;;;;28250:25:0;;;;:63;;-1:-1:-1;;;;;;;;;;28288:25:0;;;28250:63;:101;;;-1:-1:-1;;;;;;;;;;28326:25:0;;;28250:101;28234:117;28132:227;-1:-1:-1;;28132:227:0:o;28369:100::-;28423:13;28456:5;28449:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28369:100;:::o;31583:209::-;31650:7;31675:16;31683:7;31675;:16::i;:::-;31670:64;;31700:34;;-1:-1:-1;;;31700:34:0;;;;;;;;;;;31670:64;-1:-1:-1;31754:24:0;;;;:15;:24;;;;;:30;-1:-1:-1;;;;;31754:30:0;;31583:209::o;42961:89::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31175:400::-;31256:13;31272:16;31280:7;31272;:16::i;:::-;31256:32;-1:-1:-1;42198:10:0;-1:-1:-1;;;;;31305:28:0;;;31301:175;;31353:44;31370:5;42198:10;32116:164;:::i;31353:44::-;31348:128;;31425:35;;-1:-1:-1;;;31425:35:0;;;;;;;;;;;31348:128;31488:24;;;;:15;:24;;;;;;:35;;-1:-1:-1;;;;;;31488:35:0;-1:-1:-1;;;;;31488:35:0;;;;;;;;;31539:28;;31488:24;;31539:28;;;;;;;31245:330;31175:400;;:::o;44506:104::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44573:21:::1;:29:::0;;-1:-1:-1;;44573:29:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;44506:104::o;44618:::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44681:31:::1;44705:6;44681:23;:31::i;:::-;44618:104:::0;:::o;33313:1567::-;33447:27;33477;33496:7;33477:18;:27::i;:::-;33447:57;;33562:4;-1:-1:-1;;;;;33521:45:0;33537:19;-1:-1:-1;;;;;33521:45:0;;33517:86;;33575:28;;-1:-1:-1;;;33575:28:0;;;;;;;;;;;33517:86;33617:27;33126:24;;;:15;:24;;;;;33259:26;;42198:10;32868:30;;;-1:-1:-1;;;;;32732:28:0;;32846:20;;;32843:56;33721:180;;33814:43;33831:4;42198:10;32116:164;:::i;33814:43::-;33809:92;;33866:35;;-1:-1:-1;;;33866:35:0;;;;;;;;;;;33809:92;-1:-1:-1;;;;;33918:16:0;;33914:52;;33943:23;;-1:-1:-1;;;33943:23:0;;;;;;;;;;;33914:52;33979:43;34001:4;34007:2;34011:7;34020:1;33979:21;:43::i;:::-;34062:15;34059:83;;;34125:1;34104:19;34097:30;34059:83;-1:-1:-1;;;;;34184:24:0;;;;;;;:18;:24;;;;;;34182:26;;-1:-1:-1;;34182:26:0;;;34221:22;;;;;;;;;34219:24;;-1:-1:-1;34219:24:0;;;30923:11;30898:23;30894:41;30881:63;-1:-1:-1;;;30881:63:0;34256:26;;;;:17;:26;;;;;:163;;;;-1:-1:-1;;;34436:47:0;;:52;;34432:336;;34537:1;34527:11;;34505:19;34557:30;;;:17;:30;;;;;;:35;;34553:204;;34632:13;;34617:11;:28;34613:129;;34670:30;;;;:17;:30;;;;;:52;;;34613:129;34490:278;34432:336;34811:7;34807:2;-1:-1:-1;;;;;34792:27:0;34801:4;-1:-1:-1;;;;;34792:27:0;;;;;;;;;;;33436:1444;;;33313:1567;;;:::o;45012:338::-;45124:18;;-1:-1:-1;;;;;45124:18:0;45110:10;:32;;:57;;-1:-1:-1;17853:6:0;;-1:-1:-1;;;;;17853:6:0;45146:10;:21;45110:57;45102:87;;;;-1:-1:-1;;;45102:87:0;;14666:2:1;45102:87:0;;;14648:21:1;14705:2;14685:18;;;14678:30;-1:-1:-1;;;14724:18:1;;;14717:47;14781:18;;45102:87:0;14464:341:1;45102:87:0;45207:10;45202:139;45231:8;:15;45223:5;:23;45202:139;;;45318:9;45274:12;:29;45287:8;45296:5;45287:15;;;;;;;;:::i;:::-;;;;;;;45274:29;;;;;;;;;;;;;:40;;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;45248:7:0;;-1:-1:-1;45248:7:0;;;:::i;:::-;;;;45202:139;;;;45012:338;;:::o;49451:301::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;49539:8:::1;49535:210;49557:12;:19;49553:1;:23;;;49535:210;;;49648:4;49623:12;49636:1;49623:15;;;;;;;;;;:::i;:::-;;;;;;;:22;;;49607:38;;:13;26592:12:::0;;26532:7;26576:13;:28;;26471:166;49607:13:::1;:38;;;;:::i;:::-;:45;49599:66;;;;-1:-1:-1::0;;;49599:66:0::1;;;;;;;:::i;:::-;49680:53;49690:12;49703:1;49690:15;;;;;;;;;;:::i;:::-;;;;;;;:18;;;49710:12;49723:1;49710:15;;;;;;;;;;:::i;:::-;;;;;;;:22;;;49680:53;;:9;:53::i;:::-;49578:3:::0;::::1;::::0;::::1;:::i;:::-;;;;49535:210;;44010:113:::0;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44088:27;;::::1;::::0;:16:::1;::::0;:27:::1;::::0;::::1;::::0;::::1;:::i;34888:185::-:0;35026:39;35043:4;35049:2;35053:7;35026:39;;;;;;;;;;;;:16;:39::i;47494:330::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;47585:8:::1;47581:234;47603:10;:17;47599:1;:21;;;47581:234;;;47704:12;:27;47717:10;47728:1;47717:13;;;;;;;;;;:::i;:::-;;;;;;;47704:27;;;;;;;;;;;;;:38;;;47686:15;:56;;;;:::i;:::-;47643:12;:27;47656:10;47667:1;47656:13;;;;;;;;;;:::i;:::-;;;;;;;47643:27;;;;;;;;;;;;;:38;;;:100;;;;;;;:::i;:::-;;;;;;;;47798:5;47758:12;:27;47771:10;47782:1;47771:13;;;;;;;;;;:::i;:::-;;;;;;;47758:27;;;;;;;;;;;;;:37;;;:45;;;;;;;;;;;;;;;;;;47622:3;;;;;:::i;:::-;;;;47581:234;;44361:137:::0;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44439:13:::1;:18:::0;;;;44468:17:::1;:22:::0;44361:137::o;29019:152::-;29091:7;29134:27;29153:7;29134:18;:27::i;48698:176::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;48815:4:::1;48803:8;48787:24;;:13;26592:12:::0;;26532:7;26576:13;:28;;26471:166;48787:13:::1;:24;;;;:::i;:::-;48786:33;48778:54;;;;-1:-1:-1::0;;;48778:54:0::1;;;;;;;:::i;:::-;48843:23;48853:2;48857:8;48843:23;;:9;:23::i;27025:233::-:0;27097:7;-1:-1:-1;;;;;27121:19:0;;27117:60;;27149:28;;-1:-1:-1;;;27149:28:0;;;;;;;;;;;27117:60;-1:-1:-1;;;;;;27195:25:0;;;;;:18;:25;;;;;;-1:-1:-1;;;;;27195:55:0;;27025:233::o;18003:103::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;18068:30:::1;18095:1;18068:18;:30::i;:::-;18003:103::o:0;48882:561::-;48978:4;48958:13;26592:12;;26532:7;26576:13;:28;;26471:166;48958:13;:17;;48974:1;48958:17;:::i;:::-;:24;48950:45;;;;-1:-1:-1;;;48950:45:0;;;;;;;:::i;:::-;49092:1;49075:19;;:16;:19;;;;;;;49123:28;-1:-1:-1;;;;;;49140:10:0;15435:2:1;15431:15;15427:53;49123:28:0;;;15415:66:1;;;;49014:139:0;;49051:5;;49075:19;15497:12:1;;49123:28:0;;;;;;;;;;;;;49113:39;;;;;;49014:18;:139::i;:::-;49006:167;;;;-1:-1:-1;;;49006:167:0;;;;;;;:::i;:::-;49217:10;49192:36;;;;:24;:36;;;;;;49231:1;49192:36;;;;:40;49184:78;;;;-1:-1:-1;;;49184:78:0;;16066:2:1;49184:78:0;;;16048:21:1;16105:2;16085:18;;;16078:30;16144:27;16124:18;;;16117:55;16189:18;;49184:78:0;15864:349:1;49184:78:0;49282:11;;;;49281:12;49273:71;;;;-1:-1:-1;;;49273:71:0;;;;;;;:::i;:::-;49357:24;49367:10;49379:1;49357:9;:24::i;:::-;49417:10;49392:36;;;;:24;:36;;;;;:41;;49432:1;;49392:36;:41;;49432:1;;49392:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48882:561;:::o;44131:99::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44209:11:::1;::::0;;-1:-1:-1;;44194:26:0;::::1;44209:11;::::0;;::::1;44208:12;44194:26;::::0;;44131:99::o;28477:104::-;28533:13;28566:7;28559:14;;;;;:::i;31800:308::-;42198:10;-1:-1:-1;;;;;31899:31:0;;;31895:61;;31939:17;;-1:-1:-1;;;31939:17:0;;;;;;;;;;;31895:61;42198:10;31969:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;31969:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;31969:60:0;;;;;;;;;;32045:55;;2586:41:1;;;31969:49:0;;42198:10;32045:55;;2559:18:1;32045:55:0;;;;;;;31800:308;;:::o;44238:115::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44329:14:::1;::::0;;-1:-1:-1;;44311:32:0;::::1;44329:14;::::0;;;::::1;;;44328:15;44311:32:::0;;::::1;;::::0;;44238:115::o;48500:190::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;7077:1:::1;7227:7;;:19:::0;7219:63:::1;;;::::0;-1:-1:-1;;;7219:63:0;;17044:2:1;7219:63:0::1;::::0;::::1;17026:21:1::0;17083:2;17063:18;;;17056:30;17122:33;17102:18;;;17095:61;17173:18;;7219:63:0::1;16842:355:1::0;7219:63:0::1;7077:1;7295:7;:18:::0;48587:49:::2;::::0;48569:12:::2;::::0;48587:10:::2;::::0;48610:21:::2;::::0;48569:12;48587:49;48569:12;48587:49;48610:21;48587:10;:49:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48568:68;;;48655:7;48647:35;;;::::0;-1:-1:-1;;;48647:35:0;;17614:2:1;48647:35:0::2;::::0;::::2;17596:21:1::0;17653:2;17633:18;;;17626:30;-1:-1:-1;;;17672:18:1;;;17665:45;17727:18;;48647:35:0::2;17412:339:1::0;48647:35:0::2;-1:-1:-1::0;7033:1:0::1;7340:7;:22:::0;48500:190::o;35081:399::-;35248:31;35261:4;35267:2;35271:7;35248:12;:31::i;:::-;-1:-1:-1;;;;;35294:14:0;;;:19;35290:183;;35333:56;35364:4;35370:2;35374:7;35383:5;35333:30;:56::i;:::-;35328:145;;35417:40;;-1:-1:-1;;;35417:40:0;;;;;;;;;;;35328:145;35081:399;;;;:::o;44859:145::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44958:21:::1;;;::::0;;;:16:::1;:21;::::0;;;;:38;44859:145::o;28589:318::-;28662:13;28693:16;28701:7;28693;:16::i;:::-;28688:59;;28718:29;;-1:-1:-1;;;28718:29:0;;;;;;;;;;;28688:59;28760:21;28784:10;:8;:10::i;:::-;28760:34;;28818:7;28812:21;28837:1;28812:26;:87;;;;;;;;;;;;;;;;;28865:7;28874:18;28884:7;28874:9;:18::i;:::-;28848:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28812:87;28805:94;28589:318;-1:-1:-1;;;28589:318:0:o;46546:347::-;46642:10;46622:16;;;;:7;:16::i;:::-;-1:-1:-1;;;;;46622:30:0;;46614:77;;;;-1:-1:-1;;;46614:77:0;;;;;;;:::i;:::-;46795:27;;46759:21;;;;;;;:12;:21;;;;;:32;;;46741:50;;:15;:50;:::i;:::-;46740:82;;;;:::i;:::-;46704:21;;;;;;;:12;:21;;;;;:118;;:21;;;:118;;;;;:::i;:::-;;;;-1:-1:-1;;46833:21:0;;;;;;:12;:21;;;;;46868:15;46833:32;;;;:50;46546:347::o;45358:385::-;45562:1;45545:19;;:16;:19;;;;;;;45589:28;-1:-1:-1;;;;;;45606:10:0;15435:2:1;15431:15;15427:53;45589:28:0;;;15415:66:1;;;;45492:127:0;;45525:5;;45545:19;15497:12:1;;45589:28:0;15286:229:1;45492:127:0;:152;;;-1:-1:-1;17853:6:0;;-1:-1:-1;;;;;17853:6:0;45623:10;:21;45492:152;45484:180;;;;-1:-1:-1;;;45484:180:0;;;;;;;:::i;:::-;45677:27;:58;-1:-1:-1;45358:385:0:o;47832:315::-;47929:21;;;47900:7;47929:21;;;:12;:21;;;;;:31;;;;;:208;;48105:21;;;;;;;:12;:21;;;;;:32;47929:208;;;48065:27;;48028:21;;;;;;;:12;:21;;;;;:32;;47993;;;;;47975:50;;:15;:50;:::i;:::-;:85;;;;:::i;:::-;47974:118;;;;:::i;45751:787::-;45888:21;;;;45847:36;;;:25;45861:10;-1:-1:-1;;;;;27355:25:0;27327:7;27355:25;;;:18;:25;;24813:2;27355:25;;;;;:50;;-1:-1:-1;;;;;27354:82:0;;27266:178;45847:25;:36;;;;:::i;:::-;:62;;45839:101;;;;-1:-1:-1;;;45839:101:0;;18606:2:1;45839:101:0;;;18588:21:1;18645:2;18625:18;;;18618:30;18684:28;18664:18;;;18657:56;18730:18;;45839:101:0;18404:350:1;45839:101:0;45990:4;45978:8;45962:24;;:13;26592:12;;26532:7;26576:13;:28;;26471:166;45962:13;:24;;;;:::i;:::-;45961:33;45953:54;;;;-1:-1:-1;;;45953:54:0;;;;;;;:::i;:::-;46024:14;;;;;;;46020:381;;;46096:8;46080:24;;:13;;:24;;;;:::i;:::-;46065:9;:40;;46057:49;;;;;;46200:19;;;:16;:19;;;;;;;46252:28;-1:-1:-1;;;;;;46269:10:0;15435:2:1;15431:15;15427:53;46252:28:0;;;15415:66:1;;;;46131:151:0;;46172:5;;46200:19;15497:12:1;;46252:28:0;15286:229:1;46131:151:0;46123:179;;;;-1:-1:-1;;;46123:179:0;;;;;;;:::i;:::-;46020:381;;;46379:8;46359:28;;:17;;:28;;;;:::i;:::-;46345:9;:43;;46337:52;;;;;;46422:11;;;;46421:12;46413:71;;;;-1:-1:-1;;;46413:71:0;;;;;;;:::i;:::-;46497:31;46507:10;46519:8;46497:31;;:9;:31::i;18114:201::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18203:22:0;::::1;18195:73;;;::::0;-1:-1:-1;;;18195:73:0;;18961:2:1;18195:73:0::1;::::0;::::1;18943:21:1::0;19000:2;18980:18;;;18973:30;19039:34;19019:18;;;19012:62;-1:-1:-1;;;19090:18:1;;;19083:36;19136:19;;18195:73:0::1;18759:402:1::0;18195:73:0::1;18279:28;18298:8;18279:18;:28::i;32288:230::-:0;32353:4;32435:13;;32425:7;:23;32386:124;;;;-1:-1:-1;;32461:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;32461:44:0;:49;;32288:230::o;26645:107::-;26738:6;26721:23;;:13;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;26645:107:0:o;29726:581::-;29793:7;29828;29918:13;;29911:4;:20;29907:337;;;29952:14;29969:23;;;:17;:23;;;;;;;-1:-1:-1;;;30015:24:0;;:29;;30011:218;;30069:105;30076:6;30086:1;30076:11;30069:105;;-1:-1:-1;;;30143:6:0;30125:25;;;;:17;:25;;;;;;30069:105;;30011:218;29933:311;29907:337;30268:31;;-1:-1:-1;;;30268:31:0;;;;;;;;;;;48155:337;-1:-1:-1;48373:5:0;48334:26;;;:12;:26;;;;;:36;;;:44;;-1:-1:-1;;48334:44:0;;;48389:41;;;48441:37;;:41;-1:-1:-1;;48155:337:0:o;39370:112::-;39447:27;39457:2;39461:8;39447:27;;;;;;;;;;;;:9;:27::i;18323:191::-;18416:6;;;-1:-1:-1;;;;;18433:17:0;;;-1:-1:-1;;;;;;18433:17:0;;;;;;;18466:40;;18416:6;;;18433:17;18416:6;;18466:40;;18397:16;;18466:40;18386:128;18323:191;:::o;7435:190::-;7560:4;7613;7584:25;7597:5;7604:4;7584:12;:25::i;:::-;:33;;7435:190;-1:-1:-1;;;;7435:190:0:o;35821:716::-;36005:88;;-1:-1:-1;;;36005:88:0;;35984:4;;-1:-1:-1;;;;;36005:45:0;;;;;:88;;42198:10;;36072:4;;36078:7;;36087:5;;36005:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36005:88:0;;;;;;;;-1:-1:-1;;36005:88:0;;;;;;;;;;;;:::i;:::-;;;36001:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36288:6;:13;36305:1;36288:18;36284:235;;36334:40;;-1:-1:-1;;;36334:40:0;;;;;;;;;;;36284:235;36477:6;36471:13;36462:6;36458:2;36454:15;36447:38;36001:529;-1:-1:-1;;;;;;36164:64:0;-1:-1:-1;;;36164:64:0;;-1:-1:-1;36001:529:0;35821:716;;;;;;:::o;44730:121::-;44790:13;44825:16;44818:23;;;;;:::i;42224:573::-;42360:4;42354:11;;42367:4;42350:22;42386:17;;;;42350:22;42467:5;42449:219;42515:1;42510:3;42506:11;42499:18;;42566:2;42560:4;42556:13;42552:2;42548:22;42543:3;42535:36;42607:2;42597:13;;42628:25;42449:219;42628:25;-1:-1:-1;42698:13:0;;;-1:-1:-1;;42732:14:0;;;42760:19;;;42732:14;42224:573;-1:-1:-1;42224:573:0:o;38764:598::-;38895:19;38901:2;38905:8;38895:5;:19::i;:::-;-1:-1:-1;;;;;38948:14:0;;;:19;38944:404;;38984:11;38998:13;39042:14;;;39071:217;39098:62;39137:1;39141:2;39145:7;;;;;;39154:5;39098:30;:62::i;:::-;39093:159;;39192:40;;-1:-1:-1;;;39192:40:0;;;;;;;;;;;39093:159;39283:3;39275:5;:11;39071:217;;39323:3;39306:13;;:20;39302:34;;39328:8;;;39302:34;38969:379;;38764:598;;;:::o;7845:296::-;7928:7;7971:4;7928:7;7986:118;8010:5;:12;8006:1;:16;7986:118;;;8059:33;8069:12;8083:5;8089:1;8083:8;;;;;;;;:::i;:::-;;;;;;;8059:9;:33::i;:::-;8044:48;-1:-1:-1;8024:3:0;;;;:::i;:::-;;;;7986:118;;;-1:-1:-1;8121:12:0;7845:296;-1:-1:-1;;;7845:296:0:o;36547:1288::-;36620:20;36643:13;;;36671;;;36667:44;;36693:18;;-1:-1:-1;;;36693:18:0;;;;;;;;;;;36667:44;36724:61;36754:1;36758:2;36762:12;36776:8;36724:21;:61::i;:::-;-1:-1:-1;;;;;36815:22:0;;;;;;:18;:22;;;;24813:2;36815:22;;;:71;;36853:32;36841:45;;36815:71;;;36899:31;;;:17;:31;;;;;-1:-1:-1;31131:15:0;;31105:24;31101:46;30923:11;30898:23;30894:41;30891:52;30881:63;;36899:161;;37114:23;;;;36899:31;;36815:22;;37276:25;36815:22;;37225:157;37454:1;37440:12;37436:20;37398:253;37491:3;37482:7;37479:16;37398:253;;37628:7;37618:8;37615:1;37588:25;37585:1;37582;37577:59;37540:1;37527:15;37398:253;;;37402:69;37676:8;37688:1;37676:13;37672:45;;37698:19;;-1:-1:-1;;;37698:19:0;;;;;;;;;;;37672:45;37730:13;:19;-1:-1:-1;45202:139:0;45012:338;;:::o;11173:149::-;11236:7;11267:1;11263;:5;:51;;11398:13;11450:15;;;11486:4;11479:15;;;11533:4;11517:21;;11263:51;;;-1:-1:-1;11398:13:0;11450:15;;;11486:4;11479:15;11533:4;11517:21;;;11173:149::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:1;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:257;218:4;212:11;;;250:17;;-1:-1:-1;;;;;282:34:1;;318:22;;;279:62;276:88;;;344:18;;:::i;:::-;380:4;373:24;146:257;:::o;408:275::-;479:2;473:9;544:2;525:13;;-1:-1:-1;;521:27:1;509:40;;-1:-1:-1;;;;;564:34:1;;600:22;;;561:62;558:88;;;626:18;;:::i;:::-;662:2;655:22;408:275;;-1:-1:-1;408:275:1:o;688:182::-;747:4;-1:-1:-1;;;;;772:6:1;769:30;766:56;;;802:18;;:::i;:::-;-1:-1:-1;847:1:1;843:14;859:4;839:25;;688:182::o;875:159::-;942:20;;1002:6;991:18;;981:29;;971:57;;1024:1;1021;1014:12;971:57;875:159;;;:::o;1039:665::-;1092:5;1145:3;1138:4;1130:6;1126:17;1122:27;1112:55;;1163:1;1160;1153:12;1112:55;1199:6;1186:20;1225:4;1249:59;1265:42;1304:2;1265:42;:::i;:::-;1249:59;:::i;:::-;1342:15;;;1428:1;1424:10;;;;1412:23;;1408:32;;;1373:12;;;;1452:15;;;1449:35;;;1480:1;1477;1470:12;1449:35;1516:2;1508:6;1504:15;1528:147;1544:6;1539:3;1536:15;1528:147;;;1610:22;1628:3;1610:22;:::i;:::-;1598:35;;1653:12;;;;1561;;1528:147;;;-1:-1:-1;1693:5:1;1039:665;-1:-1:-1;;;;;;1039:665:1:o;1709:346::-;1792:6;1845:2;1833:9;1824:7;1820:23;1816:32;1813:52;;;1861:1;1858;1851:12;1813:52;1901:9;1888:23;-1:-1:-1;;;;;1926:6:1;1923:30;1920:50;;;1966:1;1963;1956:12;1920:50;1989:60;2041:7;2032:6;2021:9;2017:22;1989:60;:::i;2060:131::-;-1:-1:-1;;;;;;2134:32:1;;2124:43;;2114:71;;2181:1;2178;2171:12;2196:245;2254:6;2307:2;2295:9;2286:7;2282:23;2278:32;2275:52;;;2323:1;2320;2313:12;2275:52;2362:9;2349:23;2381:30;2405:5;2381:30;:::i;2638:258::-;2710:1;2720:113;2734:6;2731:1;2728:13;2720:113;;;2810:11;;;2804:18;2791:11;;;2784:39;2756:2;2749:10;2720:113;;;2851:6;2848:1;2845:13;2842:48;;;-1:-1:-1;;2886:1:1;2868:16;;2861:27;2638:258::o;2901:::-;2943:3;2981:5;2975:12;3008:6;3003:3;2996:19;3024:63;3080:6;3073:4;3068:3;3064:14;3057:4;3050:5;3046:16;3024:63;:::i;:::-;3141:2;3120:15;-1:-1:-1;;3116:29:1;3107:39;;;;3148:4;3103:50;;2901:258;-1:-1:-1;;2901:258:1:o;3164:220::-;3313:2;3302:9;3295:21;3276:4;3333:45;3374:2;3363:9;3359:18;3351:6;3333:45;:::i;3389:180::-;3448:6;3501:2;3489:9;3480:7;3476:23;3472:32;3469:52;;;3517:1;3514;3507:12;3469:52;-1:-1:-1;3540:23:1;;3389:180;-1:-1:-1;3389:180:1:o;3782:173::-;3850:20;;-1:-1:-1;;;;;3899:31:1;;3889:42;;3879:70;;3945:1;3942;3935:12;3960:254;4028:6;4036;4089:2;4077:9;4068:7;4064:23;4060:32;4057:52;;;4105:1;4102;4095:12;4057:52;4128:29;4147:9;4128:29;:::i;:::-;4118:39;4204:2;4189:18;;;;4176:32;;-1:-1:-1;;;3960:254:1:o;4219:156::-;4285:20;;4345:4;4334:16;;4324:27;;4314:55;;4365:1;4362;4355:12;4380:182;4437:6;4490:2;4478:9;4469:7;4465:23;4461:32;4458:52;;;4506:1;4503;4496:12;4458:52;4529:27;4546:9;4529:27;:::i;4749:184::-;4807:6;4860:2;4848:9;4839:7;4835:23;4831:32;4828:52;;;4876:1;4873;4866:12;4828:52;4899:28;4917:9;4899:28;:::i;4938:328::-;5015:6;5023;5031;5084:2;5072:9;5063:7;5059:23;5055:32;5052:52;;;5100:1;5097;5090:12;5052:52;5123:29;5142:9;5123:29;:::i;:::-;5113:39;;5171:38;5205:2;5194:9;5190:18;5171:38;:::i;:::-;5161:48;;5256:2;5245:9;5241:18;5228:32;5218:42;;4938:328;;;;;:::o;5271:414::-;5363:6;5371;5424:2;5412:9;5403:7;5399:23;5395:32;5392:52;;;5440:1;5437;5430:12;5392:52;5476:9;5463:23;5453:33;;5537:2;5526:9;5522:18;5509:32;-1:-1:-1;;;;;5556:6:1;5553:30;5550:50;;;5596:1;5593;5586:12;5550:50;5619:60;5671:7;5662:6;5651:9;5647:22;5619:60;:::i;:::-;5609:70;;;5271:414;;;;;:::o;5690:1202::-;5799:6;5830:2;5873;5861:9;5852:7;5848:23;5844:32;5841:52;;;5889:1;5886;5879:12;5841:52;5929:9;5916:23;-1:-1:-1;;;;;5954:6:1;5951:30;5948:50;;;5994:1;5991;5984:12;5948:50;6017:22;;6070:4;6062:13;;6058:27;-1:-1:-1;6048:55:1;;6099:1;6096;6089:12;6048:55;6135:2;6122:16;6158:59;6174:42;6213:2;6174:42;:::i;6158:59::-;6251:15;;;6333:1;6329:10;;;;6321:19;;6317:28;;;6282:12;;;;6357:19;;;6354:39;;;6389:1;6386;6379:12;6354:39;6413:11;;;;6433:429;6449:6;6444:3;6441:15;6433:429;;;6531:4;6525:3;6516:7;6512:17;6508:28;6505:118;;;6577:1;6606:2;6602;6595:14;6505:118;6649:22;;:::i;:::-;6698:21;6715:3;6698:21;:::i;:::-;6691:5;6684:36;6756:32;6784:2;6779:3;6775:12;6756:32;:::i;:::-;6740:14;;;6733:56;6802:18;;6475:4;6466:14;;;;;6840:12;;;;6433:429;;;6881:5;5690:1202;-1:-1:-1;;;;;;;5690:1202:1:o;6897:407::-;6962:5;-1:-1:-1;;;;;6988:6:1;6985:30;6982:56;;;7018:18;;:::i;:::-;7056:57;7101:2;7080:15;;-1:-1:-1;;7076:29:1;7107:4;7072:40;7056:57;:::i;:::-;7047:66;;7136:6;7129:5;7122:21;7176:3;7167:6;7162:3;7158:16;7155:25;7152:45;;;7193:1;7190;7183:12;7152:45;7242:6;7237:3;7230:4;7223:5;7219:16;7206:43;7296:1;7289:4;7280:6;7273:5;7269:18;7265:29;7258:40;6897:407;;;;;:::o;7309:451::-;7378:6;7431:2;7419:9;7410:7;7406:23;7402:32;7399:52;;;7447:1;7444;7437:12;7399:52;7487:9;7474:23;-1:-1:-1;;;;;7512:6:1;7509:30;7506:50;;;7552:1;7549;7542:12;7506:50;7575:22;;7628:4;7620:13;;7616:27;-1:-1:-1;7606:55:1;;7657:1;7654;7647:12;7606:55;7680:74;7746:7;7741:2;7728:16;7723:2;7719;7715:11;7680:74;:::i;7947:248::-;8015:6;8023;8076:2;8064:9;8055:7;8051:23;8047:32;8044:52;;;8092:1;8089;8082:12;8044:52;-1:-1:-1;;8115:23:1;;;8185:2;8170:18;;;8157:32;;-1:-1:-1;7947:248:1:o;8200:258::-;8267:6;8275;8328:2;8316:9;8307:7;8303:23;8299:32;8296:52;;;8344:1;8341;8334:12;8296:52;8367:29;8386:9;8367:29;:::i;:::-;8357:39;;8415:37;8448:2;8437:9;8433:18;8415:37;:::i;:::-;8405:47;;8200:258;;;;;:::o;8463:186::-;8522:6;8575:2;8563:9;8554:7;8550:23;8546:32;8543:52;;;8591:1;8588;8581:12;8543:52;8614:29;8633:9;8614:29;:::i;8654:661::-;8708:5;8761:3;8754:4;8746:6;8742:17;8738:27;8728:55;;8779:1;8776;8769:12;8728:55;8815:6;8802:20;8841:4;8865:59;8881:42;8920:2;8881:42;:::i;8865:59::-;8958:15;;;9044:1;9040:10;;;;9028:23;;9024:32;;;8989:12;;;;9068:15;;;9065:35;;;9096:1;9093;9086:12;9065:35;9132:2;9124:6;9120:15;9144:142;9160:6;9155:3;9152:15;9144:142;;;9226:17;;9214:30;;9264:12;;;;9177;;9144:142;;9320:348;9404:6;9457:2;9445:9;9436:7;9432:23;9428:32;9425:52;;;9473:1;9470;9463:12;9425:52;9513:9;9500:23;-1:-1:-1;;;;;9538:6:1;9535:30;9532:50;;;9578:1;9575;9568:12;9532:50;9601:61;9654:7;9645:6;9634:9;9630:22;9601:61;:::i;9673:347::-;9738:6;9746;9799:2;9787:9;9778:7;9774:23;9770:32;9767:52;;;9815:1;9812;9805:12;9767:52;9838:29;9857:9;9838:29;:::i;:::-;9828:39;;9917:2;9906:9;9902:18;9889:32;9964:5;9957:13;9950:21;9943:5;9940:32;9930:60;;9986:1;9983;9976:12;9930:60;10009:5;9999:15;;;9673:347;;;;;:::o;10025:667::-;10120:6;10128;10136;10144;10197:3;10185:9;10176:7;10172:23;10168:33;10165:53;;;10214:1;10211;10204:12;10165:53;10237:29;10256:9;10237:29;:::i;:::-;10227:39;;10285:38;10319:2;10308:9;10304:18;10285:38;:::i;:::-;10275:48;;10370:2;10359:9;10355:18;10342:32;10332:42;;10425:2;10414:9;10410:18;10397:32;-1:-1:-1;;;;;10444:6:1;10441:30;10438:50;;;10484:1;10481;10474:12;10438:50;10507:22;;10560:4;10552:13;;10548:27;-1:-1:-1;10538:55:1;;10589:1;10586;10579:12;10538:55;10612:74;10678:7;10673:2;10660:16;10655:2;10651;10647:11;10612:74;:::i;:::-;10602:84;;;10025:667;;;;;;;:::o;11031:250::-;11097:6;11105;11158:2;11146:9;11137:7;11133:23;11129:32;11126:52;;;11174:1;11171;11164:12;11126:52;11210:9;11197:23;11187:33;;11239:36;11271:2;11260:9;11256:18;11239:36;:::i;11286:416::-;11379:6;11387;11440:2;11428:9;11419:7;11415:23;11411:32;11408:52;;;11456:1;11453;11446:12;11408:52;11496:9;11483:23;-1:-1:-1;;;;;11521:6:1;11518:30;11515:50;;;11561:1;11558;11551:12;11515:50;11584:61;11637:7;11628:6;11617:9;11613:22;11584:61;:::i;:::-;11574:71;11692:2;11677:18;;;;11664:32;;-1:-1:-1;;;;11286:416:1:o;11896:260::-;11964:6;11972;12025:2;12013:9;12004:7;12000:23;11996:32;11993:52;;;12041:1;12038;12031:12;11993:52;12064:29;12083:9;12064:29;:::i;:::-;12054:39;;12112:38;12146:2;12135:9;12131:18;12112:38;:::i;12161:420::-;12253:6;12261;12314:2;12302:9;12293:7;12289:23;12285:32;12282:52;;;12330:1;12327;12320:12;12282:52;12370:9;12357:23;-1:-1:-1;;;;;12395:6:1;12392:30;12389:50;;;12435:1;12432;12425:12;12389:50;12458:61;12511:7;12502:6;12491:9;12487:22;12458:61;:::i;:::-;12448:71;;;12538:37;12571:2;12560:9;12556:18;12538:37;:::i;12586:127::-;12647:10;12642:3;12638:20;12635:1;12628:31;12678:4;12675:1;12668:15;12702:4;12699:1;12692:15;12718:398;12920:2;12902:21;;;12959:2;12939:18;;;12932:30;12998:34;12993:2;12978:18;;12971:62;-1:-1:-1;;;13064:2:1;13049:18;;13042:32;13106:3;13091:19;;12718:398::o;13121:127::-;13182:10;13177:3;13173:20;13170:1;13163:31;13213:4;13210:1;13203:15;13237:4;13234:1;13227:15;13253:125;13293:4;13321:1;13318;13315:8;13312:34;;;13326:18;;:::i;:::-;-1:-1:-1;13363:9:1;;13253:125::o;13383:128::-;13423:3;13454:1;13450:6;13447:1;13444:13;13441:39;;;13460:18;;:::i;:::-;-1:-1:-1;13496:9:1;;13383:128::o;13516:197::-;13554:3;13582:6;13623:2;13616:5;13612:14;13650:2;13641:7;13638:15;13635:41;;13656:18;;:::i;:::-;13705:1;13692:15;;13516:197;-1:-1:-1;;;13516:197:1:o;13718:380::-;13797:1;13793:12;;;;13840;;;13861:61;;13915:4;13907:6;13903:17;13893:27;;13861:61;13968:2;13960:6;13957:14;13937:18;13934:38;13931:161;;14014:10;14009:3;14005:20;14002:1;13995:31;14049:4;14046:1;14039:15;14077:4;14074:1;14067:15;13931:161;;13718:380;;;:::o;14103:356::-;14305:2;14287:21;;;14324:18;;;14317:30;14383:34;14378:2;14363:18;;14356:62;14450:2;14435:18;;14103:356::o;14810:135::-;14849:3;14870:17;;;14867:43;;14890:18;;:::i;:::-;-1:-1:-1;14937:1:1;14926:13;;14810:135::o;14950:331::-;15152:2;15134:21;;;15191:1;15171:18;;;15164:29;-1:-1:-1;;;15224:2:1;15209:18;;15202:38;15272:2;15257:18;;14950:331::o;15520:339::-;15722:2;15704:21;;;15761:2;15741:18;;;15734:30;-1:-1:-1;;;15795:2:1;15780:18;;15773:45;15850:2;15835:18;;15520:339::o;16218:410::-;16420:2;16402:21;;;16459:2;16439:18;;;16432:30;16498:34;16493:2;16478:18;;16471:62;-1:-1:-1;;;16564:2:1;16549:18;;16542:44;16618:3;16603:19;;16218:410::o;16633:204::-;16671:3;16707:4;16704:1;16700:12;16739:4;16736:1;16732:12;16774:3;16768:4;16764:14;16759:3;16756:23;16753:49;;;16782:18;;:::i;:::-;16818:13;;16633:204;-1:-1:-1;;;16633:204:1:o;17756:470::-;17935:3;17973:6;17967:13;17989:53;18035:6;18030:3;18023:4;18015:6;18011:17;17989:53;:::i;:::-;18105:13;;18064:16;;;;18127:57;18105:13;18064:16;18161:4;18149:17;;18127:57;:::i;:::-;18200:20;;17756:470;-1:-1:-1;;;;17756:470:1:o;18231:168::-;18271:7;18337:1;18333;18329:6;18325:14;18322:1;18319:21;18314:1;18307:9;18300:17;18296:45;18293:71;;;18344:18;;:::i;:::-;-1:-1:-1;18384:9:1;;18231:168::o;19166:489::-;-1:-1:-1;;;;;19435:15:1;;;19417:34;;19487:15;;19482:2;19467:18;;19460:43;19534:2;19519:18;;19512:34;;;19582:3;19577:2;19562:18;;19555:31;;;19360:4;;19603:46;;19629:19;;19621:6;19603:46;:::i;:::-;19595:54;19166:489;-1:-1:-1;;;;;;19166:489:1:o;19660:249::-;19729:6;19782:2;19770:9;19761:7;19757:23;19753:32;19750:52;;;19798:1;19795;19788:12;19750:52;19830:9;19824:16;19849:30;19873:5;19849:30;:::i
Swarm Source
ipfs://f2d7f433305e7f9962a427666e4fc252a42d4c2456f534898171dd2d8a6b159c
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.