Overview
ETH Balance
0.000001 ETH
Eth Value
Less Than $0.01 (@ $3,963.37/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 69 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint | 20453370 | 134 days ago | IN | 0 ETH | 0.00011343 | ||||
Set Approval For... | 15254522 | 868 days ago | IN | 0 ETH | 0.00018601 | ||||
Mint | 14696000 | 959 days ago | IN | 0 ETH | 0.00809569 | ||||
Mint | 14695979 | 959 days ago | IN | 0 ETH | 0.00666898 | ||||
Mint | 14695837 | 959 days ago | IN | 0 ETH | 0.0064156 | ||||
Mint | 14695831 | 959 days ago | IN | 0 ETH | 0.00614332 | ||||
Mint | 14695797 | 959 days ago | IN | 0 ETH | 0.00450735 | ||||
Mint | 14695794 | 959 days ago | IN | 0 ETH | 0.00575935 | ||||
Mint | 14695788 | 959 days ago | IN | 0 ETH | 0.00579336 | ||||
Transfer From | 14695771 | 959 days ago | IN | 0 ETH | 0.0022074 | ||||
Mint | 14695767 | 959 days ago | IN | 0.000001 ETH | 0.00482938 | ||||
Set Approval For... | 14695765 | 959 days ago | IN | 0 ETH | 0.00251251 | ||||
Mint | 14695758 | 959 days ago | IN | 0 ETH | 0.00550764 | ||||
Set Approval For... | 14695746 | 959 days ago | IN | 0 ETH | 0.00255982 | ||||
Mint | 14695741 | 959 days ago | IN | 0 ETH | 0.00183702 | ||||
Set Approval For... | 14695741 | 959 days ago | IN | 0 ETH | 0.00293345 | ||||
Transfer From | 14695735 | 959 days ago | IN | 0 ETH | 0.00286319 | ||||
Mint | 14695729 | 959 days ago | IN | 0 ETH | 0.00743985 | ||||
Mint | 14695729 | 959 days ago | IN | 0 ETH | 0.00743985 | ||||
Mint | 14695724 | 959 days ago | IN | 0 ETH | 0.00551976 | ||||
Mint | 14695721 | 959 days ago | IN | 0 ETH | 0.00667493 | ||||
Mint | 14695720 | 959 days ago | IN | 0 ETH | 0.00464722 | ||||
Mint | 14695718 | 959 days ago | IN | 0 ETH | 0.00614303 | ||||
Set Approval For... | 14695718 | 959 days ago | IN | 0 ETH | 0.00255623 | ||||
Mint | 14695717 | 959 days ago | IN | 0 ETH | 0.00876275 |
Loading...
Loading
Contract Name:
OthersideDAO
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-02 */ /** *Submitted for verification at Etherscan.io on 2022-04-22 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId ) external; function transferFrom( address from, address to, uint256 tokenId ) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 1; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract OthersideDAO is Ownable, ERC721A, ReentrancyGuard { using Strings for uint256; uint256 public MAX_PER_Transaction = 1; // maximam amount that user can mint uint256 public MAX_PER_Wallet = 2; // maximam amount that user can mint mapping(address => uint256) public publicClaimedBy; uint256 public PRICE = 0 ether; uint256 public SPRICE = 0.01 ether; uint256 private constant TotalCollectionSize_ = 1000; // total number of nfts uint256 private constant MaxMintPerBatch_ = 10; //max mint per traction bool public _revelNFT = false; string private _baseTokenURI; string private _uriBeforeRevel; uint public reserve = 0; uint256 public freeAllowed = 500; uint public status = 0; //0-pause 1-Public constructor() ERC721A("OthersideDAO Pass","OthersideDAO Pass") { _uriBeforeRevel = "https://gateway.pinata.cloud/ipfs/QmeugKM5RWpx8ZY6xW27Fu1pmsvTiMddSNPaeEgFBenNrv/OthersideDAOPass.json"; } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function mint(uint256 quantity) external payable callerIsUser { require(status == 1 , "Sale is not Active"); require(totalSupply() + quantity <= TotalCollectionSize_-reserve, "reached max supply"); require(quantity <= MAX_PER_Transaction,"can not mint this many"); if(totalSupply() >= freeAllowed) { PRICE = SPRICE; } require(msg.value >= PRICE * quantity, "Need to send more ETH."); publicClaimedBy[msg.sender] += quantity; require(publicClaimedBy[msg.sender] <= MAX_PER_Wallet, "Purchase exceeds max allowed"); _safeMint(msg.sender, quantity); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token"); if(_revelNFT){ string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, "/", tokenId.toString(), ".json")) : ""; } else { return _uriBeforeRevel; } } function setURIbeforeRevel(string memory URI) external onlyOwner { _uriBeforeRevel = URI; } function setBaseURI(string memory baseURI) external onlyOwner { _baseTokenURI = baseURI; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return _ownershipOf(tokenId); } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function changeRevelStatus() external onlyOwner { _revelNFT = !_revelNFT; } function changeMintPrice(uint256 _newPrice) external onlyOwner { PRICE = _newPrice; } function changePrice(uint256 _newPrice) external onlyOwner { SPRICE = _newPrice; } function changeMAX_PER_Transaction(uint256 q) external onlyOwner { MAX_PER_Transaction = q; } function changeFreeAllowed(uint256 q) external onlyOwner { freeAllowed = q; } function setStatus(uint256 s)external onlyOwner{ status = s; } function getStatus()public view returns(uint){ return status; } function setReserveTokens(uint256 _quantity) public onlyOwner { reserve=_quantity; } function getPrice(uint256 _quantity) public view returns (uint256) { return _quantity*PRICE; } function mintReserveTokens(uint quantity) public onlyOwner { require(quantity <= reserve, "The quantity exceeds the reserve."); reserve -= quantity; _safeMint(msg.sender, quantity); } function airdrop(address a, uint q)public onlyOwner{ require(totalSupply() + q <= TotalCollectionSize_, "reached max supply"); _safeMint(a, q); } }
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":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_Transaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_Wallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SPRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_revelNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"uint256","name":"q","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeFreeAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_Transaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeRevelStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintReserveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"setReserveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"s","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setURIbeforeRevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600a556002600b556000600d55662386f26fc10000600e556000600f60006101000a81548160ff02191690831515021790555060006012556101f460135560006014553480156200005657600080fd5b506040518060400160405280601181526020017f4f746865727369646544414f20506173730000000000000000000000000000008152506040518060400160405280601181526020017f4f746865727369646544414f2050617373000000000000000000000000000000815250620000e3620000d76200016d60201b60201c565b6200017560201b60201c565b8160039080519060200190620000fb92919062000242565b5080600490805190602001906200011492919062000242565b50620001256200023960201b60201c565b600181905550505060016009819055506040518060a00160405280606681526020016200470e60669139601190805190602001906200016692919062000242565b5062000357565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b8280546200025090620002f2565b90600052602060002090601f016020900481019282620002745760008555620002c0565b82601f106200028f57805160ff1916838001178555620002c0565b82800160010185558215620002c0579182015b82811115620002bf578251825591602001919060010190620002a2565b5b509050620002cf9190620002d3565b5090565b5b80821115620002ee576000816000905550600101620002d4565b5090565b600060028204905060018216806200030b57607f821691505b6020821081141562000322576200032162000328565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6143a780620003676000396000f3fe60806040526004361061025c5760003560e01c8063715018a611610144578063ac446002116100b6578063c87b56dd1161007a578063c87b56dd1461089b578063cd3293de146108d8578063dc33e68114610903578063e757223014610940578063e985e9c51461097d578063f2fde38b146109ba5761025c565b8063ac446002146107f0578063b3af48db14610807578063b88d4fde14610832578063bd0a84391461085b578063bd58882d146108725761025c565b80639231ab2a116101085780639231ab2a146106f157806395d89b411461072e578063a0712d6814610759578063a22cb46514610775578063a2b40d191461079e578063a40ece7a146107c75761025c565b8063715018a61461061e57806375236143146106355780638ba4cc3c146106725780638d859f3e1461069b5780638da5cb5b146106c65761025c565b80633fd17366116101dd5780635c37809d116101a15780635c37809d146104fe57806362c6f7b9146105275780636352211e1461055257806369ba1a751461058f5780636a44e173146105b857806370a08231146105e15761025c565b80633fd173661461042d57806342842e0e146104565780634e69d5601461047f57806351d7ff93146104aa57806355f804b3146104d55761025c565b806318160ddd1161022457806318160ddd1461035a578063200d2ed21461038557806323b872dd146103b0578063288bd8fd146103d95780633f7857c5146104025761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b31461030657806317e04a711461032f575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906134fc565b6109e3565b60405161029591906139ce565b60405180910390f35b3480156102aa57600080fd5b506102b3610ac5565b6040516102c091906139e9565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb919061359f565b610b57565b6040516102fd9190613967565b60405180910390f35b34801561031257600080fd5b5061032d600480360381019061032891906134bc565b610bd3565b005b34801561033b57600080fd5b50610344610cde565b6040516103519190613ba6565b60405180910390f35b34801561036657600080fd5b5061036f610ce4565b60405161037c9190613ba6565b60405180910390f35b34801561039157600080fd5b5061039a610cfb565b6040516103a79190613ba6565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d291906133a6565b610d01565b005b3480156103e557600080fd5b5061040060048036038101906103fb919061359f565b610d11565b005b34801561040e57600080fd5b50610417610df8565b6040516104249190613ba6565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f919061359f565b610dfe565b005b34801561046257600080fd5b5061047d600480360381019061047891906133a6565b610e84565b005b34801561048b57600080fd5b50610494610ea4565b6040516104a19190613ba6565b60405180910390f35b3480156104b657600080fd5b506104bf610eae565b6040516104cc9190613ba6565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190613556565b610eb4565b005b34801561050a57600080fd5b5061052560048036038101906105209190613556565b610f4a565b005b34801561053357600080fd5b5061053c610fe0565b60405161054991906139ce565b60405180910390f35b34801561055e57600080fd5b506105796004803603810190610574919061359f565b610ff3565b6040516105869190613967565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b1919061359f565b611009565b005b3480156105c457600080fd5b506105df60048036038101906105da919061359f565b61108f565b005b3480156105ed57600080fd5b5061060860048036038101906106039190613339565b611115565b6040516106159190613ba6565b60405180910390f35b34801561062a57600080fd5b506106336111e5565b005b34801561064157600080fd5b5061065c60048036038101906106579190613339565b61126d565b6040516106699190613ba6565b60405180910390f35b34801561067e57600080fd5b50610699600480360381019061069491906134bc565b611285565b005b3480156106a757600080fd5b506106b0611366565b6040516106bd9190613ba6565b60405180910390f35b3480156106d257600080fd5b506106db61136c565b6040516106e89190613967565b60405180910390f35b3480156106fd57600080fd5b506107186004803603810190610713919061359f565b611395565b6040516107259190613b8b565b60405180910390f35b34801561073a57600080fd5b506107436113ad565b60405161075091906139e9565b60405180910390f35b610773600480360381019061076e919061359f565b61143f565b005b34801561078157600080fd5b5061079c6004803603810190610797919061347c565b6116ec565b005b3480156107aa57600080fd5b506107c560048036038101906107c0919061359f565b611864565b005b3480156107d357600080fd5b506107ee60048036038101906107e9919061359f565b6118ea565b005b3480156107fc57600080fd5b50610805611970565b005b34801561081357600080fd5b5061081c611af1565b6040516108299190613ba6565b60405180910390f35b34801561083e57600080fd5b50610859600480360381019061085491906133f9565b611af7565b005b34801561086757600080fd5b50610870611b73565b005b34801561087e57600080fd5b506108996004803603810190610894919061359f565b611c1b565b005b3480156108a757600080fd5b506108c260048036038101906108bd919061359f565b611ca1565b6040516108cf91906139e9565b60405180910390f35b3480156108e457600080fd5b506108ed611df0565b6040516108fa9190613ba6565b60405180910390f35b34801561090f57600080fd5b5061092a60048036038101906109259190613339565b611df6565b6040516109379190613ba6565b60405180910390f35b34801561094c57600080fd5b506109676004803603810190610962919061359f565b611e08565b6040516109749190613ba6565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190613366565b611e1f565b6040516109b191906139ce565b60405180910390f35b3480156109c657600080fd5b506109e160048036038101906109dc9190613339565b611eb3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610abe5750610abd82611fab565b5b9050919050565b606060038054610ad490613e75565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0090613e75565b8015610b4d5780601f10610b2257610100808354040283529160200191610b4d565b820191906000526020600020905b815481529060010190602001808311610b3057829003601f168201915b5050505050905090565b6000610b6282612015565b610b98576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bde82610ff3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c46576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c65612063565b73ffffffffffffffffffffffffffffffffffffffff1614158015610c975750610c9581610c90612063565b611e1f565b155b15610cce576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cd983838361206b565b505050565b600b5481565b6000610cee61211d565b6002546001540303905090565b60145481565b610d0c838383612126565b505050565b610d19612063565b73ffffffffffffffffffffffffffffffffffffffff16610d3761136c565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490613aab565b60405180910390fd5b601254811115610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc990613a2b565b60405180910390fd5b8060126000828254610de49190613d77565b92505081905550610df533826125dc565b50565b60135481565b610e06612063565b73ffffffffffffffffffffffffffffffffffffffff16610e2461136c565b73ffffffffffffffffffffffffffffffffffffffff1614610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7190613aab565b60405180910390fd5b80600d8190555050565b610e9f83838360405180602001604052806000815250611af7565b505050565b6000601454905090565b600a5481565b610ebc612063565b73ffffffffffffffffffffffffffffffffffffffff16610eda61136c565b73ffffffffffffffffffffffffffffffffffffffff1614610f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2790613aab565b60405180910390fd5b8060109080519060200190610f4692919061310a565b5050565b610f52612063565b73ffffffffffffffffffffffffffffffffffffffff16610f7061136c565b73ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90613aab565b60405180910390fd5b8060119080519060200190610fdc92919061310a565b5050565b600f60009054906101000a900460ff1681565b6000610ffe826125fa565b600001519050919050565b611011612063565b73ffffffffffffffffffffffffffffffffffffffff1661102f61136c565b73ffffffffffffffffffffffffffffffffffffffff1614611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c90613aab565b60405180910390fd5b8060148190555050565b611097612063565b73ffffffffffffffffffffffffffffffffffffffff166110b561136c565b73ffffffffffffffffffffffffffffffffffffffff161461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290613aab565b60405180910390fd5b8060128190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561117d576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6111ed612063565b73ffffffffffffffffffffffffffffffffffffffff1661120b61136c565b73ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890613aab565b60405180910390fd5b61126b6000612889565b565b600c6020528060005260406000206000915090505481565b61128d612063565b73ffffffffffffffffffffffffffffffffffffffff166112ab61136c565b73ffffffffffffffffffffffffffffffffffffffff1614611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f890613aab565b60405180910390fd5b6103e88161130d610ce4565b6113179190613c96565b1115611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f90613a8b565b60405180910390fd5b61136282826125dc565b5050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61139d613190565b6113a6826125fa565b9050919050565b6060600480546113bc90613e75565b80601f01602080910402602001604051908101604052809291908181526020018280546113e890613e75565b80156114355780601f1061140a57610100808354040283529160200191611435565b820191906000526020600020905b81548152906001019060200180831161141857829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a490613a6b565b60405180910390fd5b6001601454146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990613a4b565b60405180910390fd5b6012546103e86115029190613d77565b8161150b610ce4565b6115159190613c96565b1115611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d90613a8b565b60405180910390fd5b600a5481111561159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290613b2b565b60405180910390fd5b6013546115a6610ce4565b106115b557600e54600d819055505b80600d546115c39190613d1d565b341015611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90613b0b565b60405180910390fd5b80600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116549190613c96565b92505081905550600b54600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690613b4b565b60405180910390fd5b6116e933826125dc565b50565b6116f4612063565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611759576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060086000611766612063565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611813612063565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161185891906139ce565b60405180910390a35050565b61186c612063565b73ffffffffffffffffffffffffffffffffffffffff1661188a61136c565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790613aab565b60405180910390fd5b80600e8190555050565b6118f2612063565b73ffffffffffffffffffffffffffffffffffffffff1661191061136c565b73ffffffffffffffffffffffffffffffffffffffff1614611966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195d90613aab565b60405180910390fd5b80600a8190555050565b611978612063565b73ffffffffffffffffffffffffffffffffffffffff1661199661136c565b73ffffffffffffffffffffffffffffffffffffffff16146119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e390613aab565b60405180910390fd5b60026009541415611a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2990613b6b565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611a6090613952565b60006040518083038185875af1925050503d8060008114611a9d576040519150601f19603f3d011682016040523d82523d6000602084013e611aa2565b606091505b5050905080611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add90613aeb565b60405180910390fd5b506001600981905550565b600e5481565b611b02848484612126565b611b218373ffffffffffffffffffffffffffffffffffffffff1661294d565b8015611b365750611b3484848484612960565b155b15611b6d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611b7b612063565b73ffffffffffffffffffffffffffffffffffffffff16611b9961136c565b73ffffffffffffffffffffffffffffffffffffffff1614611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690613aab565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b611c23612063565b73ffffffffffffffffffffffffffffffffffffffff16611c4161136c565b73ffffffffffffffffffffffffffffffffffffffff1614611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e90613aab565b60405180910390fd5b8060138190555050565b6060611cac82612015565b611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce290613acb565b60405180910390fd5b600f60009054906101000a900460ff1615611d5d576000611d0a612ac0565b90506000815111611d2a5760405180602001604052806000815250611d55565b80611d3484612b52565b604051602001611d45929190613918565b6040516020818303038152906040525b915050611deb565b60118054611d6a90613e75565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9690613e75565b8015611de35780601f10611db857610100808354040283529160200191611de3565b820191906000526020600020905b815481529060010190602001808311611dc657829003601f168201915b505050505090505b919050565b60125481565b6000611e0182612cb3565b9050919050565b6000600d5482611e189190613d1d565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ebb612063565b73ffffffffffffffffffffffffffffffffffffffff16611ed961136c565b73ffffffffffffffffffffffffffffffffffffffff1614611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613aab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690613a0b565b60405180910390fd5b611fa881612889565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161202061211d565b1115801561202f575060015482105b801561205c575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000612131826125fa565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461219c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166121bd612063565b73ffffffffffffffffffffffffffffffffffffffff1614806121ec57506121eb856121e6612063565b611e1f565b5b8061223157506121fa612063565b73ffffffffffffffffffffffffffffffffffffffff1661221984610b57565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061226a576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122d1576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122de8585856001612d1d565b6122ea6000848761206b565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561256a57600154821461256957878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125d58585856001612d23565b5050505050565b6125f6828260405180602001604052806000815250612d29565b5050565b612602613190565b60008290508061261061211d565b1115801561261f575060015481105b15612852576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161285057600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612734578092505050612884565b5b60011561284f57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461284a578092505050612884565b612735565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612986612063565b8786866040518563ffffffff1660e01b81526004016129a89493929190613982565b602060405180830381600087803b1580156129c257600080fd5b505af19250505080156129f357506040513d601f19601f820116820180604052508101906129f09190613529565b60015b612a6d573d8060008114612a23576040519150601f19603f3d011682016040523d82523d6000602084013e612a28565b606091505b50600081511415612a65576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060108054612acf90613e75565b80601f0160208091040260200160405190810160405280929190818152602001828054612afb90613e75565b8015612b485780601f10612b1d57610100808354040283529160200191612b48565b820191906000526020600020905b815481529060010190602001808311612b2b57829003601f168201915b5050505050905090565b60606000821415612b9a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cae565b600082905060005b60008214612bcc578080612bb590613ed8565b915050600a82612bc59190613cec565b9150612ba2565b60008167ffffffffffffffff811115612be857612be761400e565b5b6040519080825280601f01601f191660200182016040528015612c1a5781602001600182028036833780820191505090505b5090505b60008514612ca757600182612c339190613d77565b9150600a85612c429190613f21565b6030612c4e9190613c96565b60f81b818381518110612c6457612c63613fdf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ca09190613cec565b9450612c1e565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b612d368383836001612d3b565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612da9576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612de4576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612df16000868387612d1d565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612fbb5750612fba8773ffffffffffffffffffffffffffffffffffffffff1661294d565b5b15613081575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130306000888480600101955088612960565b613066576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612fc157826001541461307c57600080fd5b6130ed565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613082575b8160018190555050506131036000868387612d23565b5050505050565b82805461311690613e75565b90600052602060002090601f016020900481019282613138576000855561317f565b82601f1061315157805160ff191683800117855561317f565b8280016001018555821561317f579182015b8281111561317e578251825591602001919060010190613163565b5b50905061318c91906131d3565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156131ec5760008160009055506001016131d4565b5090565b60006132036131fe84613be6565b613bc1565b90508281526020810184848401111561321f5761321e614042565b5b61322a848285613e33565b509392505050565b600061324561324084613c17565b613bc1565b90508281526020810184848401111561326157613260614042565b5b61326c848285613e33565b509392505050565b60008135905061328381614315565b92915050565b6000813590506132988161432c565b92915050565b6000813590506132ad81614343565b92915050565b6000815190506132c281614343565b92915050565b600082601f8301126132dd576132dc61403d565b5b81356132ed8482602086016131f0565b91505092915050565b600082601f83011261330b5761330a61403d565b5b813561331b848260208601613232565b91505092915050565b6000813590506133338161435a565b92915050565b60006020828403121561334f5761334e61404c565b5b600061335d84828501613274565b91505092915050565b6000806040838503121561337d5761337c61404c565b5b600061338b85828601613274565b925050602061339c85828601613274565b9150509250929050565b6000806000606084860312156133bf576133be61404c565b5b60006133cd86828701613274565b93505060206133de86828701613274565b92505060406133ef86828701613324565b9150509250925092565b600080600080608085870312156134135761341261404c565b5b600061342187828801613274565b945050602061343287828801613274565b935050604061344387828801613324565b925050606085013567ffffffffffffffff81111561346457613463614047565b5b613470878288016132c8565b91505092959194509250565b600080604083850312156134935761349261404c565b5b60006134a185828601613274565b92505060206134b285828601613289565b9150509250929050565b600080604083850312156134d3576134d261404c565b5b60006134e185828601613274565b92505060206134f285828601613324565b9150509250929050565b6000602082840312156135125761351161404c565b5b60006135208482850161329e565b91505092915050565b60006020828403121561353f5761353e61404c565b5b600061354d848285016132b3565b91505092915050565b60006020828403121561356c5761356b61404c565b5b600082013567ffffffffffffffff81111561358a57613589614047565b5b613596848285016132f6565b91505092915050565b6000602082840312156135b5576135b461404c565b5b60006135c384828501613324565b91505092915050565b6135d581613dab565b82525050565b6135e481613dab565b82525050565b6135f381613dbd565b82525050565b61360281613dbd565b82525050565b600061361382613c48565b61361d8185613c5e565b935061362d818560208601613e42565b61363681614051565b840191505092915050565b600061364c82613c53565b6136568185613c7a565b9350613666818560208601613e42565b61366f81614051565b840191505092915050565b600061368582613c53565b61368f8185613c8b565b935061369f818560208601613e42565b80840191505092915050565b60006136b8602683613c7a565b91506136c382614062565b604082019050919050565b60006136db602183613c7a565b91506136e6826140b1565b604082019050919050565b60006136fe601283613c7a565b915061370982614100565b602082019050919050565b6000613721601e83613c7a565b915061372c82614129565b602082019050919050565b6000613744601283613c7a565b915061374f82614152565b602082019050919050565b6000613767600583613c8b565b91506137728261417b565b600582019050919050565b600061378a602083613c7a565b9150613795826141a4565b602082019050919050565b60006137ad602f83613c7a565b91506137b8826141cd565b604082019050919050565b60006137d0600083613c6f565b91506137db8261421c565b600082019050919050565b60006137f3601083613c7a565b91506137fe8261421f565b602082019050919050565b6000613816601683613c7a565b915061382182614248565b602082019050919050565b6000613839601683613c7a565b915061384482614271565b602082019050919050565b600061385c601c83613c7a565b91506138678261429a565b602082019050919050565b600061387f601f83613c7a565b915061388a826142c3565b602082019050919050565b60006138a2600183613c8b565b91506138ad826142ec565b600182019050919050565b6060820160008201516138ce60008501826135cc565b5060208201516138e16020850182613909565b5060408201516138f460408501826135ea565b50505050565b61390381613e15565b82525050565b61391281613e1f565b82525050565b6000613924828561367a565b915061392f82613895565b915061393b828461367a565b91506139468261375a565b91508190509392505050565b600061395d826137c3565b9150819050919050565b600060208201905061397c60008301846135db565b92915050565b600060808201905061399760008301876135db565b6139a460208301866135db565b6139b160408301856138fa565b81810360608301526139c38184613608565b905095945050505050565b60006020820190506139e360008301846135f9565b92915050565b60006020820190508181036000830152613a038184613641565b905092915050565b60006020820190508181036000830152613a24816136ab565b9050919050565b60006020820190508181036000830152613a44816136ce565b9050919050565b60006020820190508181036000830152613a64816136f1565b9050919050565b60006020820190508181036000830152613a8481613714565b9050919050565b60006020820190508181036000830152613aa481613737565b9050919050565b60006020820190508181036000830152613ac48161377d565b9050919050565b60006020820190508181036000830152613ae4816137a0565b9050919050565b60006020820190508181036000830152613b04816137e6565b9050919050565b60006020820190508181036000830152613b2481613809565b9050919050565b60006020820190508181036000830152613b448161382c565b9050919050565b60006020820190508181036000830152613b648161384f565b9050919050565b60006020820190508181036000830152613b8481613872565b9050919050565b6000606082019050613ba060008301846138b8565b92915050565b6000602082019050613bbb60008301846138fa565b92915050565b6000613bcb613bdc565b9050613bd78282613ea7565b919050565b6000604051905090565b600067ffffffffffffffff821115613c0157613c0061400e565b5b613c0a82614051565b9050602081019050919050565b600067ffffffffffffffff821115613c3257613c3161400e565b5b613c3b82614051565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ca182613e15565b9150613cac83613e15565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ce157613ce0613f52565b5b828201905092915050565b6000613cf782613e15565b9150613d0283613e15565b925082613d1257613d11613f81565b5b828204905092915050565b6000613d2882613e15565b9150613d3383613e15565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d6c57613d6b613f52565b5b828202905092915050565b6000613d8282613e15565b9150613d8d83613e15565b925082821015613da057613d9f613f52565b5b828203905092915050565b6000613db682613df5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015613e60578082015181840152602081019050613e45565b83811115613e6f576000848401525b50505050565b60006002820490506001821680613e8d57607f821691505b60208210811415613ea157613ea0613fb0565b5b50919050565b613eb082614051565b810181811067ffffffffffffffff82111715613ecf57613ece61400e565b5b80604052505050565b6000613ee382613e15565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f1657613f15613f52565b5b600182019050919050565b6000613f2c82613e15565b9150613f3783613e15565b925082613f4757613f46613f81565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546865207175616e74697479206578636565647320746865207265736572766560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b61431e81613dab565b811461432957600080fd5b50565b61433581613dbd565b811461434057600080fd5b50565b61434c81613dc9565b811461435757600080fd5b50565b61436381613e15565b811461436e57600080fd5b5056fea264697066735822122005b909bd677f6f8ea66fe77879d408fc696b09d74c95205cd84e277f26cc088c64736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d6575674b4d3552577078385a593678573237467531706d737654694d6464534e50616545674642656e4e72762f4f746865727369646544414f506173732e6a736f6e
Deployed Bytecode
0x60806040526004361061025c5760003560e01c8063715018a611610144578063ac446002116100b6578063c87b56dd1161007a578063c87b56dd1461089b578063cd3293de146108d8578063dc33e68114610903578063e757223014610940578063e985e9c51461097d578063f2fde38b146109ba5761025c565b8063ac446002146107f0578063b3af48db14610807578063b88d4fde14610832578063bd0a84391461085b578063bd58882d146108725761025c565b80639231ab2a116101085780639231ab2a146106f157806395d89b411461072e578063a0712d6814610759578063a22cb46514610775578063a2b40d191461079e578063a40ece7a146107c75761025c565b8063715018a61461061e57806375236143146106355780638ba4cc3c146106725780638d859f3e1461069b5780638da5cb5b146106c65761025c565b80633fd17366116101dd5780635c37809d116101a15780635c37809d146104fe57806362c6f7b9146105275780636352211e1461055257806369ba1a751461058f5780636a44e173146105b857806370a08231146105e15761025c565b80633fd173661461042d57806342842e0e146104565780634e69d5601461047f57806351d7ff93146104aa57806355f804b3146104d55761025c565b806318160ddd1161022457806318160ddd1461035a578063200d2ed21461038557806323b872dd146103b0578063288bd8fd146103d95780633f7857c5146104025761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b31461030657806317e04a711461032f575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906134fc565b6109e3565b60405161029591906139ce565b60405180910390f35b3480156102aa57600080fd5b506102b3610ac5565b6040516102c091906139e9565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb919061359f565b610b57565b6040516102fd9190613967565b60405180910390f35b34801561031257600080fd5b5061032d600480360381019061032891906134bc565b610bd3565b005b34801561033b57600080fd5b50610344610cde565b6040516103519190613ba6565b60405180910390f35b34801561036657600080fd5b5061036f610ce4565b60405161037c9190613ba6565b60405180910390f35b34801561039157600080fd5b5061039a610cfb565b6040516103a79190613ba6565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d291906133a6565b610d01565b005b3480156103e557600080fd5b5061040060048036038101906103fb919061359f565b610d11565b005b34801561040e57600080fd5b50610417610df8565b6040516104249190613ba6565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f919061359f565b610dfe565b005b34801561046257600080fd5b5061047d600480360381019061047891906133a6565b610e84565b005b34801561048b57600080fd5b50610494610ea4565b6040516104a19190613ba6565b60405180910390f35b3480156104b657600080fd5b506104bf610eae565b6040516104cc9190613ba6565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190613556565b610eb4565b005b34801561050a57600080fd5b5061052560048036038101906105209190613556565b610f4a565b005b34801561053357600080fd5b5061053c610fe0565b60405161054991906139ce565b60405180910390f35b34801561055e57600080fd5b506105796004803603810190610574919061359f565b610ff3565b6040516105869190613967565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b1919061359f565b611009565b005b3480156105c457600080fd5b506105df60048036038101906105da919061359f565b61108f565b005b3480156105ed57600080fd5b5061060860048036038101906106039190613339565b611115565b6040516106159190613ba6565b60405180910390f35b34801561062a57600080fd5b506106336111e5565b005b34801561064157600080fd5b5061065c60048036038101906106579190613339565b61126d565b6040516106699190613ba6565b60405180910390f35b34801561067e57600080fd5b50610699600480360381019061069491906134bc565b611285565b005b3480156106a757600080fd5b506106b0611366565b6040516106bd9190613ba6565b60405180910390f35b3480156106d257600080fd5b506106db61136c565b6040516106e89190613967565b60405180910390f35b3480156106fd57600080fd5b506107186004803603810190610713919061359f565b611395565b6040516107259190613b8b565b60405180910390f35b34801561073a57600080fd5b506107436113ad565b60405161075091906139e9565b60405180910390f35b610773600480360381019061076e919061359f565b61143f565b005b34801561078157600080fd5b5061079c6004803603810190610797919061347c565b6116ec565b005b3480156107aa57600080fd5b506107c560048036038101906107c0919061359f565b611864565b005b3480156107d357600080fd5b506107ee60048036038101906107e9919061359f565b6118ea565b005b3480156107fc57600080fd5b50610805611970565b005b34801561081357600080fd5b5061081c611af1565b6040516108299190613ba6565b60405180910390f35b34801561083e57600080fd5b50610859600480360381019061085491906133f9565b611af7565b005b34801561086757600080fd5b50610870611b73565b005b34801561087e57600080fd5b506108996004803603810190610894919061359f565b611c1b565b005b3480156108a757600080fd5b506108c260048036038101906108bd919061359f565b611ca1565b6040516108cf91906139e9565b60405180910390f35b3480156108e457600080fd5b506108ed611df0565b6040516108fa9190613ba6565b60405180910390f35b34801561090f57600080fd5b5061092a60048036038101906109259190613339565b611df6565b6040516109379190613ba6565b60405180910390f35b34801561094c57600080fd5b506109676004803603810190610962919061359f565b611e08565b6040516109749190613ba6565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190613366565b611e1f565b6040516109b191906139ce565b60405180910390f35b3480156109c657600080fd5b506109e160048036038101906109dc9190613339565b611eb3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610abe5750610abd82611fab565b5b9050919050565b606060038054610ad490613e75565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0090613e75565b8015610b4d5780601f10610b2257610100808354040283529160200191610b4d565b820191906000526020600020905b815481529060010190602001808311610b3057829003601f168201915b5050505050905090565b6000610b6282612015565b610b98576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bde82610ff3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c46576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c65612063565b73ffffffffffffffffffffffffffffffffffffffff1614158015610c975750610c9581610c90612063565b611e1f565b155b15610cce576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cd983838361206b565b505050565b600b5481565b6000610cee61211d565b6002546001540303905090565b60145481565b610d0c838383612126565b505050565b610d19612063565b73ffffffffffffffffffffffffffffffffffffffff16610d3761136c565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490613aab565b60405180910390fd5b601254811115610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc990613a2b565b60405180910390fd5b8060126000828254610de49190613d77565b92505081905550610df533826125dc565b50565b60135481565b610e06612063565b73ffffffffffffffffffffffffffffffffffffffff16610e2461136c565b73ffffffffffffffffffffffffffffffffffffffff1614610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7190613aab565b60405180910390fd5b80600d8190555050565b610e9f83838360405180602001604052806000815250611af7565b505050565b6000601454905090565b600a5481565b610ebc612063565b73ffffffffffffffffffffffffffffffffffffffff16610eda61136c565b73ffffffffffffffffffffffffffffffffffffffff1614610f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2790613aab565b60405180910390fd5b8060109080519060200190610f4692919061310a565b5050565b610f52612063565b73ffffffffffffffffffffffffffffffffffffffff16610f7061136c565b73ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90613aab565b60405180910390fd5b8060119080519060200190610fdc92919061310a565b5050565b600f60009054906101000a900460ff1681565b6000610ffe826125fa565b600001519050919050565b611011612063565b73ffffffffffffffffffffffffffffffffffffffff1661102f61136c565b73ffffffffffffffffffffffffffffffffffffffff1614611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c90613aab565b60405180910390fd5b8060148190555050565b611097612063565b73ffffffffffffffffffffffffffffffffffffffff166110b561136c565b73ffffffffffffffffffffffffffffffffffffffff161461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290613aab565b60405180910390fd5b8060128190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561117d576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6111ed612063565b73ffffffffffffffffffffffffffffffffffffffff1661120b61136c565b73ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890613aab565b60405180910390fd5b61126b6000612889565b565b600c6020528060005260406000206000915090505481565b61128d612063565b73ffffffffffffffffffffffffffffffffffffffff166112ab61136c565b73ffffffffffffffffffffffffffffffffffffffff1614611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f890613aab565b60405180910390fd5b6103e88161130d610ce4565b6113179190613c96565b1115611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f90613a8b565b60405180910390fd5b61136282826125dc565b5050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61139d613190565b6113a6826125fa565b9050919050565b6060600480546113bc90613e75565b80601f01602080910402602001604051908101604052809291908181526020018280546113e890613e75565b80156114355780601f1061140a57610100808354040283529160200191611435565b820191906000526020600020905b81548152906001019060200180831161141857829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a490613a6b565b60405180910390fd5b6001601454146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990613a4b565b60405180910390fd5b6012546103e86115029190613d77565b8161150b610ce4565b6115159190613c96565b1115611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d90613a8b565b60405180910390fd5b600a5481111561159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290613b2b565b60405180910390fd5b6013546115a6610ce4565b106115b557600e54600d819055505b80600d546115c39190613d1d565b341015611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90613b0b565b60405180910390fd5b80600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116549190613c96565b92505081905550600b54600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690613b4b565b60405180910390fd5b6116e933826125dc565b50565b6116f4612063565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611759576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060086000611766612063565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611813612063565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161185891906139ce565b60405180910390a35050565b61186c612063565b73ffffffffffffffffffffffffffffffffffffffff1661188a61136c565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790613aab565b60405180910390fd5b80600e8190555050565b6118f2612063565b73ffffffffffffffffffffffffffffffffffffffff1661191061136c565b73ffffffffffffffffffffffffffffffffffffffff1614611966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195d90613aab565b60405180910390fd5b80600a8190555050565b611978612063565b73ffffffffffffffffffffffffffffffffffffffff1661199661136c565b73ffffffffffffffffffffffffffffffffffffffff16146119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e390613aab565b60405180910390fd5b60026009541415611a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2990613b6b565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611a6090613952565b60006040518083038185875af1925050503d8060008114611a9d576040519150601f19603f3d011682016040523d82523d6000602084013e611aa2565b606091505b5050905080611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add90613aeb565b60405180910390fd5b506001600981905550565b600e5481565b611b02848484612126565b611b218373ffffffffffffffffffffffffffffffffffffffff1661294d565b8015611b365750611b3484848484612960565b155b15611b6d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611b7b612063565b73ffffffffffffffffffffffffffffffffffffffff16611b9961136c565b73ffffffffffffffffffffffffffffffffffffffff1614611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690613aab565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b611c23612063565b73ffffffffffffffffffffffffffffffffffffffff16611c4161136c565b73ffffffffffffffffffffffffffffffffffffffff1614611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e90613aab565b60405180910390fd5b8060138190555050565b6060611cac82612015565b611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce290613acb565b60405180910390fd5b600f60009054906101000a900460ff1615611d5d576000611d0a612ac0565b90506000815111611d2a5760405180602001604052806000815250611d55565b80611d3484612b52565b604051602001611d45929190613918565b6040516020818303038152906040525b915050611deb565b60118054611d6a90613e75565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9690613e75565b8015611de35780601f10611db857610100808354040283529160200191611de3565b820191906000526020600020905b815481529060010190602001808311611dc657829003601f168201915b505050505090505b919050565b60125481565b6000611e0182612cb3565b9050919050565b6000600d5482611e189190613d1d565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ebb612063565b73ffffffffffffffffffffffffffffffffffffffff16611ed961136c565b73ffffffffffffffffffffffffffffffffffffffff1614611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613aab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690613a0b565b60405180910390fd5b611fa881612889565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161202061211d565b1115801561202f575060015482105b801561205c575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000612131826125fa565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461219c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166121bd612063565b73ffffffffffffffffffffffffffffffffffffffff1614806121ec57506121eb856121e6612063565b611e1f565b5b8061223157506121fa612063565b73ffffffffffffffffffffffffffffffffffffffff1661221984610b57565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061226a576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122d1576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122de8585856001612d1d565b6122ea6000848761206b565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561256a57600154821461256957878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125d58585856001612d23565b5050505050565b6125f6828260405180602001604052806000815250612d29565b5050565b612602613190565b60008290508061261061211d565b1115801561261f575060015481105b15612852576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161285057600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612734578092505050612884565b5b60011561284f57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461284a578092505050612884565b612735565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612986612063565b8786866040518563ffffffff1660e01b81526004016129a89493929190613982565b602060405180830381600087803b1580156129c257600080fd5b505af19250505080156129f357506040513d601f19601f820116820180604052508101906129f09190613529565b60015b612a6d573d8060008114612a23576040519150601f19603f3d011682016040523d82523d6000602084013e612a28565b606091505b50600081511415612a65576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060108054612acf90613e75565b80601f0160208091040260200160405190810160405280929190818152602001828054612afb90613e75565b8015612b485780601f10612b1d57610100808354040283529160200191612b48565b820191906000526020600020905b815481529060010190602001808311612b2b57829003601f168201915b5050505050905090565b60606000821415612b9a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cae565b600082905060005b60008214612bcc578080612bb590613ed8565b915050600a82612bc59190613cec565b9150612ba2565b60008167ffffffffffffffff811115612be857612be761400e565b5b6040519080825280601f01601f191660200182016040528015612c1a5781602001600182028036833780820191505090505b5090505b60008514612ca757600182612c339190613d77565b9150600a85612c429190613f21565b6030612c4e9190613c96565b60f81b818381518110612c6457612c63613fdf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ca09190613cec565b9450612c1e565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b612d368383836001612d3b565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612da9576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612de4576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612df16000868387612d1d565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612fbb5750612fba8773ffffffffffffffffffffffffffffffffffffffff1661294d565b5b15613081575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130306000888480600101955088612960565b613066576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612fc157826001541461307c57600080fd5b6130ed565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613082575b8160018190555050506131036000868387612d23565b5050505050565b82805461311690613e75565b90600052602060002090601f016020900481019282613138576000855561317f565b82601f1061315157805160ff191683800117855561317f565b8280016001018555821561317f579182015b8281111561317e578251825591602001919060010190613163565b5b50905061318c91906131d3565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156131ec5760008160009055506001016131d4565b5090565b60006132036131fe84613be6565b613bc1565b90508281526020810184848401111561321f5761321e614042565b5b61322a848285613e33565b509392505050565b600061324561324084613c17565b613bc1565b90508281526020810184848401111561326157613260614042565b5b61326c848285613e33565b509392505050565b60008135905061328381614315565b92915050565b6000813590506132988161432c565b92915050565b6000813590506132ad81614343565b92915050565b6000815190506132c281614343565b92915050565b600082601f8301126132dd576132dc61403d565b5b81356132ed8482602086016131f0565b91505092915050565b600082601f83011261330b5761330a61403d565b5b813561331b848260208601613232565b91505092915050565b6000813590506133338161435a565b92915050565b60006020828403121561334f5761334e61404c565b5b600061335d84828501613274565b91505092915050565b6000806040838503121561337d5761337c61404c565b5b600061338b85828601613274565b925050602061339c85828601613274565b9150509250929050565b6000806000606084860312156133bf576133be61404c565b5b60006133cd86828701613274565b93505060206133de86828701613274565b92505060406133ef86828701613324565b9150509250925092565b600080600080608085870312156134135761341261404c565b5b600061342187828801613274565b945050602061343287828801613274565b935050604061344387828801613324565b925050606085013567ffffffffffffffff81111561346457613463614047565b5b613470878288016132c8565b91505092959194509250565b600080604083850312156134935761349261404c565b5b60006134a185828601613274565b92505060206134b285828601613289565b9150509250929050565b600080604083850312156134d3576134d261404c565b5b60006134e185828601613274565b92505060206134f285828601613324565b9150509250929050565b6000602082840312156135125761351161404c565b5b60006135208482850161329e565b91505092915050565b60006020828403121561353f5761353e61404c565b5b600061354d848285016132b3565b91505092915050565b60006020828403121561356c5761356b61404c565b5b600082013567ffffffffffffffff81111561358a57613589614047565b5b613596848285016132f6565b91505092915050565b6000602082840312156135b5576135b461404c565b5b60006135c384828501613324565b91505092915050565b6135d581613dab565b82525050565b6135e481613dab565b82525050565b6135f381613dbd565b82525050565b61360281613dbd565b82525050565b600061361382613c48565b61361d8185613c5e565b935061362d818560208601613e42565b61363681614051565b840191505092915050565b600061364c82613c53565b6136568185613c7a565b9350613666818560208601613e42565b61366f81614051565b840191505092915050565b600061368582613c53565b61368f8185613c8b565b935061369f818560208601613e42565b80840191505092915050565b60006136b8602683613c7a565b91506136c382614062565b604082019050919050565b60006136db602183613c7a565b91506136e6826140b1565b604082019050919050565b60006136fe601283613c7a565b915061370982614100565b602082019050919050565b6000613721601e83613c7a565b915061372c82614129565b602082019050919050565b6000613744601283613c7a565b915061374f82614152565b602082019050919050565b6000613767600583613c8b565b91506137728261417b565b600582019050919050565b600061378a602083613c7a565b9150613795826141a4565b602082019050919050565b60006137ad602f83613c7a565b91506137b8826141cd565b604082019050919050565b60006137d0600083613c6f565b91506137db8261421c565b600082019050919050565b60006137f3601083613c7a565b91506137fe8261421f565b602082019050919050565b6000613816601683613c7a565b915061382182614248565b602082019050919050565b6000613839601683613c7a565b915061384482614271565b602082019050919050565b600061385c601c83613c7a565b91506138678261429a565b602082019050919050565b600061387f601f83613c7a565b915061388a826142c3565b602082019050919050565b60006138a2600183613c8b565b91506138ad826142ec565b600182019050919050565b6060820160008201516138ce60008501826135cc565b5060208201516138e16020850182613909565b5060408201516138f460408501826135ea565b50505050565b61390381613e15565b82525050565b61391281613e1f565b82525050565b6000613924828561367a565b915061392f82613895565b915061393b828461367a565b91506139468261375a565b91508190509392505050565b600061395d826137c3565b9150819050919050565b600060208201905061397c60008301846135db565b92915050565b600060808201905061399760008301876135db565b6139a460208301866135db565b6139b160408301856138fa565b81810360608301526139c38184613608565b905095945050505050565b60006020820190506139e360008301846135f9565b92915050565b60006020820190508181036000830152613a038184613641565b905092915050565b60006020820190508181036000830152613a24816136ab565b9050919050565b60006020820190508181036000830152613a44816136ce565b9050919050565b60006020820190508181036000830152613a64816136f1565b9050919050565b60006020820190508181036000830152613a8481613714565b9050919050565b60006020820190508181036000830152613aa481613737565b9050919050565b60006020820190508181036000830152613ac48161377d565b9050919050565b60006020820190508181036000830152613ae4816137a0565b9050919050565b60006020820190508181036000830152613b04816137e6565b9050919050565b60006020820190508181036000830152613b2481613809565b9050919050565b60006020820190508181036000830152613b448161382c565b9050919050565b60006020820190508181036000830152613b648161384f565b9050919050565b60006020820190508181036000830152613b8481613872565b9050919050565b6000606082019050613ba060008301846138b8565b92915050565b6000602082019050613bbb60008301846138fa565b92915050565b6000613bcb613bdc565b9050613bd78282613ea7565b919050565b6000604051905090565b600067ffffffffffffffff821115613c0157613c0061400e565b5b613c0a82614051565b9050602081019050919050565b600067ffffffffffffffff821115613c3257613c3161400e565b5b613c3b82614051565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ca182613e15565b9150613cac83613e15565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ce157613ce0613f52565b5b828201905092915050565b6000613cf782613e15565b9150613d0283613e15565b925082613d1257613d11613f81565b5b828204905092915050565b6000613d2882613e15565b9150613d3383613e15565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d6c57613d6b613f52565b5b828202905092915050565b6000613d8282613e15565b9150613d8d83613e15565b925082821015613da057613d9f613f52565b5b828203905092915050565b6000613db682613df5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015613e60578082015181840152602081019050613e45565b83811115613e6f576000848401525b50505050565b60006002820490506001821680613e8d57607f821691505b60208210811415613ea157613ea0613fb0565b5b50919050565b613eb082614051565b810181811067ffffffffffffffff82111715613ecf57613ece61400e565b5b80604052505050565b6000613ee382613e15565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f1657613f15613f52565b5b600182019050919050565b6000613f2c82613e15565b9150613f3783613e15565b925082613f4757613f46613f81565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546865207175616e74697479206578636565647320746865207265736572766560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b61431e81613dab565b811461432957600080fd5b50565b61433581613dbd565b811461434057600080fd5b50565b61434c81613dc9565b811461435757600080fd5b50565b61436381613e15565b811461436e57600080fd5b5056fea264697066735822122005b909bd677f6f8ea66fe77879d408fc696b09d74c95205cd84e277f26cc088c64736f6c63430008070033
Deployed Bytecode Sourcemap
30415:4206:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12670:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15783:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17286:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16849:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30595:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11919:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31142:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18151:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34237:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31099:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33437:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18392:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33929:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30515:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32682:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32577:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30969:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15591:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33850:72;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34007:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13039:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2701:103;;;;;;;;;;;;;:::i;:::-;;30672:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34460:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30729:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2478:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33007:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15952:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31512:617;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17562:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33541:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33642:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33161:181;;;;;;;;;;;;;:::i;:::-;;30766:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18648:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33348:83;;;;;;;;;;;;;:::i;:::-;;33754:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32138:433;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31071:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32896:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34115:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17920:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2813:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12670:305;12772:4;12824:25;12809:40;;;:11;:40;;;;:105;;;;12881:33;12866:48;;;:11;:48;;;;12809:105;:158;;;;12931:36;12955:11;12931:23;:36::i;:::-;12809:158;12789:178;;12670:305;;;:::o;15783:100::-;15837:13;15870:5;15863:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15783:100;:::o;17286:204::-;17354:7;17379:16;17387:7;17379;:16::i;:::-;17374:64;;17404:34;;;;;;;;;;;;;;17374:64;17458:15;:24;17474:7;17458:24;;;;;;;;;;;;;;;;;;;;;17451:31;;17286:204;;;:::o;16849:371::-;16922:13;16938:24;16954:7;16938:15;:24::i;:::-;16922:40;;16983:5;16977:11;;:2;:11;;;16973:48;;;16997:24;;;;;;;;;;;;;;16973:48;17054:5;17038:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;17064:37;17081:5;17088:12;:10;:12::i;:::-;17064:16;:37::i;:::-;17063:38;17038:63;17034:138;;;17125:35;;;;;;;;;;;;;;17034:138;17184:28;17193:2;17197:7;17206:5;17184:8;:28::i;:::-;16911:309;16849:371;;:::o;30595:33::-;;;;:::o;11919:303::-;11963:7;12188:15;:13;:15::i;:::-;12173:12;;12157:13;;:28;:46;12150:53;;11919:303;:::o;31142:22::-;;;;:::o;18151:170::-;18285:28;18295:4;18301:2;18305:7;18285:9;:28::i;:::-;18151:170;;;:::o;34237:217::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34327:7:::1;;34315:8;:19;;34307:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34394:8;34383:7;;:19;;;;;;;:::i;:::-;;;;;;;;34413:31;34423:10;34435:8;34413:9;:31::i;:::-;34237:217:::0;:::o;31099:32::-;;;;:::o;33437:98::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33520:9:::1;33512:5;:17;;;;33437:98:::0;:::o;18392:185::-;18530:39;18547:4;18553:2;18557:7;18530:39;;;;;;;;;;;;:16;:39::i;:::-;18392:185;;;:::o;33929:73::-;33969:4;33990:6;;33983:13;;33929:73;:::o;30515:38::-;;;;:::o;32682:98::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32767:7:::1;32751:13;:23;;;;;;;;;;;;:::i;:::-;;32682:98:::0;:::o;32577:99::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32667:3:::1;32649:15;:21;;;;;;;;;;;;:::i;:::-;;32577:99:::0;:::o;30969:29::-;;;;;;;;;;;;;:::o;15591:125::-;15655:7;15682:21;15695:7;15682:12;:21::i;:::-;:26;;;15675:33;;15591:125;;;:::o;33850:72::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33915:1:::1;33906:6;:10;;;;33850:72:::0;:::o;34007:98::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34088:9:::1;34080:7;:17;;;;34007:98:::0;:::o;13039:206::-;13103:7;13144:1;13127:19;;:5;:19;;;13123:60;;;13155:28;;;;;;;;;;;;;;13123:60;13209:12;:19;13222:5;13209:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;13201:36;;13194:43;;13039:206;;;:::o;2701:103::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2766:30:::1;2793:1;2766:18;:30::i;:::-;2701:103::o:0;30672:50::-;;;;;;;;;;;;;;;;;:::o;34460:158::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30857:4:::1;34542:1;34526:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:41;;34518:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;34597:15;34607:1;34610;34597:9;:15::i;:::-;34460:158:::0;;:::o;30729:31::-;;;;:::o;2478:87::-;2524:7;2551:6;;;;;;;;;;;2544:13;;2478:87;:::o;33007:148::-;33088:21;;:::i;:::-;33128;33141:7;33128:12;:21::i;:::-;33121:28;;33007:148;;;:::o;15952:104::-;16008:13;16041:7;16034:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15952:104;:::o;31512:617::-;31446:10;31433:23;;:9;:23;;;31425:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31599:1:::1;31589:6;;:11;31581:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;31688:7;;30857:4;31667:28;;;;:::i;:::-;31655:8;31639:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:56;;31631:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;31745:19;;31733:8;:31;;31725:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31819:11;;31802:13;:11;:13::i;:::-;:28;31799:67;;31851:6;;31843:5;:14;;;;31799:67;31903:8;31895:5;;:16;;;;:::i;:::-;31882:9;:29;;31874:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31980:8;31949:15;:27;31965:10;31949:27;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;32034:14;;32003:15;:27;32019:10;32003:27;;;;;;;;;;;;;;;;:45;;31995:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;32090:31;32100:10;32112:8;32090:9;:31::i;:::-;31512:617:::0;:::o;17562:287::-;17673:12;:10;:12::i;:::-;17661:24;;:8;:24;;;17657:54;;;17694:17;;;;;;;;;;;;;;17657:54;17769:8;17724:18;:32;17743:12;:10;:12::i;:::-;17724:32;;;;;;;;;;;;;;;:42;17757:8;17724:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;17822:8;17793:48;;17808:12;:10;:12::i;:::-;17793:48;;;17832:8;17793:48;;;;;;:::i;:::-;;;;;;;;17562:287;;:::o;33541:95::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33621:9:::1;33612:6;:18;;;;33541:95:::0;:::o;33642:106::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33741:1:::1;33719:19;:23;;;;33642:106:::0;:::o;33161:181::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;260:1:::1;406:7;;:19;;398:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;260:1;467:7;:18;;;;33226:12:::2;33244:10;:15;;33267:21;33244:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33225:68;;;33308:7;33300:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;33218:124;216:1:::1;510:7;:22;;;;33161:181::o:0;30766:35::-;;;;:::o;18648:369::-;18815:28;18825:4;18831:2;18835:7;18815:9;:28::i;:::-;18858:15;:2;:13;;;:15::i;:::-;:76;;;;;18878:56;18909:4;18915:2;18919:7;18928:5;18878:30;:56::i;:::-;18877:57;18858:76;18854:156;;;18958:40;;;;;;;;;;;;;;18854:156;18648:369;;;;:::o;33348:83::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33416:9:::1;;;;;;;;;;;33415:10;33403:9;;:22;;;;;;;;;;;;;;;;;;33348:83::o:0;33754:90::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33837:1:::1;33823:11;:15;;;;33754:90:::0;:::o;32138:433::-;32211:13;32241:16;32249:7;32241;:16::i;:::-;32233:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;32318:9;;;;;;;;;;;32315:251;;;32335:21;32359:10;:8;:10::i;:::-;32335:34;;32414:1;32396:7;32390:21;:25;:109;;;;;;;;;;;;;;;;;32451:7;32465:18;:7;:16;:18::i;:::-;32434:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32390:109;32376:123;;;;;32315:251;32539:15;32532:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32138:433;;;;:::o;31071:23::-;;;;:::o;32896:107::-;32954:7;32977:20;32991:5;32977:13;:20::i;:::-;32970:27;;32896:107;;;:::o;34115:117::-;34173:7;34219:5;;34209:9;:15;;;;:::i;:::-;34202:22;;34115:117;;;:::o;17920:164::-;18017:4;18041:18;:25;18060:5;18041:25;;;;;;;;;;;;;;;:35;18067:8;18041:35;;;;;;;;;;;;;;;;;;;;;;;;;18034:42;;17920:164;;;;:::o;2813:201::-;2623:12;:10;:12::i;:::-;2612:23;;:7;:5;:7::i;:::-;:23;;;2604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2922:1:::1;2902:22;;:8;:22;;;;2894:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2978:28;2997:8;2978:18;:28::i;:::-;2813:201:::0;:::o;7131:157::-;7216:4;7255:25;7240:40;;;:11;:40;;;;7233:47;;7131:157;;;:::o;19272:174::-;19329:4;19372:7;19353:15;:13;:15::i;:::-;:26;;:53;;;;;19393:13;;19383:7;:23;19353:53;:85;;;;;19411:11;:20;19423:7;19411:20;;;;;;;;;;;:27;;;;;;;;;;;;19410:28;19353:85;19346:92;;19272:174;;;:::o;2021:98::-;2074:7;2101:10;2094:17;;2021:98;:::o;27429:196::-;27571:2;27544:15;:24;27560:7;27544:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27609:7;27605:2;27589:28;;27598:5;27589:28;;;;;;;;;;;;27429:196;;;:::o;11693:92::-;11749:7;11776:1;11769:8;;11693:92;:::o;22372:2130::-;22487:35;22525:21;22538:7;22525:12;:21::i;:::-;22487:59;;22585:4;22563:26;;:13;:18;;;:26;;;22559:67;;22598:28;;;;;;;;;;;;;;22559:67;22639:22;22681:4;22665:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;22702:36;22719:4;22725:12;:10;:12::i;:::-;22702:16;:36::i;:::-;22665:73;:126;;;;22779:12;:10;:12::i;:::-;22755:36;;:20;22767:7;22755:11;:20::i;:::-;:36;;;22665:126;22639:153;;22810:17;22805:66;;22836:35;;;;;;;;;;;;;;22805:66;22900:1;22886:16;;:2;:16;;;22882:52;;;22911:23;;;;;;;;;;;;;;22882:52;22947:43;22969:4;22975:2;22979:7;22988:1;22947:21;:43::i;:::-;23055:35;23072:1;23076:7;23085:4;23055:8;:35::i;:::-;23416:1;23386:12;:18;23399:4;23386:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23460:1;23432:12;:16;23445:2;23432:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23478:31;23512:11;:20;23524:7;23512:20;;;;;;;;;;;23478:54;;23563:2;23547:8;:13;;;:18;;;;;;;;;;;;;;;;;;23613:15;23580:8;:23;;;:49;;;;;;;;;;;;;;;;;;23881:19;23913:1;23903:7;:11;23881:33;;23929:31;23963:11;:24;23975:11;23963:24;;;;;;;;;;;23929:58;;24031:1;24006:27;;:8;:13;;;;;;;;;;;;:27;;;24002:384;;;24216:13;;24201:11;:28;24197:174;;24270:4;24254:8;:13;;;:20;;;;;;;;;;;;;;;;;;24323:13;:28;;;24297:8;:23;;;:54;;;;;;;;;;;;;;;;;;24197:174;24002:384;23361:1036;;;24433:7;24429:2;24414:27;;24423:4;24414:27;;;;;;;;;;;;24452:42;24473:4;24479:2;24483:7;24492:1;24452:20;:42::i;:::-;22476:2026;;22372:2130;;;:::o;19454:104::-;19523:27;19533:2;19537:8;19523:27;;;;;;;;;;;;:9;:27::i;:::-;19454:104;;:::o;14420:1109::-;14482:21;;:::i;:::-;14516:12;14531:7;14516:22;;14599:4;14580:15;:13;:15::i;:::-;:23;;:47;;;;;14614:13;;14607:4;:20;14580:47;14576:886;;;14648:31;14682:11;:17;14694:4;14682:17;;;;;;;;;;;14648:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14723:9;:16;;;14718:729;;14794:1;14768:28;;:9;:14;;;:28;;;14764:101;;14832:9;14825:16;;;;;;14764:101;15167:261;15174:4;15167:261;;;15207:6;;;;;;;;15252:11;:17;15264:4;15252:17;;;;;;;;;;;15240:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15326:1;15300:28;;:9;:14;;;:28;;;15296:109;;15368:9;15361:16;;;;;;15296:109;15167:261;;;14718:729;14629:833;14576:886;15490:31;;;;;;;;;;;;;;14420:1109;;;;:::o;3023:191::-;3097:16;3116:6;;;;;;;;;;;3097:25;;3142:8;3133:6;;:17;;;;;;;;;;;;;;;;;;3197:8;3166:40;;3187:8;3166:40;;;;;;;;;;;;3086:128;3023:191;:::o;3246:197::-;3306:4;3324:12;3391:7;3379:20;3371:28;;3434:1;3427:4;:8;3420:15;;;3246:197;;;:::o;28117:667::-;28280:4;28317:2;28301:36;;;28338:12;:10;:12::i;:::-;28352:4;28358:7;28367:5;28301:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28297:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28552:1;28535:6;:13;:18;28531:235;;;28581:40;;;;;;;;;;;;;;28531:235;28724:6;28718:13;28709:6;28705:2;28701:15;28694:38;28297:480;28430:45;;;28420:55;;;:6;:55;;;;28413:62;;;28117:667;;;;;;:::o;32784:108::-;32844:13;32873;32866:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32784:108;:::o;638:533::-;694:13;734:1;725:5;:10;721:53;;;752:10;;;;;;;;;;;;;;;;;;;;;721:53;784:12;799:5;784:20;;815:14;840:78;855:1;847:4;:9;840:78;;873:8;;;;;:::i;:::-;;;;904:2;896:10;;;;;:::i;:::-;;;840:78;;;928:19;960:6;950:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;928:39;;978:154;994:1;985:5;:10;978:154;;1022:1;1012:11;;;;;:::i;:::-;;;1089:2;1081:5;:10;;;;:::i;:::-;1068:2;:24;;;;:::i;:::-;1055:39;;1038:6;1045;1038:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1118:2;1109:11;;;;;:::i;:::-;;;978:154;;;1156:6;1142:21;;;;;638:533;;;;:::o;13327:137::-;13388:7;13423:12;:19;13436:5;13423:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;13415:41;;13408:48;;13327:137;;;:::o;29432:159::-;;;;;:::o;30250:158::-;;;;;:::o;19921:163::-;20044:32;20050:2;20054:8;20064:5;20071:4;20044:5;:32::i;:::-;19921:163;;;:::o;20343:1775::-;20482:20;20505:13;;20482:36;;20547:1;20533:16;;:2;:16;;;20529:48;;;20558:19;;;;;;;;;;;;;;20529:48;20604:1;20592:8;:13;20588:44;;;20614:18;;;;;;;;;;;;;;20588:44;20645:61;20675:1;20679:2;20683:12;20697:8;20645:21;:61::i;:::-;21018:8;20983:12;:16;20996:2;20983:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21082:8;21042:12;:16;21055:2;21042:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21141:2;21108:11;:25;21120:12;21108:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;21208:15;21158:11;:25;21170:12;21158:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;21241:20;21264:12;21241:35;;21291:11;21320:8;21305:12;:23;21291:37;;21349:4;:23;;;;;21357:15;:2;:13;;;:15::i;:::-;21349:23;21345:641;;;21393:314;21449:12;21445:2;21424:38;;21441:1;21424:38;;;;;;;;;;;;21490:69;21529:1;21533:2;21537:14;;;;;;21553:5;21490:30;:69::i;:::-;21485:174;;21595:40;;;;;;;;;;;;;;21485:174;21702:3;21686:12;:19;;21393:314;;21788:12;21771:13;;:29;21767:43;;21802:8;;;21767:43;21345:641;;;21851:120;21907:14;;;;;;21903:2;21882:40;;21899:1;21882:40;;;;;;;;;;;;21966:3;21950:12;:19;;21851:120;;21345:641;22016:12;22000:13;:28;;;;20958:1082;;22050:60;22079:1;22083:2;22087:12;22101:8;22050:20;:60::i;:::-;20471:1647;20343:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:108::-;7235:24;7253:5;7235:24;:::i;:::-;7230:3;7223:37;7158:108;;:::o;7272:118::-;7359:24;7377:5;7359:24;:::i;:::-;7354:3;7347:37;7272:118;;:::o;7396:99::-;7467:21;7482:5;7467:21;:::i;:::-;7462:3;7455:34;7396:99;;:::o;7501:109::-;7582:21;7597:5;7582:21;:::i;:::-;7577:3;7570:34;7501:109;;:::o;7616:360::-;7702:3;7730:38;7762:5;7730:38;:::i;:::-;7784:70;7847:6;7842:3;7784:70;:::i;:::-;7777:77;;7863:52;7908:6;7903:3;7896:4;7889:5;7885:16;7863:52;:::i;:::-;7940:29;7962:6;7940:29;:::i;:::-;7935:3;7931:39;7924:46;;7706:270;7616:360;;;;:::o;7982:364::-;8070:3;8098:39;8131:5;8098:39;:::i;:::-;8153:71;8217:6;8212:3;8153:71;:::i;:::-;8146:78;;8233:52;8278:6;8273:3;8266:4;8259:5;8255:16;8233:52;:::i;:::-;8310:29;8332:6;8310:29;:::i;:::-;8305:3;8301:39;8294:46;;8074:272;7982:364;;;;:::o;8352:377::-;8458:3;8486:39;8519:5;8486:39;:::i;:::-;8541:89;8623:6;8618:3;8541:89;:::i;:::-;8534:96;;8639:52;8684:6;8679:3;8672:4;8665:5;8661:16;8639:52;:::i;:::-;8716:6;8711:3;8707:16;8700:23;;8462:267;8352:377;;;;:::o;8735:366::-;8877:3;8898:67;8962:2;8957:3;8898:67;:::i;:::-;8891:74;;8974:93;9063:3;8974:93;:::i;:::-;9092:2;9087:3;9083:12;9076:19;;8735:366;;;:::o;9107:::-;9249:3;9270:67;9334:2;9329:3;9270:67;:::i;:::-;9263:74;;9346:93;9435:3;9346:93;:::i;:::-;9464:2;9459:3;9455:12;9448:19;;9107:366;;;:::o;9479:::-;9621:3;9642:67;9706:2;9701:3;9642:67;:::i;:::-;9635:74;;9718:93;9807:3;9718:93;:::i;:::-;9836:2;9831:3;9827:12;9820:19;;9479:366;;;:::o;9851:::-;9993:3;10014:67;10078:2;10073:3;10014:67;:::i;:::-;10007:74;;10090:93;10179:3;10090:93;:::i;:::-;10208:2;10203:3;10199:12;10192:19;;9851:366;;;:::o;10223:::-;10365:3;10386:67;10450:2;10445:3;10386:67;:::i;:::-;10379:74;;10462:93;10551:3;10462:93;:::i;:::-;10580:2;10575:3;10571:12;10564:19;;10223:366;;;:::o;10595:400::-;10755:3;10776:84;10858:1;10853:3;10776:84;:::i;:::-;10769:91;;10869:93;10958:3;10869:93;:::i;:::-;10987:1;10982:3;10978:11;10971:18;;10595:400;;;:::o;11001:366::-;11143:3;11164:67;11228:2;11223:3;11164:67;:::i;:::-;11157:74;;11240:93;11329:3;11240:93;:::i;:::-;11358:2;11353:3;11349:12;11342:19;;11001:366;;;:::o;11373:::-;11515:3;11536:67;11600:2;11595:3;11536:67;:::i;:::-;11529:74;;11612:93;11701:3;11612:93;:::i;:::-;11730:2;11725:3;11721:12;11714:19;;11373:366;;;:::o;11745:398::-;11904:3;11925:83;12006:1;12001:3;11925:83;:::i;:::-;11918:90;;12017:93;12106:3;12017:93;:::i;:::-;12135:1;12130:3;12126:11;12119:18;;11745:398;;;:::o;12149:366::-;12291:3;12312:67;12376:2;12371:3;12312:67;:::i;:::-;12305:74;;12388:93;12477:3;12388:93;:::i;:::-;12506:2;12501:3;12497:12;12490:19;;12149:366;;;:::o;12521:::-;12663:3;12684:67;12748:2;12743:3;12684:67;:::i;:::-;12677:74;;12760:93;12849:3;12760:93;:::i;:::-;12878:2;12873:3;12869:12;12862:19;;12521:366;;;:::o;12893:::-;13035:3;13056:67;13120:2;13115:3;13056:67;:::i;:::-;13049:74;;13132:93;13221:3;13132:93;:::i;:::-;13250:2;13245:3;13241:12;13234:19;;12893:366;;;:::o;13265:::-;13407:3;13428:67;13492:2;13487:3;13428:67;:::i;:::-;13421:74;;13504:93;13593:3;13504:93;:::i;:::-;13622:2;13617:3;13613:12;13606:19;;13265:366;;;:::o;13637:::-;13779:3;13800:67;13864:2;13859:3;13800:67;:::i;:::-;13793:74;;13876:93;13965:3;13876:93;:::i;:::-;13994:2;13989:3;13985:12;13978:19;;13637:366;;;:::o;14009:400::-;14169:3;14190:84;14272:1;14267:3;14190:84;:::i;:::-;14183:91;;14283:93;14372:3;14283:93;:::i;:::-;14401:1;14396:3;14392:11;14385:18;;14009:400;;;:::o;14485:697::-;14644:4;14639:3;14635:14;14731:4;14724:5;14720:16;14714:23;14750:63;14807:4;14802:3;14798:14;14784:12;14750:63;:::i;:::-;14659:164;14915:4;14908:5;14904:16;14898:23;14934:61;14989:4;14984:3;14980:14;14966:12;14934:61;:::i;:::-;14833:172;15089:4;15082:5;15078:16;15072:23;15108:57;15159:4;15154:3;15150:14;15136:12;15108:57;:::i;:::-;15015:160;14613:569;14485:697;;:::o;15188:118::-;15275:24;15293:5;15275:24;:::i;:::-;15270:3;15263:37;15188:118;;:::o;15312:105::-;15387:23;15404:5;15387:23;:::i;:::-;15382:3;15375:36;15312:105;;:::o;15423:967::-;15805:3;15827:95;15918:3;15909:6;15827:95;:::i;:::-;15820:102;;15939:148;16083:3;15939:148;:::i;:::-;15932:155;;16104:95;16195:3;16186:6;16104:95;:::i;:::-;16097:102;;16216:148;16360:3;16216:148;:::i;:::-;16209:155;;16381:3;16374:10;;15423:967;;;;;:::o;16396:379::-;16580:3;16602:147;16745:3;16602:147;:::i;:::-;16595:154;;16766:3;16759:10;;16396:379;;;:::o;16781:222::-;16874:4;16912:2;16901:9;16897:18;16889:26;;16925:71;16993:1;16982:9;16978:17;16969:6;16925:71;:::i;:::-;16781:222;;;;:::o;17009:640::-;17204:4;17242:3;17231:9;17227:19;17219:27;;17256:71;17324:1;17313:9;17309:17;17300:6;17256:71;:::i;:::-;17337:72;17405:2;17394:9;17390:18;17381:6;17337:72;:::i;:::-;17419;17487:2;17476:9;17472:18;17463:6;17419:72;:::i;:::-;17538:9;17532:4;17528:20;17523:2;17512:9;17508:18;17501:48;17566:76;17637:4;17628:6;17566:76;:::i;:::-;17558:84;;17009:640;;;;;;;:::o;17655:210::-;17742:4;17780:2;17769:9;17765:18;17757:26;;17793:65;17855:1;17844:9;17840:17;17831:6;17793:65;:::i;:::-;17655:210;;;;:::o;17871:313::-;17984:4;18022:2;18011:9;18007:18;17999:26;;18071:9;18065:4;18061:20;18057:1;18046:9;18042:17;18035:47;18099:78;18172:4;18163:6;18099:78;:::i;:::-;18091:86;;17871:313;;;;:::o;18190:419::-;18356:4;18394:2;18383:9;18379:18;18371:26;;18443:9;18437:4;18433:20;18429:1;18418:9;18414:17;18407:47;18471:131;18597:4;18471:131;:::i;:::-;18463:139;;18190:419;;;:::o;18615:::-;18781:4;18819:2;18808:9;18804:18;18796:26;;18868:9;18862:4;18858:20;18854:1;18843:9;18839:17;18832:47;18896:131;19022:4;18896:131;:::i;:::-;18888:139;;18615:419;;;:::o;19040:::-;19206:4;19244:2;19233:9;19229:18;19221:26;;19293:9;19287:4;19283:20;19279:1;19268:9;19264:17;19257:47;19321:131;19447:4;19321:131;:::i;:::-;19313:139;;19040:419;;;:::o;19465:::-;19631:4;19669:2;19658:9;19654:18;19646:26;;19718:9;19712:4;19708:20;19704:1;19693:9;19689:17;19682:47;19746:131;19872:4;19746:131;:::i;:::-;19738:139;;19465:419;;;:::o;19890:::-;20056:4;20094:2;20083:9;20079:18;20071:26;;20143:9;20137:4;20133:20;20129:1;20118:9;20114:17;20107:47;20171:131;20297:4;20171:131;:::i;:::-;20163:139;;19890:419;;;:::o;20315:::-;20481:4;20519:2;20508:9;20504:18;20496:26;;20568:9;20562:4;20558:20;20554:1;20543:9;20539:17;20532:47;20596:131;20722:4;20596:131;:::i;:::-;20588:139;;20315:419;;;:::o;20740:::-;20906:4;20944:2;20933:9;20929:18;20921:26;;20993:9;20987:4;20983:20;20979:1;20968:9;20964:17;20957:47;21021:131;21147:4;21021:131;:::i;:::-;21013:139;;20740:419;;;:::o;21165:::-;21331:4;21369:2;21358:9;21354:18;21346:26;;21418:9;21412:4;21408:20;21404:1;21393:9;21389:17;21382:47;21446:131;21572:4;21446:131;:::i;:::-;21438:139;;21165:419;;;:::o;21590:::-;21756:4;21794:2;21783:9;21779:18;21771:26;;21843:9;21837:4;21833:20;21829:1;21818:9;21814:17;21807:47;21871:131;21997:4;21871:131;:::i;:::-;21863:139;;21590:419;;;:::o;22015:::-;22181:4;22219:2;22208:9;22204:18;22196:26;;22268:9;22262:4;22258:20;22254:1;22243:9;22239:17;22232:47;22296:131;22422:4;22296:131;:::i;:::-;22288:139;;22015:419;;;:::o;22440:::-;22606:4;22644:2;22633:9;22629:18;22621:26;;22693:9;22687:4;22683:20;22679:1;22668:9;22664:17;22657:47;22721:131;22847:4;22721:131;:::i;:::-;22713:139;;22440:419;;;:::o;22865:::-;23031:4;23069:2;23058:9;23054:18;23046:26;;23118:9;23112:4;23108:20;23104:1;23093:9;23089:17;23082:47;23146:131;23272:4;23146:131;:::i;:::-;23138:139;;22865:419;;;:::o;23290:346::-;23445:4;23483:2;23472:9;23468:18;23460:26;;23496:133;23626:1;23615:9;23611:17;23602:6;23496:133;:::i;:::-;23290:346;;;;:::o;23642:222::-;23735:4;23773:2;23762:9;23758:18;23750:26;;23786:71;23854:1;23843:9;23839:17;23830:6;23786:71;:::i;:::-;23642:222;;;;:::o;23870:129::-;23904:6;23931:20;;:::i;:::-;23921:30;;23960:33;23988:4;23980:6;23960:33;:::i;:::-;23870:129;;;:::o;24005:75::-;24038:6;24071:2;24065:9;24055:19;;24005:75;:::o;24086:307::-;24147:4;24237:18;24229:6;24226:30;24223:56;;;24259:18;;:::i;:::-;24223:56;24297:29;24319:6;24297:29;:::i;:::-;24289:37;;24381:4;24375;24371:15;24363:23;;24086:307;;;:::o;24399:308::-;24461:4;24551:18;24543:6;24540:30;24537:56;;;24573:18;;:::i;:::-;24537:56;24611:29;24633:6;24611:29;:::i;:::-;24603:37;;24695:4;24689;24685:15;24677:23;;24399:308;;;:::o;24713:98::-;24764:6;24798:5;24792:12;24782:22;;24713:98;;;:::o;24817:99::-;24869:6;24903:5;24897:12;24887:22;;24817:99;;;:::o;24922:168::-;25005:11;25039:6;25034:3;25027:19;25079:4;25074:3;25070:14;25055:29;;24922:168;;;;:::o;25096:147::-;25197:11;25234:3;25219:18;;25096:147;;;;:::o;25249:169::-;25333:11;25367:6;25362:3;25355:19;25407:4;25402:3;25398:14;25383:29;;25249:169;;;;:::o;25424:148::-;25526:11;25563:3;25548:18;;25424:148;;;;:::o;25578:305::-;25618:3;25637:20;25655:1;25637:20;:::i;:::-;25632:25;;25671:20;25689:1;25671:20;:::i;:::-;25666:25;;25825:1;25757:66;25753:74;25750:1;25747:81;25744:107;;;25831:18;;:::i;:::-;25744:107;25875:1;25872;25868:9;25861:16;;25578:305;;;;:::o;25889:185::-;25929:1;25946:20;25964:1;25946:20;:::i;:::-;25941:25;;25980:20;25998:1;25980:20;:::i;:::-;25975:25;;26019:1;26009:35;;26024:18;;:::i;:::-;26009:35;26066:1;26063;26059:9;26054:14;;25889:185;;;;:::o;26080:348::-;26120:7;26143:20;26161:1;26143:20;:::i;:::-;26138:25;;26177:20;26195:1;26177:20;:::i;:::-;26172:25;;26365:1;26297:66;26293:74;26290:1;26287:81;26282:1;26275:9;26268:17;26264:105;26261:131;;;26372:18;;:::i;:::-;26261:131;26420:1;26417;26413:9;26402:20;;26080:348;;;;:::o;26434:191::-;26474:4;26494:20;26512:1;26494:20;:::i;:::-;26489:25;;26528:20;26546:1;26528:20;:::i;:::-;26523:25;;26567:1;26564;26561:8;26558:34;;;26572:18;;:::i;:::-;26558:34;26617:1;26614;26610:9;26602:17;;26434:191;;;;:::o;26631:96::-;26668:7;26697:24;26715:5;26697:24;:::i;:::-;26686:35;;26631:96;;;:::o;26733:90::-;26767:7;26810:5;26803:13;26796:21;26785:32;;26733:90;;;:::o;26829:149::-;26865:7;26905:66;26898:5;26894:78;26883:89;;26829:149;;;:::o;26984:126::-;27021:7;27061:42;27054:5;27050:54;27039:65;;26984:126;;;:::o;27116:77::-;27153:7;27182:5;27171:16;;27116:77;;;:::o;27199:101::-;27235:7;27275:18;27268:5;27264:30;27253:41;;27199:101;;;:::o;27306:154::-;27390:6;27385:3;27380;27367:30;27452:1;27443:6;27438:3;27434:16;27427:27;27306:154;;;:::o;27466:307::-;27534:1;27544:113;27558:6;27555:1;27552:13;27544:113;;;27643:1;27638:3;27634:11;27628:18;27624:1;27619:3;27615:11;27608:39;27580:2;27577:1;27573:10;27568:15;;27544:113;;;27675:6;27672:1;27669:13;27666:101;;;27755:1;27746:6;27741:3;27737:16;27730:27;27666:101;27515:258;27466:307;;;:::o;27779:320::-;27823:6;27860:1;27854:4;27850:12;27840:22;;27907:1;27901:4;27897:12;27928:18;27918:81;;27984:4;27976:6;27972:17;27962:27;;27918:81;28046:2;28038:6;28035:14;28015:18;28012:38;28009:84;;;28065:18;;:::i;:::-;28009:84;27830:269;27779:320;;;:::o;28105:281::-;28188:27;28210:4;28188:27;:::i;:::-;28180:6;28176:40;28318:6;28306:10;28303:22;28282:18;28270:10;28267:34;28264:62;28261:88;;;28329:18;;:::i;:::-;28261:88;28369:10;28365:2;28358:22;28148:238;28105:281;;:::o;28392:233::-;28431:3;28454:24;28472:5;28454:24;:::i;:::-;28445:33;;28500:66;28493:5;28490:77;28487:103;;;28570:18;;:::i;:::-;28487:103;28617:1;28610:5;28606:13;28599:20;;28392:233;;;:::o;28631:176::-;28663:1;28680:20;28698:1;28680:20;:::i;:::-;28675:25;;28714:20;28732:1;28714:20;:::i;:::-;28709:25;;28753:1;28743:35;;28758:18;;:::i;:::-;28743:35;28799:1;28796;28792:9;28787:14;;28631:176;;;;:::o;28813:180::-;28861:77;28858:1;28851:88;28958:4;28955:1;28948:15;28982:4;28979:1;28972:15;28999:180;29047:77;29044:1;29037:88;29144:4;29141:1;29134:15;29168:4;29165:1;29158:15;29185:180;29233:77;29230:1;29223:88;29330:4;29327:1;29320:15;29354:4;29351:1;29344:15;29371:180;29419:77;29416:1;29409:88;29516:4;29513:1;29506:15;29540:4;29537:1;29530:15;29557:180;29605:77;29602:1;29595:88;29702:4;29699:1;29692:15;29726:4;29723:1;29716:15;29743:117;29852:1;29849;29842:12;29866:117;29975:1;29972;29965:12;29989:117;30098:1;30095;30088:12;30112:117;30221:1;30218;30211:12;30235:102;30276:6;30327:2;30323:7;30318:2;30311:5;30307:14;30303:28;30293:38;;30235:102;;;:::o;30343:225::-;30483:34;30479:1;30471:6;30467:14;30460:58;30552:8;30547:2;30539:6;30535:15;30528:33;30343:225;:::o;30574:220::-;30714:34;30710:1;30702:6;30698:14;30691:58;30783:3;30778:2;30770:6;30766:15;30759:28;30574:220;:::o;30800:168::-;30940:20;30936:1;30928:6;30924:14;30917:44;30800:168;:::o;30974:180::-;31114:32;31110:1;31102:6;31098:14;31091:56;30974:180;:::o;31160:168::-;31300:20;31296:1;31288:6;31284:14;31277:44;31160:168;:::o;31334:155::-;31474:7;31470:1;31462:6;31458:14;31451:31;31334:155;:::o;31495:182::-;31635:34;31631:1;31623:6;31619:14;31612:58;31495:182;:::o;31683:234::-;31823:34;31819:1;31811:6;31807:14;31800:58;31892:17;31887:2;31879:6;31875:15;31868:42;31683:234;:::o;31923:114::-;;:::o;32043:166::-;32183:18;32179:1;32171:6;32167:14;32160:42;32043:166;:::o;32215:172::-;32355:24;32351:1;32343:6;32339:14;32332:48;32215:172;:::o;32393:::-;32533:24;32529:1;32521:6;32517:14;32510:48;32393:172;:::o;32571:178::-;32711:30;32707:1;32699:6;32695:14;32688:54;32571:178;:::o;32755:181::-;32895:33;32891:1;32883:6;32879:14;32872:57;32755:181;:::o;32942:151::-;33082:3;33078:1;33070:6;33066:14;33059:27;32942:151;:::o;33099:122::-;33172:24;33190:5;33172:24;:::i;:::-;33165:5;33162:35;33152:63;;33211:1;33208;33201:12;33152:63;33099:122;:::o;33227:116::-;33297:21;33312:5;33297:21;:::i;:::-;33290:5;33287:32;33277:60;;33333:1;33330;33323:12;33277:60;33227:116;:::o;33349:120::-;33421:23;33438:5;33421:23;:::i;:::-;33414:5;33411:34;33401:62;;33459:1;33456;33449:12;33401:62;33349:120;:::o;33475:122::-;33548:24;33566:5;33548:24;:::i;:::-;33541:5;33538:35;33528:63;;33587:1;33584;33577:12;33528:63;33475:122;:::o
Swarm Source
ipfs://05b909bd677f6f8ea66fe77879d408fc696b09d74c95205cd84e277f26cc088c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,963.37 | 0.000001 | $0.003963 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.