ERC-721
Overview
Max Total Supply
504 KAYC
Holders
29
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
10 KAYCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
KevinApeYachtClub
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-05 */ /** Kevin Ape Yacht Club is a collection of 1669 Kevin Apes hanging out on the beach. The first 469 mints are free and .0069 after. https://twitter.com/KevinApeYC */ /** *Submitted for verification at Etherscan.io on 2022-03-03 */ /** *Submitted for verification at Etherscan.io on 2022-03-01 */ // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol 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); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ 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); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed 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); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) /** * @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); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ 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" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ 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); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ 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); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ 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); } } } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) /** * @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; } } // File contracts/ERC721A.sol // Creator: Chiru Labs /** * @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..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 (max value of uint128) of supply */ 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 internal currentIndex = 1; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @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(totalSupply). 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"); for (uint256 curr = tokenId; ; 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())) : ""; } /** * @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: * * - `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 > 0, "ERC721A: quantity must be greater 0"); _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); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { _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); } /** * @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 {} } contract KevinApeYachtClub is ERC721A, Ownable { string public baseURI = "ipfs://QmWiU3eQSjrqYxa5bpZtEoBzCmwqXXv3AP45pc4uuiK7Tm/"; string public constant baseExtension = ".json"; address public constant proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1; uint256 public constant MAX_PER_TX_FREE = 10; uint256 public constant MAX_PER_TX = 10; uint256 public constant FREE_MAX_SUPPLY = 469; uint256 public constant MAX_SUPPLY = 1669; uint256 public constant price = 0.0069 ether; bool public paused = true; constructor() ERC721A("KevinApeYachtClub", "KAYC") {} function mint(uint256 _amount) public payable { require(!paused, "Paused"); require(MAX_SUPPLY >= totalSupply() + _amount, "Exceeds max supply"); require(_amount > 0, "No 0 mints"); if (FREE_MAX_SUPPLY >= totalSupply() + _amount) { require(MAX_PER_TX_FREE >= _amount, "Excess max per free tx"); } else { require(MAX_PER_TX >= _amount, "Excess max per paid tx"); require(msg.value >= _amount * price, "Invalid funds provided"); } _safeMint(msg.sender, _amount); } function isApprovedForAll(address owner, address operator) public view override returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } function withdraw() public onlyOwner { (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(""); require(success); } function pause(bool _state) public onlyOwner { paused = _state; } function setBaseURI(string memory baseURI_) public onlyOwner { baseURI = baseURI_; } function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "Token does not exist."); return bytes(baseURI).length > 0 ? string( abi.encodePacked( baseURI, Strings.toString(_tokenId), baseExtension ) ) : ""; } } contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; }
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":[],"name":"FREE_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX_FREE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260016000556040518060600160405280603681526020016200489b60369139600890805190602001906200003a929190620001f8565b506001600960006101000a81548160ff0219169083151502179055503480156200006357600080fd5b506040518060400160405280601181526020017f4b6576696e4170655961636874436c75620000000000000000000000000000008152506040518060400160405280600481526020017f4b415943000000000000000000000000000000000000000000000000000000008152508160019080519060200190620000e8929190620001f8565b50806002908051906020019062000101929190620001f8565b50505062000124620001186200012a60201b60201c565b6200013260201b60201c565b6200030d565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020690620002a8565b90600052602060002090601f0160209004810192826200022a576000855562000276565b82601f106200024557805160ff191683800117855562000276565b8280016001018555821562000276579182015b828111156200027557825182559160200191906001019062000258565b5b50905062000285919062000289565b5090565b5b80821115620002a45760008160009055506001016200028a565b5090565b60006002820490506001821680620002c157607f821691505b60208210811415620002d857620002d7620002de565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61457e806200031d6000396000f3fe6080604052600436106101e35760003560e01c80636c0360eb11610102578063a22cb46511610095578063cd7c032611610064578063cd7c0326146106d5578063e985e9c514610700578063f2fde38b1461073d578063f43a22dc14610766576101e3565b8063a22cb4651461061b578063b88d4fde14610644578063c66828621461066d578063c87b56dd14610698576101e3565b80638da5cb5b116100d15780638da5cb5b1461057e57806395d89b41146105a9578063a035b1fe146105d4578063a0712d68146105ff576101e3565b80636c0360eb146104d457806370a08231146104ff578063715018a61461053c5780638069876d14610553576101e3565b806332cb6b0c1161017a5780634f6ccce7116101495780634f6ccce71461040657806355f804b3146104435780635c975abb1461046c5780636352211e14610497576101e3565b806332cb6b0c146103705780633ccfd60b1461039b57806342842e0e146103b2578063463fff79146103db576101e3565b8063095ea7b3116101b6578063095ea7b3146102b657806318160ddd146102df57806323b872dd1461030a5780632f745c5914610333576101e3565b806301ffc9a7146101e857806302329a291461022557806306fdde031461024e578063081812fc14610279575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612f58565b610791565b60405161021c91906135df565b60405180910390f35b34801561023157600080fd5b5061024c60048036038101906102479190612f2b565b6108db565b005b34801561025a57600080fd5b50610263610974565b60405161027091906135fa565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190613028565b610a06565b6040516102ad9190613578565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d89190612eeb565b610a8b565b005b3480156102eb57600080fd5b506102f4610ba4565b604051610301919061393c565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c9190612dd5565b610bad565b005b34801561033f57600080fd5b5061035a60048036038101906103559190612eeb565b610bbd565b604051610367919061393c565b60405180910390f35b34801561037c57600080fd5b50610385610dbb565b604051610392919061393c565b60405180910390f35b3480156103a757600080fd5b506103b0610dc1565b005b3480156103be57600080fd5b506103d960048036038101906103d49190612dd5565b610eb6565b005b3480156103e757600080fd5b506103f0610ed6565b6040516103fd919061393c565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190613028565b610edb565b60405161043a919061393c565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190612fdf565b610f2e565b005b34801561047857600080fd5b50610481610fc4565b60405161048e91906135df565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190613028565b610fd7565b6040516104cb9190613578565b60405180910390f35b3480156104e057600080fd5b506104e9610fed565b6040516104f691906135fa565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190612d68565b61107b565b604051610533919061393c565b60405180910390f35b34801561054857600080fd5b50610551611164565b005b34801561055f57600080fd5b506105686111ec565b604051610575919061393c565b60405180910390f35b34801561058a57600080fd5b506105936111f2565b6040516105a09190613578565b60405180910390f35b3480156105b557600080fd5b506105be61121c565b6040516105cb91906135fa565b60405180910390f35b3480156105e057600080fd5b506105e96112ae565b6040516105f6919061393c565b60405180910390f35b61061960048036038101906106149190613028565b6112b9565b005b34801561062757600080fd5b50610642600480360381019061063d9190612eab565b6114ae565b005b34801561065057600080fd5b5061066b60048036038101906106669190612e28565b61162f565b005b34801561067957600080fd5b5061068261168b565b60405161068f91906135fa565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190613028565b6116c4565b6040516106cc91906135fa565b60405180910390f35b3480156106e157600080fd5b506106ea6117a3565b6040516106f79190613578565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190612d95565b6117bb565b60405161073491906135df565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190612d68565b6118af565b005b34801561077257600080fd5b5061077b6119a7565b604051610788919061393c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061085c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d457506108d3826119ac565b5b9050919050565b6108e3611a16565b73ffffffffffffffffffffffffffffffffffffffff166109016111f2565b73ffffffffffffffffffffffffffffffffffffffff1614610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e906137dc565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60606001805461098390613caa565b80601f01602080910402602001604051908101604052809291908181526020018280546109af90613caa565b80156109fc5780601f106109d1576101008083540402835291602001916109fc565b820191906000526020600020905b8154815290600101906020018083116109df57829003601f168201915b5050505050905090565b6000610a1182611a1e565b610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a479061391c565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a9682610fd7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe9061385c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b26611a16565b73ffffffffffffffffffffffffffffffffffffffff161480610b555750610b5481610b4f611a16565b6117bb565b5b610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b9061373c565b60405180910390fd5b610b9f838383611a2b565b505050565b60008054905090565b610bb8838383611add565b505050565b6000610bc88361107b565b8210610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c009061361c565b60405180910390fd5b6000610c13610ba4565b905060008060005b83811015610d79576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d0d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d655786841415610d56578195505050505050610db5565b8380610d6190613d0d565b9450505b508080610d7190613d0d565b915050610c1b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac906138fc565b60405180910390fd5b92915050565b61068581565b610dc9611a16565b73ffffffffffffffffffffffffffffffffffffffff16610de76111f2565b73ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e34906137dc565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e6390613563565b60006040518083038185875af1925050503d8060008114610ea0576040519150601f19603f3d011682016040523d82523d6000602084013e610ea5565b606091505b5050905080610eb357600080fd5b50565b610ed18383836040518060200160405280600081525061162f565b505050565b600a81565b6000610ee5610ba4565b8210610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d906136dc565b60405180910390fd5b819050919050565b610f36611a16565b73ffffffffffffffffffffffffffffffffffffffff16610f546111f2565b73ffffffffffffffffffffffffffffffffffffffff1614610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1906137dc565b60405180910390fd5b8060089080519060200190610fc0929190612b2d565b5050565b600960009054906101000a900460ff1681565b6000610fe282612084565b600001519050919050565b60088054610ffa90613caa565b80601f016020809104026020016040519081016040528092919081815260200182805461102690613caa565b80156110735780601f1061104857610100808354040283529160200191611073565b820191906000526020600020905b81548152906001019060200180831161105657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e39061377c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61116c611a16565b73ffffffffffffffffffffffffffffffffffffffff1661118a6111f2565b73ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d7906137dc565b60405180910390fd5b6111ea60006121df565b565b6101d581565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461122b90613caa565b80601f016020809104026020016040519081016040528092919081815260200182805461125790613caa565b80156112a45780601f10611279576101008083540402835291602001916112a4565b820191906000526020600020905b81548152906001019060200180831161128757829003601f168201915b5050505050905090565b6618838370f3400081565b600960009054906101000a900460ff1615611309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113009061363c565b60405180910390fd5b80611312610ba4565b61131c9190613a87565b6106851015611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113579061375c565b60405180910390fd5b600081116113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a9061369c565b60405180910390fd5b806113ac610ba4565b6113b69190613a87565b6101d5106114075780600a1015611402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f99061371c565b60405180910390fd5b6114a1565b80600a101561144b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611442906136bc565b60405180910390fd5b6618838370f340008161145e9190613b0e565b3410156114a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114979061383c565b60405180910390fd5b5b6114ab33826122a5565b50565b6114b6611a16565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b906137fc565b60405180910390fd5b8060066000611531611a16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115de611a16565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161162391906135df565b60405180910390a35050565b61163a848484611add565b611646848484846122c3565b611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167c9061389c565b60405180910390fd5b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b60606116cf82611a1e565b61170e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117059061379c565b60405180910390fd5b60006008805461171d90613caa565b905011611739576040518060200160405280600081525061179c565b60086117448361245a565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060405160200161178c93929190613532565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60008073a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016118259190613578565b60206040518083038186803b15801561183d57600080fd5b505afa158015611851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118759190612fb2565b73ffffffffffffffffffffffffffffffffffffffff16141561189b5760019150506118a9565b6118a584846125bb565b9150505b92915050565b6118b7611a16565b73ffffffffffffffffffffffffffffffffffffffff166118d56111f2565b73ffffffffffffffffffffffffffffffffffffffff161461192b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611922906137dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119929061365c565b60405180910390fd5b6119a4816121df565b50565b600a81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ae882612084565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611b0f611a16565b73ffffffffffffffffffffffffffffffffffffffff161480611b6b5750611b34611a16565b73ffffffffffffffffffffffffffffffffffffffff16611b5384610a06565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b875750611b868260000151611b81611a16565b6117bb565b5b905080611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc09061381c565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c32906137bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca2906136fc565b60405180910390fd5b611cb8858585600161264f565b611cc86000848460000151611a2b565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611ece9190613a87565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561201457611f4481611a1e565b15612013576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461207c8686866001612655565b505050505050565b61208c612bb3565b61209582611a1e565b6120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb9061367c565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121c65780925050506121da565b5080806121d290613c80565b9150506120da565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122bf82826040518060200160405280600081525061265b565b5050565b60006122e48473ffffffffffffffffffffffffffffffffffffffff16612b1a565b1561244d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261230d611a16565b8786866040518563ffffffff1660e01b815260040161232f9493929190613593565b602060405180830381600087803b15801561234957600080fd5b505af192505050801561237a57506040513d601f19601f820116820180604052508101906123779190612f85565b60015b6123fd573d80600081146123aa576040519150601f19603f3d011682016040523d82523d6000602084013e6123af565b606091505b506000815114156123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec9061389c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612452565b600190505b949350505050565b606060008214156124a2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125b6565b600082905060005b600082146124d45780806124bd90613d0d565b915050600a826124cd9190613add565b91506124aa565b60008167ffffffffffffffff8111156124f0576124ef613e43565b5b6040519080825280601f01601f1916602001820160405280156125225781602001600182028036833780820191505090505b5090505b600085146125af5760018261253b9190613b68565b9150600a8561254a9190613d56565b60306125569190613a87565b60f81b81838151811061256c5761256b613e14565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125a89190613add565b9450612526565b8093505050505b919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c8906138dc565b60405180910390fd5b6126da81611a1e565b1561271a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612711906138bc565b60405180910390fd5b6000831161275d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127549061387c565b60405180910390fd5b61276a600085838661264f565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516128679190613a41565b6fffffffffffffffffffffffffffffffff16815260200185836020015161288e9190613a41565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612afd57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a9d60008884886122c3565b612adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad39061389c565b60405180910390fd5b8180612ae790613d0d565b9250508080612af590613d0d565b915050612a2c565b5080600081905550612b126000878588612655565b505050505050565b600080823b905060008111915050919050565b828054612b3990613caa565b90600052602060002090601f016020900481019282612b5b5760008555612ba2565b82601f10612b7457805160ff1916838001178555612ba2565b82800160010185558215612ba2579182015b82811115612ba1578251825591602001919060010190612b86565b5b509050612baf9190612bed565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612c06576000816000905550600101612bee565b5090565b6000612c1d612c188461397c565b613957565b905082815260208101848484011115612c3957612c38613e77565b5b612c44848285613c3e565b509392505050565b6000612c5f612c5a846139ad565b613957565b905082815260208101848484011115612c7b57612c7a613e77565b5b612c86848285613c3e565b509392505050565b600081359050612c9d816144d5565b92915050565b600081359050612cb2816144ec565b92915050565b600081359050612cc781614503565b92915050565b600081519050612cdc81614503565b92915050565b600082601f830112612cf757612cf6613e72565b5b8135612d07848260208601612c0a565b91505092915050565b600081519050612d1f8161451a565b92915050565b600082601f830112612d3a57612d39613e72565b5b8135612d4a848260208601612c4c565b91505092915050565b600081359050612d6281614531565b92915050565b600060208284031215612d7e57612d7d613e81565b5b6000612d8c84828501612c8e565b91505092915050565b60008060408385031215612dac57612dab613e81565b5b6000612dba85828601612c8e565b9250506020612dcb85828601612c8e565b9150509250929050565b600080600060608486031215612dee57612ded613e81565b5b6000612dfc86828701612c8e565b9350506020612e0d86828701612c8e565b9250506040612e1e86828701612d53565b9150509250925092565b60008060008060808587031215612e4257612e41613e81565b5b6000612e5087828801612c8e565b9450506020612e6187828801612c8e565b9350506040612e7287828801612d53565b925050606085013567ffffffffffffffff811115612e9357612e92613e7c565b5b612e9f87828801612ce2565b91505092959194509250565b60008060408385031215612ec257612ec1613e81565b5b6000612ed085828601612c8e565b9250506020612ee185828601612ca3565b9150509250929050565b60008060408385031215612f0257612f01613e81565b5b6000612f1085828601612c8e565b9250506020612f2185828601612d53565b9150509250929050565b600060208284031215612f4157612f40613e81565b5b6000612f4f84828501612ca3565b91505092915050565b600060208284031215612f6e57612f6d613e81565b5b6000612f7c84828501612cb8565b91505092915050565b600060208284031215612f9b57612f9a613e81565b5b6000612fa984828501612ccd565b91505092915050565b600060208284031215612fc857612fc7613e81565b5b6000612fd684828501612d10565b91505092915050565b600060208284031215612ff557612ff4613e81565b5b600082013567ffffffffffffffff81111561301357613012613e7c565b5b61301f84828501612d25565b91505092915050565b60006020828403121561303e5761303d613e81565b5b600061304c84828501612d53565b91505092915050565b61305e81613b9c565b82525050565b61306d81613bae565b82525050565b600061307e826139f3565b6130888185613a09565b9350613098818560208601613c4d565b6130a181613e86565b840191505092915050565b60006130b7826139fe565b6130c18185613a25565b93506130d1818560208601613c4d565b6130da81613e86565b840191505092915050565b60006130f0826139fe565b6130fa8185613a36565b935061310a818560208601613c4d565b80840191505092915050565b6000815461312381613caa565b61312d8186613a36565b9450600182166000811461314857600181146131595761318c565b60ff1983168652818601935061318c565b613162856139de565b60005b8381101561318457815481890152600182019150602081019050613165565b838801955050505b50505092915050565b60006131a2602283613a25565b91506131ad82613e97565b604082019050919050565b60006131c5600683613a25565b91506131d082613ee6565b602082019050919050565b60006131e8602683613a25565b91506131f382613f0f565b604082019050919050565b600061320b602a83613a25565b915061321682613f5e565b604082019050919050565b600061322e600a83613a25565b915061323982613fad565b602082019050919050565b6000613251601683613a25565b915061325c82613fd6565b602082019050919050565b6000613274602383613a25565b915061327f82613fff565b604082019050919050565b6000613297602583613a25565b91506132a28261404e565b604082019050919050565b60006132ba601683613a25565b91506132c58261409d565b602082019050919050565b60006132dd603983613a25565b91506132e8826140c6565b604082019050919050565b6000613300601283613a25565b915061330b82614115565b602082019050919050565b6000613323602b83613a25565b915061332e8261413e565b604082019050919050565b6000613346601583613a25565b91506133518261418d565b602082019050919050565b6000613369602683613a25565b9150613374826141b6565b604082019050919050565b600061338c602083613a25565b915061339782614205565b602082019050919050565b60006133af601a83613a25565b91506133ba8261422e565b602082019050919050565b60006133d2603283613a25565b91506133dd82614257565b604082019050919050565b60006133f5601683613a25565b9150613400826142a6565b602082019050919050565b6000613418602283613a25565b9150613423826142cf565b604082019050919050565b600061343b600083613a1a565b91506134468261431e565b600082019050919050565b600061345e602383613a25565b915061346982614321565b604082019050919050565b6000613481603383613a25565b915061348c82614370565b604082019050919050565b60006134a4601d83613a25565b91506134af826143bf565b602082019050919050565b60006134c7602183613a25565b91506134d2826143e8565b604082019050919050565b60006134ea602e83613a25565b91506134f582614437565b604082019050919050565b600061350d602d83613a25565b915061351882614486565b604082019050919050565b61352c81613c34565b82525050565b600061353e8286613116565b915061354a82856130e5565b915061355682846130e5565b9150819050949350505050565b600061356e8261342e565b9150819050919050565b600060208201905061358d6000830184613055565b92915050565b60006080820190506135a86000830187613055565b6135b56020830186613055565b6135c26040830185613523565b81810360608301526135d48184613073565b905095945050505050565b60006020820190506135f46000830184613064565b92915050565b6000602082019050818103600083015261361481846130ac565b905092915050565b6000602082019050818103600083015261363581613195565b9050919050565b60006020820190508181036000830152613655816131b8565b9050919050565b60006020820190508181036000830152613675816131db565b9050919050565b60006020820190508181036000830152613695816131fe565b9050919050565b600060208201905081810360008301526136b581613221565b9050919050565b600060208201905081810360008301526136d581613244565b9050919050565b600060208201905081810360008301526136f581613267565b9050919050565b600060208201905081810360008301526137158161328a565b9050919050565b60006020820190508181036000830152613735816132ad565b9050919050565b60006020820190508181036000830152613755816132d0565b9050919050565b60006020820190508181036000830152613775816132f3565b9050919050565b6000602082019050818103600083015261379581613316565b9050919050565b600060208201905081810360008301526137b581613339565b9050919050565b600060208201905081810360008301526137d58161335c565b9050919050565b600060208201905081810360008301526137f58161337f565b9050919050565b60006020820190508181036000830152613815816133a2565b9050919050565b60006020820190508181036000830152613835816133c5565b9050919050565b60006020820190508181036000830152613855816133e8565b9050919050565b600060208201905081810360008301526138758161340b565b9050919050565b6000602082019050818103600083015261389581613451565b9050919050565b600060208201905081810360008301526138b581613474565b9050919050565b600060208201905081810360008301526138d581613497565b9050919050565b600060208201905081810360008301526138f5816134ba565b9050919050565b60006020820190508181036000830152613915816134dd565b9050919050565b6000602082019050818103600083015261393581613500565b9050919050565b60006020820190506139516000830184613523565b92915050565b6000613961613972565b905061396d8282613cdc565b919050565b6000604051905090565b600067ffffffffffffffff82111561399757613996613e43565b5b6139a082613e86565b9050602081019050919050565b600067ffffffffffffffff8211156139c8576139c7613e43565b5b6139d182613e86565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a4c82613bf8565b9150613a5783613bf8565b9250826fffffffffffffffffffffffffffffffff03821115613a7c57613a7b613d87565b5b828201905092915050565b6000613a9282613c34565b9150613a9d83613c34565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ad257613ad1613d87565b5b828201905092915050565b6000613ae882613c34565b9150613af383613c34565b925082613b0357613b02613db6565b5b828204905092915050565b6000613b1982613c34565b9150613b2483613c34565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b5d57613b5c613d87565b5b828202905092915050565b6000613b7382613c34565b9150613b7e83613c34565b925082821015613b9157613b90613d87565b5b828203905092915050565b6000613ba782613c14565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613bf182613b9c565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c6b578082015181840152602081019050613c50565b83811115613c7a576000848401525b50505050565b6000613c8b82613c34565b91506000821415613c9f57613c9e613d87565b5b600182039050919050565b60006002820490506001821680613cc257607f821691505b60208210811415613cd657613cd5613de5565b5b50919050565b613ce582613e86565b810181811067ffffffffffffffff82111715613d0457613d03613e43565b5b80604052505050565b6000613d1882613c34565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d4b57613d4a613d87565b5b600182019050919050565b6000613d6182613c34565b9150613d6c83613c34565b925082613d7c57613d7b613db6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4e6f2030206d696e747300000000000000000000000000000000000000000000600082015250565b7f457863657373206d617820706572207061696420747800000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f457863657373206d617820706572206672656520747800000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f766964656400000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f7220300000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6144de81613b9c565b81146144e957600080fd5b50565b6144f581613bae565b811461450057600080fd5b50565b61450c81613bba565b811461451757600080fd5b50565b61452381613be6565b811461452e57600080fd5b50565b61453a81613c34565b811461454557600080fd5b5056fea2646970667358221220b8e6dc0cfb68b6e855520ad2eb85dc407f83b3fdeb221c3f52739aa1d2b1058e64736f6c63430008070033697066733a2f2f516d576955336551536a72715978613562705a74456f427a436d777158587633415034357063347575694b37546d2f
Deployed Bytecode
0x6080604052600436106101e35760003560e01c80636c0360eb11610102578063a22cb46511610095578063cd7c032611610064578063cd7c0326146106d5578063e985e9c514610700578063f2fde38b1461073d578063f43a22dc14610766576101e3565b8063a22cb4651461061b578063b88d4fde14610644578063c66828621461066d578063c87b56dd14610698576101e3565b80638da5cb5b116100d15780638da5cb5b1461057e57806395d89b41146105a9578063a035b1fe146105d4578063a0712d68146105ff576101e3565b80636c0360eb146104d457806370a08231146104ff578063715018a61461053c5780638069876d14610553576101e3565b806332cb6b0c1161017a5780634f6ccce7116101495780634f6ccce71461040657806355f804b3146104435780635c975abb1461046c5780636352211e14610497576101e3565b806332cb6b0c146103705780633ccfd60b1461039b57806342842e0e146103b2578063463fff79146103db576101e3565b8063095ea7b3116101b6578063095ea7b3146102b657806318160ddd146102df57806323b872dd1461030a5780632f745c5914610333576101e3565b806301ffc9a7146101e857806302329a291461022557806306fdde031461024e578063081812fc14610279575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612f58565b610791565b60405161021c91906135df565b60405180910390f35b34801561023157600080fd5b5061024c60048036038101906102479190612f2b565b6108db565b005b34801561025a57600080fd5b50610263610974565b60405161027091906135fa565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190613028565b610a06565b6040516102ad9190613578565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d89190612eeb565b610a8b565b005b3480156102eb57600080fd5b506102f4610ba4565b604051610301919061393c565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c9190612dd5565b610bad565b005b34801561033f57600080fd5b5061035a60048036038101906103559190612eeb565b610bbd565b604051610367919061393c565b60405180910390f35b34801561037c57600080fd5b50610385610dbb565b604051610392919061393c565b60405180910390f35b3480156103a757600080fd5b506103b0610dc1565b005b3480156103be57600080fd5b506103d960048036038101906103d49190612dd5565b610eb6565b005b3480156103e757600080fd5b506103f0610ed6565b6040516103fd919061393c565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190613028565b610edb565b60405161043a919061393c565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190612fdf565b610f2e565b005b34801561047857600080fd5b50610481610fc4565b60405161048e91906135df565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190613028565b610fd7565b6040516104cb9190613578565b60405180910390f35b3480156104e057600080fd5b506104e9610fed565b6040516104f691906135fa565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190612d68565b61107b565b604051610533919061393c565b60405180910390f35b34801561054857600080fd5b50610551611164565b005b34801561055f57600080fd5b506105686111ec565b604051610575919061393c565b60405180910390f35b34801561058a57600080fd5b506105936111f2565b6040516105a09190613578565b60405180910390f35b3480156105b557600080fd5b506105be61121c565b6040516105cb91906135fa565b60405180910390f35b3480156105e057600080fd5b506105e96112ae565b6040516105f6919061393c565b60405180910390f35b61061960048036038101906106149190613028565b6112b9565b005b34801561062757600080fd5b50610642600480360381019061063d9190612eab565b6114ae565b005b34801561065057600080fd5b5061066b60048036038101906106669190612e28565b61162f565b005b34801561067957600080fd5b5061068261168b565b60405161068f91906135fa565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190613028565b6116c4565b6040516106cc91906135fa565b60405180910390f35b3480156106e157600080fd5b506106ea6117a3565b6040516106f79190613578565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190612d95565b6117bb565b60405161073491906135df565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190612d68565b6118af565b005b34801561077257600080fd5b5061077b6119a7565b604051610788919061393c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061085c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d457506108d3826119ac565b5b9050919050565b6108e3611a16565b73ffffffffffffffffffffffffffffffffffffffff166109016111f2565b73ffffffffffffffffffffffffffffffffffffffff1614610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e906137dc565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60606001805461098390613caa565b80601f01602080910402602001604051908101604052809291908181526020018280546109af90613caa565b80156109fc5780601f106109d1576101008083540402835291602001916109fc565b820191906000526020600020905b8154815290600101906020018083116109df57829003601f168201915b5050505050905090565b6000610a1182611a1e565b610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a479061391c565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a9682610fd7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe9061385c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b26611a16565b73ffffffffffffffffffffffffffffffffffffffff161480610b555750610b5481610b4f611a16565b6117bb565b5b610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b9061373c565b60405180910390fd5b610b9f838383611a2b565b505050565b60008054905090565b610bb8838383611add565b505050565b6000610bc88361107b565b8210610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c009061361c565b60405180910390fd5b6000610c13610ba4565b905060008060005b83811015610d79576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d0d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d655786841415610d56578195505050505050610db5565b8380610d6190613d0d565b9450505b508080610d7190613d0d565b915050610c1b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac906138fc565b60405180910390fd5b92915050565b61068581565b610dc9611a16565b73ffffffffffffffffffffffffffffffffffffffff16610de76111f2565b73ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e34906137dc565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e6390613563565b60006040518083038185875af1925050503d8060008114610ea0576040519150601f19603f3d011682016040523d82523d6000602084013e610ea5565b606091505b5050905080610eb357600080fd5b50565b610ed18383836040518060200160405280600081525061162f565b505050565b600a81565b6000610ee5610ba4565b8210610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d906136dc565b60405180910390fd5b819050919050565b610f36611a16565b73ffffffffffffffffffffffffffffffffffffffff16610f546111f2565b73ffffffffffffffffffffffffffffffffffffffff1614610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1906137dc565b60405180910390fd5b8060089080519060200190610fc0929190612b2d565b5050565b600960009054906101000a900460ff1681565b6000610fe282612084565b600001519050919050565b60088054610ffa90613caa565b80601f016020809104026020016040519081016040528092919081815260200182805461102690613caa565b80156110735780601f1061104857610100808354040283529160200191611073565b820191906000526020600020905b81548152906001019060200180831161105657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e39061377c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61116c611a16565b73ffffffffffffffffffffffffffffffffffffffff1661118a6111f2565b73ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d7906137dc565b60405180910390fd5b6111ea60006121df565b565b6101d581565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461122b90613caa565b80601f016020809104026020016040519081016040528092919081815260200182805461125790613caa565b80156112a45780601f10611279576101008083540402835291602001916112a4565b820191906000526020600020905b81548152906001019060200180831161128757829003601f168201915b5050505050905090565b6618838370f3400081565b600960009054906101000a900460ff1615611309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113009061363c565b60405180910390fd5b80611312610ba4565b61131c9190613a87565b6106851015611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113579061375c565b60405180910390fd5b600081116113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a9061369c565b60405180910390fd5b806113ac610ba4565b6113b69190613a87565b6101d5106114075780600a1015611402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f99061371c565b60405180910390fd5b6114a1565b80600a101561144b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611442906136bc565b60405180910390fd5b6618838370f340008161145e9190613b0e565b3410156114a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114979061383c565b60405180910390fd5b5b6114ab33826122a5565b50565b6114b6611a16565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b906137fc565b60405180910390fd5b8060066000611531611a16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115de611a16565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161162391906135df565b60405180910390a35050565b61163a848484611add565b611646848484846122c3565b611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167c9061389c565b60405180910390fd5b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b60606116cf82611a1e565b61170e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117059061379c565b60405180910390fd5b60006008805461171d90613caa565b905011611739576040518060200160405280600081525061179c565b60086117448361245a565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060405160200161178c93929190613532565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60008073a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016118259190613578565b60206040518083038186803b15801561183d57600080fd5b505afa158015611851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118759190612fb2565b73ffffffffffffffffffffffffffffffffffffffff16141561189b5760019150506118a9565b6118a584846125bb565b9150505b92915050565b6118b7611a16565b73ffffffffffffffffffffffffffffffffffffffff166118d56111f2565b73ffffffffffffffffffffffffffffffffffffffff161461192b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611922906137dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119929061365c565b60405180910390fd5b6119a4816121df565b50565b600a81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ae882612084565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611b0f611a16565b73ffffffffffffffffffffffffffffffffffffffff161480611b6b5750611b34611a16565b73ffffffffffffffffffffffffffffffffffffffff16611b5384610a06565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b875750611b868260000151611b81611a16565b6117bb565b5b905080611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc09061381c565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c32906137bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca2906136fc565b60405180910390fd5b611cb8858585600161264f565b611cc86000848460000151611a2b565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611ece9190613a87565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561201457611f4481611a1e565b15612013576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461207c8686866001612655565b505050505050565b61208c612bb3565b61209582611a1e565b6120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb9061367c565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121c65780925050506121da565b5080806121d290613c80565b9150506120da565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122bf82826040518060200160405280600081525061265b565b5050565b60006122e48473ffffffffffffffffffffffffffffffffffffffff16612b1a565b1561244d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261230d611a16565b8786866040518563ffffffff1660e01b815260040161232f9493929190613593565b602060405180830381600087803b15801561234957600080fd5b505af192505050801561237a57506040513d601f19601f820116820180604052508101906123779190612f85565b60015b6123fd573d80600081146123aa576040519150601f19603f3d011682016040523d82523d6000602084013e6123af565b606091505b506000815114156123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec9061389c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612452565b600190505b949350505050565b606060008214156124a2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125b6565b600082905060005b600082146124d45780806124bd90613d0d565b915050600a826124cd9190613add565b91506124aa565b60008167ffffffffffffffff8111156124f0576124ef613e43565b5b6040519080825280601f01601f1916602001820160405280156125225781602001600182028036833780820191505090505b5090505b600085146125af5760018261253b9190613b68565b9150600a8561254a9190613d56565b60306125569190613a87565b60f81b81838151811061256c5761256b613e14565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125a89190613add565b9450612526565b8093505050505b919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c8906138dc565b60405180910390fd5b6126da81611a1e565b1561271a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612711906138bc565b60405180910390fd5b6000831161275d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127549061387c565b60405180910390fd5b61276a600085838661264f565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516128679190613a41565b6fffffffffffffffffffffffffffffffff16815260200185836020015161288e9190613a41565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612afd57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a9d60008884886122c3565b612adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad39061389c565b60405180910390fd5b8180612ae790613d0d565b9250508080612af590613d0d565b915050612a2c565b5080600081905550612b126000878588612655565b505050505050565b600080823b905060008111915050919050565b828054612b3990613caa565b90600052602060002090601f016020900481019282612b5b5760008555612ba2565b82601f10612b7457805160ff1916838001178555612ba2565b82800160010185558215612ba2579182015b82811115612ba1578251825591602001919060010190612b86565b5b509050612baf9190612bed565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612c06576000816000905550600101612bee565b5090565b6000612c1d612c188461397c565b613957565b905082815260208101848484011115612c3957612c38613e77565b5b612c44848285613c3e565b509392505050565b6000612c5f612c5a846139ad565b613957565b905082815260208101848484011115612c7b57612c7a613e77565b5b612c86848285613c3e565b509392505050565b600081359050612c9d816144d5565b92915050565b600081359050612cb2816144ec565b92915050565b600081359050612cc781614503565b92915050565b600081519050612cdc81614503565b92915050565b600082601f830112612cf757612cf6613e72565b5b8135612d07848260208601612c0a565b91505092915050565b600081519050612d1f8161451a565b92915050565b600082601f830112612d3a57612d39613e72565b5b8135612d4a848260208601612c4c565b91505092915050565b600081359050612d6281614531565b92915050565b600060208284031215612d7e57612d7d613e81565b5b6000612d8c84828501612c8e565b91505092915050565b60008060408385031215612dac57612dab613e81565b5b6000612dba85828601612c8e565b9250506020612dcb85828601612c8e565b9150509250929050565b600080600060608486031215612dee57612ded613e81565b5b6000612dfc86828701612c8e565b9350506020612e0d86828701612c8e565b9250506040612e1e86828701612d53565b9150509250925092565b60008060008060808587031215612e4257612e41613e81565b5b6000612e5087828801612c8e565b9450506020612e6187828801612c8e565b9350506040612e7287828801612d53565b925050606085013567ffffffffffffffff811115612e9357612e92613e7c565b5b612e9f87828801612ce2565b91505092959194509250565b60008060408385031215612ec257612ec1613e81565b5b6000612ed085828601612c8e565b9250506020612ee185828601612ca3565b9150509250929050565b60008060408385031215612f0257612f01613e81565b5b6000612f1085828601612c8e565b9250506020612f2185828601612d53565b9150509250929050565b600060208284031215612f4157612f40613e81565b5b6000612f4f84828501612ca3565b91505092915050565b600060208284031215612f6e57612f6d613e81565b5b6000612f7c84828501612cb8565b91505092915050565b600060208284031215612f9b57612f9a613e81565b5b6000612fa984828501612ccd565b91505092915050565b600060208284031215612fc857612fc7613e81565b5b6000612fd684828501612d10565b91505092915050565b600060208284031215612ff557612ff4613e81565b5b600082013567ffffffffffffffff81111561301357613012613e7c565b5b61301f84828501612d25565b91505092915050565b60006020828403121561303e5761303d613e81565b5b600061304c84828501612d53565b91505092915050565b61305e81613b9c565b82525050565b61306d81613bae565b82525050565b600061307e826139f3565b6130888185613a09565b9350613098818560208601613c4d565b6130a181613e86565b840191505092915050565b60006130b7826139fe565b6130c18185613a25565b93506130d1818560208601613c4d565b6130da81613e86565b840191505092915050565b60006130f0826139fe565b6130fa8185613a36565b935061310a818560208601613c4d565b80840191505092915050565b6000815461312381613caa565b61312d8186613a36565b9450600182166000811461314857600181146131595761318c565b60ff1983168652818601935061318c565b613162856139de565b60005b8381101561318457815481890152600182019150602081019050613165565b838801955050505b50505092915050565b60006131a2602283613a25565b91506131ad82613e97565b604082019050919050565b60006131c5600683613a25565b91506131d082613ee6565b602082019050919050565b60006131e8602683613a25565b91506131f382613f0f565b604082019050919050565b600061320b602a83613a25565b915061321682613f5e565b604082019050919050565b600061322e600a83613a25565b915061323982613fad565b602082019050919050565b6000613251601683613a25565b915061325c82613fd6565b602082019050919050565b6000613274602383613a25565b915061327f82613fff565b604082019050919050565b6000613297602583613a25565b91506132a28261404e565b604082019050919050565b60006132ba601683613a25565b91506132c58261409d565b602082019050919050565b60006132dd603983613a25565b91506132e8826140c6565b604082019050919050565b6000613300601283613a25565b915061330b82614115565b602082019050919050565b6000613323602b83613a25565b915061332e8261413e565b604082019050919050565b6000613346601583613a25565b91506133518261418d565b602082019050919050565b6000613369602683613a25565b9150613374826141b6565b604082019050919050565b600061338c602083613a25565b915061339782614205565b602082019050919050565b60006133af601a83613a25565b91506133ba8261422e565b602082019050919050565b60006133d2603283613a25565b91506133dd82614257565b604082019050919050565b60006133f5601683613a25565b9150613400826142a6565b602082019050919050565b6000613418602283613a25565b9150613423826142cf565b604082019050919050565b600061343b600083613a1a565b91506134468261431e565b600082019050919050565b600061345e602383613a25565b915061346982614321565b604082019050919050565b6000613481603383613a25565b915061348c82614370565b604082019050919050565b60006134a4601d83613a25565b91506134af826143bf565b602082019050919050565b60006134c7602183613a25565b91506134d2826143e8565b604082019050919050565b60006134ea602e83613a25565b91506134f582614437565b604082019050919050565b600061350d602d83613a25565b915061351882614486565b604082019050919050565b61352c81613c34565b82525050565b600061353e8286613116565b915061354a82856130e5565b915061355682846130e5565b9150819050949350505050565b600061356e8261342e565b9150819050919050565b600060208201905061358d6000830184613055565b92915050565b60006080820190506135a86000830187613055565b6135b56020830186613055565b6135c26040830185613523565b81810360608301526135d48184613073565b905095945050505050565b60006020820190506135f46000830184613064565b92915050565b6000602082019050818103600083015261361481846130ac565b905092915050565b6000602082019050818103600083015261363581613195565b9050919050565b60006020820190508181036000830152613655816131b8565b9050919050565b60006020820190508181036000830152613675816131db565b9050919050565b60006020820190508181036000830152613695816131fe565b9050919050565b600060208201905081810360008301526136b581613221565b9050919050565b600060208201905081810360008301526136d581613244565b9050919050565b600060208201905081810360008301526136f581613267565b9050919050565b600060208201905081810360008301526137158161328a565b9050919050565b60006020820190508181036000830152613735816132ad565b9050919050565b60006020820190508181036000830152613755816132d0565b9050919050565b60006020820190508181036000830152613775816132f3565b9050919050565b6000602082019050818103600083015261379581613316565b9050919050565b600060208201905081810360008301526137b581613339565b9050919050565b600060208201905081810360008301526137d58161335c565b9050919050565b600060208201905081810360008301526137f58161337f565b9050919050565b60006020820190508181036000830152613815816133a2565b9050919050565b60006020820190508181036000830152613835816133c5565b9050919050565b60006020820190508181036000830152613855816133e8565b9050919050565b600060208201905081810360008301526138758161340b565b9050919050565b6000602082019050818103600083015261389581613451565b9050919050565b600060208201905081810360008301526138b581613474565b9050919050565b600060208201905081810360008301526138d581613497565b9050919050565b600060208201905081810360008301526138f5816134ba565b9050919050565b60006020820190508181036000830152613915816134dd565b9050919050565b6000602082019050818103600083015261393581613500565b9050919050565b60006020820190506139516000830184613523565b92915050565b6000613961613972565b905061396d8282613cdc565b919050565b6000604051905090565b600067ffffffffffffffff82111561399757613996613e43565b5b6139a082613e86565b9050602081019050919050565b600067ffffffffffffffff8211156139c8576139c7613e43565b5b6139d182613e86565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a4c82613bf8565b9150613a5783613bf8565b9250826fffffffffffffffffffffffffffffffff03821115613a7c57613a7b613d87565b5b828201905092915050565b6000613a9282613c34565b9150613a9d83613c34565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ad257613ad1613d87565b5b828201905092915050565b6000613ae882613c34565b9150613af383613c34565b925082613b0357613b02613db6565b5b828204905092915050565b6000613b1982613c34565b9150613b2483613c34565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b5d57613b5c613d87565b5b828202905092915050565b6000613b7382613c34565b9150613b7e83613c34565b925082821015613b9157613b90613d87565b5b828203905092915050565b6000613ba782613c14565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613bf182613b9c565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c6b578082015181840152602081019050613c50565b83811115613c7a576000848401525b50505050565b6000613c8b82613c34565b91506000821415613c9f57613c9e613d87565b5b600182039050919050565b60006002820490506001821680613cc257607f821691505b60208210811415613cd657613cd5613de5565b5b50919050565b613ce582613e86565b810181811067ffffffffffffffff82111715613d0457613d03613e43565b5b80604052505050565b6000613d1882613c34565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d4b57613d4a613d87565b5b600182019050919050565b6000613d6182613c34565b9150613d6c83613c34565b925082613d7c57613d7b613db6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4e6f2030206d696e747300000000000000000000000000000000000000000000600082015250565b7f457863657373206d617820706572207061696420747800000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f457863657373206d617820706572206672656520747800000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f766964656400000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f7220300000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6144de81613b9c565b81146144e957600080fd5b50565b6144f581613bae565b811461450057600080fd5b50565b61450c81613bba565b811461451757600080fd5b50565b61452381613be6565b811461452e57600080fd5b50565b61453a81613c34565b811461454557600080fd5b5056fea2646970667358221220b8e6dc0cfb68b6e855520ad2eb85dc407f83b3fdeb221c3f52739aa1d2b1058e64736f6c63430008070033
Deployed Bytecode Sourcemap
40539:2581:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27794:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42420:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29577:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31272:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30793:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26153:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32299:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26858:864;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40998:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42228:184;;;;;;;;;;;;;:::i;:::-;;32532:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40849:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26330:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42507:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41099:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29386:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40593:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28280:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2966:103;;;;;;;;;;;;;:::i;:::-;;40946:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2315:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29746:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41046:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41194:573;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31636:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32780:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40689:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42613:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40742:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41775:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3224:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40900:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27794:422;27941:4;27998:25;27983:40;;;:11;:40;;;;:105;;;;28055:33;28040:48;;;:11;:48;;;;27983:105;:172;;;;28120:35;28105:50;;;:11;:50;;;;27983:172;:225;;;;28172:36;28196:11;28172:23;:36::i;:::-;27983:225;27963:245;;27794:422;;;:::o;42420:79::-;2546:12;:10;:12::i;:::-;2535:23;;:7;:5;:7::i;:::-;:23;;;2527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42485:6:::1;42476;;:15;;;;;;;;;;;;;;;;;;42420:79:::0;:::o;29577:100::-;29631:13;29664:5;29657:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29577:100;:::o;31272:292::-;31376:7;31423:16;31431:7;31423;:16::i;:::-;31401:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31532:15;:24;31548:7;31532:24;;;;;;;;;;;;;;;;;;;;;31525:31;;31272:292;;;:::o;30793:413::-;30866:13;30882:24;30898:7;30882:15;:24::i;:::-;30866:40;;30931:5;30925:11;;:2;:11;;;;30917:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31026:5;31010:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31035:37;31052:5;31059:12;:10;:12::i;:::-;31035:16;:37::i;:::-;31010:62;30988:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;31170:28;31179:2;31183:7;31192:5;31170:8;:28::i;:::-;30855:351;30793:413;;:::o;26153:100::-;26206:7;26233:12;;26226:19;;26153:100;:::o;32299:162::-;32425:28;32435:4;32441:2;32445:7;32425:9;:28::i;:::-;32299:162;;;:::o;26858:864::-;26983:7;27024:16;27034:5;27024:9;:16::i;:::-;27016:5;:24;27008:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27090:22;27115:13;:11;:13::i;:::-;27090:38;;27139:19;27173:25;27227:9;27222:426;27246:14;27242:1;:18;27222:426;;;27282:31;27316:11;:14;27328:1;27316:14;;;;;;;;;;;27282:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27375:1;27349:28;;:9;:14;;;:28;;;27345:103;;27418:9;:14;;;27398:34;;27345:103;27487:5;27466:26;;:17;:26;;;27462:175;;;27532:5;27517:11;:20;27513:77;;;27569:1;27562:8;;;;;;;;;27513:77;27608:13;;;;;:::i;:::-;;;;27462:175;27267:381;27262:3;;;;;:::i;:::-;;;;27222:426;;;;27658:56;;;;;;;;;;:::i;:::-;;;;;;;;26858:864;;;;;:::o;40998:41::-;41035:4;40998:41;:::o;42228:184::-;2546:12;:10;:12::i;:::-;2535:23;;:7;:5;:7::i;:::-;:23;;;2527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42277:12:::1;42303:10;42295:24;;42341:21;42295:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42276:101;;;42396:7;42388:16;;;::::0;::::1;;42265:147;42228:184::o:0;32532:177::-;32662:39;32679:4;32685:2;32689:7;32662:39;;;;;;;;;;;;:16;:39::i;:::-;32532:177;;;:::o;40849:44::-;40891:2;40849:44;:::o;26330:228::-;26433:7;26474:13;:11;:13::i;:::-;26466:5;:21;26458:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26545:5;26538:12;;26330:228;;;:::o;42507:98::-;2546:12;:10;:12::i;:::-;2535:23;;:7;:5;:7::i;:::-;:23;;;2527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42589:8:::1;42579:7;:18;;;;;;;;;;;;:::i;:::-;;42507:98:::0;:::o;41099:25::-;;;;;;;;;;;;;:::o;29386:124::-;29450:7;29477:20;29489:7;29477:11;:20::i;:::-;:25;;;29470:32;;29386:124;;;:::o;40593:89::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28280:258::-;28344:7;28403:1;28386:19;;:5;:19;;;;28364:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;28502:12;:19;28515:5;28502:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28494:36;;28487:43;;28280:258;;;:::o;2966:103::-;2546:12;:10;:12::i;:::-;2535:23;;:7;:5;:7::i;:::-;:23;;;2527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3031:30:::1;3058:1;3031:18;:30::i;:::-;2966:103::o:0;40946:45::-;40988:3;40946:45;:::o;2315:87::-;2361:7;2388:6;;;;;;;;;;;2381:13;;2315:87;:::o;29746:104::-;29802:13;29835:7;29828:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29746:104;:::o;41046:44::-;41078:12;41046:44;:::o;41194:573::-;41260:6;;;;;;;;;;;41259:7;41251:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;41326:7;41310:13;:11;:13::i;:::-;:23;;;;:::i;:::-;41035:4;41296:37;;41288:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41385:1;41375:7;:11;41367:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;41453:7;41437:13;:11;:13::i;:::-;:23;;;;:::i;:::-;40988:3;41418:42;41414:303;;41504:7;40891:2;41485:26;;41477:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;41414:303;;;41593:7;40937:2;41579:21;;41571:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41078:12;41663:7;:15;;;;:::i;:::-;41650:9;:28;;41642:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;41414:303;41729:30;41739:10;41751:7;41729:9;:30::i;:::-;41194:573;:::o;31636:311::-;31766:12;:10;:12::i;:::-;31754:24;;:8;:24;;;;31746:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31867:8;31822:18;:32;31841:12;:10;:12::i;:::-;31822:32;;;;;;;;;;;;;;;:42;31855:8;31822:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31920:8;31891:48;;31906:12;:10;:12::i;:::-;31891:48;;;31930:8;31891:48;;;;;;:::i;:::-;;;;;;;;31636:311;;:::o;32780:355::-;32939:28;32949:4;32955:2;32959:7;32939:9;:28::i;:::-;33000:48;33023:4;33029:2;33033:7;33042:5;33000:22;:48::i;:::-;32978:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;32780:355;;;;:::o;40689:46::-;;;;;;;;;;;;;;;;;;;:::o;42613:504::-;42715:13;42754:17;42762:8;42754:7;:17::i;:::-;42746:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;42852:1;42834:7;42828:21;;;;;:::i;:::-;;;:25;:281;;;;;;;;;;;;;;;;;42945:7;42979:26;42996:8;42979:16;:26::i;:::-;43032:13;;;;;;;;;;;;;;;;;42902:166;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42828:281;42808:301;;42613:504;;;:::o;40742:98::-;40798:42;40742:98;:::o;41775:445::-;41900:4;41985:27;40798:42;41985:65;;42106:8;42065:49;;42073:13;:21;;;42095:5;42073:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42065:49;;;42061:93;;;42138:4;42131:11;;;;;42061:93;42173:39;42196:5;42203:8;42173:22;:39::i;:::-;42166:46;;;41775:445;;;;;:::o;3224:238::-;2546:12;:10;:12::i;:::-;2535:23;;:7;:5;:7::i;:::-;:23;;;2527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3347:1:::1;3327:22;;:8;:22;;;;3305:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3426:28;3445:8;3426:18;:28::i;:::-;3224:238:::0;:::o;40900:39::-;40937:2;40900:39;:::o;24146:207::-;24276:4;24320:25;24305:40;;;:11;:40;;;;24298:47;;24146:207;;;:::o;1039:98::-;1092:7;1119:10;1112:17;;1039:98;:::o;33390:111::-;33447:4;33481:12;;33471:7;:22;33464:29;;33390:111;;;:::o;37569:196::-;37711:2;37684:15;:24;37700:7;37684:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37749:7;37745:2;37729:28;;37738:5;37729:28;;;;;;;;;;;;37569:196;;;:::o;35533:1918::-;35648:35;35686:20;35698:7;35686:11;:20::i;:::-;35648:58;;35719:22;35761:13;:18;;;35745:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;35820:12;:10;:12::i;:::-;35796:36;;:20;35808:7;35796:11;:20::i;:::-;:36;;;35745:87;:154;;;;35849:50;35866:13;:18;;;35886:12;:10;:12::i;:::-;35849:16;:50::i;:::-;35745:154;35719:181;;35935:17;35913:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;36087:4;36065:26;;:13;:18;;;:26;;;36043:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;36190:1;36176:16;;:2;:16;;;;36168:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36247:43;36269:4;36275:2;36279:7;36288:1;36247:21;:43::i;:::-;36355:49;36372:1;36376:7;36385:13;:18;;;36355:8;:49::i;:::-;36639:1;36609:12;:18;36622:4;36609:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36683:1;36655:12;:16;36668:2;36655:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36731:43;;;;;;;;36746:2;36731:43;;;;;;36757:15;36731:43;;;;;36708:11;:20;36720:7;36708:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37014:19;37046:1;37036:7;:11;;;;:::i;:::-;37014:33;;37103:1;37062:43;;:11;:24;37074:11;37062:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;37058:288;;;37126:20;37134:11;37126:7;:20::i;:::-;37122:213;;;37194:125;;;;;;;;37231:13;:18;;;37194:125;;;;;;37272:13;:28;;;37194:125;;;;;37167:11;:24;37179:11;37167:24;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37122:213;37058:288;37382:7;37378:2;37363:27;;37372:4;37363:27;;;;;;;;;;;;37401:42;37422:4;37428:2;37432:7;37441:1;37401:20;:42::i;:::-;35637:1814;;;35533:1918;;;:::o;28820:504::-;28908:21;;:::i;:::-;28955:16;28963:7;28955;:16::i;:::-;28947:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29036:12;29051:7;29036:22;;29031:216;29085:31;29119:11;:17;29131:4;29119:17;;;;;;;;;;;29085:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29181:1;29155:28;;:9;:14;;;:28;;;29151:85;;29211:9;29204:16;;;;;;29151:85;29070:177;29062:6;;;;;:::i;:::-;;;;29031:216;;28820:504;;;;:::o;3622:191::-;3696:16;3715:6;;;;;;;;;;;3696:25;;3741:8;3732:6;;:17;;;;;;;;;;;;;;;;;;3796:8;3765:40;;3786:8;3765:40;;;;;;;;;;;;3685:128;3622:191;:::o;33509:104::-;33578:27;33588:2;33592:8;33578:27;;;;;;;;;;;;:9;:27::i;:::-;33509:104;;:::o;38330:985::-;38485:4;38506:15;:2;:13;;;:15::i;:::-;38502:806;;;38575:2;38559:36;;;38618:12;:10;:12::i;:::-;38653:4;38680:7;38710:5;38559:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38538:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38938:1;38921:6;:13;:18;38917:321;;;38964:109;;;;;;;;;;:::i;:::-;;;;;;;;38917:321;39188:6;39182:13;39173:6;39169:2;39165:15;39158:38;38538:715;38808:45;;;38798:55;;;:6;:55;;;;38791:62;;;;;38502:806;39292:4;39285:11;;38330:985;;;;;;;:::o;4162:723::-;4218:13;4448:1;4439:5;:10;4435:53;;;4466:10;;;;;;;;;;;;;;;;;;;;;4435:53;4498:12;4513:5;4498:20;;4529:14;4554:78;4569:1;4561:4;:9;4554:78;;4587:8;;;;;:::i;:::-;;;;4618:2;4610:10;;;;;:::i;:::-;;;4554:78;;;4642:19;4674:6;4664:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4642:39;;4692:154;4708:1;4699:5;:10;4692:154;;4736:1;4726:11;;;;;:::i;:::-;;;4803:2;4795:5;:10;;;;:::i;:::-;4782:2;:24;;;;:::i;:::-;4769:39;;4752:6;4759;4752:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4832:2;4823:11;;;;;:::i;:::-;;;4692:154;;;4870:6;4856:21;;;;;4162:723;;;;:::o;32018:214::-;32160:4;32189:18;:25;32208:5;32189:25;;;;;;;;;;;;;;;:35;32215:8;32189:35;;;;;;;;;;;;;;;;;;;;;;;;;32182:42;;32018:214;;;;:::o;39803:159::-;;;;;:::o;40374:158::-;;;;;:::o;33890:1389::-;34013:20;34036:12;;34013:35;;34081:1;34067:16;;:2;:16;;;;34059:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34266:21;34274:12;34266:7;:21::i;:::-;34265:22;34257:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34351:1;34340:8;:12;34332:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34405:61;34435:1;34439:2;34443:12;34457:8;34405:21;:61::i;:::-;34479:30;34512:12;:16;34525:2;34512:16;;;;;;;;;;;;;;;34479:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34558:135;;;;;;;;34614:8;34584:11;:19;;;:39;;;;:::i;:::-;34558:135;;;;;;34673:8;34638:11;:24;;;:44;;;;:::i;:::-;34558:135;;;;;34539:12;:16;34552:2;34539:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34732:43;;;;;;;;34747:2;34732:43;;;;;;34758:15;34732:43;;;;;34704:11;:25;34716:12;34704:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34788:20;34811:12;34788:35;;34841:9;34836:325;34860:8;34856:1;:12;34836:325;;;34920:12;34916:2;34895:38;;34912:1;34895:38;;;;;;;;;;;;34974:59;35005:1;35009:2;35013:12;35027:5;34974:22;:59::i;:::-;34948:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;35135:14;;;;;:::i;:::-;;;;34870:3;;;;;:::i;:::-;;;;34836:325;;;;35188:12;35173;:27;;;;35211:60;35240:1;35244:2;35248:12;35262:8;35211:20;:60::i;:::-;34002:1277;;;33890:1389;;;:::o;15508:387::-;15568:4;15776:12;15843:7;15831:20;15823:28;;15886:1;15879:4;:8;15872:15;;;15508:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1772:201::-;1858:5;1889:6;1883:13;1874:22;;1905:62;1961:5;1905:62;:::i;:::-;1772:201;;;;:::o;1993:340::-;2049:5;2098:3;2091:4;2083:6;2079:17;2075:27;2065:122;;2106:79;;:::i;:::-;2065:122;2223:6;2210:20;2248:79;2323:3;2315:6;2308:4;2300:6;2296:17;2248:79;:::i;:::-;2239:88;;2055:278;1993:340;;;;:::o;2339:139::-;2385:5;2423:6;2410:20;2401:29;;2439:33;2466:5;2439:33;:::i;:::-;2339:139;;;;:::o;2484:329::-;2543:6;2592:2;2580:9;2571:7;2567:23;2563:32;2560:119;;;2598:79;;:::i;:::-;2560:119;2718:1;2743:53;2788:7;2779:6;2768:9;2764:22;2743:53;:::i;:::-;2733:63;;2689:117;2484:329;;;;:::o;2819:474::-;2887:6;2895;2944:2;2932:9;2923:7;2919:23;2915:32;2912:119;;;2950:79;;:::i;:::-;2912:119;3070:1;3095:53;3140:7;3131:6;3120:9;3116:22;3095:53;:::i;:::-;3085:63;;3041:117;3197:2;3223:53;3268:7;3259:6;3248:9;3244:22;3223:53;:::i;:::-;3213:63;;3168:118;2819:474;;;;;:::o;3299:619::-;3376:6;3384;3392;3441:2;3429:9;3420:7;3416:23;3412:32;3409:119;;;3447:79;;:::i;:::-;3409:119;3567:1;3592:53;3637:7;3628:6;3617:9;3613:22;3592:53;:::i;:::-;3582:63;;3538:117;3694:2;3720:53;3765:7;3756:6;3745:9;3741:22;3720:53;:::i;:::-;3710:63;;3665:118;3822:2;3848:53;3893:7;3884:6;3873:9;3869:22;3848:53;:::i;:::-;3838:63;;3793:118;3299:619;;;;;:::o;3924:943::-;4019:6;4027;4035;4043;4092:3;4080:9;4071:7;4067:23;4063:33;4060:120;;;4099:79;;:::i;:::-;4060:120;4219:1;4244:53;4289:7;4280:6;4269:9;4265:22;4244:53;:::i;:::-;4234:63;;4190:117;4346:2;4372:53;4417:7;4408:6;4397:9;4393:22;4372:53;:::i;:::-;4362:63;;4317:118;4474:2;4500:53;4545:7;4536:6;4525:9;4521:22;4500:53;:::i;:::-;4490:63;;4445:118;4630:2;4619:9;4615:18;4602:32;4661:18;4653:6;4650:30;4647:117;;;4683:79;;:::i;:::-;4647:117;4788:62;4842:7;4833:6;4822:9;4818:22;4788:62;:::i;:::-;4778:72;;4573:287;3924:943;;;;;;;:::o;4873:468::-;4938:6;4946;4995:2;4983:9;4974:7;4970:23;4966:32;4963:119;;;5001:79;;:::i;:::-;4963:119;5121:1;5146:53;5191:7;5182:6;5171:9;5167:22;5146:53;:::i;:::-;5136:63;;5092:117;5248:2;5274:50;5316:7;5307:6;5296:9;5292:22;5274:50;:::i;:::-;5264:60;;5219:115;4873:468;;;;;:::o;5347:474::-;5415:6;5423;5472:2;5460:9;5451:7;5447:23;5443:32;5440:119;;;5478:79;;:::i;:::-;5440:119;5598:1;5623:53;5668:7;5659:6;5648:9;5644:22;5623:53;:::i;:::-;5613:63;;5569:117;5725:2;5751:53;5796:7;5787:6;5776:9;5772:22;5751:53;:::i;:::-;5741:63;;5696:118;5347:474;;;;;:::o;5827:323::-;5883:6;5932:2;5920:9;5911:7;5907:23;5903:32;5900:119;;;5938:79;;:::i;:::-;5900:119;6058:1;6083:50;6125:7;6116:6;6105:9;6101:22;6083:50;:::i;:::-;6073:60;;6029:114;5827:323;;;;:::o;6156:327::-;6214:6;6263:2;6251:9;6242:7;6238:23;6234:32;6231:119;;;6269:79;;:::i;:::-;6231:119;6389:1;6414:52;6458:7;6449:6;6438:9;6434:22;6414:52;:::i;:::-;6404:62;;6360:116;6156:327;;;;:::o;6489:349::-;6558:6;6607:2;6595:9;6586:7;6582:23;6578:32;6575:119;;;6613:79;;:::i;:::-;6575:119;6733:1;6758:63;6813:7;6804:6;6793:9;6789:22;6758:63;:::i;:::-;6748:73;;6704:127;6489:349;;;;:::o;6844:409::-;6943:6;6992:2;6980:9;6971:7;6967:23;6963:32;6960:119;;;6998:79;;:::i;:::-;6960:119;7118:1;7143:93;7228:7;7219:6;7208:9;7204:22;7143:93;:::i;:::-;7133:103;;7089:157;6844:409;;;;:::o;7259:509::-;7328:6;7377:2;7365:9;7356:7;7352:23;7348:32;7345:119;;;7383:79;;:::i;:::-;7345:119;7531:1;7520:9;7516:17;7503:31;7561:18;7553:6;7550:30;7547:117;;;7583:79;;:::i;:::-;7547:117;7688:63;7743:7;7734:6;7723:9;7719:22;7688:63;:::i;:::-;7678:73;;7474:287;7259:509;;;;:::o;7774:329::-;7833:6;7882:2;7870:9;7861:7;7857:23;7853:32;7850:119;;;7888:79;;:::i;:::-;7850:119;8008:1;8033:53;8078:7;8069:6;8058:9;8054:22;8033:53;:::i;:::-;8023:63;;7979:117;7774:329;;;;:::o;8109:118::-;8196:24;8214:5;8196:24;:::i;:::-;8191:3;8184:37;8109:118;;:::o;8233:109::-;8314:21;8329:5;8314:21;:::i;:::-;8309:3;8302:34;8233:109;;:::o;8348:360::-;8434:3;8462:38;8494:5;8462:38;:::i;:::-;8516:70;8579:6;8574:3;8516:70;:::i;:::-;8509:77;;8595:52;8640:6;8635:3;8628:4;8621:5;8617:16;8595:52;:::i;:::-;8672:29;8694:6;8672:29;:::i;:::-;8667:3;8663:39;8656:46;;8438:270;8348:360;;;;:::o;8714:364::-;8802:3;8830:39;8863:5;8830:39;:::i;:::-;8885:71;8949:6;8944:3;8885:71;:::i;:::-;8878:78;;8965:52;9010:6;9005:3;8998:4;8991:5;8987:16;8965:52;:::i;:::-;9042:29;9064:6;9042:29;:::i;:::-;9037:3;9033:39;9026:46;;8806:272;8714:364;;;;:::o;9084:377::-;9190:3;9218:39;9251:5;9218:39;:::i;:::-;9273:89;9355:6;9350:3;9273:89;:::i;:::-;9266:96;;9371:52;9416:6;9411:3;9404:4;9397:5;9393:16;9371:52;:::i;:::-;9448:6;9443:3;9439:16;9432:23;;9194:267;9084:377;;;;:::o;9491:845::-;9594:3;9631:5;9625:12;9660:36;9686:9;9660:36;:::i;:::-;9712:89;9794:6;9789:3;9712:89;:::i;:::-;9705:96;;9832:1;9821:9;9817:17;9848:1;9843:137;;;;9994:1;9989:341;;;;9810:520;;9843:137;9927:4;9923:9;9912;9908:25;9903:3;9896:38;9963:6;9958:3;9954:16;9947:23;;9843:137;;9989:341;10056:38;10088:5;10056:38;:::i;:::-;10116:1;10130:154;10144:6;10141:1;10138:13;10130:154;;;10218:7;10212:14;10208:1;10203:3;10199:11;10192:35;10268:1;10259:7;10255:15;10244:26;;10166:4;10163:1;10159:12;10154:17;;10130:154;;;10313:6;10308:3;10304:16;10297:23;;9996:334;;9810:520;;9598:738;;9491:845;;;;:::o;10342:366::-;10484:3;10505:67;10569:2;10564:3;10505:67;:::i;:::-;10498:74;;10581:93;10670:3;10581:93;:::i;:::-;10699:2;10694:3;10690:12;10683:19;;10342:366;;;:::o;10714:365::-;10856:3;10877:66;10941:1;10936:3;10877:66;:::i;:::-;10870:73;;10952:93;11041:3;10952:93;:::i;:::-;11070:2;11065:3;11061:12;11054:19;;10714:365;;;:::o;11085:366::-;11227:3;11248:67;11312:2;11307:3;11248:67;:::i;:::-;11241:74;;11324:93;11413:3;11324:93;:::i;:::-;11442:2;11437:3;11433:12;11426:19;;11085:366;;;:::o;11457:::-;11599:3;11620:67;11684:2;11679:3;11620:67;:::i;:::-;11613:74;;11696:93;11785:3;11696:93;:::i;:::-;11814:2;11809:3;11805:12;11798:19;;11457:366;;;:::o;11829:::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:::-;12343:3;12364:67;12428:2;12423:3;12364:67;:::i;:::-;12357:74;;12440:93;12529:3;12440:93;:::i;:::-;12558:2;12553:3;12549:12;12542:19;;12201:366;;;:::o;12573:::-;12715:3;12736:67;12800:2;12795:3;12736:67;:::i;:::-;12729:74;;12812:93;12901:3;12812:93;:::i;:::-;12930:2;12925:3;12921:12;12914:19;;12573:366;;;:::o;12945:::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:::-;13831:3;13852:67;13916:2;13911:3;13852:67;:::i;:::-;13845:74;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13689:366;;;:::o;14061:::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:::-;14575:3;14596:67;14660:2;14655:3;14596:67;:::i;:::-;14589:74;;14672:93;14761:3;14672:93;:::i;:::-;14790:2;14785:3;14781:12;14774:19;;14433:366;;;:::o;14805:::-;14947:3;14968:67;15032:2;15027:3;14968:67;:::i;:::-;14961:74;;15044:93;15133:3;15044:93;:::i;:::-;15162:2;15157:3;15153:12;15146:19;;14805:366;;;:::o;15177:::-;15319:3;15340:67;15404:2;15399:3;15340:67;:::i;:::-;15333:74;;15416:93;15505:3;15416:93;:::i;:::-;15534:2;15529:3;15525:12;15518:19;;15177:366;;;:::o;15549:::-;15691:3;15712:67;15776:2;15771:3;15712:67;:::i;:::-;15705:74;;15788:93;15877:3;15788:93;:::i;:::-;15906:2;15901:3;15897:12;15890:19;;15549:366;;;:::o;15921:::-;16063:3;16084:67;16148:2;16143:3;16084:67;:::i;:::-;16077:74;;16160:93;16249:3;16160:93;:::i;:::-;16278:2;16273:3;16269:12;16262:19;;15921:366;;;:::o;16293:::-;16435:3;16456:67;16520:2;16515:3;16456:67;:::i;:::-;16449:74;;16532:93;16621:3;16532:93;:::i;:::-;16650:2;16645:3;16641:12;16634:19;;16293:366;;;:::o;16665:::-;16807:3;16828:67;16892:2;16887:3;16828:67;:::i;:::-;16821:74;;16904:93;16993:3;16904:93;:::i;:::-;17022:2;17017:3;17013:12;17006:19;;16665:366;;;:::o;17037:::-;17179:3;17200:67;17264:2;17259:3;17200:67;:::i;:::-;17193:74;;17276:93;17365:3;17276:93;:::i;:::-;17394:2;17389:3;17385:12;17378:19;;17037:366;;;:::o;17409:398::-;17568:3;17589:83;17670:1;17665:3;17589:83;:::i;:::-;17582:90;;17681:93;17770:3;17681:93;:::i;:::-;17799:1;17794:3;17790:11;17783:18;;17409:398;;;:::o;17813:366::-;17955:3;17976:67;18040:2;18035:3;17976:67;:::i;:::-;17969:74;;18052:93;18141:3;18052:93;:::i;:::-;18170:2;18165:3;18161:12;18154:19;;17813:366;;;:::o;18185:::-;18327:3;18348:67;18412:2;18407:3;18348:67;:::i;:::-;18341:74;;18424:93;18513:3;18424:93;:::i;:::-;18542:2;18537:3;18533:12;18526:19;;18185:366;;;:::o;18557:::-;18699:3;18720:67;18784:2;18779:3;18720:67;:::i;:::-;18713:74;;18796:93;18885:3;18796:93;:::i;:::-;18914:2;18909:3;18905:12;18898:19;;18557:366;;;:::o;18929:::-;19071:3;19092:67;19156:2;19151:3;19092:67;:::i;:::-;19085:74;;19168:93;19257:3;19168:93;:::i;:::-;19286:2;19281:3;19277:12;19270:19;;18929:366;;;:::o;19301:::-;19443:3;19464:67;19528:2;19523:3;19464:67;:::i;:::-;19457:74;;19540:93;19629:3;19540:93;:::i;:::-;19658:2;19653:3;19649:12;19642:19;;19301:366;;;:::o;20045:::-;20187:3;20208:67;20272:2;20267:3;20208:67;:::i;:::-;20201:74;;20284:93;20373:3;20284:93;:::i;:::-;20402:2;20397:3;20393:12;20386:19;;20045:366;;;:::o;20417:118::-;20504:24;20522:5;20504:24;:::i;:::-;20499:3;20492:37;20417:118;;:::o;20541:589::-;20766:3;20788:92;20876:3;20867:6;20788:92;:::i;:::-;20781:99;;20897:95;20988:3;20979:6;20897:95;:::i;:::-;20890:102;;21009:95;21100:3;21091:6;21009:95;:::i;:::-;21002:102;;21121:3;21114:10;;20541:589;;;;;;:::o;21136:379::-;21320:3;21342:147;21485:3;21342:147;:::i;:::-;21335:154;;21506:3;21499:10;;21136:379;;;:::o;21521:222::-;21614:4;21652:2;21641:9;21637:18;21629:26;;21665:71;21733:1;21722:9;21718:17;21709:6;21665:71;:::i;:::-;21521:222;;;;:::o;21749:640::-;21944:4;21982:3;21971:9;21967:19;21959:27;;21996:71;22064:1;22053:9;22049:17;22040:6;21996:71;:::i;:::-;22077:72;22145:2;22134:9;22130:18;22121:6;22077:72;:::i;:::-;22159;22227:2;22216:9;22212:18;22203:6;22159:72;:::i;:::-;22278:9;22272:4;22268:20;22263:2;22252:9;22248:18;22241:48;22306:76;22377:4;22368:6;22306:76;:::i;:::-;22298:84;;21749:640;;;;;;;:::o;22395:210::-;22482:4;22520:2;22509:9;22505:18;22497:26;;22533:65;22595:1;22584:9;22580:17;22571:6;22533:65;:::i;:::-;22395:210;;;;:::o;22611:313::-;22724:4;22762:2;22751:9;22747:18;22739:26;;22811:9;22805:4;22801:20;22797:1;22786:9;22782:17;22775:47;22839:78;22912:4;22903:6;22839:78;:::i;:::-;22831:86;;22611:313;;;;:::o;22930:419::-;23096:4;23134:2;23123:9;23119:18;23111:26;;23183:9;23177:4;23173:20;23169:1;23158:9;23154:17;23147:47;23211:131;23337:4;23211:131;:::i;:::-;23203:139;;22930:419;;;:::o;23355:::-;23521:4;23559:2;23548:9;23544:18;23536:26;;23608:9;23602:4;23598:20;23594:1;23583:9;23579:17;23572:47;23636:131;23762:4;23636:131;:::i;:::-;23628:139;;23355:419;;;:::o;23780:::-;23946:4;23984:2;23973:9;23969:18;23961:26;;24033:9;24027:4;24023:20;24019:1;24008:9;24004:17;23997:47;24061:131;24187:4;24061:131;:::i;:::-;24053:139;;23780:419;;;:::o;24205:::-;24371:4;24409:2;24398:9;24394:18;24386:26;;24458:9;24452:4;24448:20;24444:1;24433:9;24429:17;24422:47;24486:131;24612:4;24486:131;:::i;:::-;24478:139;;24205:419;;;:::o;24630:::-;24796:4;24834:2;24823:9;24819:18;24811:26;;24883:9;24877:4;24873:20;24869:1;24858:9;24854:17;24847:47;24911:131;25037:4;24911:131;:::i;:::-;24903:139;;24630:419;;;:::o;25055:::-;25221:4;25259:2;25248:9;25244:18;25236:26;;25308:9;25302:4;25298:20;25294:1;25283:9;25279:17;25272:47;25336:131;25462:4;25336:131;:::i;:::-;25328:139;;25055:419;;;:::o;25480:::-;25646:4;25684:2;25673:9;25669:18;25661:26;;25733:9;25727:4;25723:20;25719:1;25708:9;25704:17;25697:47;25761:131;25887:4;25761:131;:::i;:::-;25753:139;;25480:419;;;:::o;25905:::-;26071:4;26109:2;26098:9;26094:18;26086:26;;26158:9;26152:4;26148:20;26144:1;26133:9;26129:17;26122:47;26186:131;26312:4;26186:131;:::i;:::-;26178:139;;25905:419;;;:::o;26330:::-;26496:4;26534:2;26523:9;26519:18;26511:26;;26583:9;26577:4;26573:20;26569:1;26558:9;26554:17;26547:47;26611:131;26737:4;26611:131;:::i;:::-;26603:139;;26330:419;;;:::o;26755:::-;26921:4;26959:2;26948:9;26944:18;26936:26;;27008:9;27002:4;26998:20;26994:1;26983:9;26979:17;26972:47;27036:131;27162:4;27036:131;:::i;:::-;27028:139;;26755:419;;;:::o;27180:::-;27346:4;27384:2;27373:9;27369:18;27361:26;;27433:9;27427:4;27423:20;27419:1;27408:9;27404:17;27397:47;27461:131;27587:4;27461:131;:::i;:::-;27453:139;;27180:419;;;:::o;27605:::-;27771:4;27809:2;27798:9;27794:18;27786:26;;27858:9;27852:4;27848:20;27844:1;27833:9;27829:17;27822:47;27886:131;28012:4;27886:131;:::i;:::-;27878:139;;27605:419;;;:::o;28030:::-;28196:4;28234:2;28223:9;28219:18;28211:26;;28283:9;28277:4;28273:20;28269:1;28258:9;28254:17;28247:47;28311:131;28437:4;28311:131;:::i;:::-;28303:139;;28030:419;;;:::o;28455:::-;28621:4;28659:2;28648:9;28644:18;28636:26;;28708:9;28702:4;28698:20;28694:1;28683:9;28679:17;28672:47;28736:131;28862:4;28736:131;:::i;:::-;28728:139;;28455:419;;;:::o;28880:::-;29046:4;29084:2;29073:9;29069:18;29061:26;;29133:9;29127:4;29123:20;29119:1;29108:9;29104:17;29097:47;29161:131;29287:4;29161:131;:::i;:::-;29153:139;;28880:419;;;:::o;29305:::-;29471:4;29509:2;29498:9;29494:18;29486:26;;29558:9;29552:4;29548:20;29544:1;29533:9;29529:17;29522:47;29586:131;29712:4;29586:131;:::i;:::-;29578:139;;29305:419;;;:::o;29730:::-;29896:4;29934:2;29923:9;29919:18;29911:26;;29983:9;29977:4;29973:20;29969:1;29958:9;29954:17;29947:47;30011:131;30137:4;30011:131;:::i;:::-;30003:139;;29730:419;;;:::o;30155:::-;30321:4;30359:2;30348:9;30344:18;30336:26;;30408:9;30402:4;30398:20;30394:1;30383:9;30379:17;30372:47;30436:131;30562:4;30436:131;:::i;:::-;30428:139;;30155:419;;;:::o;30580:::-;30746:4;30784:2;30773:9;30769:18;30761:26;;30833:9;30827:4;30823:20;30819:1;30808:9;30804:17;30797:47;30861:131;30987:4;30861:131;:::i;:::-;30853:139;;30580:419;;;:::o;31005:::-;31171:4;31209:2;31198:9;31194:18;31186:26;;31258:9;31252:4;31248:20;31244:1;31233:9;31229:17;31222:47;31286:131;31412:4;31286:131;:::i;:::-;31278:139;;31005:419;;;:::o;31430:::-;31596:4;31634:2;31623:9;31619:18;31611:26;;31683:9;31677:4;31673:20;31669:1;31658:9;31654:17;31647:47;31711:131;31837:4;31711:131;:::i;:::-;31703:139;;31430:419;;;:::o;31855:::-;32021:4;32059:2;32048:9;32044:18;32036:26;;32108:9;32102:4;32098:20;32094:1;32083:9;32079:17;32072:47;32136:131;32262:4;32136:131;:::i;:::-;32128:139;;31855:419;;;:::o;32280:::-;32446:4;32484:2;32473:9;32469:18;32461:26;;32533:9;32527:4;32523:20;32519:1;32508:9;32504:17;32497:47;32561:131;32687:4;32561:131;:::i;:::-;32553:139;;32280:419;;;:::o;32705:::-;32871:4;32909:2;32898:9;32894:18;32886:26;;32958:9;32952:4;32948:20;32944:1;32933:9;32929:17;32922:47;32986:131;33112:4;32986:131;:::i;:::-;32978:139;;32705:419;;;:::o;33555:::-;33721:4;33759:2;33748:9;33744:18;33736:26;;33808:9;33802:4;33798:20;33794:1;33783:9;33779:17;33772:47;33836:131;33962:4;33836:131;:::i;:::-;33828:139;;33555:419;;;:::o;33980:222::-;34073:4;34111:2;34100:9;34096:18;34088:26;;34124:71;34192:1;34181:9;34177:17;34168:6;34124:71;:::i;:::-;33980:222;;;;:::o;34208:129::-;34242:6;34269:20;;:::i;:::-;34259:30;;34298:33;34326:4;34318:6;34298:33;:::i;:::-;34208:129;;;:::o;34343:75::-;34376:6;34409:2;34403:9;34393:19;;34343:75;:::o;34424:307::-;34485:4;34575:18;34567:6;34564:30;34561:56;;;34597:18;;:::i;:::-;34561:56;34635:29;34657:6;34635:29;:::i;:::-;34627:37;;34719:4;34713;34709:15;34701:23;;34424:307;;;:::o;34737:308::-;34799:4;34889:18;34881:6;34878:30;34875:56;;;34911:18;;:::i;:::-;34875:56;34949:29;34971:6;34949:29;:::i;:::-;34941:37;;35033:4;35027;35023:15;35015:23;;34737:308;;;:::o;35051:141::-;35100:4;35123:3;35115:11;;35146:3;35143:1;35136:14;35180:4;35177:1;35167:18;35159:26;;35051:141;;;:::o;35198:98::-;35249:6;35283:5;35277:12;35267:22;;35198:98;;;:::o;35302:99::-;35354:6;35388:5;35382:12;35372:22;;35302:99;;;:::o;35407:168::-;35490:11;35524:6;35519:3;35512:19;35564:4;35559:3;35555:14;35540:29;;35407:168;;;;:::o;35581:147::-;35682:11;35719:3;35704:18;;35581:147;;;;:::o;35734:169::-;35818:11;35852:6;35847:3;35840:19;35892:4;35887:3;35883:14;35868:29;;35734:169;;;;:::o;35909:148::-;36011:11;36048:3;36033:18;;35909:148;;;;:::o;36063:273::-;36103:3;36122:20;36140:1;36122:20;:::i;:::-;36117:25;;36156:20;36174:1;36156:20;:::i;:::-;36151:25;;36278:1;36242:34;36238:42;36235:1;36232:49;36229:75;;;36284:18;;:::i;:::-;36229:75;36328:1;36325;36321:9;36314:16;;36063:273;;;;:::o;36342:305::-;36382:3;36401:20;36419:1;36401:20;:::i;:::-;36396:25;;36435:20;36453:1;36435:20;:::i;:::-;36430:25;;36589:1;36521:66;36517:74;36514:1;36511:81;36508:107;;;36595:18;;:::i;:::-;36508:107;36639:1;36636;36632:9;36625:16;;36342:305;;;;:::o;36653:185::-;36693:1;36710:20;36728:1;36710:20;:::i;:::-;36705:25;;36744:20;36762:1;36744:20;:::i;:::-;36739:25;;36783:1;36773:35;;36788:18;;:::i;:::-;36773:35;36830:1;36827;36823:9;36818:14;;36653:185;;;;:::o;36844:348::-;36884:7;36907:20;36925:1;36907:20;:::i;:::-;36902:25;;36941:20;36959:1;36941:20;:::i;:::-;36936:25;;37129:1;37061:66;37057:74;37054:1;37051:81;37046:1;37039:9;37032:17;37028:105;37025:131;;;37136:18;;:::i;:::-;37025:131;37184:1;37181;37177:9;37166:20;;36844:348;;;;:::o;37198:191::-;37238:4;37258:20;37276:1;37258:20;:::i;:::-;37253:25;;37292:20;37310:1;37292:20;:::i;:::-;37287:25;;37331:1;37328;37325:8;37322:34;;;37336:18;;:::i;:::-;37322:34;37381:1;37378;37374:9;37366:17;;37198:191;;;;:::o;37395:96::-;37432:7;37461:24;37479:5;37461:24;:::i;:::-;37450:35;;37395:96;;;:::o;37497:90::-;37531:7;37574:5;37567:13;37560:21;37549:32;;37497:90;;;:::o;37593:149::-;37629:7;37669:66;37662:5;37658:78;37647:89;;37593:149;;;:::o;37748:125::-;37814:7;37843:24;37861:5;37843:24;:::i;:::-;37832:35;;37748:125;;;:::o;37879:118::-;37916:7;37956:34;37949:5;37945:46;37934:57;;37879:118;;;:::o;38003:126::-;38040:7;38080:42;38073:5;38069:54;38058:65;;38003:126;;;:::o;38135:77::-;38172:7;38201:5;38190:16;;38135:77;;;:::o;38218:154::-;38302:6;38297:3;38292;38279:30;38364:1;38355:6;38350:3;38346:16;38339:27;38218:154;;;:::o;38378:307::-;38446:1;38456:113;38470:6;38467:1;38464:13;38456:113;;;38555:1;38550:3;38546:11;38540:18;38536:1;38531:3;38527:11;38520:39;38492:2;38489:1;38485:10;38480:15;;38456:113;;;38587:6;38584:1;38581:13;38578:101;;;38667:1;38658:6;38653:3;38649:16;38642:27;38578:101;38427:258;38378:307;;;:::o;38691:171::-;38730:3;38753:24;38771:5;38753:24;:::i;:::-;38744:33;;38799:4;38792:5;38789:15;38786:41;;;38807:18;;:::i;:::-;38786:41;38854:1;38847:5;38843:13;38836:20;;38691:171;;;:::o;38868:320::-;38912:6;38949:1;38943:4;38939:12;38929:22;;38996:1;38990:4;38986:12;39017:18;39007:81;;39073:4;39065:6;39061:17;39051:27;;39007:81;39135:2;39127:6;39124:14;39104:18;39101:38;39098:84;;;39154:18;;:::i;:::-;39098:84;38919:269;38868:320;;;:::o;39194:281::-;39277:27;39299:4;39277:27;:::i;:::-;39269:6;39265:40;39407:6;39395:10;39392:22;39371:18;39359:10;39356:34;39353:62;39350:88;;;39418:18;;:::i;:::-;39350:88;39458:10;39454:2;39447:22;39237:238;39194:281;;:::o;39481:233::-;39520:3;39543:24;39561:5;39543:24;:::i;:::-;39534:33;;39589:66;39582:5;39579:77;39576:103;;;39659:18;;:::i;:::-;39576:103;39706:1;39699:5;39695:13;39688:20;;39481:233;;;:::o;39720:176::-;39752:1;39769:20;39787:1;39769:20;:::i;:::-;39764:25;;39803:20;39821:1;39803:20;:::i;:::-;39798:25;;39842:1;39832:35;;39847:18;;:::i;:::-;39832:35;39888:1;39885;39881:9;39876:14;;39720:176;;;;:::o;39902:180::-;39950:77;39947:1;39940:88;40047:4;40044:1;40037:15;40071:4;40068:1;40061:15;40088:180;40136:77;40133:1;40126:88;40233:4;40230:1;40223:15;40257:4;40254:1;40247:15;40274:180;40322:77;40319:1;40312:88;40419:4;40416:1;40409:15;40443:4;40440:1;40433:15;40460:180;40508:77;40505:1;40498:88;40605:4;40602:1;40595:15;40629:4;40626:1;40619:15;40646:180;40694:77;40691:1;40684:88;40791:4;40788:1;40781:15;40815:4;40812:1;40805:15;40832:117;40941:1;40938;40931:12;40955:117;41064:1;41061;41054:12;41078:117;41187:1;41184;41177:12;41201:117;41310:1;41307;41300:12;41324:102;41365:6;41416:2;41412:7;41407:2;41400:5;41396:14;41392:28;41382:38;;41324:102;;;:::o;41432:221::-;41572:34;41568:1;41560:6;41556:14;41549:58;41641:4;41636:2;41628:6;41624:15;41617:29;41432:221;:::o;41659:156::-;41799:8;41795:1;41787:6;41783:14;41776:32;41659:156;:::o;41821:225::-;41961:34;41957:1;41949:6;41945:14;41938:58;42030:8;42025:2;42017:6;42013:15;42006:33;41821:225;:::o;42052:229::-;42192:34;42188:1;42180:6;42176:14;42169:58;42261:12;42256:2;42248:6;42244:15;42237:37;42052:229;:::o;42287:160::-;42427:12;42423:1;42415:6;42411:14;42404:36;42287:160;:::o;42453:172::-;42593:24;42589:1;42581:6;42577:14;42570:48;42453:172;:::o;42631:222::-;42771:34;42767:1;42759:6;42755:14;42748:58;42840:5;42835:2;42827:6;42823:15;42816:30;42631:222;:::o;42859:224::-;42999:34;42995:1;42987:6;42983:14;42976:58;43068:7;43063:2;43055:6;43051:15;43044:32;42859:224;:::o;43089:172::-;43229:24;43225:1;43217:6;43213:14;43206:48;43089:172;:::o;43267:244::-;43407:34;43403:1;43395:6;43391:14;43384:58;43476:27;43471:2;43463:6;43459:15;43452:52;43267:244;:::o;43517:168::-;43657:20;43653:1;43645:6;43641:14;43634:44;43517:168;:::o;43691:230::-;43831:34;43827:1;43819:6;43815:14;43808:58;43900:13;43895:2;43887:6;43883:15;43876:38;43691:230;:::o;43927:171::-;44067:23;44063:1;44055:6;44051:14;44044:47;43927:171;:::o;44104:225::-;44244:34;44240:1;44232:6;44228:14;44221:58;44313:8;44308:2;44300:6;44296:15;44289:33;44104:225;:::o;44335:182::-;44475:34;44471:1;44463:6;44459:14;44452:58;44335:182;:::o;44523:176::-;44663:28;44659:1;44651:6;44647:14;44640:52;44523:176;:::o;44705:237::-;44845:34;44841:1;44833:6;44829:14;44822:58;44914:20;44909:2;44901:6;44897:15;44890:45;44705:237;:::o;44948:172::-;45088:24;45084:1;45076:6;45072:14;45065:48;44948:172;:::o;45126:221::-;45266:34;45262:1;45254:6;45250:14;45243:58;45335:4;45330:2;45322:6;45318:15;45311:29;45126:221;:::o;45353:114::-;;:::o;45473:222::-;45613:34;45609:1;45601:6;45597:14;45590:58;45682:5;45677:2;45669:6;45665:15;45658:30;45473:222;:::o;45701:238::-;45841:34;45837:1;45829:6;45825:14;45818:58;45910:21;45905:2;45897:6;45893:15;45886:46;45701:238;:::o;45945:179::-;46085:31;46081:1;46073:6;46069:14;46062:55;45945:179;:::o;46130:220::-;46270:34;46266:1;46258:6;46254:14;46247:58;46339:3;46334:2;46326:6;46322:15;46315:28;46130:220;:::o;46356:233::-;46496:34;46492:1;46484:6;46480:14;46473:58;46565:16;46560:2;46552:6;46548:15;46541:41;46356:233;:::o;46835:232::-;46975:34;46971:1;46963:6;46959:14;46952:58;47044:15;47039:2;47031:6;47027:15;47020:40;46835:232;:::o;47073:122::-;47146:24;47164:5;47146:24;:::i;:::-;47139:5;47136:35;47126:63;;47185:1;47182;47175:12;47126:63;47073:122;:::o;47201:116::-;47271:21;47286:5;47271:21;:::i;:::-;47264:5;47261:32;47251:60;;47307:1;47304;47297:12;47251:60;47201:116;:::o;47323:120::-;47395:23;47412:5;47395:23;:::i;:::-;47388:5;47385:34;47375:62;;47433:1;47430;47423:12;47375:62;47323:120;:::o;47449:180::-;47551:53;47598:5;47551:53;:::i;:::-;47544:5;47541:64;47531:92;;47619:1;47616;47609:12;47531:92;47449:180;:::o;47635:122::-;47708:24;47726:5;47708:24;:::i;:::-;47701:5;47698:35;47688:63;;47747:1;47744;47737:12;47688:63;47635:122;:::o
Swarm Source
ipfs://b8e6dc0cfb68b6e855520ad2eb85dc407f83b3fdeb221c3f52739aa1d2b1058e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.