Overview
ETH Balance
0.112 ETH
Eth Value
$379.97 (@ $3,392.58/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,131 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 18806015 | 342 days ago | IN | 0 ETH | 0.00316418 | ||||
Transfer From | 16852664 | 616 days ago | IN | 0 ETH | 0.00106695 | ||||
Safe Transfer Fr... | 16721195 | 635 days ago | IN | 0 ETH | 0.00136835 | ||||
Safe Transfer Fr... | 16707286 | 637 days ago | IN | 0 ETH | 0.00115112 | ||||
Safe Transfer Fr... | 16706607 | 637 days ago | IN | 0 ETH | 0.0017676 | ||||
Set Approval For... | 16486877 | 668 days ago | IN | 0 ETH | 0.00134129 | ||||
Set Approval For... | 16410972 | 678 days ago | IN | 0 ETH | 0.00071284 | ||||
Set Approval For... | 16330480 | 689 days ago | IN | 0 ETH | 0.00082953 | ||||
Set Approval For... | 16266831 | 698 days ago | IN | 0 ETH | 0.00053926 | ||||
Set Approval For... | 16262135 | 699 days ago | IN | 0 ETH | 0.00055466 | ||||
Set Approval For... | 16251883 | 700 days ago | IN | 0 ETH | 0.0006101 | ||||
Set Approval For... | 16251201 | 700 days ago | IN | 0 ETH | 0.0006556 | ||||
Set Approval For... | 16250690 | 701 days ago | IN | 0 ETH | 0.00055361 | ||||
Set Approval For... | 16248244 | 701 days ago | IN | 0 ETH | 0.00075229 | ||||
Set Approval For... | 16246709 | 701 days ago | IN | 0 ETH | 0.00075479 | ||||
Set Approval For... | 16246522 | 701 days ago | IN | 0 ETH | 0.00057038 | ||||
Set Approval For... | 16245866 | 701 days ago | IN | 0 ETH | 0.00067623 | ||||
Set Approval For... | 16245859 | 701 days ago | IN | 0 ETH | 0.00060181 | ||||
Set Approval For... | 16245828 | 701 days ago | IN | 0 ETH | 0.00057169 | ||||
Set Approval For... | 16245506 | 701 days ago | IN | 0 ETH | 0.00063156 | ||||
Set Approval For... | 16245094 | 701 days ago | IN | 0 ETH | 0.00051837 | ||||
Set Approval For... | 16243407 | 702 days ago | IN | 0 ETH | 0.00063677 | ||||
Set Approval For... | 16243400 | 702 days ago | IN | 0 ETH | 0.00069697 | ||||
Safe Transfer Fr... | 16243305 | 702 days ago | IN | 0 ETH | 0.00088922 | ||||
Set Approval For... | 16243294 | 702 days ago | IN | 0 ETH | 0.00065417 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MiniGrandeBySSC
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-22 */ // SPDX-License-Identifier: MIT // /ReentrancyGuard.sol pragma solidity ^0.8.0; abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // /Strings.sol pragma solidity ^0.8.0; library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // /Context.sol pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // /Ownable.sol pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // /Address.sol pragma solidity ^0.8.1; library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // /IERC721Receiver.sol pragma solidity ^0.8.0; interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // /IERC165.sol pragma solidity ^0.8.0; interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } // /ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // /IERC721.sol pragma solidity ^0.8.0; 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; } // /IERC721Metadata.sol pragma solidity ^0.8.0; 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); } // /IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // /ERC721A.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 collectionSize; uint256 maxBatchSize; // 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) private _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; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @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) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : ""; } /** * @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); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @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 tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); // require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } 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); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, 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; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @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); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a 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 _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { 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("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * 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`. */ 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. * * 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` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // /MerkleProof.sol pragma solidity ^0.8.0; library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } pragma solidity ^0.8.7; contract MiniGrandeBySSC is Ownable, ERC721A, ReentrancyGuard { uint256 private _publicPrice = 0.007 ether; uint256 private _presalePrice = 0 ether; uint256 private _maxPurchaseDuringWhitelist = 1; uint256 private _maxPurchaseDuringSale = 1; uint256 private _maxPerTransaction = 1; uint256 private _maxMint = 2000; address private _team = 0x6FEf5A781A35d158096736dBc561F298ef47B86c; bytes32 public merkleRoot = 0x8daf3296866531d8a9a23e382da52d37f29af1f17e5e9ed8a403c896de82be5f; mapping(address => uint256) public presaleAddressMintCount; mapping(address => uint256) public saleAddressMintCount; uint32 public whitelistMinted = 0; uint32 private _maxWhitelistMints = 200; bool public isPaused = false; bool public isPublicMint = false; bool public isWhitelistMint = false; string private _tokenURI = "ipfs://QmZzPHpPmtBHACKpu4MQ6XH2mNXJcJgRhdv1KYpnHqQ6q9/"; constructor() ERC721A("MiniGrandeBySecretSocietyClub", "MINIBYSSC", _maxPerTransaction, _maxMint) {} function setMaxWhitelistMints (uint32 val) external onlyOwner { _maxWhitelistMints = val; } function setMaxMintPerWalletWhitelist (uint256 val) external onlyOwner { _maxPurchaseDuringWhitelist = val; } function setMaxMintPerWalletSale (uint256 val) external onlyOwner { _maxPurchaseDuringSale = val; } function checkIsPublicMint () external view returns (bool) { return isPublicMint; } function pause() external onlyOwner { isPaused = true; } function unpause() external onlyOwner { isPaused = false; } function setTeam(address team) external onlyOwner { _team = team; } function getPublicPrice() external view returns(uint256) { return _publicPrice; } function setPublicMint (bool value) external onlyOwner { isPublicMint = value; } function setWhitelistMint (bool value) external onlyOwner { isWhitelistMint = value; } function setPresalePrice (uint256 price) external onlyOwner { _presalePrice = price; } function setPublicPrice (uint256 price) external onlyOwner { _publicPrice = price; } function setCollectionSize (uint256 size) external onlyOwner { collectionSize = size; _maxMint = size; } modifier mintGuard(uint256 tokenCount) { require(!isPaused, "Paused!"); require(tokenCount > 0 && tokenCount <= _maxPerTransaction, "Max one per transaction"); require(msg.sender == tx.origin, "Sender not origin"); // Price check if (isPublicMint) { require(_publicPrice * tokenCount <= msg.value, "Insufficient funds"); } else { require(_presalePrice * tokenCount <= msg.value, "Insufficient funds"); } require(totalSupply() + tokenCount <= _maxMint+1, "Sold out!"); _; } function mint(uint256 amount) external payable mintGuard(amount) { require(isPublicMint, "Sale has not started!"); require(saleAddressMintCount[msg.sender] + amount <= _maxPurchaseDuringSale, "Only one NFT can be minted"); saleAddressMintCount[msg.sender] += amount; _safeMint(msg.sender, amount); } function mintPresale(bytes32[] calldata proof, uint256 amount) external payable mintGuard(amount) { require(MerkleProof.verify(proof, merkleRoot, keccak256(abi.encodePacked(msg.sender))), "You're not on the whitelist"); require(isWhitelistMint, "You're on the whitelist but mint has not started!!"); require(presaleAddressMintCount[msg.sender] + amount <= _maxPurchaseDuringWhitelist, "Only one NFT can be minted"); presaleAddressMintCount[msg.sender] += amount; require(whitelistMinted < _maxWhitelistMints, "All whitelist mints have been claimed!"); whitelistMinted += 1; _safeMint(msg.sender, amount); } function setMaxBatchSize (uint256 val) external onlyOwner { maxBatchSize = val; _maxPerTransaction = val; } function cashout() external onlyOwner { payable(_team).transfer(address(this).balance); } function setCashout(address addr) external onlyOwner returns(address) { _team = addr; return addr; } function devMint(uint32 qty) external onlyOwner { _safeMint(msg.sender, qty); } function setMerkleRoot(bytes32 root) external onlyOwner { merkleRoot = root; } function setMaxMint(uint256 maxMint) external onlyOwner { _maxMint = maxMint; } function setBaseURI(string calldata baseURI) external onlyOwner { _tokenURI = baseURI; } function _baseURI() internal view virtual override returns (string memory) { return _tokenURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":[{"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":[],"name":"cashout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkIsPublicMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"qty","type":"uint32"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPublicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelistMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleAddressMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"saleAddressMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"address","name":"addr","type":"address"}],"name":"setCashout","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"size","type":"uint256"}],"name":"setCollectionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMaxBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMaxMintPerWalletSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMaxMintPerWalletWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"val","type":"uint32"}],"name":"setMaxWhitelistMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPresalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"team","type":"address"}],"name":"setTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setWhitelistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistMinted","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260006001556000600a556618de76816d8000600c556000600d556001600e556001600f5560016010556107d0601155736fef5a781a35d158096736dbc561f298ef47b86c601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f8daf3296866531d8a9a23e382da52d37f29af1f17e5e9ed8a403c896de82be5f60001b6013556000601660006101000a81548163ffffffff021916908363ffffffff16021790555060c8601660046101000a81548163ffffffff021916908363ffffffff1602179055506000601660086101000a81548160ff0219169083151502179055506000601660096101000a81548160ff02191690831515021790555060006016600a6101000a81548160ff02191690831515021790555060405180606001604052806036815260200162006222603691396017908051906020019062000175929190620003c0565b503480156200018357600080fd5b506040518060400160405280601d81526020017f4d696e694772616e64654279536563726574536f6369657479436c75620000008152506040518060400160405280600981526020017f4d494e4942595353430000000000000000000000000000000000000000000000815250601054601154620002166200020a620002f460201b60201c565b620002fc60201b60201c565b600081116200025c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025390620004e0565b60405180910390fd5b60008211620002a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200029990620004be565b60405180910390fd5b8360049080519060200190620002ba929190620003c0565b508260059080519060200190620002d3929190620003c0565b508160038190555080600281905550505050506001600b8190555062000616565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003ce9062000513565b90600052602060002090601f016020900481019282620003f257600085556200043e565b82601f106200040d57805160ff19168380011785556200043e565b828001600101855582156200043e579182015b828111156200043d57825182559160200191906001019062000420565b5b5090506200044d919062000451565b5090565b5b808211156200046c57600081600090555060010162000452565b5090565b60006200047f60278362000502565b91506200048c8262000578565b604082019050919050565b6000620004a6602e8362000502565b9150620004b382620005c7565b604082019050919050565b60006020820190508181036000830152620004d98162000470565b9050919050565b60006020820190508181036000830152620004fb8162000497565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200052c57607f821691505b6020821081141562000543576200054262000549565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b615bfc80620006266000396000f3fe6080604052600436106102ae5760003560e01c8063763c0d6411610175578063ad7f1ea1116100dc578063c70a74af11610095578063c87b56dd1161006f578063c87b56dd14610a50578063d7224ba014610a8d578063e985e9c514610ab8578063f2fde38b14610af5576102ae565b8063c70a74af146109ab578063c754da33146109e8578063c75a20b314610a13576102ae565b8063ad7f1ea1146108be578063b187bd26146108da578063b3c11d3a14610905578063b88d4fde1461092e578063be0d2a6814610957578063c627525514610982576102ae565b80638da5cb5b1161012e5780638da5cb5b146107d1578063900f187a146107fc57806395d89b4114610825578063a0712d6814610850578063a22cb4651461086c578063aca8ffe714610895576102ae565b8063763c0d64146106e95780637cb64759146107125780637db5a6361461073b57806384054d3d146107785780638456cb591461078f5780638990694f146107a6576102ae565b80633549345e1161021957806355f804b3116101d257806355f804b3146105dd5780635d56d55e146106065780636352211e1461062f578063689f3fe41461066c57806370a0823114610695578063715018a6146106d2576102ae565b80633549345e146104e3578063363e86fe1461050c5780633f4ba83a1461053757806342842e0e1461054e5780634f6ccce714610577578063547520fe146105b4576102ae565b806318160ddd1161026b57806318160ddd146103d357806323b872dd146103fe5780632b26a6bf146104275780632eb4a7ab146104505780632f745c591461047b5780633057931f146104b8576102ae565b806301ffc9a7146102b357806306fdde03146102f0578063081812fc1461031b578063095cf5c614610358578063095ea7b3146103815780630e2d56cf146103aa575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d591906142d6565b610b1e565b6040516102e791906149ea565b60405180910390f35b3480156102fc57600080fd5b50610305610c68565b6040516103129190614a20565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d919061437d565b610cfa565b60405161034f9190614983565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190614059565b610d7f565b005b34801561038d57600080fd5b506103a860048036038101906103a391906141dc565b610e3f565b005b3480156103b657600080fd5b506103d160048036038101906103cc919061427c565b610f58565b005b3480156103df57600080fd5b506103e8610ff1565b6040516103f59190614de2565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906140c6565b610ffb565b005b34801561043357600080fd5b5061044e6004803603810190610449919061437d565b61100b565b005b34801561045c57600080fd5b50610465611098565b6040516104729190614a05565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906141dc565b61109e565b6040516104af9190614de2565b60405180910390f35b3480156104c457600080fd5b506104cd61129c565b6040516104da91906149ea565b60405180910390f35b3480156104ef57600080fd5b5061050a6004803603810190610505919061437d565b6112af565b005b34801561051857600080fd5b50610521611335565b60405161052e9190614de2565b60405180910390f35b34801561054357600080fd5b5061054c61133f565b005b34801561055a57600080fd5b50610575600480360381019061057091906140c6565b6113d8565b005b34801561058357600080fd5b5061059e6004803603810190610599919061437d565b6113f8565b6040516105ab9190614de2565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d6919061437d565b61144b565b005b3480156105e957600080fd5b5061060460048036038101906105ff9190614330565b6114d1565b005b34801561061257600080fd5b5061062d6004803603810190610628919061427c565b611563565b005b34801561063b57600080fd5b506106566004803603810190610651919061437d565b6115fc565b6040516106639190614983565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e919061437d565b611612565b005b3480156106a157600080fd5b506106bc60048036038101906106b79190614059565b611698565b6040516106c99190614de2565b60405180910390f35b3480156106de57600080fd5b506106e7611781565b005b3480156106f557600080fd5b50610710600480360381019061070b91906143aa565b611809565b005b34801561071e57600080fd5b50610739600480360381019061073491906142a9565b6118a9565b005b34801561074757600080fd5b50610762600480360381019061075d9190614059565b61192f565b60405161076f9190614de2565b60405180910390f35b34801561078457600080fd5b5061078d611947565b005b34801561079b57600080fd5b506107a4611a2e565b005b3480156107b257600080fd5b506107bb611ac7565b6040516107c89190614dfd565b60405180910390f35b3480156107dd57600080fd5b506107e6611add565b6040516107f39190614983565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e919061437d565b611b06565b005b34801561083157600080fd5b5061083a611b8c565b6040516108479190614a20565b60405180910390f35b61086a6004803603810190610865919061437d565b611c1e565b005b34801561087857600080fd5b50610893600480360381019061088e919061419c565b611f8e565b005b3480156108a157600080fd5b506108bc60048036038101906108b7919061437d565b61210f565b005b6108d860048036038101906108d3919061421c565b61219c565b005b3480156108e657600080fd5b506108ef612673565b6040516108fc91906149ea565b60405180910390f35b34801561091157600080fd5b5061092c600480360381019061092791906143aa565b612686565b005b34801561093a57600080fd5b5061095560048036038101906109509190614119565b612715565b005b34801561096357600080fd5b5061096c612771565b60405161097991906149ea565b60405180910390f35b34801561098e57600080fd5b506109a960048036038101906109a4919061437d565b612788565b005b3480156109b757600080fd5b506109d260048036038101906109cd9190614059565b61280e565b6040516109df9190614de2565b60405180910390f35b3480156109f457600080fd5b506109fd612826565b604051610a0a91906149ea565b60405180910390f35b348015610a1f57600080fd5b50610a3a6004803603810190610a359190614059565b612839565b604051610a479190614983565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a72919061437d565b612900565b604051610a849190614a20565b60405180910390f35b348015610a9957600080fd5b50610aa26129a7565b604051610aaf9190614de2565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190614086565b6129ad565b604051610aec91906149ea565b60405180910390f35b348015610b0157600080fd5b50610b1c6004803603810190610b179190614059565b612a41565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610be957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c5157507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c615750610c6082612b39565b5b9050919050565b606060048054610c7790615190565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca390615190565b8015610cf05780601f10610cc557610100808354040283529160200191610cf0565b820191906000526020600020905b815481529060010190602001808311610cd357829003601f168201915b5050505050905090565b6000610d0582612ba3565b610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614da2565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610d87612bb1565b73ffffffffffffffffffffffffffffffffffffffff16610da5611add565b73ffffffffffffffffffffffffffffffffffffffff1614610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df290614c22565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610e4a826115fc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290614cc2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610eda612bb1565b73ffffffffffffffffffffffffffffffffffffffff161480610f095750610f0881610f03612bb1565b6129ad565b5b610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90614ba2565b60405180910390fd5b610f53838383612bb9565b505050565b610f60612bb1565b73ffffffffffffffffffffffffffffffffffffffff16610f7e611add565b73ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90614c22565b60405180910390fd5b80601660096101000a81548160ff02191690831515021790555050565b6000600154905090565b611006838383612c6b565b505050565b611013612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611031611add565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90614c22565b60405180910390fd5b806003819055508060108190555050565b60135481565b60006110a983611698565b82106110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190614a42565b60405180910390fd5b60006110f4610ff1565b905060008060005b8381101561125a576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111ee57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112465786841415611237578195505050505050611296565b8380611242906151f3565b9450505b508080611252906151f3565b9150506110fc565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90614d42565b60405180910390fd5b92915050565b601660099054906101000a900460ff1681565b6112b7612bb1565b73ffffffffffffffffffffffffffffffffffffffff166112d5611add565b73ffffffffffffffffffffffffffffffffffffffff161461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290614c22565b60405180910390fd5b80600d8190555050565b6000600c54905090565b611347612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611365611add565b73ffffffffffffffffffffffffffffffffffffffff16146113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290614c22565b60405180910390fd5b6000601660086101000a81548160ff021916908315150217905550565b6113f383838360405180602001604052806000815250612715565b505050565b6000611402610ff1565b8210611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a90614b02565b60405180910390fd5b819050919050565b611453612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611471611add565b73ffffffffffffffffffffffffffffffffffffffff16146114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be90614c22565b60405180910390fd5b8060118190555050565b6114d9612bb1565b73ffffffffffffffffffffffffffffffffffffffff166114f7611add565b73ffffffffffffffffffffffffffffffffffffffff161461154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154490614c22565b60405180910390fd5b81816017919061155e929190613dcd565b505050565b61156b612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611589611add565b73ffffffffffffffffffffffffffffffffffffffff16146115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690614c22565b60405180910390fd5b806016600a6101000a81548160ff02191690831515021790555050565b600061160782613224565b600001519050919050565b61161a612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611638611add565b73ffffffffffffffffffffffffffffffffffffffff161461168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168590614c22565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614be2565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611789612bb1565b73ffffffffffffffffffffffffffffffffffffffff166117a7611add565b73ffffffffffffffffffffffffffffffffffffffff16146117fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f490614c22565b60405180910390fd5b61180760006133eb565b565b611811612bb1565b73ffffffffffffffffffffffffffffffffffffffff1661182f611add565b73ffffffffffffffffffffffffffffffffffffffff1614611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90614c22565b60405180910390fd5b80601660046101000a81548163ffffffff021916908363ffffffff16021790555050565b6118b1612bb1565b73ffffffffffffffffffffffffffffffffffffffff166118cf611add565b73ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90614c22565b60405180910390fd5b8060138190555050565b60146020528060005260406000206000915090505481565b61194f612bb1565b73ffffffffffffffffffffffffffffffffffffffff1661196d611add565b73ffffffffffffffffffffffffffffffffffffffff16146119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba90614c22565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611a2b573d6000803e3d6000fd5b50565b611a36612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611a54611add565b73ffffffffffffffffffffffffffffffffffffffff1614611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa190614c22565b60405180910390fd5b6001601660086101000a81548160ff021916908315150217905550565b601660009054906101000a900463ffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b0e612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611b2c611add565b73ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990614c22565b60405180910390fd5b80600f8190555050565b606060058054611b9b90615190565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc790615190565b8015611c145780601f10611be957610100808354040283529160200191611c14565b820191906000526020600020905b815481529060010190602001808311611bf757829003601f168201915b5050505050905090565b80601660089054906101000a900460ff1615611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690614b62565b60405180910390fd5b600081118015611c8157506010548111155b611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790614d62565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590614ae2565b60405180910390fd5b601660099054906101000a900460ff1615611d98573481600c54611d529190614fb8565b1115611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614b82565b60405180910390fd5b611de9565b3481600d54611da79190614fb8565b1115611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90614b82565b60405180910390fd5b5b6001601154611df89190614ef7565b81611e01610ff1565b611e0b9190614ef7565b1115611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4390614dc2565b60405180910390fd5b601660099054906101000a900460ff16611e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9290614bc2565b60405180910390fd5b600f5482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ee99190614ef7565b1115611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2190614a62565b60405180910390fd5b81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f799190614ef7565b92505081905550611f8a33836134af565b5050565b611f96612bb1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90614c62565b60405180910390fd5b8060096000612011612bb1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120be612bb1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161210391906149ea565b60405180910390a35050565b612117612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612135611add565b73ffffffffffffffffffffffffffffffffffffffff161461218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290614c22565b60405180910390fd5b806002819055508060118190555050565b80601660089054906101000a900460ff16156121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e490614b62565b60405180910390fd5b6000811180156121ff57506010548111155b61223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590614d62565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a390614ae2565b60405180910390fd5b601660099054906101000a900460ff1615612316573481600c546122d09190614fb8565b1115612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614b82565b60405180910390fd5b612367565b3481600d546123259190614fb8565b1115612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d90614b82565b60405180910390fd5b5b60016011546123769190614ef7565b8161237f610ff1565b6123899190614ef7565b11156123ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c190614dc2565b60405180910390fd5b61243e848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060135433604051602001612423919061490d565b604051602081830303815290604052805190602001206134cd565b61247d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247490614ac2565b60405180910390fd5b6016600a9054906101000a900460ff166124cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c390614ca2565b60405180910390fd5b600e5482601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251a9190614ef7565b111561255b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255290614a62565b60405180910390fd5b81601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125aa9190614ef7565b92505081905550601660049054906101000a900463ffffffff1663ffffffff16601660009054906101000a900463ffffffff1663ffffffff1610612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614b42565b60405180910390fd5b6001601660008282829054906101000a900463ffffffff166126459190614f4d565b92506101000a81548163ffffffff021916908363ffffffff16021790555061266d33836134af565b50505050565b601660089054906101000a900460ff1681565b61268e612bb1565b73ffffffffffffffffffffffffffffffffffffffff166126ac611add565b73ffffffffffffffffffffffffffffffffffffffff1614612702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f990614c22565b60405180910390fd5b612712338263ffffffff166134af565b50565b612720848484612c6b565b61272c848484846134e4565b61276b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276290614ce2565b60405180910390fd5b50505050565b6000601660099054906101000a900460ff16905090565b612790612bb1565b73ffffffffffffffffffffffffffffffffffffffff166127ae611add565b73ffffffffffffffffffffffffffffffffffffffff1614612804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb90614c22565b60405180910390fd5b80600c8190555050565b60156020528060005260406000206000915090505481565b6016600a9054906101000a900460ff1681565b6000612843612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612861611add565b73ffffffffffffffffffffffffffffffffffffffff16146128b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ae90614c22565b60405180910390fd5b81601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550819050919050565b606061290b82612ba3565b61294a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294190614c42565b60405180910390fd5b600061295461367b565b90506000815111612974576040518060200160405280600081525061299f565b8061297e8461370d565b60405160200161298f929190614954565b6040516020818303038152906040525b915050919050565b600a5481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612a49612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612a67611add565b73ffffffffffffffffffffffffffffffffffffffff1614612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab490614c22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2490614a82565b60405180910390fd5b612b36816133eb565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612c7682613224565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612c9d612bb1565b73ffffffffffffffffffffffffffffffffffffffff161480612cf95750612cc2612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612ce184610cfa565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d155750612d148260000151612d0f612bb1565b6129ad565b5b905080612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e90614c82565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc090614c02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3090614b22565b60405180910390fd5b612e46858585600161386e565b612e566000848460000151612bb9565b6001600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612ec49190615012565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612f689190614eb1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461306e9190614ef7565b9050600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156131b4576130e481612ba3565b156131b3576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506006600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461321c8686866001613874565b505050505050565b61322c613e53565b61323582612ba3565b613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614aa2565b60405180910390fd5b6000600354831061329c5760016003548461328f9190615046565b6132999190614ef7565b90505b60008390505b8181106133aa576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613396578093505050506133e6565b5080806133a290615166565b9150506132a2565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dd90614d82565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6134c982826040518060200160405280600081525061387a565b5050565b6000826134da8584613cf7565b1490509392505050565b60006135058473ffffffffffffffffffffffffffffffffffffffff16613daa565b1561366e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261352e612bb1565b8786866040518563ffffffff1660e01b8152600401613550949392919061499e565b602060405180830381600087803b15801561356a57600080fd5b505af192505050801561359b57506040513d601f19601f820116820180604052508101906135989190614303565b60015b61361e573d80600081146135cb576040519150601f19603f3d011682016040523d82523d6000602084013e6135d0565b606091505b50600081511415613616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360d90614ce2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613673565b600190505b949350505050565b60606017805461368a90615190565b80601f01602080910402602001604051908101604052809291908181526020018280546136b690615190565b80156137035780601f106136d857610100808354040283529160200191613703565b820191906000526020600020905b8154815290600101906020018083116136e657829003601f168201915b5050505050905090565b60606000821415613755576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613869565b600082905060005b60008214613787578080613770906151f3565b915050600a826137809190614f87565b915061375d565b60008167ffffffffffffffff8111156137a3576137a2615357565b5b6040519080825280601f01601f1916602001820160405280156137d55781602001600182028036833780820191505090505b5090505b60008514613862576001826137ee9190615046565b9150600a856137fd919061526a565b60306138099190614ef7565b60f81b81838151811061381f5761381e615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561385b9190614f87565b94506137d9565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156138f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e890614d22565b60405180910390fd5b6138fa81612ba3565b1561393a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393190614d02565b60405180910390fd5b613947600085838661386e565b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151613a449190614eb1565b6fffffffffffffffffffffffffffffffff168152602001858360200151613a6b9190614eb1565b6fffffffffffffffffffffffffffffffff16815250600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613cda57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613c7a60008884886134e4565b613cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb090614ce2565b60405180910390fd5b8180613cc4906151f3565b9250508080613cd2906151f3565b915050613c09565b5080600181905550613cef6000878588613874565b505050505050565b60008082905060005b8451811015613d9f576000858281518110613d1e57613d1d615328565b5b60200260200101519050808311613d5f578281604051602001613d42929190614928565b604051602081830303815290604052805190602001209250613d8b565b8083604051602001613d72929190614928565b6040516020818303038152906040528051906020012092505b508080613d97906151f3565b915050613d00565b508091505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613dd990615190565b90600052602060002090601f016020900481019282613dfb5760008555613e42565b82601f10613e1457803560ff1916838001178555613e42565b82800160010185558215613e42579182015b82811115613e41578235825591602001919060010190613e26565b5b509050613e4f9190613e8d565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613ea6576000816000905550600101613e8e565b5090565b6000613ebd613eb884614e3d565b614e18565b905082815260208101848484011115613ed957613ed8615395565b5b613ee4848285615124565b509392505050565b600081359050613efb81615b3c565b92915050565b60008083601f840112613f1757613f1661538b565b5b8235905067ffffffffffffffff811115613f3457613f33615386565b5b602083019150836020820283011115613f5057613f4f615390565b5b9250929050565b600081359050613f6681615b53565b92915050565b600081359050613f7b81615b6a565b92915050565b600081359050613f9081615b81565b92915050565b600081519050613fa581615b81565b92915050565b600082601f830112613fc057613fbf61538b565b5b8135613fd0848260208601613eaa565b91505092915050565b60008083601f840112613fef57613fee61538b565b5b8235905067ffffffffffffffff81111561400c5761400b615386565b5b60208301915083600182028301111561402857614027615390565b5b9250929050565b60008135905061403e81615b98565b92915050565b60008135905061405381615baf565b92915050565b60006020828403121561406f5761406e61539f565b5b600061407d84828501613eec565b91505092915050565b6000806040838503121561409d5761409c61539f565b5b60006140ab85828601613eec565b92505060206140bc85828601613eec565b9150509250929050565b6000806000606084860312156140df576140de61539f565b5b60006140ed86828701613eec565b93505060206140fe86828701613eec565b925050604061410f8682870161402f565b9150509250925092565b600080600080608085870312156141335761413261539f565b5b600061414187828801613eec565b945050602061415287828801613eec565b93505060406141638782880161402f565b925050606085013567ffffffffffffffff8111156141845761418361539a565b5b61419087828801613fab565b91505092959194509250565b600080604083850312156141b3576141b261539f565b5b60006141c185828601613eec565b92505060206141d285828601613f57565b9150509250929050565b600080604083850312156141f3576141f261539f565b5b600061420185828601613eec565b92505060206142128582860161402f565b9150509250929050565b6000806000604084860312156142355761423461539f565b5b600084013567ffffffffffffffff8111156142535761425261539a565b5b61425f86828701613f01565b935093505060206142728682870161402f565b9150509250925092565b6000602082840312156142925761429161539f565b5b60006142a084828501613f57565b91505092915050565b6000602082840312156142bf576142be61539f565b5b60006142cd84828501613f6c565b91505092915050565b6000602082840312156142ec576142eb61539f565b5b60006142fa84828501613f81565b91505092915050565b6000602082840312156143195761431861539f565b5b600061432784828501613f96565b91505092915050565b600080602083850312156143475761434661539f565b5b600083013567ffffffffffffffff8111156143655761436461539a565b5b61437185828601613fd9565b92509250509250929050565b6000602082840312156143935761439261539f565b5b60006143a18482850161402f565b91505092915050565b6000602082840312156143c0576143bf61539f565b5b60006143ce84828501614044565b91505092915050565b6143e08161507a565b82525050565b6143f76143f28261507a565b61523c565b82525050565b6144068161508c565b82525050565b61441581615098565b82525050565b61442c61442782615098565b61524e565b82525050565b600061443d82614e6e565b6144478185614e84565b9350614457818560208601615133565b614460816153a4565b840191505092915050565b600061447682614e79565b6144808185614e95565b9350614490818560208601615133565b614499816153a4565b840191505092915050565b60006144af82614e79565b6144b98185614ea6565b93506144c9818560208601615133565b80840191505092915050565b60006144e2602283614e95565b91506144ed826153c2565b604082019050919050565b6000614505601a83614e95565b915061451082615411565b602082019050919050565b6000614528602683614e95565b91506145338261543a565b604082019050919050565b600061454b602a83614e95565b915061455682615489565b604082019050919050565b600061456e601b83614e95565b9150614579826154d8565b602082019050919050565b6000614591601183614e95565b915061459c82615501565b602082019050919050565b60006145b4602383614e95565b91506145bf8261552a565b604082019050919050565b60006145d7602583614e95565b91506145e282615579565b604082019050919050565b60006145fa602683614e95565b9150614605826155c8565b604082019050919050565b600061461d600783614e95565b915061462882615617565b602082019050919050565b6000614640601283614e95565b915061464b82615640565b602082019050919050565b6000614663603983614e95565b915061466e82615669565b604082019050919050565b6000614686601583614e95565b9150614691826156b8565b602082019050919050565b60006146a9602b83614e95565b91506146b4826156e1565b604082019050919050565b60006146cc602683614e95565b91506146d782615730565b604082019050919050565b60006146ef600583614ea6565b91506146fa8261577f565b600582019050919050565b6000614712602083614e95565b915061471d826157a8565b602082019050919050565b6000614735602f83614e95565b9150614740826157d1565b604082019050919050565b6000614758601a83614e95565b915061476382615820565b602082019050919050565b600061477b603283614e95565b915061478682615849565b604082019050919050565b600061479e603283614e95565b91506147a982615898565b604082019050919050565b60006147c1602283614e95565b91506147cc826158e7565b604082019050919050565b60006147e4603383614e95565b91506147ef82615936565b604082019050919050565b6000614807601d83614e95565b915061481282615985565b602082019050919050565b600061482a602183614e95565b9150614835826159ae565b604082019050919050565b600061484d602e83614e95565b9150614858826159fd565b604082019050919050565b6000614870601783614e95565b915061487b82615a4c565b602082019050919050565b6000614893602f83614e95565b915061489e82615a75565b604082019050919050565b60006148b6602d83614e95565b91506148c182615ac4565b604082019050919050565b60006148d9600983614e95565b91506148e482615b13565b602082019050919050565b6148f88161510a565b82525050565b61490781615114565b82525050565b600061491982846143e6565b60148201915081905092915050565b6000614934828561441b565b602082019150614944828461441b565b6020820191508190509392505050565b600061496082856144a4565b915061496c82846144a4565b9150614977826146e2565b91508190509392505050565b600060208201905061499860008301846143d7565b92915050565b60006080820190506149b360008301876143d7565b6149c060208301866143d7565b6149cd60408301856148ef565b81810360608301526149df8184614432565b905095945050505050565b60006020820190506149ff60008301846143fd565b92915050565b6000602082019050614a1a600083018461440c565b92915050565b60006020820190508181036000830152614a3a818461446b565b905092915050565b60006020820190508181036000830152614a5b816144d5565b9050919050565b60006020820190508181036000830152614a7b816144f8565b9050919050565b60006020820190508181036000830152614a9b8161451b565b9050919050565b60006020820190508181036000830152614abb8161453e565b9050919050565b60006020820190508181036000830152614adb81614561565b9050919050565b60006020820190508181036000830152614afb81614584565b9050919050565b60006020820190508181036000830152614b1b816145a7565b9050919050565b60006020820190508181036000830152614b3b816145ca565b9050919050565b60006020820190508181036000830152614b5b816145ed565b9050919050565b60006020820190508181036000830152614b7b81614610565b9050919050565b60006020820190508181036000830152614b9b81614633565b9050919050565b60006020820190508181036000830152614bbb81614656565b9050919050565b60006020820190508181036000830152614bdb81614679565b9050919050565b60006020820190508181036000830152614bfb8161469c565b9050919050565b60006020820190508181036000830152614c1b816146bf565b9050919050565b60006020820190508181036000830152614c3b81614705565b9050919050565b60006020820190508181036000830152614c5b81614728565b9050919050565b60006020820190508181036000830152614c7b8161474b565b9050919050565b60006020820190508181036000830152614c9b8161476e565b9050919050565b60006020820190508181036000830152614cbb81614791565b9050919050565b60006020820190508181036000830152614cdb816147b4565b9050919050565b60006020820190508181036000830152614cfb816147d7565b9050919050565b60006020820190508181036000830152614d1b816147fa565b9050919050565b60006020820190508181036000830152614d3b8161481d565b9050919050565b60006020820190508181036000830152614d5b81614840565b9050919050565b60006020820190508181036000830152614d7b81614863565b9050919050565b60006020820190508181036000830152614d9b81614886565b9050919050565b60006020820190508181036000830152614dbb816148a9565b9050919050565b60006020820190508181036000830152614ddb816148cc565b9050919050565b6000602082019050614df760008301846148ef565b92915050565b6000602082019050614e1260008301846148fe565b92915050565b6000614e22614e33565b9050614e2e82826151c2565b919050565b6000604051905090565b600067ffffffffffffffff821115614e5857614e57615357565b5b614e61826153a4565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ebc826150ce565b9150614ec7836150ce565b9250826fffffffffffffffffffffffffffffffff03821115614eec57614eeb61529b565b5b828201905092915050565b6000614f028261510a565b9150614f0d8361510a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f4257614f4161529b565b5b828201905092915050565b6000614f5882615114565b9150614f6383615114565b92508263ffffffff03821115614f7c57614f7b61529b565b5b828201905092915050565b6000614f928261510a565b9150614f9d8361510a565b925082614fad57614fac6152ca565b5b828204905092915050565b6000614fc38261510a565b9150614fce8361510a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150075761500661529b565b5b828202905092915050565b600061501d826150ce565b9150615028836150ce565b92508282101561503b5761503a61529b565b5b828203905092915050565b60006150518261510a565b915061505c8361510a565b92508282101561506f5761506e61529b565b5b828203905092915050565b6000615085826150ea565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b83811015615151578082015181840152602081019050615136565b83811115615160576000848401525b50505050565b60006151718261510a565b915060008214156151855761518461529b565b5b600182039050919050565b600060028204905060018216806151a857607f821691505b602082108114156151bc576151bb6152f9565b5b50919050565b6151cb826153a4565b810181811067ffffffffffffffff821117156151ea576151e9615357565b5b80604052505050565b60006151fe8261510a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152315761523061529b565b5b600182019050919050565b600061524782615258565b9050919050565b6000819050919050565b6000615263826153b5565b9050919050565b60006152758261510a565b91506152808361510a565b9250826152905761528f6152ca565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f6e65204e46542063616e206265206d696e746564000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f596f75277265206e6f74206f6e207468652077686974656c6973740000000000600082015250565b7f53656e646572206e6f74206f726967696e000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416c6c2077686974656c697374206d696e74732068617665206265656e20636c60008201527f61696d6564210000000000000000000000000000000000000000000000000000602082015250565b7f5061757365642100000000000000000000000000000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f53616c6520686173206e6f742073746172746564210000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f596f75277265206f6e207468652077686974656c69737420627574206d696e7460008201527f20686173206e6f74207374617274656421210000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4d6178206f6e6520706572207472616e73616374696f6e000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b615b458161507a565b8114615b5057600080fd5b50565b615b5c8161508c565b8114615b6757600080fd5b50565b615b7381615098565b8114615b7e57600080fd5b50565b615b8a816150a2565b8114615b9557600080fd5b50565b615ba18161510a565b8114615bac57600080fd5b50565b615bb881615114565b8114615bc357600080fd5b5056fea264697066735822122025a494d1e252311084d2adaddb82d503631951150c705051e29cae584b7493ba64736f6c63430008070033697066733a2f2f516d5a7a504870506d74424841434b7075344d51365848326d4e584a634a6752686476314b59706e4871513671392f
Deployed Bytecode
0x6080604052600436106102ae5760003560e01c8063763c0d6411610175578063ad7f1ea1116100dc578063c70a74af11610095578063c87b56dd1161006f578063c87b56dd14610a50578063d7224ba014610a8d578063e985e9c514610ab8578063f2fde38b14610af5576102ae565b8063c70a74af146109ab578063c754da33146109e8578063c75a20b314610a13576102ae565b8063ad7f1ea1146108be578063b187bd26146108da578063b3c11d3a14610905578063b88d4fde1461092e578063be0d2a6814610957578063c627525514610982576102ae565b80638da5cb5b1161012e5780638da5cb5b146107d1578063900f187a146107fc57806395d89b4114610825578063a0712d6814610850578063a22cb4651461086c578063aca8ffe714610895576102ae565b8063763c0d64146106e95780637cb64759146107125780637db5a6361461073b57806384054d3d146107785780638456cb591461078f5780638990694f146107a6576102ae565b80633549345e1161021957806355f804b3116101d257806355f804b3146105dd5780635d56d55e146106065780636352211e1461062f578063689f3fe41461066c57806370a0823114610695578063715018a6146106d2576102ae565b80633549345e146104e3578063363e86fe1461050c5780633f4ba83a1461053757806342842e0e1461054e5780634f6ccce714610577578063547520fe146105b4576102ae565b806318160ddd1161026b57806318160ddd146103d357806323b872dd146103fe5780632b26a6bf146104275780632eb4a7ab146104505780632f745c591461047b5780633057931f146104b8576102ae565b806301ffc9a7146102b357806306fdde03146102f0578063081812fc1461031b578063095cf5c614610358578063095ea7b3146103815780630e2d56cf146103aa575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d591906142d6565b610b1e565b6040516102e791906149ea565b60405180910390f35b3480156102fc57600080fd5b50610305610c68565b6040516103129190614a20565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d919061437d565b610cfa565b60405161034f9190614983565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190614059565b610d7f565b005b34801561038d57600080fd5b506103a860048036038101906103a391906141dc565b610e3f565b005b3480156103b657600080fd5b506103d160048036038101906103cc919061427c565b610f58565b005b3480156103df57600080fd5b506103e8610ff1565b6040516103f59190614de2565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906140c6565b610ffb565b005b34801561043357600080fd5b5061044e6004803603810190610449919061437d565b61100b565b005b34801561045c57600080fd5b50610465611098565b6040516104729190614a05565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906141dc565b61109e565b6040516104af9190614de2565b60405180910390f35b3480156104c457600080fd5b506104cd61129c565b6040516104da91906149ea565b60405180910390f35b3480156104ef57600080fd5b5061050a6004803603810190610505919061437d565b6112af565b005b34801561051857600080fd5b50610521611335565b60405161052e9190614de2565b60405180910390f35b34801561054357600080fd5b5061054c61133f565b005b34801561055a57600080fd5b50610575600480360381019061057091906140c6565b6113d8565b005b34801561058357600080fd5b5061059e6004803603810190610599919061437d565b6113f8565b6040516105ab9190614de2565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d6919061437d565b61144b565b005b3480156105e957600080fd5b5061060460048036038101906105ff9190614330565b6114d1565b005b34801561061257600080fd5b5061062d6004803603810190610628919061427c565b611563565b005b34801561063b57600080fd5b506106566004803603810190610651919061437d565b6115fc565b6040516106639190614983565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e919061437d565b611612565b005b3480156106a157600080fd5b506106bc60048036038101906106b79190614059565b611698565b6040516106c99190614de2565b60405180910390f35b3480156106de57600080fd5b506106e7611781565b005b3480156106f557600080fd5b50610710600480360381019061070b91906143aa565b611809565b005b34801561071e57600080fd5b50610739600480360381019061073491906142a9565b6118a9565b005b34801561074757600080fd5b50610762600480360381019061075d9190614059565b61192f565b60405161076f9190614de2565b60405180910390f35b34801561078457600080fd5b5061078d611947565b005b34801561079b57600080fd5b506107a4611a2e565b005b3480156107b257600080fd5b506107bb611ac7565b6040516107c89190614dfd565b60405180910390f35b3480156107dd57600080fd5b506107e6611add565b6040516107f39190614983565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e919061437d565b611b06565b005b34801561083157600080fd5b5061083a611b8c565b6040516108479190614a20565b60405180910390f35b61086a6004803603810190610865919061437d565b611c1e565b005b34801561087857600080fd5b50610893600480360381019061088e919061419c565b611f8e565b005b3480156108a157600080fd5b506108bc60048036038101906108b7919061437d565b61210f565b005b6108d860048036038101906108d3919061421c565b61219c565b005b3480156108e657600080fd5b506108ef612673565b6040516108fc91906149ea565b60405180910390f35b34801561091157600080fd5b5061092c600480360381019061092791906143aa565b612686565b005b34801561093a57600080fd5b5061095560048036038101906109509190614119565b612715565b005b34801561096357600080fd5b5061096c612771565b60405161097991906149ea565b60405180910390f35b34801561098e57600080fd5b506109a960048036038101906109a4919061437d565b612788565b005b3480156109b757600080fd5b506109d260048036038101906109cd9190614059565b61280e565b6040516109df9190614de2565b60405180910390f35b3480156109f457600080fd5b506109fd612826565b604051610a0a91906149ea565b60405180910390f35b348015610a1f57600080fd5b50610a3a6004803603810190610a359190614059565b612839565b604051610a479190614983565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a72919061437d565b612900565b604051610a849190614a20565b60405180910390f35b348015610a9957600080fd5b50610aa26129a7565b604051610aaf9190614de2565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190614086565b6129ad565b604051610aec91906149ea565b60405180910390f35b348015610b0157600080fd5b50610b1c6004803603810190610b179190614059565b612a41565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610be957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c5157507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c615750610c6082612b39565b5b9050919050565b606060048054610c7790615190565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca390615190565b8015610cf05780601f10610cc557610100808354040283529160200191610cf0565b820191906000526020600020905b815481529060010190602001808311610cd357829003601f168201915b5050505050905090565b6000610d0582612ba3565b610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614da2565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610d87612bb1565b73ffffffffffffffffffffffffffffffffffffffff16610da5611add565b73ffffffffffffffffffffffffffffffffffffffff1614610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df290614c22565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610e4a826115fc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290614cc2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610eda612bb1565b73ffffffffffffffffffffffffffffffffffffffff161480610f095750610f0881610f03612bb1565b6129ad565b5b610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90614ba2565b60405180910390fd5b610f53838383612bb9565b505050565b610f60612bb1565b73ffffffffffffffffffffffffffffffffffffffff16610f7e611add565b73ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90614c22565b60405180910390fd5b80601660096101000a81548160ff02191690831515021790555050565b6000600154905090565b611006838383612c6b565b505050565b611013612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611031611add565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90614c22565b60405180910390fd5b806003819055508060108190555050565b60135481565b60006110a983611698565b82106110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190614a42565b60405180910390fd5b60006110f4610ff1565b905060008060005b8381101561125a576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111ee57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112465786841415611237578195505050505050611296565b8380611242906151f3565b9450505b508080611252906151f3565b9150506110fc565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90614d42565b60405180910390fd5b92915050565b601660099054906101000a900460ff1681565b6112b7612bb1565b73ffffffffffffffffffffffffffffffffffffffff166112d5611add565b73ffffffffffffffffffffffffffffffffffffffff161461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290614c22565b60405180910390fd5b80600d8190555050565b6000600c54905090565b611347612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611365611add565b73ffffffffffffffffffffffffffffffffffffffff16146113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290614c22565b60405180910390fd5b6000601660086101000a81548160ff021916908315150217905550565b6113f383838360405180602001604052806000815250612715565b505050565b6000611402610ff1565b8210611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a90614b02565b60405180910390fd5b819050919050565b611453612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611471611add565b73ffffffffffffffffffffffffffffffffffffffff16146114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be90614c22565b60405180910390fd5b8060118190555050565b6114d9612bb1565b73ffffffffffffffffffffffffffffffffffffffff166114f7611add565b73ffffffffffffffffffffffffffffffffffffffff161461154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154490614c22565b60405180910390fd5b81816017919061155e929190613dcd565b505050565b61156b612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611589611add565b73ffffffffffffffffffffffffffffffffffffffff16146115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690614c22565b60405180910390fd5b806016600a6101000a81548160ff02191690831515021790555050565b600061160782613224565b600001519050919050565b61161a612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611638611add565b73ffffffffffffffffffffffffffffffffffffffff161461168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168590614c22565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614be2565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611789612bb1565b73ffffffffffffffffffffffffffffffffffffffff166117a7611add565b73ffffffffffffffffffffffffffffffffffffffff16146117fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f490614c22565b60405180910390fd5b61180760006133eb565b565b611811612bb1565b73ffffffffffffffffffffffffffffffffffffffff1661182f611add565b73ffffffffffffffffffffffffffffffffffffffff1614611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90614c22565b60405180910390fd5b80601660046101000a81548163ffffffff021916908363ffffffff16021790555050565b6118b1612bb1565b73ffffffffffffffffffffffffffffffffffffffff166118cf611add565b73ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90614c22565b60405180910390fd5b8060138190555050565b60146020528060005260406000206000915090505481565b61194f612bb1565b73ffffffffffffffffffffffffffffffffffffffff1661196d611add565b73ffffffffffffffffffffffffffffffffffffffff16146119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba90614c22565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611a2b573d6000803e3d6000fd5b50565b611a36612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611a54611add565b73ffffffffffffffffffffffffffffffffffffffff1614611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa190614c22565b60405180910390fd5b6001601660086101000a81548160ff021916908315150217905550565b601660009054906101000a900463ffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b0e612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611b2c611add565b73ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990614c22565b60405180910390fd5b80600f8190555050565b606060058054611b9b90615190565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc790615190565b8015611c145780601f10611be957610100808354040283529160200191611c14565b820191906000526020600020905b815481529060010190602001808311611bf757829003601f168201915b5050505050905090565b80601660089054906101000a900460ff1615611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690614b62565b60405180910390fd5b600081118015611c8157506010548111155b611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790614d62565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590614ae2565b60405180910390fd5b601660099054906101000a900460ff1615611d98573481600c54611d529190614fb8565b1115611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614b82565b60405180910390fd5b611de9565b3481600d54611da79190614fb8565b1115611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90614b82565b60405180910390fd5b5b6001601154611df89190614ef7565b81611e01610ff1565b611e0b9190614ef7565b1115611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4390614dc2565b60405180910390fd5b601660099054906101000a900460ff16611e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9290614bc2565b60405180910390fd5b600f5482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ee99190614ef7565b1115611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2190614a62565b60405180910390fd5b81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f799190614ef7565b92505081905550611f8a33836134af565b5050565b611f96612bb1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90614c62565b60405180910390fd5b8060096000612011612bb1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120be612bb1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161210391906149ea565b60405180910390a35050565b612117612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612135611add565b73ffffffffffffffffffffffffffffffffffffffff161461218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290614c22565b60405180910390fd5b806002819055508060118190555050565b80601660089054906101000a900460ff16156121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e490614b62565b60405180910390fd5b6000811180156121ff57506010548111155b61223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590614d62565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a390614ae2565b60405180910390fd5b601660099054906101000a900460ff1615612316573481600c546122d09190614fb8565b1115612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614b82565b60405180910390fd5b612367565b3481600d546123259190614fb8565b1115612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d90614b82565b60405180910390fd5b5b60016011546123769190614ef7565b8161237f610ff1565b6123899190614ef7565b11156123ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c190614dc2565b60405180910390fd5b61243e848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060135433604051602001612423919061490d565b604051602081830303815290604052805190602001206134cd565b61247d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247490614ac2565b60405180910390fd5b6016600a9054906101000a900460ff166124cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c390614ca2565b60405180910390fd5b600e5482601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251a9190614ef7565b111561255b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255290614a62565b60405180910390fd5b81601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125aa9190614ef7565b92505081905550601660049054906101000a900463ffffffff1663ffffffff16601660009054906101000a900463ffffffff1663ffffffff1610612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614b42565b60405180910390fd5b6001601660008282829054906101000a900463ffffffff166126459190614f4d565b92506101000a81548163ffffffff021916908363ffffffff16021790555061266d33836134af565b50505050565b601660089054906101000a900460ff1681565b61268e612bb1565b73ffffffffffffffffffffffffffffffffffffffff166126ac611add565b73ffffffffffffffffffffffffffffffffffffffff1614612702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f990614c22565b60405180910390fd5b612712338263ffffffff166134af565b50565b612720848484612c6b565b61272c848484846134e4565b61276b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276290614ce2565b60405180910390fd5b50505050565b6000601660099054906101000a900460ff16905090565b612790612bb1565b73ffffffffffffffffffffffffffffffffffffffff166127ae611add565b73ffffffffffffffffffffffffffffffffffffffff1614612804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb90614c22565b60405180910390fd5b80600c8190555050565b60156020528060005260406000206000915090505481565b6016600a9054906101000a900460ff1681565b6000612843612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612861611add565b73ffffffffffffffffffffffffffffffffffffffff16146128b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ae90614c22565b60405180910390fd5b81601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550819050919050565b606061290b82612ba3565b61294a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294190614c42565b60405180910390fd5b600061295461367b565b90506000815111612974576040518060200160405280600081525061299f565b8061297e8461370d565b60405160200161298f929190614954565b6040516020818303038152906040525b915050919050565b600a5481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612a49612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612a67611add565b73ffffffffffffffffffffffffffffffffffffffff1614612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab490614c22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2490614a82565b60405180910390fd5b612b36816133eb565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612c7682613224565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612c9d612bb1565b73ffffffffffffffffffffffffffffffffffffffff161480612cf95750612cc2612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612ce184610cfa565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d155750612d148260000151612d0f612bb1565b6129ad565b5b905080612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e90614c82565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc090614c02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3090614b22565b60405180910390fd5b612e46858585600161386e565b612e566000848460000151612bb9565b6001600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612ec49190615012565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612f689190614eb1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461306e9190614ef7565b9050600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156131b4576130e481612ba3565b156131b3576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506006600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461321c8686866001613874565b505050505050565b61322c613e53565b61323582612ba3565b613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614aa2565b60405180910390fd5b6000600354831061329c5760016003548461328f9190615046565b6132999190614ef7565b90505b60008390505b8181106133aa576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613396578093505050506133e6565b5080806133a290615166565b9150506132a2565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dd90614d82565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6134c982826040518060200160405280600081525061387a565b5050565b6000826134da8584613cf7565b1490509392505050565b60006135058473ffffffffffffffffffffffffffffffffffffffff16613daa565b1561366e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261352e612bb1565b8786866040518563ffffffff1660e01b8152600401613550949392919061499e565b602060405180830381600087803b15801561356a57600080fd5b505af192505050801561359b57506040513d601f19601f820116820180604052508101906135989190614303565b60015b61361e573d80600081146135cb576040519150601f19603f3d011682016040523d82523d6000602084013e6135d0565b606091505b50600081511415613616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360d90614ce2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613673565b600190505b949350505050565b60606017805461368a90615190565b80601f01602080910402602001604051908101604052809291908181526020018280546136b690615190565b80156137035780601f106136d857610100808354040283529160200191613703565b820191906000526020600020905b8154815290600101906020018083116136e657829003601f168201915b5050505050905090565b60606000821415613755576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613869565b600082905060005b60008214613787578080613770906151f3565b915050600a826137809190614f87565b915061375d565b60008167ffffffffffffffff8111156137a3576137a2615357565b5b6040519080825280601f01601f1916602001820160405280156137d55781602001600182028036833780820191505090505b5090505b60008514613862576001826137ee9190615046565b9150600a856137fd919061526a565b60306138099190614ef7565b60f81b81838151811061381f5761381e615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561385b9190614f87565b94506137d9565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156138f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e890614d22565b60405180910390fd5b6138fa81612ba3565b1561393a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393190614d02565b60405180910390fd5b613947600085838661386e565b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151613a449190614eb1565b6fffffffffffffffffffffffffffffffff168152602001858360200151613a6b9190614eb1565b6fffffffffffffffffffffffffffffffff16815250600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613cda57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613c7a60008884886134e4565b613cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb090614ce2565b60405180910390fd5b8180613cc4906151f3565b9250508080613cd2906151f3565b915050613c09565b5080600181905550613cef6000878588613874565b505050505050565b60008082905060005b8451811015613d9f576000858281518110613d1e57613d1d615328565b5b60200260200101519050808311613d5f578281604051602001613d42929190614928565b604051602081830303815290604052805190602001209250613d8b565b8083604051602001613d72929190614928565b6040516020818303038152906040528051906020012092505b508080613d97906151f3565b915050613d00565b508091505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613dd990615190565b90600052602060002090601f016020900481019282613dfb5760008555613e42565b82601f10613e1457803560ff1916838001178555613e42565b82800160010185558215613e42579182015b82811115613e41578235825591602001919060010190613e26565b5b509050613e4f9190613e8d565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613ea6576000816000905550600101613e8e565b5090565b6000613ebd613eb884614e3d565b614e18565b905082815260208101848484011115613ed957613ed8615395565b5b613ee4848285615124565b509392505050565b600081359050613efb81615b3c565b92915050565b60008083601f840112613f1757613f1661538b565b5b8235905067ffffffffffffffff811115613f3457613f33615386565b5b602083019150836020820283011115613f5057613f4f615390565b5b9250929050565b600081359050613f6681615b53565b92915050565b600081359050613f7b81615b6a565b92915050565b600081359050613f9081615b81565b92915050565b600081519050613fa581615b81565b92915050565b600082601f830112613fc057613fbf61538b565b5b8135613fd0848260208601613eaa565b91505092915050565b60008083601f840112613fef57613fee61538b565b5b8235905067ffffffffffffffff81111561400c5761400b615386565b5b60208301915083600182028301111561402857614027615390565b5b9250929050565b60008135905061403e81615b98565b92915050565b60008135905061405381615baf565b92915050565b60006020828403121561406f5761406e61539f565b5b600061407d84828501613eec565b91505092915050565b6000806040838503121561409d5761409c61539f565b5b60006140ab85828601613eec565b92505060206140bc85828601613eec565b9150509250929050565b6000806000606084860312156140df576140de61539f565b5b60006140ed86828701613eec565b93505060206140fe86828701613eec565b925050604061410f8682870161402f565b9150509250925092565b600080600080608085870312156141335761413261539f565b5b600061414187828801613eec565b945050602061415287828801613eec565b93505060406141638782880161402f565b925050606085013567ffffffffffffffff8111156141845761418361539a565b5b61419087828801613fab565b91505092959194509250565b600080604083850312156141b3576141b261539f565b5b60006141c185828601613eec565b92505060206141d285828601613f57565b9150509250929050565b600080604083850312156141f3576141f261539f565b5b600061420185828601613eec565b92505060206142128582860161402f565b9150509250929050565b6000806000604084860312156142355761423461539f565b5b600084013567ffffffffffffffff8111156142535761425261539a565b5b61425f86828701613f01565b935093505060206142728682870161402f565b9150509250925092565b6000602082840312156142925761429161539f565b5b60006142a084828501613f57565b91505092915050565b6000602082840312156142bf576142be61539f565b5b60006142cd84828501613f6c565b91505092915050565b6000602082840312156142ec576142eb61539f565b5b60006142fa84828501613f81565b91505092915050565b6000602082840312156143195761431861539f565b5b600061432784828501613f96565b91505092915050565b600080602083850312156143475761434661539f565b5b600083013567ffffffffffffffff8111156143655761436461539a565b5b61437185828601613fd9565b92509250509250929050565b6000602082840312156143935761439261539f565b5b60006143a18482850161402f565b91505092915050565b6000602082840312156143c0576143bf61539f565b5b60006143ce84828501614044565b91505092915050565b6143e08161507a565b82525050565b6143f76143f28261507a565b61523c565b82525050565b6144068161508c565b82525050565b61441581615098565b82525050565b61442c61442782615098565b61524e565b82525050565b600061443d82614e6e565b6144478185614e84565b9350614457818560208601615133565b614460816153a4565b840191505092915050565b600061447682614e79565b6144808185614e95565b9350614490818560208601615133565b614499816153a4565b840191505092915050565b60006144af82614e79565b6144b98185614ea6565b93506144c9818560208601615133565b80840191505092915050565b60006144e2602283614e95565b91506144ed826153c2565b604082019050919050565b6000614505601a83614e95565b915061451082615411565b602082019050919050565b6000614528602683614e95565b91506145338261543a565b604082019050919050565b600061454b602a83614e95565b915061455682615489565b604082019050919050565b600061456e601b83614e95565b9150614579826154d8565b602082019050919050565b6000614591601183614e95565b915061459c82615501565b602082019050919050565b60006145b4602383614e95565b91506145bf8261552a565b604082019050919050565b60006145d7602583614e95565b91506145e282615579565b604082019050919050565b60006145fa602683614e95565b9150614605826155c8565b604082019050919050565b600061461d600783614e95565b915061462882615617565b602082019050919050565b6000614640601283614e95565b915061464b82615640565b602082019050919050565b6000614663603983614e95565b915061466e82615669565b604082019050919050565b6000614686601583614e95565b9150614691826156b8565b602082019050919050565b60006146a9602b83614e95565b91506146b4826156e1565b604082019050919050565b60006146cc602683614e95565b91506146d782615730565b604082019050919050565b60006146ef600583614ea6565b91506146fa8261577f565b600582019050919050565b6000614712602083614e95565b915061471d826157a8565b602082019050919050565b6000614735602f83614e95565b9150614740826157d1565b604082019050919050565b6000614758601a83614e95565b915061476382615820565b602082019050919050565b600061477b603283614e95565b915061478682615849565b604082019050919050565b600061479e603283614e95565b91506147a982615898565b604082019050919050565b60006147c1602283614e95565b91506147cc826158e7565b604082019050919050565b60006147e4603383614e95565b91506147ef82615936565b604082019050919050565b6000614807601d83614e95565b915061481282615985565b602082019050919050565b600061482a602183614e95565b9150614835826159ae565b604082019050919050565b600061484d602e83614e95565b9150614858826159fd565b604082019050919050565b6000614870601783614e95565b915061487b82615a4c565b602082019050919050565b6000614893602f83614e95565b915061489e82615a75565b604082019050919050565b60006148b6602d83614e95565b91506148c182615ac4565b604082019050919050565b60006148d9600983614e95565b91506148e482615b13565b602082019050919050565b6148f88161510a565b82525050565b61490781615114565b82525050565b600061491982846143e6565b60148201915081905092915050565b6000614934828561441b565b602082019150614944828461441b565b6020820191508190509392505050565b600061496082856144a4565b915061496c82846144a4565b9150614977826146e2565b91508190509392505050565b600060208201905061499860008301846143d7565b92915050565b60006080820190506149b360008301876143d7565b6149c060208301866143d7565b6149cd60408301856148ef565b81810360608301526149df8184614432565b905095945050505050565b60006020820190506149ff60008301846143fd565b92915050565b6000602082019050614a1a600083018461440c565b92915050565b60006020820190508181036000830152614a3a818461446b565b905092915050565b60006020820190508181036000830152614a5b816144d5565b9050919050565b60006020820190508181036000830152614a7b816144f8565b9050919050565b60006020820190508181036000830152614a9b8161451b565b9050919050565b60006020820190508181036000830152614abb8161453e565b9050919050565b60006020820190508181036000830152614adb81614561565b9050919050565b60006020820190508181036000830152614afb81614584565b9050919050565b60006020820190508181036000830152614b1b816145a7565b9050919050565b60006020820190508181036000830152614b3b816145ca565b9050919050565b60006020820190508181036000830152614b5b816145ed565b9050919050565b60006020820190508181036000830152614b7b81614610565b9050919050565b60006020820190508181036000830152614b9b81614633565b9050919050565b60006020820190508181036000830152614bbb81614656565b9050919050565b60006020820190508181036000830152614bdb81614679565b9050919050565b60006020820190508181036000830152614bfb8161469c565b9050919050565b60006020820190508181036000830152614c1b816146bf565b9050919050565b60006020820190508181036000830152614c3b81614705565b9050919050565b60006020820190508181036000830152614c5b81614728565b9050919050565b60006020820190508181036000830152614c7b8161474b565b9050919050565b60006020820190508181036000830152614c9b8161476e565b9050919050565b60006020820190508181036000830152614cbb81614791565b9050919050565b60006020820190508181036000830152614cdb816147b4565b9050919050565b60006020820190508181036000830152614cfb816147d7565b9050919050565b60006020820190508181036000830152614d1b816147fa565b9050919050565b60006020820190508181036000830152614d3b8161481d565b9050919050565b60006020820190508181036000830152614d5b81614840565b9050919050565b60006020820190508181036000830152614d7b81614863565b9050919050565b60006020820190508181036000830152614d9b81614886565b9050919050565b60006020820190508181036000830152614dbb816148a9565b9050919050565b60006020820190508181036000830152614ddb816148cc565b9050919050565b6000602082019050614df760008301846148ef565b92915050565b6000602082019050614e1260008301846148fe565b92915050565b6000614e22614e33565b9050614e2e82826151c2565b919050565b6000604051905090565b600067ffffffffffffffff821115614e5857614e57615357565b5b614e61826153a4565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ebc826150ce565b9150614ec7836150ce565b9250826fffffffffffffffffffffffffffffffff03821115614eec57614eeb61529b565b5b828201905092915050565b6000614f028261510a565b9150614f0d8361510a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f4257614f4161529b565b5b828201905092915050565b6000614f5882615114565b9150614f6383615114565b92508263ffffffff03821115614f7c57614f7b61529b565b5b828201905092915050565b6000614f928261510a565b9150614f9d8361510a565b925082614fad57614fac6152ca565b5b828204905092915050565b6000614fc38261510a565b9150614fce8361510a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150075761500661529b565b5b828202905092915050565b600061501d826150ce565b9150615028836150ce565b92508282101561503b5761503a61529b565b5b828203905092915050565b60006150518261510a565b915061505c8361510a565b92508282101561506f5761506e61529b565b5b828203905092915050565b6000615085826150ea565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b83811015615151578082015181840152602081019050615136565b83811115615160576000848401525b50505050565b60006151718261510a565b915060008214156151855761518461529b565b5b600182039050919050565b600060028204905060018216806151a857607f821691505b602082108114156151bc576151bb6152f9565b5b50919050565b6151cb826153a4565b810181811067ffffffffffffffff821117156151ea576151e9615357565b5b80604052505050565b60006151fe8261510a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152315761523061529b565b5b600182019050919050565b600061524782615258565b9050919050565b6000819050919050565b6000615263826153b5565b9050919050565b60006152758261510a565b91506152808361510a565b9250826152905761528f6152ca565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f6e65204e46542063616e206265206d696e746564000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f596f75277265206e6f74206f6e207468652077686974656c6973740000000000600082015250565b7f53656e646572206e6f74206f726967696e000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416c6c2077686974656c697374206d696e74732068617665206265656e20636c60008201527f61696d6564210000000000000000000000000000000000000000000000000000602082015250565b7f5061757365642100000000000000000000000000000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f53616c6520686173206e6f742073746172746564210000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f596f75277265206f6e207468652077686974656c69737420627574206d696e7460008201527f20686173206e6f74207374617274656421210000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4d6178206f6e6520706572207472616e73616374696f6e000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b615b458161507a565b8114615b5057600080fd5b50565b615b5c8161508c565b8114615b6757600080fd5b50565b615b7381615098565b8114615b7e57600080fd5b50565b615b8a816150a2565b8114615b9557600080fd5b50565b615ba18161510a565b8114615bac57600080fd5b50565b615bb881615114565b8114615bc357600080fd5b5056fea264697066735822122025a494d1e252311084d2adaddb82d503631951150c705051e29cae584b7493ba64736f6c63430008070033
Deployed Bytecode Sourcemap
29549:4982:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15535:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17261:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18795:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31239:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18358:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31431:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14096;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19645:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33626:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29974:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14727:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30325:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31641:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31328:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31158:73;;;;;;;;;;;;;:::i;:::-;;19850:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14259:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34207:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34308:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31533:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17084:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30723:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15961:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3832:103;;;;;;;;;;;;;:::i;:::-;;30610:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34107:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30075:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33764:103;;;;;;;;;;;;;:::i;:::-;;31080:70;;;;;;;;;;;;;:::i;:::-;;30202:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3609:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30854:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17416:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32592:342;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19063:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31855:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32942:676;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30290:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34006:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20070:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30975:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31749:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30140:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30364:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33875:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17577:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24488:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19400:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3943:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15535:370;15662:4;15707:25;15692:40;;;:11;:40;;;;:99;;;;15758:33;15743:48;;;:11;:48;;;;15692:99;:160;;;;15817:35;15802:50;;;:11;:50;;;;15692:160;:207;;;;15863:36;15887:11;15863:23;:36::i;:::-;15692:207;15678:221;;15535:370;;;:::o;17261:94::-;17315:13;17344:5;17337:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17261:94;:::o;18795:204::-;18863:7;18887:16;18895:7;18887;:16::i;:::-;18879:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18969:15;:24;18985:7;18969:24;;;;;;;;;;;;;;;;;;;;;18962:31;;18795:204;;;:::o;31239:81::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31308:4:::1;31300:5;;:12;;;;;;;;;;;;;;;;;;31239:81:::0;:::o;18358:379::-;18427:13;18443:24;18459:7;18443:15;:24::i;:::-;18427:40;;18488:5;18482:11;;:2;:11;;;;18474:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;18573:5;18557:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;18582:37;18599:5;18606:12;:10;:12::i;:::-;18582:16;:37::i;:::-;18557:62;18541:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;18703:28;18712:2;18716:7;18725:5;18703:8;:28::i;:::-;18420:317;18358:379;;:::o;31431:94::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31512:5:::1;31497:12;;:20;;;;;;;;;;;;;;;;;;31431:94:::0;:::o;14096:::-;14149:7;14172:12;;14165:19;;14096:94;:::o;19645:142::-;19753:28;19763:4;19769:2;19773:7;19753:9;:28::i;:::-;19645:142;;;:::o;33626:130::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33710:3:::1;33695:12;:18;;;;33745:3;33724:18;:24;;;;33626:130:::0;:::o;29974:94::-;;;;:::o;14727:744::-;14836:7;14871:16;14881:5;14871:9;:16::i;:::-;14863:5;:24;14855:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14933:22;14958:13;:11;:13::i;:::-;14933:38;;14978:19;15008:25;15058:9;15053:350;15077:14;15073:1;:18;15053:350;;;15107:31;15141:11;:14;15153:1;15141:14;;;;;;;;;;;15107:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15194:1;15168:28;;:9;:14;;;:28;;;15164:89;;15229:9;:14;;;15209:34;;15164:89;15286:5;15265:26;;:17;:26;;;15261:135;;;15323:5;15308:11;:20;15304:59;;;15350:1;15343:8;;;;;;;;;15304:59;15373:13;;;;;:::i;:::-;;;;15261:135;15098:305;15093:3;;;;;:::i;:::-;;;;15053:350;;;;15409:56;;;;;;;;;;:::i;:::-;;;;;;;;14727:744;;;;;:::o;30325:32::-;;;;;;;;;;;;;:::o;31641:100::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31728:5:::1;31712:13;:21;;;;31641:100:::0;:::o;31328:95::-;31376:7;31403:12;;31396:19;;31328:95;:::o;31158:73::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31218:5:::1;31207:8;;:16;;;;;;;;;;;;;;;;;;31158:73::o:0;19850:157::-;19962:39;19979:4;19985:2;19989:7;19962:39;;;;;;;;;;;;:16;:39::i;:::-;19850:157;;;:::o;14259:177::-;14326:7;14358:13;:11;:13::i;:::-;14350:5;:21;14342:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;14425:5;14418:12;;14259:177;;;:::o;34207:93::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34285:7:::1;34274:8;:18;;;;34207:93:::0;:::o;34308:102::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34395:7:::1;;34383:9;:19;;;;;;;:::i;:::-;;34308:102:::0;;:::o;31533:100::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31620:5:::1;31602:15;;:23;;;;;;;;;;;;;;;;;;31533:100:::0;:::o;17084:118::-;17148:7;17171:20;17183:7;17171:11;:20::i;:::-;:25;;;17164:32;;17084:118;;;:::o;30723:123::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30835:3:::1;30805:27;:33;;;;30723:123:::0;:::o;15961:211::-;16025:7;16066:1;16049:19;;:5;:19;;;;16041:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;16138:12;:19;16151:5;16138:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;16130:36;;16123:43;;15961:211;;;:::o;3832:103::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3897:30:::1;3924:1;3897:18;:30::i;:::-;3832:103::o:0;30610:105::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30704:3:::1;30683:18;;:24;;;;;;;;;;;;;;;;;;30610:105:::0;:::o;34107:92::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34187:4:::1;34174:10;:17;;;;34107:92:::0;:::o;30075:58::-;;;;;;;;;;;;;;;;;:::o;33764:103::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33821:5:::1;;;;;;;;;;;33813:23;;:46;33837:21;33813:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33764:103::o:0;31080:70::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31138:4:::1;31127:8;;:15;;;;;;;;;;;;;;;;;;31080:70::o:0;30202:33::-;;;;;;;;;;;;;:::o;3609:87::-;3655:7;3682:6;;;;;;;;;;;3675:13;;3609:87;:::o;30854:113::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30956:3:::1;30931:22;:28;;;;30854:113:::0;:::o;17416:98::-;17472:13;17501:7;17494:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17416:98;:::o;32592:342::-;32649:6;32049:8;;;;;;;;;;;32048:9;32040:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;32111:1;32098:10;:14;:50;;;;;32130:18;;32116:10;:32;;32098:50;32090:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;32209:9;32195:23;;:10;:23;;;32187:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;32279:12;;;;;;;;;;;32275:217;;;32345:9;32331:10;32316:12;;:25;;;;:::i;:::-;:38;;32308:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32275:217;;;32448:9;32434:10;32418:13;;:26;;;;:::i;:::-;:39;;32410:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32275:217;32549:1;32540:8;;:10;;;;:::i;:::-;32526;32510:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:40;;32502:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32676:12:::1;;;;;;;;;;;32668:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;32778:22;;32768:6;32733:20;:32;32754:10;32733:32;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:67;;32725:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;32878:6;32842:20;:32;32863:10;32842:32;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;32897:29;32907:10;32919:6;32897:9;:29::i;:::-;32592:342:::0;;:::o;19063:274::-;19166:12;:10;:12::i;:::-;19154:24;;:8;:24;;;;19146:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;19263:8;19218:18;:32;19237:12;:10;:12::i;:::-;19218:32;;;;;;;;;;;;;;;:42;19251:8;19218:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;19312:8;19283:48;;19298:12;:10;:12::i;:::-;19283:48;;;19322:8;19283:48;;;;;;:::i;:::-;;;;;;;;19063:274;;:::o;31855:127::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31944:4:::1;31927:14;:21;;;;31970:4;31959:8;:15;;;;31855:127:::0;:::o;32942:676::-;33032:6;32049:8;;;;;;;;;;;32048:9;32040:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;32111:1;32098:10;:14;:50;;;;;32130:18;;32116:10;:32;;32098:50;32090:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;32209:9;32195:23;;:10;:23;;;32187:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;32279:12;;;;;;;;;;;32275:217;;;32345:9;32331:10;32316:12;;:25;;;;:::i;:::-;:38;;32308:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32275:217;;;32448:9;32434:10;32418:13;;:26;;;;:::i;:::-;:39;;32410:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32275:217;32549:1;32540:8;;:10;;;;:::i;:::-;32526;32510:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:40;;32502:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33059:78:::1;33078:5;;33059:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33085:10;;33124;33107:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;33097:39;;;;;;33059:18;:78::i;:::-;33051:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;33188:15;;;;;;;;;;;33180:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33325:27;;33315:6;33277:23;:35;33301:10;33277:35;;;;;;;;;;;;;;;;:44;;;;:::i;:::-;:75;;33269:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;33433:6;33394:23;:35;33418:10;33394:35;;;;;;;;;;;;;;;;:45;;;;;;;:::i;:::-;;;;;;;;33476:18;;;;;;;;;;;33458:36;;:15;;;;;;;;;;;:36;;;33450:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33567:1;33548:15;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33581:29;33591:10;33603:6;33581:9;:29::i;:::-;32942:676:::0;;;;:::o;30290:28::-;;;;;;;;;;;;;:::o;34006:93::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34065:26:::1;34075:10;34087:3;34065:26;;:9;:26::i;:::-;34006:93:::0;:::o;20070:311::-;20207:28;20217:4;20223:2;20227:7;20207:9;:28::i;:::-;20258:48;20281:4;20287:2;20291:7;20300:5;20258:22;:48::i;:::-;20242:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;20070:311;;;;:::o;30975:97::-;31028:4;31052:12;;;;;;;;;;;31045:19;;30975:97;:::o;31749:98::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31834:5:::1;31819:12;:20;;;;31749:98:::0;:::o;30140:55::-;;;;;;;;;;;;;;;;;:::o;30364:35::-;;;;;;;;;;;;;:::o;33875:123::-;33936:7;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33964:4:::1;33956:5;;:12;;;;;;;;;;;;;;;;;;33986:4;33979:11;;33875:123:::0;;;:::o;17577:403::-;17675:13;17716:16;17724:7;17716;:16::i;:::-;17700:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;17806:21;17830:10;:8;:10::i;:::-;17806:34;;17885:1;17867:7;17861:21;:25;:113;;;;;;;;;;;;;;;;;17922:7;17931:18;:7;:16;:18::i;:::-;17905:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17861:113;17847:127;;;17577:403;;;:::o;24488:43::-;;;;:::o;19400:186::-;19522:4;19545:18;:25;19564:5;19545:25;;;;;;;;;;;;;;;:35;19571:8;19545:35;;;;;;;;;;;;;;;;;;;;;;;;;19538:42;;19400:186;;;;:::o;3943:201::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4052:1:::1;4032:22;;:8;:22;;;;4024:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4108:28;4127:8;4108:18;:28::i;:::-;3943:201:::0;:::o;9184:157::-;9269:4;9308:25;9293:40;;;:11;:40;;;;9286:47;;9184:157;;;:::o;20620:105::-;20677:4;20707:12;;20697:7;:22;20690:29;;20620:105;;;:::o;3105:98::-;3158:7;3185:10;3178:17;;3105:98;:::o;24310:172::-;24434:2;24407:15;:24;24423:7;24407:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24468:7;24464:2;24448:28;;24457:5;24448:28;;;;;;;;;;;;24310:172;;;:::o;22675:1529::-;22772:35;22810:20;22822:7;22810:11;:20::i;:::-;22772:58;;22839:22;22881:13;:18;;;22865:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;22934:12;:10;:12::i;:::-;22910:36;;:20;22922:7;22910:11;:20::i;:::-;:36;;;22865:81;:142;;;;22957:50;22974:13;:18;;;22994:12;:10;:12::i;:::-;22957:16;:50::i;:::-;22865:142;22839:169;;23033:17;23017:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;23165:4;23143:26;;:13;:18;;;:26;;;23127:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;23254:1;23240:16;;:2;:16;;;;23232:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23307:43;23329:4;23335:2;23339:7;23348:1;23307:21;:43::i;:::-;23407:49;23424:1;23428:7;23437:13;:18;;;23407:8;:49::i;:::-;23495:1;23465:12;:18;23478:4;23465:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23531:1;23503:12;:16;23516:2;23503:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23562:43;;;;;;;;23577:2;23562:43;;;;;;23588:15;23562:43;;;;;23539:11;:20;23551:7;23539:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23833:19;23865:1;23855:7;:11;;;;:::i;:::-;23833:33;;23918:1;23877:43;;:11;:24;23889:11;23877:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;23873:236;;;23935:20;23943:11;23935:7;:20::i;:::-;23931:171;;;23995:97;;;;;;;;24022:13;:18;;;23995:97;;;;;;24053:13;:28;;;23995:97;;;;;23968:11;:24;23980:11;23968:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23931:171;23873:236;24141:7;24137:2;24122:27;;24131:4;24122:27;;;;;;;;;;;;24156:42;24177:4;24183:2;24187:7;24196:1;24156:20;:42::i;:::-;22765:1439;;;22675:1529;;;:::o;16424:606::-;16500:21;;:::i;:::-;16541:16;16549:7;16541;:16::i;:::-;16533:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16613:26;16661:12;;16650:7;:23;16646:93;;16730:1;16715:12;;16705:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;16684:47;;16646:93;16752:12;16767:7;16752:22;;16747:212;16784:18;16776:4;:26;16747:212;;16821:31;16855:11;:17;16867:4;16855:17;;;;;;;;;;;16821:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16911:1;16885:28;;:9;:14;;;:28;;;16881:71;;16933:9;16926:16;;;;;;;16881:71;16812:147;16804:6;;;;;:::i;:::-;;;;16747:212;;;;16967:57;;;;;;;;;;:::i;:::-;;;;;;;;16424:606;;;;:::o;4152:191::-;4226:16;4245:6;;;;;;;;;;;4226:25;;4271:8;4262:6;;:17;;;;;;;;;;;;;;;;;;4326:8;4295:40;;4316:8;4295:40;;;;;;;;;;;;4215:128;4152:191;:::o;20731:98::-;20796:27;20806:2;20810:8;20796:27;;;;;;;;;;;;:9;:27::i;:::-;20731:98;;:::o;28262:190::-;28387:4;28440;28411:25;28424:5;28431:4;28411:12;:25::i;:::-;:33;28404:40;;28262:190;;;;;:::o;26025:690::-;26162:4;26179:15;:2;:13;;;:15::i;:::-;26175:535;;;26234:2;26218:36;;;26255:12;:10;:12::i;:::-;26269:4;26275:7;26284:5;26218:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;26205:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26466:1;26449:6;:13;:18;26445:215;;;26482:61;;;;;;;;;;:::i;:::-;;;;;;;;26445:215;26628:6;26622:13;26613:6;26609:2;26605:15;26598:38;26205:464;26350:45;;;26340:55;;;:6;:55;;;;26333:62;;;;;26175:535;26698:4;26691:11;;26025:690;;;;;;;:::o;34418:110::-;34478:13;34511:9;34504:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34418:110;:::o;1678:532::-;1734:13;1773:1;1764:5;:10;1760:53;;;1791:10;;;;;;;;;;;;;;;;;;;;;1760:53;1823:12;1838:5;1823:20;;1854:14;1879:78;1894:1;1886:4;:9;1879:78;;1912:8;;;;;:::i;:::-;;;;1943:2;1935:10;;;;;:::i;:::-;;;1879:78;;;1967:19;1999:6;1989:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1967:39;;2017:154;2033:1;2024:5;:10;2017:154;;2061:1;2051:11;;;;;:::i;:::-;;;2128:2;2120:5;:10;;;;:::i;:::-;2107:2;:24;;;;:::i;:::-;2094:39;;2077:6;2084;2077:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2157:2;2148:11;;;;;:::i;:::-;;;2017:154;;;2195:6;2181:21;;;;;1678:532;;;;:::o;27177:141::-;;;;;:::o;27704:140::-;;;;;:::o;21168:1275::-;21273:20;21296:12;;21273:35;;21337:1;21323:16;;:2;:16;;;;21315:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21514:21;21522:12;21514:7;:21::i;:::-;21513:22;21505:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21659:61;21689:1;21693:2;21697:12;21711:8;21659:21;:61::i;:::-;21729:30;21762:12;:16;21775:2;21762:16;;;;;;;;;;;;;;;21729:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21804:119;;;;;;;;21854:8;21824:11;:19;;;:39;;;;:::i;:::-;21804:119;;;;;;21907:8;21872:11;:24;;;:44;;;;:::i;:::-;21804:119;;;;;21785:12;:16;21798:2;21785:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21958:43;;;;;;;;21973:2;21958:43;;;;;;21984:15;21958:43;;;;;21930:11;:25;21942:12;21930:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22010:20;22033:12;22010:35;;22059:9;22054:281;22078:8;22074:1;:12;22054:281;;;22132:12;22128:2;22107:38;;22124:1;22107:38;;;;;;;;;;;;22172:59;22203:1;22207:2;22211:12;22225:5;22172:22;:59::i;:::-;22154:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;22313:14;;;;;:::i;:::-;;;;22088:3;;;;;:::i;:::-;;;;22054:281;;;;22358:12;22343;:27;;;;22377:60;22406:1;22410:2;22414:12;22428:8;22377:20;:60::i;:::-;21266:1177;;;21168:1275;;;:::o;28814:701::-;28897:7;28917:20;28940:4;28917:27;;28960:9;28955:523;28979:5;:12;28975:1;:16;28955:523;;;29013:20;29036:5;29042:1;29036:8;;;;;;;;:::i;:::-;;;;;;;;29013:31;;29079:12;29063;:28;29059:408;;29233:12;29247;29216:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29206:55;;;;;;29191:70;;29059:408;;;29423:12;29437;29406:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29396:55;;;;;;29381:70;;29059:408;28998:480;28993:3;;;;;:::i;:::-;;;;28955:523;;;;29495:12;29488:19;;;28814:701;;;;:::o;4421:115::-;4481:4;4527:1;4505:7;:19;;;:23;4498:30;;4421:115;;;:::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:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:139::-;1344:5;1382:6;1369:20;1360:29;;1398:33;1425:5;1398:33;:::i;:::-;1298:139;;;;:::o;1443:137::-;1488:5;1526:6;1513:20;1504:29;;1542:32;1568:5;1542:32;:::i;:::-;1443:137;;;;:::o;1586:141::-;1642:5;1673:6;1667:13;1658:22;;1689:32;1715:5;1689:32;:::i;:::-;1586:141;;;;:::o;1746:338::-;1801:5;1850:3;1843:4;1835:6;1831:17;1827:27;1817:122;;1858:79;;:::i;:::-;1817:122;1975:6;1962:20;2000:78;2074:3;2066:6;2059:4;2051:6;2047:17;2000:78;:::i;:::-;1991:87;;1807:277;1746:338;;;;:::o;2104:553::-;2162:8;2172:6;2222:3;2215:4;2207:6;2203:17;2199:27;2189:122;;2230:79;;:::i;:::-;2189:122;2343:6;2330:20;2320:30;;2373:18;2365:6;2362:30;2359:117;;;2395:79;;:::i;:::-;2359:117;2509:4;2501:6;2497:17;2485:29;;2563:3;2555:4;2547:6;2543:17;2533:8;2529:32;2526:41;2523:128;;;2570:79;;:::i;:::-;2523:128;2104:553;;;;;:::o;2663:139::-;2709:5;2747:6;2734:20;2725:29;;2763:33;2790:5;2763:33;:::i;:::-;2663:139;;;;:::o;2808:137::-;2853:5;2891:6;2878:20;2869:29;;2907:32;2933:5;2907:32;:::i;:::-;2808:137;;;;:::o;2951:329::-;3010:6;3059:2;3047:9;3038:7;3034:23;3030:32;3027:119;;;3065:79;;:::i;:::-;3027:119;3185:1;3210:53;3255:7;3246:6;3235:9;3231:22;3210:53;:::i;:::-;3200:63;;3156:117;2951:329;;;;:::o;3286:474::-;3354:6;3362;3411:2;3399:9;3390:7;3386:23;3382:32;3379:119;;;3417:79;;:::i;:::-;3379:119;3537:1;3562:53;3607:7;3598:6;3587:9;3583:22;3562:53;:::i;:::-;3552:63;;3508:117;3664:2;3690:53;3735:7;3726:6;3715:9;3711:22;3690:53;:::i;:::-;3680:63;;3635:118;3286:474;;;;;:::o;3766:619::-;3843:6;3851;3859;3908:2;3896:9;3887:7;3883:23;3879:32;3876:119;;;3914:79;;:::i;:::-;3876:119;4034:1;4059:53;4104:7;4095:6;4084:9;4080:22;4059:53;:::i;:::-;4049:63;;4005:117;4161:2;4187:53;4232:7;4223:6;4212:9;4208:22;4187:53;:::i;:::-;4177:63;;4132:118;4289:2;4315:53;4360:7;4351:6;4340:9;4336:22;4315:53;:::i;:::-;4305:63;;4260:118;3766:619;;;;;:::o;4391:943::-;4486:6;4494;4502;4510;4559:3;4547:9;4538:7;4534:23;4530:33;4527:120;;;4566:79;;:::i;:::-;4527:120;4686:1;4711:53;4756:7;4747:6;4736:9;4732:22;4711:53;:::i;:::-;4701:63;;4657:117;4813:2;4839:53;4884:7;4875:6;4864:9;4860:22;4839:53;:::i;:::-;4829:63;;4784:118;4941:2;4967:53;5012:7;5003:6;4992:9;4988:22;4967:53;:::i;:::-;4957:63;;4912:118;5097:2;5086:9;5082:18;5069:32;5128:18;5120:6;5117:30;5114:117;;;5150:79;;:::i;:::-;5114:117;5255:62;5309:7;5300:6;5289:9;5285:22;5255:62;:::i;:::-;5245:72;;5040:287;4391:943;;;;;;;:::o;5340:468::-;5405:6;5413;5462:2;5450:9;5441:7;5437:23;5433:32;5430:119;;;5468:79;;:::i;:::-;5430:119;5588:1;5613:53;5658:7;5649:6;5638:9;5634:22;5613:53;:::i;:::-;5603:63;;5559:117;5715:2;5741:50;5783:7;5774:6;5763:9;5759:22;5741:50;:::i;:::-;5731:60;;5686:115;5340:468;;;;;:::o;5814:474::-;5882:6;5890;5939:2;5927:9;5918:7;5914:23;5910:32;5907:119;;;5945:79;;:::i;:::-;5907:119;6065:1;6090:53;6135:7;6126:6;6115:9;6111:22;6090:53;:::i;:::-;6080:63;;6036:117;6192:2;6218:53;6263:7;6254:6;6243:9;6239:22;6218:53;:::i;:::-;6208:63;;6163:118;5814:474;;;;;:::o;6294:704::-;6389:6;6397;6405;6454:2;6442:9;6433:7;6429:23;6425:32;6422:119;;;6460:79;;:::i;:::-;6422:119;6608:1;6597:9;6593:17;6580:31;6638:18;6630:6;6627:30;6624:117;;;6660:79;;:::i;:::-;6624:117;6773:80;6845:7;6836:6;6825:9;6821:22;6773:80;:::i;:::-;6755:98;;;;6551:312;6902:2;6928:53;6973:7;6964:6;6953:9;6949:22;6928:53;:::i;:::-;6918:63;;6873:118;6294:704;;;;;:::o;7004:323::-;7060:6;7109:2;7097:9;7088:7;7084:23;7080:32;7077:119;;;7115:79;;:::i;:::-;7077:119;7235:1;7260:50;7302:7;7293:6;7282:9;7278:22;7260:50;:::i;:::-;7250:60;;7206:114;7004:323;;;;:::o;7333:329::-;7392:6;7441:2;7429:9;7420:7;7416:23;7412:32;7409:119;;;7447:79;;:::i;:::-;7409:119;7567:1;7592:53;7637:7;7628:6;7617:9;7613:22;7592:53;:::i;:::-;7582:63;;7538:117;7333:329;;;;:::o;7668:327::-;7726:6;7775:2;7763:9;7754:7;7750:23;7746:32;7743:119;;;7781:79;;:::i;:::-;7743:119;7901:1;7926:52;7970:7;7961:6;7950:9;7946:22;7926:52;:::i;:::-;7916:62;;7872:116;7668:327;;;;:::o;8001:349::-;8070:6;8119:2;8107:9;8098:7;8094:23;8090:32;8087:119;;;8125:79;;:::i;:::-;8087:119;8245:1;8270:63;8325:7;8316:6;8305:9;8301:22;8270:63;:::i;:::-;8260:73;;8216:127;8001:349;;;;:::o;8356:529::-;8427:6;8435;8484:2;8472:9;8463:7;8459:23;8455:32;8452:119;;;8490:79;;:::i;:::-;8452:119;8638:1;8627:9;8623:17;8610:31;8668:18;8660:6;8657:30;8654:117;;;8690:79;;:::i;:::-;8654:117;8803:65;8860:7;8851:6;8840:9;8836:22;8803:65;:::i;:::-;8785:83;;;;8581:297;8356:529;;;;;:::o;8891:329::-;8950:6;8999:2;8987:9;8978:7;8974:23;8970:32;8967:119;;;9005:79;;:::i;:::-;8967:119;9125:1;9150:53;9195:7;9186:6;9175:9;9171:22;9150:53;:::i;:::-;9140:63;;9096:117;8891:329;;;;:::o;9226:327::-;9284:6;9333:2;9321:9;9312:7;9308:23;9304:32;9301:119;;;9339:79;;:::i;:::-;9301:119;9459:1;9484:52;9528:7;9519:6;9508:9;9504:22;9484:52;:::i;:::-;9474:62;;9430:116;9226:327;;;;:::o;9559:118::-;9646:24;9664:5;9646:24;:::i;:::-;9641:3;9634:37;9559:118;;:::o;9683:157::-;9788:45;9808:24;9826:5;9808:24;:::i;:::-;9788:45;:::i;:::-;9783:3;9776:58;9683:157;;:::o;9846:109::-;9927:21;9942:5;9927:21;:::i;:::-;9922:3;9915:34;9846:109;;:::o;9961:118::-;10048:24;10066:5;10048:24;:::i;:::-;10043:3;10036:37;9961:118;;:::o;10085:157::-;10190:45;10210:24;10228:5;10210:24;:::i;:::-;10190:45;:::i;:::-;10185:3;10178:58;10085:157;;:::o;10248:360::-;10334:3;10362:38;10394:5;10362:38;:::i;:::-;10416:70;10479:6;10474:3;10416:70;:::i;:::-;10409:77;;10495:52;10540:6;10535:3;10528:4;10521:5;10517:16;10495:52;:::i;:::-;10572:29;10594:6;10572:29;:::i;:::-;10567:3;10563:39;10556:46;;10338:270;10248:360;;;;:::o;10614:364::-;10702:3;10730:39;10763:5;10730:39;:::i;:::-;10785:71;10849:6;10844:3;10785:71;:::i;:::-;10778:78;;10865:52;10910:6;10905:3;10898:4;10891:5;10887:16;10865:52;:::i;:::-;10942:29;10964:6;10942:29;:::i;:::-;10937:3;10933:39;10926:46;;10706:272;10614:364;;;;:::o;10984:377::-;11090:3;11118:39;11151:5;11118:39;:::i;:::-;11173:89;11255:6;11250:3;11173:89;:::i;:::-;11166:96;;11271:52;11316:6;11311:3;11304:4;11297:5;11293:16;11271:52;:::i;:::-;11348:6;11343:3;11339:16;11332:23;;11094:267;10984:377;;;;:::o;11367:366::-;11509:3;11530:67;11594:2;11589:3;11530:67;:::i;:::-;11523:74;;11606:93;11695:3;11606:93;:::i;:::-;11724:2;11719:3;11715:12;11708:19;;11367:366;;;:::o;11739:::-;11881:3;11902:67;11966:2;11961:3;11902:67;:::i;:::-;11895:74;;11978:93;12067:3;11978:93;:::i;:::-;12096:2;12091:3;12087:12;12080:19;;11739:366;;;:::o;12111:::-;12253:3;12274:67;12338:2;12333:3;12274:67;:::i;:::-;12267:74;;12350:93;12439:3;12350:93;:::i;:::-;12468:2;12463:3;12459:12;12452:19;;12111:366;;;:::o;12483:::-;12625:3;12646:67;12710:2;12705:3;12646:67;:::i;:::-;12639:74;;12722:93;12811:3;12722:93;:::i;:::-;12840:2;12835:3;12831:12;12824:19;;12483:366;;;:::o;12855:::-;12997:3;13018:67;13082:2;13077:3;13018:67;:::i;:::-;13011:74;;13094:93;13183:3;13094:93;:::i;:::-;13212:2;13207:3;13203:12;13196:19;;12855:366;;;:::o;13227:::-;13369:3;13390:67;13454:2;13449:3;13390:67;:::i;:::-;13383:74;;13466:93;13555:3;13466:93;:::i;:::-;13584:2;13579:3;13575:12;13568:19;;13227:366;;;:::o;13599:::-;13741:3;13762:67;13826:2;13821:3;13762:67;:::i;:::-;13755:74;;13838:93;13927:3;13838:93;:::i;:::-;13956:2;13951:3;13947:12;13940:19;;13599:366;;;:::o;13971:::-;14113:3;14134:67;14198:2;14193:3;14134:67;:::i;:::-;14127:74;;14210:93;14299:3;14210:93;:::i;:::-;14328:2;14323:3;14319:12;14312:19;;13971:366;;;:::o;14343:::-;14485:3;14506:67;14570:2;14565:3;14506:67;:::i;:::-;14499:74;;14582:93;14671:3;14582:93;:::i;:::-;14700:2;14695:3;14691:12;14684:19;;14343:366;;;:::o;14715:365::-;14857:3;14878:66;14942:1;14937:3;14878:66;:::i;:::-;14871:73;;14953:93;15042:3;14953:93;:::i;:::-;15071:2;15066:3;15062:12;15055:19;;14715:365;;;:::o;15086:366::-;15228:3;15249:67;15313:2;15308:3;15249:67;:::i;:::-;15242:74;;15325:93;15414:3;15325:93;:::i;:::-;15443:2;15438:3;15434:12;15427:19;;15086:366;;;:::o;15458:::-;15600:3;15621:67;15685:2;15680:3;15621:67;:::i;:::-;15614:74;;15697:93;15786:3;15697:93;:::i;:::-;15815:2;15810:3;15806:12;15799:19;;15458:366;;;:::o;15830:::-;15972:3;15993:67;16057:2;16052:3;15993:67;:::i;:::-;15986:74;;16069:93;16158:3;16069:93;:::i;:::-;16187:2;16182:3;16178:12;16171:19;;15830:366;;;:::o;16202:::-;16344:3;16365:67;16429:2;16424:3;16365:67;:::i;:::-;16358:74;;16441:93;16530:3;16441:93;:::i;:::-;16559:2;16554:3;16550:12;16543:19;;16202:366;;;:::o;16574:::-;16716:3;16737:67;16801:2;16796:3;16737:67;:::i;:::-;16730:74;;16813:93;16902:3;16813:93;:::i;:::-;16931:2;16926:3;16922:12;16915:19;;16574:366;;;:::o;16946:400::-;17106:3;17127:84;17209:1;17204:3;17127:84;:::i;:::-;17120:91;;17220:93;17309:3;17220:93;:::i;:::-;17338:1;17333:3;17329:11;17322:18;;16946:400;;;:::o;17352:366::-;17494:3;17515:67;17579:2;17574:3;17515:67;:::i;:::-;17508:74;;17591:93;17680:3;17591:93;:::i;:::-;17709:2;17704:3;17700:12;17693:19;;17352:366;;;:::o;17724:::-;17866:3;17887:67;17951:2;17946:3;17887:67;:::i;:::-;17880:74;;17963:93;18052:3;17963:93;:::i;:::-;18081:2;18076:3;18072:12;18065:19;;17724:366;;;:::o;18096:::-;18238:3;18259:67;18323:2;18318:3;18259:67;:::i;:::-;18252:74;;18335:93;18424:3;18335:93;:::i;:::-;18453:2;18448:3;18444:12;18437:19;;18096:366;;;:::o;18468:::-;18610:3;18631:67;18695:2;18690:3;18631:67;:::i;:::-;18624:74;;18707:93;18796:3;18707:93;:::i;:::-;18825:2;18820:3;18816:12;18809:19;;18468:366;;;:::o;18840:::-;18982:3;19003:67;19067:2;19062:3;19003:67;:::i;:::-;18996:74;;19079:93;19168:3;19079:93;:::i;:::-;19197:2;19192:3;19188:12;19181:19;;18840:366;;;:::o;19212:::-;19354:3;19375:67;19439:2;19434:3;19375:67;:::i;:::-;19368:74;;19451:93;19540:3;19451:93;:::i;:::-;19569:2;19564:3;19560:12;19553:19;;19212:366;;;:::o;19584:::-;19726:3;19747:67;19811:2;19806:3;19747:67;:::i;:::-;19740:74;;19823:93;19912:3;19823:93;:::i;:::-;19941:2;19936:3;19932:12;19925:19;;19584:366;;;:::o;19956:::-;20098:3;20119:67;20183:2;20178:3;20119:67;:::i;:::-;20112:74;;20195:93;20284:3;20195:93;:::i;:::-;20313:2;20308:3;20304:12;20297:19;;19956:366;;;:::o;20328:::-;20470:3;20491:67;20555:2;20550:3;20491:67;:::i;:::-;20484:74;;20567:93;20656:3;20567:93;:::i;:::-;20685:2;20680:3;20676:12;20669:19;;20328:366;;;:::o;20700:::-;20842:3;20863:67;20927:2;20922:3;20863:67;:::i;:::-;20856:74;;20939:93;21028:3;20939:93;:::i;:::-;21057:2;21052:3;21048:12;21041:19;;20700:366;;;:::o;21072:::-;21214:3;21235:67;21299:2;21294:3;21235:67;:::i;:::-;21228:74;;21311:93;21400:3;21311:93;:::i;:::-;21429:2;21424:3;21420:12;21413:19;;21072:366;;;:::o;21444:::-;21586:3;21607:67;21671:2;21666:3;21607:67;:::i;:::-;21600:74;;21683:93;21772:3;21683:93;:::i;:::-;21801:2;21796:3;21792:12;21785:19;;21444:366;;;:::o;21816:::-;21958:3;21979:67;22043:2;22038:3;21979:67;:::i;:::-;21972:74;;22055:93;22144:3;22055:93;:::i;:::-;22173:2;22168:3;22164:12;22157:19;;21816:366;;;:::o;22188:365::-;22330:3;22351:66;22415:1;22410:3;22351:66;:::i;:::-;22344:73;;22426:93;22515:3;22426:93;:::i;:::-;22544:2;22539:3;22535:12;22528:19;;22188:365;;;:::o;22559:118::-;22646:24;22664:5;22646:24;:::i;:::-;22641:3;22634:37;22559:118;;:::o;22683:115::-;22768:23;22785:5;22768:23;:::i;:::-;22763:3;22756:36;22683:115;;:::o;22804:256::-;22916:3;22931:75;23002:3;22993:6;22931:75;:::i;:::-;23031:2;23026:3;23022:12;23015:19;;23051:3;23044:10;;22804:256;;;;:::o;23066:397::-;23206:3;23221:75;23292:3;23283:6;23221:75;:::i;:::-;23321:2;23316:3;23312:12;23305:19;;23334:75;23405:3;23396:6;23334:75;:::i;:::-;23434:2;23429:3;23425:12;23418:19;;23454:3;23447:10;;23066:397;;;;;:::o;23469:701::-;23750:3;23772:95;23863:3;23854:6;23772:95;:::i;:::-;23765:102;;23884:95;23975:3;23966:6;23884:95;:::i;:::-;23877:102;;23996:148;24140:3;23996:148;:::i;:::-;23989:155;;24161:3;24154:10;;23469:701;;;;;:::o;24176:222::-;24269:4;24307:2;24296:9;24292:18;24284:26;;24320:71;24388:1;24377:9;24373:17;24364:6;24320:71;:::i;:::-;24176:222;;;;:::o;24404:640::-;24599:4;24637:3;24626:9;24622:19;24614:27;;24651:71;24719:1;24708:9;24704:17;24695:6;24651:71;:::i;:::-;24732:72;24800:2;24789:9;24785:18;24776:6;24732:72;:::i;:::-;24814;24882:2;24871:9;24867:18;24858:6;24814:72;:::i;:::-;24933:9;24927:4;24923:20;24918:2;24907:9;24903:18;24896:48;24961:76;25032:4;25023:6;24961:76;:::i;:::-;24953:84;;24404:640;;;;;;;:::o;25050:210::-;25137:4;25175:2;25164:9;25160:18;25152:26;;25188:65;25250:1;25239:9;25235:17;25226:6;25188:65;:::i;:::-;25050:210;;;;:::o;25266:222::-;25359:4;25397:2;25386:9;25382:18;25374:26;;25410:71;25478:1;25467:9;25463:17;25454:6;25410:71;:::i;:::-;25266:222;;;;:::o;25494:313::-;25607:4;25645:2;25634:9;25630:18;25622:26;;25694:9;25688:4;25684:20;25680:1;25669:9;25665:17;25658:47;25722:78;25795:4;25786:6;25722:78;:::i;:::-;25714:86;;25494:313;;;;:::o;25813:419::-;25979:4;26017:2;26006:9;26002:18;25994:26;;26066:9;26060:4;26056:20;26052:1;26041:9;26037:17;26030:47;26094:131;26220:4;26094:131;:::i;:::-;26086:139;;25813:419;;;:::o;26238:::-;26404:4;26442:2;26431:9;26427:18;26419:26;;26491:9;26485:4;26481:20;26477:1;26466:9;26462:17;26455:47;26519:131;26645:4;26519:131;:::i;:::-;26511:139;;26238:419;;;:::o;26663:::-;26829:4;26867:2;26856:9;26852:18;26844:26;;26916:9;26910:4;26906:20;26902:1;26891:9;26887:17;26880:47;26944:131;27070:4;26944:131;:::i;:::-;26936:139;;26663:419;;;:::o;27088:::-;27254:4;27292:2;27281:9;27277:18;27269:26;;27341:9;27335:4;27331:20;27327:1;27316:9;27312:17;27305:47;27369:131;27495:4;27369:131;:::i;:::-;27361:139;;27088:419;;;:::o;27513:::-;27679:4;27717:2;27706:9;27702:18;27694:26;;27766:9;27760:4;27756:20;27752:1;27741:9;27737:17;27730:47;27794:131;27920:4;27794:131;:::i;:::-;27786:139;;27513:419;;;:::o;27938:::-;28104:4;28142:2;28131:9;28127:18;28119:26;;28191:9;28185:4;28181:20;28177:1;28166:9;28162:17;28155:47;28219:131;28345:4;28219:131;:::i;:::-;28211:139;;27938:419;;;:::o;28363:::-;28529:4;28567:2;28556:9;28552:18;28544:26;;28616:9;28610:4;28606:20;28602:1;28591:9;28587:17;28580:47;28644:131;28770:4;28644:131;:::i;:::-;28636:139;;28363:419;;;:::o;28788:::-;28954:4;28992:2;28981:9;28977:18;28969:26;;29041:9;29035:4;29031:20;29027:1;29016:9;29012:17;29005:47;29069:131;29195:4;29069:131;:::i;:::-;29061:139;;28788:419;;;:::o;29213:::-;29379:4;29417:2;29406:9;29402:18;29394:26;;29466:9;29460:4;29456:20;29452:1;29441:9;29437:17;29430:47;29494:131;29620:4;29494:131;:::i;:::-;29486:139;;29213:419;;;:::o;29638:::-;29804:4;29842:2;29831:9;29827:18;29819:26;;29891:9;29885:4;29881:20;29877:1;29866:9;29862:17;29855:47;29919:131;30045:4;29919:131;:::i;:::-;29911:139;;29638:419;;;:::o;30063:::-;30229:4;30267:2;30256:9;30252:18;30244:26;;30316:9;30310:4;30306:20;30302:1;30291:9;30287:17;30280:47;30344:131;30470:4;30344:131;:::i;:::-;30336:139;;30063:419;;;:::o;30488:::-;30654:4;30692:2;30681:9;30677:18;30669:26;;30741:9;30735:4;30731:20;30727:1;30716:9;30712:17;30705:47;30769:131;30895:4;30769:131;:::i;:::-;30761:139;;30488:419;;;:::o;30913:::-;31079:4;31117:2;31106:9;31102:18;31094:26;;31166:9;31160:4;31156:20;31152:1;31141:9;31137:17;31130:47;31194:131;31320:4;31194:131;:::i;:::-;31186:139;;30913:419;;;:::o;31338:::-;31504:4;31542:2;31531:9;31527:18;31519:26;;31591:9;31585:4;31581:20;31577:1;31566:9;31562:17;31555:47;31619:131;31745:4;31619:131;:::i;:::-;31611:139;;31338:419;;;:::o;31763:::-;31929:4;31967:2;31956:9;31952:18;31944:26;;32016:9;32010:4;32006:20;32002:1;31991:9;31987:17;31980:47;32044:131;32170:4;32044:131;:::i;:::-;32036:139;;31763:419;;;:::o;32188:::-;32354:4;32392:2;32381:9;32377:18;32369:26;;32441:9;32435:4;32431:20;32427:1;32416:9;32412:17;32405:47;32469:131;32595:4;32469:131;:::i;:::-;32461:139;;32188:419;;;:::o;32613:::-;32779:4;32817:2;32806:9;32802:18;32794:26;;32866:9;32860:4;32856:20;32852:1;32841:9;32837:17;32830:47;32894:131;33020:4;32894:131;:::i;:::-;32886:139;;32613:419;;;:::o;33038:::-;33204:4;33242:2;33231:9;33227:18;33219:26;;33291:9;33285:4;33281:20;33277:1;33266:9;33262:17;33255:47;33319:131;33445:4;33319:131;:::i;:::-;33311:139;;33038:419;;;:::o;33463:::-;33629:4;33667:2;33656:9;33652:18;33644:26;;33716:9;33710:4;33706:20;33702:1;33691:9;33687:17;33680:47;33744:131;33870:4;33744:131;:::i;:::-;33736:139;;33463:419;;;:::o;33888:::-;34054:4;34092:2;34081:9;34077:18;34069:26;;34141:9;34135:4;34131:20;34127:1;34116:9;34112:17;34105:47;34169:131;34295:4;34169:131;:::i;:::-;34161:139;;33888:419;;;:::o;34313:::-;34479:4;34517:2;34506:9;34502:18;34494:26;;34566:9;34560:4;34556:20;34552:1;34541:9;34537:17;34530:47;34594:131;34720:4;34594:131;:::i;:::-;34586:139;;34313:419;;;:::o;34738:::-;34904:4;34942:2;34931:9;34927:18;34919:26;;34991:9;34985:4;34981:20;34977:1;34966:9;34962:17;34955:47;35019:131;35145:4;35019:131;:::i;:::-;35011:139;;34738:419;;;:::o;35163:::-;35329:4;35367:2;35356:9;35352:18;35344:26;;35416:9;35410:4;35406:20;35402:1;35391:9;35387:17;35380:47;35444:131;35570:4;35444:131;:::i;:::-;35436:139;;35163:419;;;:::o;35588:::-;35754:4;35792:2;35781:9;35777:18;35769:26;;35841:9;35835:4;35831:20;35827:1;35816:9;35812:17;35805:47;35869:131;35995:4;35869:131;:::i;:::-;35861:139;;35588:419;;;:::o;36013:::-;36179:4;36217:2;36206:9;36202:18;36194:26;;36266:9;36260:4;36256:20;36252:1;36241:9;36237:17;36230:47;36294:131;36420:4;36294:131;:::i;:::-;36286:139;;36013:419;;;:::o;36438:::-;36604:4;36642:2;36631:9;36627:18;36619:26;;36691:9;36685:4;36681:20;36677:1;36666:9;36662:17;36655:47;36719:131;36845:4;36719:131;:::i;:::-;36711:139;;36438:419;;;:::o;36863:::-;37029:4;37067:2;37056:9;37052:18;37044:26;;37116:9;37110:4;37106:20;37102:1;37091:9;37087:17;37080:47;37144:131;37270:4;37144:131;:::i;:::-;37136:139;;36863:419;;;:::o;37288:::-;37454:4;37492:2;37481:9;37477:18;37469:26;;37541:9;37535:4;37531:20;37527:1;37516:9;37512:17;37505:47;37569:131;37695:4;37569:131;:::i;:::-;37561:139;;37288:419;;;:::o;37713:::-;37879:4;37917:2;37906:9;37902:18;37894:26;;37966:9;37960:4;37956:20;37952:1;37941:9;37937:17;37930:47;37994:131;38120:4;37994:131;:::i;:::-;37986:139;;37713:419;;;:::o;38138:222::-;38231:4;38269:2;38258:9;38254:18;38246:26;;38282:71;38350:1;38339:9;38335:17;38326:6;38282:71;:::i;:::-;38138:222;;;;:::o;38366:218::-;38457:4;38495:2;38484:9;38480:18;38472:26;;38508:69;38574:1;38563:9;38559:17;38550:6;38508:69;:::i;:::-;38366:218;;;;:::o;38590:129::-;38624:6;38651:20;;:::i;:::-;38641:30;;38680:33;38708:4;38700:6;38680:33;:::i;:::-;38590:129;;;:::o;38725:75::-;38758:6;38791:2;38785:9;38775:19;;38725:75;:::o;38806:307::-;38867:4;38957:18;38949:6;38946:30;38943:56;;;38979:18;;:::i;:::-;38943:56;39017:29;39039:6;39017:29;:::i;:::-;39009:37;;39101:4;39095;39091:15;39083:23;;38806:307;;;:::o;39119:98::-;39170:6;39204:5;39198:12;39188:22;;39119:98;;;:::o;39223:99::-;39275:6;39309:5;39303:12;39293:22;;39223:99;;;:::o;39328:168::-;39411:11;39445:6;39440:3;39433:19;39485:4;39480:3;39476:14;39461:29;;39328:168;;;;:::o;39502:169::-;39586:11;39620:6;39615:3;39608:19;39660:4;39655:3;39651:14;39636:29;;39502:169;;;;:::o;39677:148::-;39779:11;39816:3;39801:18;;39677:148;;;;:::o;39831:273::-;39871:3;39890:20;39908:1;39890:20;:::i;:::-;39885:25;;39924:20;39942:1;39924:20;:::i;:::-;39919:25;;40046:1;40010:34;40006:42;40003:1;40000:49;39997:75;;;40052:18;;:::i;:::-;39997:75;40096:1;40093;40089:9;40082:16;;39831:273;;;;:::o;40110:305::-;40150:3;40169:20;40187:1;40169:20;:::i;:::-;40164:25;;40203:20;40221:1;40203:20;:::i;:::-;40198:25;;40357:1;40289:66;40285:74;40282:1;40279:81;40276:107;;;40363:18;;:::i;:::-;40276:107;40407:1;40404;40400:9;40393:16;;40110:305;;;;:::o;40421:246::-;40460:3;40479:19;40496:1;40479:19;:::i;:::-;40474:24;;40512:19;40529:1;40512:19;:::i;:::-;40507:24;;40609:1;40597:10;40593:18;40590:1;40587:25;40584:51;;;40615:18;;:::i;:::-;40584:51;40659:1;40656;40652:9;40645:16;;40421:246;;;;:::o;40673:185::-;40713:1;40730:20;40748:1;40730:20;:::i;:::-;40725:25;;40764:20;40782:1;40764:20;:::i;:::-;40759:25;;40803:1;40793:35;;40808:18;;:::i;:::-;40793:35;40850:1;40847;40843:9;40838:14;;40673:185;;;;:::o;40864:348::-;40904:7;40927:20;40945:1;40927:20;:::i;:::-;40922:25;;40961:20;40979:1;40961:20;:::i;:::-;40956:25;;41149:1;41081:66;41077:74;41074:1;41071:81;41066:1;41059:9;41052:17;41048:105;41045:131;;;41156:18;;:::i;:::-;41045:131;41204:1;41201;41197:9;41186:20;;40864:348;;;;:::o;41218:191::-;41258:4;41278:20;41296:1;41278:20;:::i;:::-;41273:25;;41312:20;41330:1;41312:20;:::i;:::-;41307:25;;41351:1;41348;41345:8;41342:34;;;41356:18;;:::i;:::-;41342:34;41401:1;41398;41394:9;41386:17;;41218:191;;;;:::o;41415:::-;41455:4;41475:20;41493:1;41475:20;:::i;:::-;41470:25;;41509:20;41527:1;41509:20;:::i;:::-;41504:25;;41548:1;41545;41542:8;41539:34;;;41553:18;;:::i;:::-;41539:34;41598:1;41595;41591:9;41583:17;;41415:191;;;;:::o;41612:96::-;41649:7;41678:24;41696:5;41678:24;:::i;:::-;41667:35;;41612:96;;;:::o;41714:90::-;41748:7;41791:5;41784:13;41777:21;41766:32;;41714:90;;;:::o;41810:77::-;41847:7;41876:5;41865:16;;41810:77;;;:::o;41893:149::-;41929:7;41969:66;41962:5;41958:78;41947:89;;41893:149;;;:::o;42048:118::-;42085:7;42125:34;42118:5;42114:46;42103:57;;42048:118;;;:::o;42172:126::-;42209:7;42249:42;42242:5;42238:54;42227:65;;42172:126;;;:::o;42304:77::-;42341:7;42370:5;42359:16;;42304:77;;;:::o;42387:93::-;42423:7;42463:10;42456:5;42452:22;42441:33;;42387:93;;;:::o;42486:154::-;42570:6;42565:3;42560;42547:30;42632:1;42623:6;42618:3;42614:16;42607:27;42486:154;;;:::o;42646:307::-;42714:1;42724:113;42738:6;42735:1;42732:13;42724:113;;;42823:1;42818:3;42814:11;42808:18;42804:1;42799:3;42795:11;42788:39;42760:2;42757:1;42753:10;42748:15;;42724:113;;;42855:6;42852:1;42849:13;42846:101;;;42935:1;42926:6;42921:3;42917:16;42910:27;42846:101;42695:258;42646:307;;;:::o;42959:171::-;42998:3;43021:24;43039:5;43021:24;:::i;:::-;43012:33;;43067:4;43060:5;43057:15;43054:41;;;43075:18;;:::i;:::-;43054:41;43122:1;43115:5;43111:13;43104:20;;42959:171;;;:::o;43136:320::-;43180:6;43217:1;43211:4;43207:12;43197:22;;43264:1;43258:4;43254:12;43285:18;43275:81;;43341:4;43333:6;43329:17;43319:27;;43275:81;43403:2;43395:6;43392:14;43372:18;43369:38;43366:84;;;43422:18;;:::i;:::-;43366:84;43187:269;43136:320;;;:::o;43462:281::-;43545:27;43567:4;43545:27;:::i;:::-;43537:6;43533:40;43675:6;43663:10;43660:22;43639:18;43627:10;43624:34;43621:62;43618:88;;;43686:18;;:::i;:::-;43618:88;43726:10;43722:2;43715:22;43505:238;43462:281;;:::o;43749:233::-;43788:3;43811:24;43829:5;43811:24;:::i;:::-;43802:33;;43857:66;43850:5;43847:77;43844:103;;;43927:18;;:::i;:::-;43844:103;43974:1;43967:5;43963:13;43956:20;;43749:233;;;:::o;43988:100::-;44027:7;44056:26;44076:5;44056:26;:::i;:::-;44045:37;;43988:100;;;:::o;44094:79::-;44133:7;44162:5;44151:16;;44094:79;;;:::o;44179:94::-;44218:7;44247:20;44261:5;44247:20;:::i;:::-;44236:31;;44179:94;;;:::o;44279:176::-;44311:1;44328:20;44346:1;44328:20;:::i;:::-;44323:25;;44362:20;44380:1;44362:20;:::i;:::-;44357:25;;44401:1;44391:35;;44406:18;;:::i;:::-;44391:35;44447:1;44444;44440:9;44435:14;;44279:176;;;;:::o;44461:180::-;44509:77;44506:1;44499:88;44606:4;44603:1;44596:15;44630:4;44627:1;44620:15;44647:180;44695:77;44692:1;44685:88;44792:4;44789:1;44782:15;44816:4;44813:1;44806:15;44833:180;44881:77;44878:1;44871:88;44978:4;44975:1;44968:15;45002:4;44999:1;44992:15;45019:180;45067:77;45064:1;45057:88;45164:4;45161:1;45154:15;45188:4;45185:1;45178:15;45205:180;45253:77;45250:1;45243:88;45350:4;45347:1;45340:15;45374:4;45371:1;45364:15;45391:117;45500:1;45497;45490:12;45514:117;45623:1;45620;45613:12;45637:117;45746:1;45743;45736:12;45760:117;45869:1;45866;45859:12;45883:117;45992:1;45989;45982:12;46006:117;46115:1;46112;46105:12;46129:102;46170:6;46221:2;46217:7;46212:2;46205:5;46201:14;46197:28;46187:38;;46129:102;;;:::o;46237:94::-;46270:8;46318:5;46314:2;46310:14;46289:35;;46237:94;;;:::o;46337:221::-;46477:34;46473:1;46465:6;46461:14;46454:58;46546:4;46541:2;46533:6;46529:15;46522:29;46337:221;:::o;46564:176::-;46704:28;46700:1;46692:6;46688:14;46681:52;46564:176;:::o;46746:225::-;46886:34;46882:1;46874:6;46870:14;46863:58;46955:8;46950:2;46942:6;46938:15;46931:33;46746:225;:::o;46977:229::-;47117:34;47113:1;47105:6;47101:14;47094:58;47186:12;47181:2;47173:6;47169:15;47162:37;46977:229;:::o;47212:177::-;47352:29;47348:1;47340:6;47336:14;47329:53;47212:177;:::o;47395:167::-;47535:19;47531:1;47523:6;47519:14;47512:43;47395:167;:::o;47568:222::-;47708:34;47704:1;47696:6;47692:14;47685:58;47777:5;47772:2;47764:6;47760:15;47753:30;47568:222;:::o;47796:224::-;47936:34;47932:1;47924:6;47920:14;47913:58;48005:7;48000:2;47992:6;47988:15;47981:32;47796:224;:::o;48026:225::-;48166:34;48162:1;48154:6;48150:14;48143:58;48235:8;48230:2;48222:6;48218:15;48211:33;48026:225;:::o;48257:157::-;48397:9;48393:1;48385:6;48381:14;48374:33;48257:157;:::o;48420:168::-;48560:20;48556:1;48548:6;48544:14;48537:44;48420:168;:::o;48594:244::-;48734:34;48730:1;48722:6;48718:14;48711:58;48803:27;48798:2;48790:6;48786:15;48779:52;48594:244;:::o;48844:171::-;48984:23;48980:1;48972:6;48968:14;48961:47;48844:171;:::o;49021:230::-;49161:34;49157:1;49149:6;49145:14;49138:58;49230:13;49225:2;49217:6;49213:15;49206:38;49021:230;:::o;49257:225::-;49397:34;49393:1;49385:6;49381:14;49374:58;49466:8;49461:2;49453:6;49449:15;49442:33;49257:225;:::o;49488:155::-;49628:7;49624:1;49616:6;49612:14;49605:31;49488:155;:::o;49649:182::-;49789:34;49785:1;49777:6;49773:14;49766:58;49649:182;:::o;49837:234::-;49977:34;49973:1;49965:6;49961:14;49954:58;50046:17;50041:2;50033:6;50029:15;50022:42;49837:234;:::o;50077:176::-;50217:28;50213:1;50205:6;50201:14;50194:52;50077:176;:::o;50259:237::-;50399:34;50395:1;50387:6;50383:14;50376:58;50468:20;50463:2;50455:6;50451:15;50444:45;50259:237;:::o;50502:::-;50642:34;50638:1;50630:6;50626:14;50619:58;50711:20;50706:2;50698:6;50694:15;50687:45;50502:237;:::o;50745:221::-;50885:34;50881:1;50873:6;50869:14;50862:58;50954:4;50949:2;50941:6;50937:15;50930:29;50745:221;:::o;50972:238::-;51112:34;51108:1;51100:6;51096:14;51089:58;51181:21;51176:2;51168:6;51164:15;51157:46;50972:238;:::o;51216:179::-;51356:31;51352:1;51344:6;51340:14;51333:55;51216:179;:::o;51401:220::-;51541:34;51537:1;51529:6;51525:14;51518:58;51610:3;51605:2;51597:6;51593:15;51586:28;51401:220;:::o;51627:233::-;51767:34;51763:1;51755:6;51751:14;51744:58;51836:16;51831:2;51823:6;51819:15;51812:41;51627:233;:::o;51866:173::-;52006:25;52002:1;51994:6;51990:14;51983:49;51866:173;:::o;52045:234::-;52185:34;52181:1;52173:6;52169:14;52162:58;52254:17;52249:2;52241:6;52237:15;52230:42;52045:234;:::o;52285:232::-;52425:34;52421:1;52413:6;52409:14;52402:58;52494:15;52489:2;52481:6;52477:15;52470:40;52285:232;:::o;52523:159::-;52663:11;52659:1;52651:6;52647:14;52640:35;52523:159;:::o;52688:122::-;52761:24;52779:5;52761:24;:::i;:::-;52754:5;52751:35;52741:63;;52800:1;52797;52790:12;52741:63;52688:122;:::o;52816:116::-;52886:21;52901:5;52886:21;:::i;:::-;52879:5;52876:32;52866:60;;52922:1;52919;52912:12;52866:60;52816:116;:::o;52938:122::-;53011:24;53029:5;53011:24;:::i;:::-;53004:5;53001:35;52991:63;;53050:1;53047;53040:12;52991:63;52938:122;:::o;53066:120::-;53138:23;53155:5;53138:23;:::i;:::-;53131:5;53128:34;53118:62;;53176:1;53173;53166:12;53118:62;53066:120;:::o;53192:122::-;53265:24;53283:5;53265:24;:::i;:::-;53258:5;53255:35;53245:63;;53304:1;53301;53294:12;53245:63;53192:122;:::o;53320:120::-;53392:23;53409:5;53392:23;:::i;:::-;53385:5;53382:34;53372:62;;53430:1;53427;53420:12;53372:62;53320:120;:::o
Swarm Source
ipfs://25a494d1e252311084d2adaddb82d503631951150c705051e29cae584b7493ba
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,392.58 | 0.112 | $379.97 |
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.