ERC-721
Overview
Max Total Supply
126 AYC
Holders
37
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 AYCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MWAYC
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-07 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/cryptography/MerkleProof.sol) // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @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/Context.sol // 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/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @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/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @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`. * * 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; /** * @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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @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: ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 1; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: Contract.sol pragma solidity ^0.8.7; contract MWAYC is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; mapping(address => uint256) public publicClaimed; string public baseURI; string public hiddenMetadataURI ="ipfs://bafkreihmi4sidue7i53h66wg7xbtfq6twpuk5mazecls4wzj6djdgbvupq"; uint256 public publicCost = 0.0088 ether; uint256 public maxPublic = 66; bool public paused = true; bool public revealed; uint256 public maxSupply = 5777; constructor() ERC721A("MWAYC", "AYC") { } // ============ PUBLIC FUNCTIONS FOR MINTING ============ function mint(uint256 quantity) external payable nonReentrant { require(!paused, "The contract is paused!"); require(quantity > 0 && totalSupply() + quantity <= maxSupply, "Invalid amount!"); if (msg.sender != owner()) { require(publicClaimed[msg.sender] + quantity <= maxPublic, "You're not allowed to mint this much!"); require(quantity <= maxPublic, "You're not allowed to mint more than max Mint Amount!"); if(quantity >= 10) { require(msg.value >= publicCost * (quantity - 1), "Insufficient Funds!"); } else { require(msg.value >= publicCost * quantity, "Insufficient Funds!"); } publicClaimed[msg.sender] += quantity; } _safeMint(msg.sender, quantity); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // ============ PUBLIC READ-ONLY FUNCTIONS ============ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataURI; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), ".json" ) ) : ""; } function setCost(uint256 _newPublicCost) external onlyOwner { publicCost = _newPublicCost; } function setMaxPublic(uint256 _newMaxPublic) external onlyOwner { maxPublic = _newMaxPublic; } function setMaxSuppy(uint256 _amount) external onlyOwner { maxSupply = _amount; } function setPaused(bool _state) external onlyOwner { paused = _state; } function setRevealed(bool _state) external onlyOwner { revealed = _state; } function setHiddenMetadataURI(string memory _URI) external onlyOwner { hiddenMetadataURI = _URI; } function setBaseURI(string memory _newBaseURI) external onlyOwner { baseURI = _newBaseURI; } function airDrop(uint256 quantity, address _address) external onlyOwner { _safeMint(_address, quantity); } function burn(uint256 tokenId) public onlyOwner{ _burn(tokenId); } function burnBatch(uint256[] memory tokenIds) public onlyOwner{ for (uint256 index = 0; index < tokenIds.length; index++) { _burn(tokenIds[index]); } } function withdraw() public onlyOwner { // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool ts, ) = payable(owner()).call{value: address(this).balance}(""); require(ts); // ============================================================================= } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPublicCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_URI","type":"string"}],"name":"setHiddenMetadataURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxPublic","type":"uint256"}],"name":"setMaxPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxSuppy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","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":"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
60806040526040518060800160405280604281526020016200488860429139600c90805190602001906200003592919062000230565b50661f438daa060000600d556042600e556001600f60006101000a81548160ff0219169083151502179055506116916010553480156200007457600080fd5b506040518060400160405280600581526020017f4d574159430000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f41594300000000000000000000000000000000000000000000000000000000008152508160029080519060200190620000f992919062000230565b5080600390805190602001906200011292919062000230565b50620001236200015960201b60201c565b60008190555050506200014b6200013f6200016260201b60201c565b6200016a60201b60201c565b600160098190555062000345565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200023e90620002e0565b90600052602060002090601f016020900481019282620002625760008555620002ae565b82601f106200027d57805160ff1916838001178555620002ae565b82800160010185558215620002ae579182015b82811115620002ad57825182559160200191906001019062000290565b5b509050620002bd9190620002c1565b5090565b5b80821115620002dc576000816000905550600101620002c2565b5090565b60006002820490506001821680620002f957607f821691505b6020821081141562000310576200030f62000316565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61453380620003556000396000f3fe60806040526004361061021a5760003560e01c8063715018a611610123578063b5b1cd7c116100ab578063e0a808531161006f578063e0a808531461079c578063e4623c1b146107c5578063e985e9c5146107ee578063f2fde38b1461082b578063fbdb8494146108545761021a565b8063b5b1cd7c146106a3578063b88d4fde146106e0578063ba9e12f714610709578063c87b56dd14610734578063d5abeb01146107715761021a565b806395d89b41116100f257806395d89b41146105e15780639ec571d51461060c578063a0712d6814610635578063a22cb46514610651578063aed380151461067a5761021a565b8063715018a6146105495780637dc42975146105605780638693da201461058b5780638da5cb5b146105b65761021a565b806342966c68116101a657806355f804b31161017557806355f804b3146104505780635c975abb146104795780636352211e146104a45780636c0360eb146104e157806370a082311461050c5761021a565b806342966c68146103aa57806344a0d68a146103d3578063512507c6146103fc57806351830227146104255761021a565b806316c38b3c116101ed57806316c38b3c146102ed57806318160ddd1461031657806323b872dd146103415780633ccfd60b1461036a57806342842e0e146103815761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061382a565b61087d565b6040516102539190613c36565b60405180910390f35b34801561026857600080fd5b5061027161095f565b60405161027e9190613c51565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906138cd565b6109f1565b6040516102bb9190613bcf565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613774565b610a6d565b005b3480156102f957600080fd5b50610314600480360381019061030f91906137fd565b610b78565b005b34801561032257600080fd5b5061032b610c11565b6040516103389190613d93565b60405180910390f35b34801561034d57600080fd5b506103686004803603810190610363919061365e565b610c28565b005b34801561037657600080fd5b5061037f610c38565b005b34801561038d57600080fd5b506103a860048036038101906103a3919061365e565b610d34565b005b3480156103b657600080fd5b506103d160048036038101906103cc91906138cd565b610d54565b005b3480156103df57600080fd5b506103fa60048036038101906103f591906138cd565b610ddc565b005b34801561040857600080fd5b50610423600480360381019061041e9190613884565b610e62565b005b34801561043157600080fd5b5061043a610ef8565b6040516104479190613c36565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190613884565b610f0b565b005b34801561048557600080fd5b5061048e610fa1565b60405161049b9190613c36565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c691906138cd565b610fb4565b6040516104d89190613bcf565b60405180910390f35b3480156104ed57600080fd5b506104f6610fca565b6040516105039190613c51565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e91906135f1565b611058565b6040516105409190613d93565b60405180910390f35b34801561055557600080fd5b5061055e611128565b005b34801561056c57600080fd5b506105756111b0565b6040516105829190613d93565b60405180910390f35b34801561059757600080fd5b506105a06111b6565b6040516105ad9190613d93565b60405180910390f35b3480156105c257600080fd5b506105cb6111bc565b6040516105d89190613bcf565b60405180910390f35b3480156105ed57600080fd5b506105f66111e6565b6040516106039190613c51565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e91906138cd565b611278565b005b61064f600480360381019061064a91906138cd565b6112fe565b005b34801561065d57600080fd5b5061067860048036038101906106739190613734565b611633565b005b34801561068657600080fd5b506106a1600480360381019061069c91906138fa565b6117ab565b005b3480156106af57600080fd5b506106ca60048036038101906106c591906135f1565b611835565b6040516106d79190613d93565b60405180910390f35b3480156106ec57600080fd5b50610707600480360381019061070291906136b1565b61184d565b005b34801561071557600080fd5b5061071e6118c9565b60405161072b9190613c51565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906138cd565b611957565b6040516107689190613c51565b60405180910390f35b34801561077d57600080fd5b50610786611aad565b6040516107939190613d93565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be91906137fd565b611ab3565b005b3480156107d157600080fd5b506107ec60048036038101906107e791906137b4565b611b4c565b005b3480156107fa57600080fd5b506108156004803603810190610810919061361e565b611c0e565b6040516108229190613c36565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d91906135f1565b611ca2565b005b34801561086057600080fd5b5061087b600480360381019061087691906138cd565b611d9a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610958575061095782611e20565b5b9050919050565b60606002805461096e9061407a565b80601f016020809104026020016040519081016040528092919081815260200182805461099a9061407a565b80156109e75780601f106109bc576101008083540402835291602001916109e7565b820191906000526020600020905b8154815290600101906020018083116109ca57829003601f168201915b5050505050905090565b60006109fc82611e8a565b610a32576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a7882610fb4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ae0576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aff611ed8565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b315750610b2f81610b2a611ed8565b611c0e565b155b15610b68576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b73838383611ee0565b505050565b610b80611ed8565b73ffffffffffffffffffffffffffffffffffffffff16610b9e6111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90613cf3565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000610c1b611f92565b6001546000540303905090565b610c33838383611f9b565b505050565b610c40611ed8565b73ffffffffffffffffffffffffffffffffffffffff16610c5e6111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cab90613cf3565b60405180910390fd5b6000610cbe6111bc565b73ffffffffffffffffffffffffffffffffffffffff1647604051610ce190613bba565b60006040518083038185875af1925050503d8060008114610d1e576040519150601f19603f3d011682016040523d82523d6000602084013e610d23565b606091505b5050905080610d3157600080fd5b50565b610d4f8383836040518060200160405280600081525061184d565b505050565b610d5c611ed8565b73ffffffffffffffffffffffffffffffffffffffff16610d7a6111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc790613cf3565b60405180910390fd5b610dd981612451565b50565b610de4611ed8565b73ffffffffffffffffffffffffffffffffffffffff16610e026111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f90613cf3565b60405180910390fd5b80600d8190555050565b610e6a611ed8565b73ffffffffffffffffffffffffffffffffffffffff16610e886111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590613cf3565b60405180910390fd5b80600c9080519060200190610ef4929190613324565b5050565b600f60019054906101000a900460ff1681565b610f13611ed8565b73ffffffffffffffffffffffffffffffffffffffff16610f316111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90613cf3565b60405180910390fd5b80600b9080519060200190610f9d929190613324565b5050565b600f60009054906101000a900460ff1681565b6000610fbf8261245f565b600001519050919050565b600b8054610fd79061407a565b80601f01602080910402602001604051908101604052809291908181526020018280546110039061407a565b80156110505780601f1061102557610100808354040283529160200191611050565b820191906000526020600020905b81548152906001019060200180831161103357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110c0576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611130611ed8565b73ffffffffffffffffffffffffffffffffffffffff1661114e6111bc565b73ffffffffffffffffffffffffffffffffffffffff16146111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b90613cf3565b60405180910390fd5b6111ae60006126ee565b565b600e5481565b600d5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546111f59061407a565b80601f01602080910402602001604051908101604052809291908181526020018280546112219061407a565b801561126e5780601f106112435761010080835404028352916020019161126e565b820191906000526020600020905b81548152906001019060200180831161125157829003601f168201915b5050505050905090565b611280611ed8565b73ffffffffffffffffffffffffffffffffffffffff1661129e6111bc565b73ffffffffffffffffffffffffffffffffffffffff16146112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90613cf3565b60405180910390fd5b8060108190555050565b60026009541415611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90613d73565b60405180910390fd5b6002600981905550600f60009054906101000a900460ff161561139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139390613d13565b60405180910390fd5b6000811180156113c05750601054816113b3610c11565b6113bd9190613eaf565b11155b6113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690613cd3565b60405180910390fd5b6114076111bc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461161e57600e5481600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114879190613eaf565b11156114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf90613c93565b60405180910390fd5b600e5481111561150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150490613d53565b60405180910390fd5b600a8110611576576001816115229190613f90565b600d5461152f9190613f36565b341015611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156890613cb3565b60405180910390fd5b6115c7565b80600d546115849190613f36565b3410156115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd90613cb3565b60405180910390fd5b5b80600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116169190613eaf565b925050819055505b61162833826127b4565b600160098190555050565b61163b611ed8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a0576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006116ad611ed8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661175a611ed8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161179f9190613c36565b60405180910390a35050565b6117b3611ed8565b73ffffffffffffffffffffffffffffffffffffffff166117d16111bc565b73ffffffffffffffffffffffffffffffffffffffff1614611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90613cf3565b60405180910390fd5b61183181836127b4565b5050565b600a6020528060005260406000206000915090505481565b611858848484611f9b565b6118778373ffffffffffffffffffffffffffffffffffffffff166127d2565b801561188c575061188a848484846127f5565b155b156118c3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600c80546118d69061407a565b80601f01602080910402602001604051908101604052809291908181526020018280546119029061407a565b801561194f5780601f106119245761010080835404028352916020019161194f565b820191906000526020600020905b81548152906001019060200180831161193257829003601f168201915b505050505081565b606061196282611e8a565b6119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890613d33565b60405180910390fd5b60001515600f60019054906101000a900460ff1615151415611a4f57600c80546119ca9061407a565b80601f01602080910402602001604051908101604052809291908181526020018280546119f69061407a565b8015611a435780601f10611a1857610100808354040283529160200191611a43565b820191906000526020600020905b815481529060010190602001808311611a2657829003601f168201915b50505050509050611aa8565b6000611a59612955565b90506000815111611a795760405180602001604052806000815250611aa4565b80611a83846129e7565b604051602001611a94929190613b8b565b6040516020818303038152906040525b9150505b919050565b60105481565b611abb611ed8565b73ffffffffffffffffffffffffffffffffffffffff16611ad96111bc565b73ffffffffffffffffffffffffffffffffffffffff1614611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2690613cf3565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b611b54611ed8565b73ffffffffffffffffffffffffffffffffffffffff16611b726111bc565b73ffffffffffffffffffffffffffffffffffffffff1614611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf90613cf3565b60405180910390fd5b60005b8151811015611c0a57611bf7828281518110611bea57611be96141e4565b5b6020026020010151612451565b8080611c02906140dd565b915050611bcb565b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611caa611ed8565b73ffffffffffffffffffffffffffffffffffffffff16611cc86111bc565b73ffffffffffffffffffffffffffffffffffffffff1614611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1590613cf3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8590613c73565b60405180910390fd5b611d97816126ee565b50565b611da2611ed8565b73ffffffffffffffffffffffffffffffffffffffff16611dc06111bc565b73ffffffffffffffffffffffffffffffffffffffff1614611e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0d90613cf3565b60405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611e95611f92565b11158015611ea4575060005482105b8015611ed1575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000611fa68261245f565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612011576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612032611ed8565b73ffffffffffffffffffffffffffffffffffffffff16148061206157506120608561205b611ed8565b611c0e565b5b806120a6575061206f611ed8565b73ffffffffffffffffffffffffffffffffffffffff1661208e846109f1565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806120df576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612146576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121538585856001612b48565b61215f60008487611ee0565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123df5760005482146123de57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461244a8585856001612b4e565b5050505050565b61245c816000612b54565b50565b6124676133aa565b600082905080612475611f92565b11158015612484575060005481105b156126b7576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516126b557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125995780925050506126e9565b5b6001156126b457818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146126af5780925050506126e9565b61259a565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127ce828260405180602001604052806000815250612f44565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261281b611ed8565b8786866040518563ffffffff1660e01b815260040161283d9493929190613bea565b602060405180830381600087803b15801561285757600080fd5b505af192505050801561288857506040513d601f19601f820116820180604052508101906128859190613857565b60015b612902573d80600081146128b8576040519150601f19603f3d011682016040523d82523d6000602084013e6128bd565b606091505b506000815114156128fa576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b80546129649061407a565b80601f01602080910402602001604051908101604052809291908181526020018280546129909061407a565b80156129dd5780601f106129b2576101008083540402835291602001916129dd565b820191906000526020600020905b8154815290600101906020018083116129c057829003601f168201915b5050505050905090565b60606000821415612a2f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b43565b600082905060005b60008214612a61578080612a4a906140dd565b915050600a82612a5a9190613f05565b9150612a37565b60008167ffffffffffffffff811115612a7d57612a7c614213565b5b6040519080825280601f01601f191660200182016040528015612aaf5781602001600182028036833780820191505090505b5090505b60008514612b3c57600182612ac89190613f90565b9150600a85612ad79190614126565b6030612ae39190613eaf565b60f81b818381518110612af957612af86141e4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b359190613f05565b9450612ab3565b8093505050505b919050565b50505050565b50505050565b6000612b5f8361245f565b90506000816000015190508215612c405760008173ffffffffffffffffffffffffffffffffffffffff16612b91611ed8565b73ffffffffffffffffffffffffffffffffffffffff161480612bc05750612bbf82612bba611ed8565b611c0e565b5b80612c055750612bce611ed8565b73ffffffffffffffffffffffffffffffffffffffff16612bed866109f1565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612c3e576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b612c4e816000866001612b48565b612c5a60008583611ee0565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ebe576000548214612ebd57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f2c816000866001612b4e565b60016000815480929190600101919050555050505050565b612f518383836001612f56565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612fc3576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612ffe576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61300b6000868387612b48565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156131d557506131d48773ffffffffffffffffffffffffffffffffffffffff166127d2565b5b1561329b575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461324a60008884806001019550886127f5565b613280576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156131db57826000541461329657600080fd5b613307565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082141561329c575b81600081905550505061331d6000868387612b4e565b5050505050565b8280546133309061407a565b90600052602060002090601f0160209004810192826133525760008555613399565b82601f1061336b57805160ff1916838001178555613399565b82800160010185558215613399579182015b8281111561339857825182559160200191906001019061337d565b5b5090506133a691906133ed565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156134065760008160009055506001016133ee565b5090565b600061341d61341884613dd3565b613dae565b905080838252602082019050828560208602820111156134405761343f614247565b5b60005b85811015613470578161345688826135dc565b845260208401935060208301925050600181019050613443565b5050509392505050565b600061348d61348884613dff565b613dae565b9050828152602081018484840111156134a9576134a861424c565b5b6134b4848285614038565b509392505050565b60006134cf6134ca84613e30565b613dae565b9050828152602081018484840111156134eb576134ea61424c565b5b6134f6848285614038565b509392505050565b60008135905061350d816144a1565b92915050565b600082601f83011261352857613527614242565b5b813561353884826020860161340a565b91505092915050565b600081359050613550816144b8565b92915050565b600081359050613565816144cf565b92915050565b60008151905061357a816144cf565b92915050565b600082601f83011261359557613594614242565b5b81356135a584826020860161347a565b91505092915050565b600082601f8301126135c3576135c2614242565b5b81356135d38482602086016134bc565b91505092915050565b6000813590506135eb816144e6565b92915050565b60006020828403121561360757613606614256565b5b6000613615848285016134fe565b91505092915050565b6000806040838503121561363557613634614256565b5b6000613643858286016134fe565b9250506020613654858286016134fe565b9150509250929050565b60008060006060848603121561367757613676614256565b5b6000613685868287016134fe565b9350506020613696868287016134fe565b92505060406136a7868287016135dc565b9150509250925092565b600080600080608085870312156136cb576136ca614256565b5b60006136d9878288016134fe565b94505060206136ea878288016134fe565b93505060406136fb878288016135dc565b925050606085013567ffffffffffffffff81111561371c5761371b614251565b5b61372887828801613580565b91505092959194509250565b6000806040838503121561374b5761374a614256565b5b6000613759858286016134fe565b925050602061376a85828601613541565b9150509250929050565b6000806040838503121561378b5761378a614256565b5b6000613799858286016134fe565b92505060206137aa858286016135dc565b9150509250929050565b6000602082840312156137ca576137c9614256565b5b600082013567ffffffffffffffff8111156137e8576137e7614251565b5b6137f484828501613513565b91505092915050565b60006020828403121561381357613812614256565b5b600061382184828501613541565b91505092915050565b6000602082840312156138405761383f614256565b5b600061384e84828501613556565b91505092915050565b60006020828403121561386d5761386c614256565b5b600061387b8482850161356b565b91505092915050565b60006020828403121561389a57613899614256565b5b600082013567ffffffffffffffff8111156138b8576138b7614251565b5b6138c4848285016135ae565b91505092915050565b6000602082840312156138e3576138e2614256565b5b60006138f1848285016135dc565b91505092915050565b6000806040838503121561391157613910614256565b5b600061391f858286016135dc565b9250506020613930858286016134fe565b9150509250929050565b61394381613fc4565b82525050565b61395281613fd6565b82525050565b600061396382613e61565b61396d8185613e77565b935061397d818560208601614047565b6139868161425b565b840191505092915050565b600061399c82613e6c565b6139a68185613e93565b93506139b6818560208601614047565b6139bf8161425b565b840191505092915050565b60006139d582613e6c565b6139df8185613ea4565b93506139ef818560208601614047565b80840191505092915050565b6000613a08602683613e93565b9150613a138261426c565b604082019050919050565b6000613a2b602583613e93565b9150613a36826142bb565b604082019050919050565b6000613a4e601383613e93565b9150613a598261430a565b602082019050919050565b6000613a71600f83613e93565b9150613a7c82614333565b602082019050919050565b6000613a94600583613ea4565b9150613a9f8261435c565b600582019050919050565b6000613ab7602083613e93565b9150613ac282614385565b602082019050919050565b6000613ada601783613e93565b9150613ae5826143ae565b602082019050919050565b6000613afd602f83613e93565b9150613b08826143d7565b604082019050919050565b6000613b20600083613e88565b9150613b2b82614426565b600082019050919050565b6000613b43603583613e93565b9150613b4e82614429565b604082019050919050565b6000613b66601f83613e93565b9150613b7182614478565b602082019050919050565b613b858161402e565b82525050565b6000613b9782856139ca565b9150613ba382846139ca565b9150613bae82613a87565b91508190509392505050565b6000613bc582613b13565b9150819050919050565b6000602082019050613be4600083018461393a565b92915050565b6000608082019050613bff600083018761393a565b613c0c602083018661393a565b613c196040830185613b7c565b8181036060830152613c2b8184613958565b905095945050505050565b6000602082019050613c4b6000830184613949565b92915050565b60006020820190508181036000830152613c6b8184613991565b905092915050565b60006020820190508181036000830152613c8c816139fb565b9050919050565b60006020820190508181036000830152613cac81613a1e565b9050919050565b60006020820190508181036000830152613ccc81613a41565b9050919050565b60006020820190508181036000830152613cec81613a64565b9050919050565b60006020820190508181036000830152613d0c81613aaa565b9050919050565b60006020820190508181036000830152613d2c81613acd565b9050919050565b60006020820190508181036000830152613d4c81613af0565b9050919050565b60006020820190508181036000830152613d6c81613b36565b9050919050565b60006020820190508181036000830152613d8c81613b59565b9050919050565b6000602082019050613da86000830184613b7c565b92915050565b6000613db8613dc9565b9050613dc482826140ac565b919050565b6000604051905090565b600067ffffffffffffffff821115613dee57613ded614213565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e1a57613e19614213565b5b613e238261425b565b9050602081019050919050565b600067ffffffffffffffff821115613e4b57613e4a614213565b5b613e548261425b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613eba8261402e565b9150613ec58361402e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613efa57613ef9614157565b5b828201905092915050565b6000613f108261402e565b9150613f1b8361402e565b925082613f2b57613f2a614186565b5b828204905092915050565b6000613f418261402e565b9150613f4c8361402e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f8557613f84614157565b5b828202905092915050565b6000613f9b8261402e565b9150613fa68361402e565b925082821015613fb957613fb8614157565b5b828203905092915050565b6000613fcf8261400e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561406557808201518184015260208101905061404a565b83811115614074576000848401525b50505050565b6000600282049050600182168061409257607f821691505b602082108114156140a6576140a56141b5565b5b50919050565b6140b58261425b565b810181811067ffffffffffffffff821117156140d4576140d3614213565b5b80604052505050565b60006140e88261402e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561411b5761411a614157565b5b600182019050919050565b60006141318261402e565b915061413c8361402e565b92508261414c5761414b614186565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f75277265206e6f7420616c6c6f77656420746f206d696e7420746869732060008201527f6d75636821000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742046756e64732100000000000000000000000000600082015250565b7f496e76616c696420616d6f756e74210000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f596f75277265206e6f7420616c6c6f77656420746f206d696e74206d6f72652060008201527f7468616e206d6178204d696e7420416d6f756e74210000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6144aa81613fc4565b81146144b557600080fd5b50565b6144c181613fd6565b81146144cc57600080fd5b50565b6144d881613fe2565b81146144e357600080fd5b50565b6144ef8161402e565b81146144fa57600080fd5b5056fea264697066735822122050194ed55fab616d1742367421f1d0b818cf16791f6d25cf6c611b45091e723f64736f6c63430008070033697066733a2f2f6261666b726569686d6934736964756537693533683636776737786274667136747770756b356d617a65636c7334777a6a36646a64676276757071
Deployed Bytecode
0x60806040526004361061021a5760003560e01c8063715018a611610123578063b5b1cd7c116100ab578063e0a808531161006f578063e0a808531461079c578063e4623c1b146107c5578063e985e9c5146107ee578063f2fde38b1461082b578063fbdb8494146108545761021a565b8063b5b1cd7c146106a3578063b88d4fde146106e0578063ba9e12f714610709578063c87b56dd14610734578063d5abeb01146107715761021a565b806395d89b41116100f257806395d89b41146105e15780639ec571d51461060c578063a0712d6814610635578063a22cb46514610651578063aed380151461067a5761021a565b8063715018a6146105495780637dc42975146105605780638693da201461058b5780638da5cb5b146105b65761021a565b806342966c68116101a657806355f804b31161017557806355f804b3146104505780635c975abb146104795780636352211e146104a45780636c0360eb146104e157806370a082311461050c5761021a565b806342966c68146103aa57806344a0d68a146103d3578063512507c6146103fc57806351830227146104255761021a565b806316c38b3c116101ed57806316c38b3c146102ed57806318160ddd1461031657806323b872dd146103415780633ccfd60b1461036a57806342842e0e146103815761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061382a565b61087d565b6040516102539190613c36565b60405180910390f35b34801561026857600080fd5b5061027161095f565b60405161027e9190613c51565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906138cd565b6109f1565b6040516102bb9190613bcf565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613774565b610a6d565b005b3480156102f957600080fd5b50610314600480360381019061030f91906137fd565b610b78565b005b34801561032257600080fd5b5061032b610c11565b6040516103389190613d93565b60405180910390f35b34801561034d57600080fd5b506103686004803603810190610363919061365e565b610c28565b005b34801561037657600080fd5b5061037f610c38565b005b34801561038d57600080fd5b506103a860048036038101906103a3919061365e565b610d34565b005b3480156103b657600080fd5b506103d160048036038101906103cc91906138cd565b610d54565b005b3480156103df57600080fd5b506103fa60048036038101906103f591906138cd565b610ddc565b005b34801561040857600080fd5b50610423600480360381019061041e9190613884565b610e62565b005b34801561043157600080fd5b5061043a610ef8565b6040516104479190613c36565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190613884565b610f0b565b005b34801561048557600080fd5b5061048e610fa1565b60405161049b9190613c36565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c691906138cd565b610fb4565b6040516104d89190613bcf565b60405180910390f35b3480156104ed57600080fd5b506104f6610fca565b6040516105039190613c51565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e91906135f1565b611058565b6040516105409190613d93565b60405180910390f35b34801561055557600080fd5b5061055e611128565b005b34801561056c57600080fd5b506105756111b0565b6040516105829190613d93565b60405180910390f35b34801561059757600080fd5b506105a06111b6565b6040516105ad9190613d93565b60405180910390f35b3480156105c257600080fd5b506105cb6111bc565b6040516105d89190613bcf565b60405180910390f35b3480156105ed57600080fd5b506105f66111e6565b6040516106039190613c51565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e91906138cd565b611278565b005b61064f600480360381019061064a91906138cd565b6112fe565b005b34801561065d57600080fd5b5061067860048036038101906106739190613734565b611633565b005b34801561068657600080fd5b506106a1600480360381019061069c91906138fa565b6117ab565b005b3480156106af57600080fd5b506106ca60048036038101906106c591906135f1565b611835565b6040516106d79190613d93565b60405180910390f35b3480156106ec57600080fd5b50610707600480360381019061070291906136b1565b61184d565b005b34801561071557600080fd5b5061071e6118c9565b60405161072b9190613c51565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906138cd565b611957565b6040516107689190613c51565b60405180910390f35b34801561077d57600080fd5b50610786611aad565b6040516107939190613d93565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be91906137fd565b611ab3565b005b3480156107d157600080fd5b506107ec60048036038101906107e791906137b4565b611b4c565b005b3480156107fa57600080fd5b506108156004803603810190610810919061361e565b611c0e565b6040516108229190613c36565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d91906135f1565b611ca2565b005b34801561086057600080fd5b5061087b600480360381019061087691906138cd565b611d9a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610958575061095782611e20565b5b9050919050565b60606002805461096e9061407a565b80601f016020809104026020016040519081016040528092919081815260200182805461099a9061407a565b80156109e75780601f106109bc576101008083540402835291602001916109e7565b820191906000526020600020905b8154815290600101906020018083116109ca57829003601f168201915b5050505050905090565b60006109fc82611e8a565b610a32576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a7882610fb4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ae0576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aff611ed8565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b315750610b2f81610b2a611ed8565b611c0e565b155b15610b68576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b73838383611ee0565b505050565b610b80611ed8565b73ffffffffffffffffffffffffffffffffffffffff16610b9e6111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90613cf3565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000610c1b611f92565b6001546000540303905090565b610c33838383611f9b565b505050565b610c40611ed8565b73ffffffffffffffffffffffffffffffffffffffff16610c5e6111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cab90613cf3565b60405180910390fd5b6000610cbe6111bc565b73ffffffffffffffffffffffffffffffffffffffff1647604051610ce190613bba565b60006040518083038185875af1925050503d8060008114610d1e576040519150601f19603f3d011682016040523d82523d6000602084013e610d23565b606091505b5050905080610d3157600080fd5b50565b610d4f8383836040518060200160405280600081525061184d565b505050565b610d5c611ed8565b73ffffffffffffffffffffffffffffffffffffffff16610d7a6111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc790613cf3565b60405180910390fd5b610dd981612451565b50565b610de4611ed8565b73ffffffffffffffffffffffffffffffffffffffff16610e026111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f90613cf3565b60405180910390fd5b80600d8190555050565b610e6a611ed8565b73ffffffffffffffffffffffffffffffffffffffff16610e886111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590613cf3565b60405180910390fd5b80600c9080519060200190610ef4929190613324565b5050565b600f60019054906101000a900460ff1681565b610f13611ed8565b73ffffffffffffffffffffffffffffffffffffffff16610f316111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90613cf3565b60405180910390fd5b80600b9080519060200190610f9d929190613324565b5050565b600f60009054906101000a900460ff1681565b6000610fbf8261245f565b600001519050919050565b600b8054610fd79061407a565b80601f01602080910402602001604051908101604052809291908181526020018280546110039061407a565b80156110505780601f1061102557610100808354040283529160200191611050565b820191906000526020600020905b81548152906001019060200180831161103357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110c0576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611130611ed8565b73ffffffffffffffffffffffffffffffffffffffff1661114e6111bc565b73ffffffffffffffffffffffffffffffffffffffff16146111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b90613cf3565b60405180910390fd5b6111ae60006126ee565b565b600e5481565b600d5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546111f59061407a565b80601f01602080910402602001604051908101604052809291908181526020018280546112219061407a565b801561126e5780601f106112435761010080835404028352916020019161126e565b820191906000526020600020905b81548152906001019060200180831161125157829003601f168201915b5050505050905090565b611280611ed8565b73ffffffffffffffffffffffffffffffffffffffff1661129e6111bc565b73ffffffffffffffffffffffffffffffffffffffff16146112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90613cf3565b60405180910390fd5b8060108190555050565b60026009541415611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90613d73565b60405180910390fd5b6002600981905550600f60009054906101000a900460ff161561139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139390613d13565b60405180910390fd5b6000811180156113c05750601054816113b3610c11565b6113bd9190613eaf565b11155b6113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690613cd3565b60405180910390fd5b6114076111bc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461161e57600e5481600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114879190613eaf565b11156114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf90613c93565b60405180910390fd5b600e5481111561150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150490613d53565b60405180910390fd5b600a8110611576576001816115229190613f90565b600d5461152f9190613f36565b341015611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156890613cb3565b60405180910390fd5b6115c7565b80600d546115849190613f36565b3410156115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd90613cb3565b60405180910390fd5b5b80600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116169190613eaf565b925050819055505b61162833826127b4565b600160098190555050565b61163b611ed8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a0576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006116ad611ed8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661175a611ed8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161179f9190613c36565b60405180910390a35050565b6117b3611ed8565b73ffffffffffffffffffffffffffffffffffffffff166117d16111bc565b73ffffffffffffffffffffffffffffffffffffffff1614611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90613cf3565b60405180910390fd5b61183181836127b4565b5050565b600a6020528060005260406000206000915090505481565b611858848484611f9b565b6118778373ffffffffffffffffffffffffffffffffffffffff166127d2565b801561188c575061188a848484846127f5565b155b156118c3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600c80546118d69061407a565b80601f01602080910402602001604051908101604052809291908181526020018280546119029061407a565b801561194f5780601f106119245761010080835404028352916020019161194f565b820191906000526020600020905b81548152906001019060200180831161193257829003601f168201915b505050505081565b606061196282611e8a565b6119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890613d33565b60405180910390fd5b60001515600f60019054906101000a900460ff1615151415611a4f57600c80546119ca9061407a565b80601f01602080910402602001604051908101604052809291908181526020018280546119f69061407a565b8015611a435780601f10611a1857610100808354040283529160200191611a43565b820191906000526020600020905b815481529060010190602001808311611a2657829003601f168201915b50505050509050611aa8565b6000611a59612955565b90506000815111611a795760405180602001604052806000815250611aa4565b80611a83846129e7565b604051602001611a94929190613b8b565b6040516020818303038152906040525b9150505b919050565b60105481565b611abb611ed8565b73ffffffffffffffffffffffffffffffffffffffff16611ad96111bc565b73ffffffffffffffffffffffffffffffffffffffff1614611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2690613cf3565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b611b54611ed8565b73ffffffffffffffffffffffffffffffffffffffff16611b726111bc565b73ffffffffffffffffffffffffffffffffffffffff1614611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf90613cf3565b60405180910390fd5b60005b8151811015611c0a57611bf7828281518110611bea57611be96141e4565b5b6020026020010151612451565b8080611c02906140dd565b915050611bcb565b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611caa611ed8565b73ffffffffffffffffffffffffffffffffffffffff16611cc86111bc565b73ffffffffffffffffffffffffffffffffffffffff1614611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1590613cf3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8590613c73565b60405180910390fd5b611d97816126ee565b50565b611da2611ed8565b73ffffffffffffffffffffffffffffffffffffffff16611dc06111bc565b73ffffffffffffffffffffffffffffffffffffffff1614611e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0d90613cf3565b60405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611e95611f92565b11158015611ea4575060005482105b8015611ed1575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000611fa68261245f565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612011576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612032611ed8565b73ffffffffffffffffffffffffffffffffffffffff16148061206157506120608561205b611ed8565b611c0e565b5b806120a6575061206f611ed8565b73ffffffffffffffffffffffffffffffffffffffff1661208e846109f1565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806120df576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612146576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121538585856001612b48565b61215f60008487611ee0565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123df5760005482146123de57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461244a8585856001612b4e565b5050505050565b61245c816000612b54565b50565b6124676133aa565b600082905080612475611f92565b11158015612484575060005481105b156126b7576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516126b557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125995780925050506126e9565b5b6001156126b457818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146126af5780925050506126e9565b61259a565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127ce828260405180602001604052806000815250612f44565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261281b611ed8565b8786866040518563ffffffff1660e01b815260040161283d9493929190613bea565b602060405180830381600087803b15801561285757600080fd5b505af192505050801561288857506040513d601f19601f820116820180604052508101906128859190613857565b60015b612902573d80600081146128b8576040519150601f19603f3d011682016040523d82523d6000602084013e6128bd565b606091505b506000815114156128fa576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b80546129649061407a565b80601f01602080910402602001604051908101604052809291908181526020018280546129909061407a565b80156129dd5780601f106129b2576101008083540402835291602001916129dd565b820191906000526020600020905b8154815290600101906020018083116129c057829003601f168201915b5050505050905090565b60606000821415612a2f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b43565b600082905060005b60008214612a61578080612a4a906140dd565b915050600a82612a5a9190613f05565b9150612a37565b60008167ffffffffffffffff811115612a7d57612a7c614213565b5b6040519080825280601f01601f191660200182016040528015612aaf5781602001600182028036833780820191505090505b5090505b60008514612b3c57600182612ac89190613f90565b9150600a85612ad79190614126565b6030612ae39190613eaf565b60f81b818381518110612af957612af86141e4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b359190613f05565b9450612ab3565b8093505050505b919050565b50505050565b50505050565b6000612b5f8361245f565b90506000816000015190508215612c405760008173ffffffffffffffffffffffffffffffffffffffff16612b91611ed8565b73ffffffffffffffffffffffffffffffffffffffff161480612bc05750612bbf82612bba611ed8565b611c0e565b5b80612c055750612bce611ed8565b73ffffffffffffffffffffffffffffffffffffffff16612bed866109f1565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612c3e576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b612c4e816000866001612b48565b612c5a60008583611ee0565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ebe576000548214612ebd57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f2c816000866001612b4e565b60016000815480929190600101919050555050505050565b612f518383836001612f56565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612fc3576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612ffe576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61300b6000868387612b48565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156131d557506131d48773ffffffffffffffffffffffffffffffffffffffff166127d2565b5b1561329b575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461324a60008884806001019550886127f5565b613280576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156131db57826000541461329657600080fd5b613307565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082141561329c575b81600081905550505061331d6000868387612b4e565b5050505050565b8280546133309061407a565b90600052602060002090601f0160209004810192826133525760008555613399565b82601f1061336b57805160ff1916838001178555613399565b82800160010185558215613399579182015b8281111561339857825182559160200191906001019061337d565b5b5090506133a691906133ed565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156134065760008160009055506001016133ee565b5090565b600061341d61341884613dd3565b613dae565b905080838252602082019050828560208602820111156134405761343f614247565b5b60005b85811015613470578161345688826135dc565b845260208401935060208301925050600181019050613443565b5050509392505050565b600061348d61348884613dff565b613dae565b9050828152602081018484840111156134a9576134a861424c565b5b6134b4848285614038565b509392505050565b60006134cf6134ca84613e30565b613dae565b9050828152602081018484840111156134eb576134ea61424c565b5b6134f6848285614038565b509392505050565b60008135905061350d816144a1565b92915050565b600082601f83011261352857613527614242565b5b813561353884826020860161340a565b91505092915050565b600081359050613550816144b8565b92915050565b600081359050613565816144cf565b92915050565b60008151905061357a816144cf565b92915050565b600082601f83011261359557613594614242565b5b81356135a584826020860161347a565b91505092915050565b600082601f8301126135c3576135c2614242565b5b81356135d38482602086016134bc565b91505092915050565b6000813590506135eb816144e6565b92915050565b60006020828403121561360757613606614256565b5b6000613615848285016134fe565b91505092915050565b6000806040838503121561363557613634614256565b5b6000613643858286016134fe565b9250506020613654858286016134fe565b9150509250929050565b60008060006060848603121561367757613676614256565b5b6000613685868287016134fe565b9350506020613696868287016134fe565b92505060406136a7868287016135dc565b9150509250925092565b600080600080608085870312156136cb576136ca614256565b5b60006136d9878288016134fe565b94505060206136ea878288016134fe565b93505060406136fb878288016135dc565b925050606085013567ffffffffffffffff81111561371c5761371b614251565b5b61372887828801613580565b91505092959194509250565b6000806040838503121561374b5761374a614256565b5b6000613759858286016134fe565b925050602061376a85828601613541565b9150509250929050565b6000806040838503121561378b5761378a614256565b5b6000613799858286016134fe565b92505060206137aa858286016135dc565b9150509250929050565b6000602082840312156137ca576137c9614256565b5b600082013567ffffffffffffffff8111156137e8576137e7614251565b5b6137f484828501613513565b91505092915050565b60006020828403121561381357613812614256565b5b600061382184828501613541565b91505092915050565b6000602082840312156138405761383f614256565b5b600061384e84828501613556565b91505092915050565b60006020828403121561386d5761386c614256565b5b600061387b8482850161356b565b91505092915050565b60006020828403121561389a57613899614256565b5b600082013567ffffffffffffffff8111156138b8576138b7614251565b5b6138c4848285016135ae565b91505092915050565b6000602082840312156138e3576138e2614256565b5b60006138f1848285016135dc565b91505092915050565b6000806040838503121561391157613910614256565b5b600061391f858286016135dc565b9250506020613930858286016134fe565b9150509250929050565b61394381613fc4565b82525050565b61395281613fd6565b82525050565b600061396382613e61565b61396d8185613e77565b935061397d818560208601614047565b6139868161425b565b840191505092915050565b600061399c82613e6c565b6139a68185613e93565b93506139b6818560208601614047565b6139bf8161425b565b840191505092915050565b60006139d582613e6c565b6139df8185613ea4565b93506139ef818560208601614047565b80840191505092915050565b6000613a08602683613e93565b9150613a138261426c565b604082019050919050565b6000613a2b602583613e93565b9150613a36826142bb565b604082019050919050565b6000613a4e601383613e93565b9150613a598261430a565b602082019050919050565b6000613a71600f83613e93565b9150613a7c82614333565b602082019050919050565b6000613a94600583613ea4565b9150613a9f8261435c565b600582019050919050565b6000613ab7602083613e93565b9150613ac282614385565b602082019050919050565b6000613ada601783613e93565b9150613ae5826143ae565b602082019050919050565b6000613afd602f83613e93565b9150613b08826143d7565b604082019050919050565b6000613b20600083613e88565b9150613b2b82614426565b600082019050919050565b6000613b43603583613e93565b9150613b4e82614429565b604082019050919050565b6000613b66601f83613e93565b9150613b7182614478565b602082019050919050565b613b858161402e565b82525050565b6000613b9782856139ca565b9150613ba382846139ca565b9150613bae82613a87565b91508190509392505050565b6000613bc582613b13565b9150819050919050565b6000602082019050613be4600083018461393a565b92915050565b6000608082019050613bff600083018761393a565b613c0c602083018661393a565b613c196040830185613b7c565b8181036060830152613c2b8184613958565b905095945050505050565b6000602082019050613c4b6000830184613949565b92915050565b60006020820190508181036000830152613c6b8184613991565b905092915050565b60006020820190508181036000830152613c8c816139fb565b9050919050565b60006020820190508181036000830152613cac81613a1e565b9050919050565b60006020820190508181036000830152613ccc81613a41565b9050919050565b60006020820190508181036000830152613cec81613a64565b9050919050565b60006020820190508181036000830152613d0c81613aaa565b9050919050565b60006020820190508181036000830152613d2c81613acd565b9050919050565b60006020820190508181036000830152613d4c81613af0565b9050919050565b60006020820190508181036000830152613d6c81613b36565b9050919050565b60006020820190508181036000830152613d8c81613b59565b9050919050565b6000602082019050613da86000830184613b7c565b92915050565b6000613db8613dc9565b9050613dc482826140ac565b919050565b6000604051905090565b600067ffffffffffffffff821115613dee57613ded614213565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e1a57613e19614213565b5b613e238261425b565b9050602081019050919050565b600067ffffffffffffffff821115613e4b57613e4a614213565b5b613e548261425b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613eba8261402e565b9150613ec58361402e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613efa57613ef9614157565b5b828201905092915050565b6000613f108261402e565b9150613f1b8361402e565b925082613f2b57613f2a614186565b5b828204905092915050565b6000613f418261402e565b9150613f4c8361402e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f8557613f84614157565b5b828202905092915050565b6000613f9b8261402e565b9150613fa68361402e565b925082821015613fb957613fb8614157565b5b828203905092915050565b6000613fcf8261400e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561406557808201518184015260208101905061404a565b83811115614074576000848401525b50505050565b6000600282049050600182168061409257607f821691505b602082108114156140a6576140a56141b5565b5b50919050565b6140b58261425b565b810181811067ffffffffffffffff821117156140d4576140d3614213565b5b80604052505050565b60006140e88261402e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561411b5761411a614157565b5b600182019050919050565b60006141318261402e565b915061413c8361402e565b92508261414c5761414b614186565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f75277265206e6f7420616c6c6f77656420746f206d696e7420746869732060008201527f6d75636821000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742046756e64732100000000000000000000000000600082015250565b7f496e76616c696420616d6f756e74210000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f596f75277265206e6f7420616c6c6f77656420746f206d696e74206d6f72652060008201527f7468616e206d6178204d696e7420416d6f756e74210000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6144aa81613fc4565b81146144b557600080fd5b50565b6144c181613fd6565b81146144cc57600080fd5b50565b6144d881613fe2565b81146144e357600080fd5b50565b6144ef8161402e565b81146144fa57600080fd5b5056fea264697066735822122050194ed55fab616d1742367421f1d0b818cf16791f6d25cf6c611b45091e723f64736f6c63430008070033
Deployed Bytecode Sourcemap
47688:3929:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29885:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32998:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34501:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34064:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50366:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29134:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35366:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51201:413;;;;;;;;;;;;;:::i;:::-;;35607:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50916:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50037:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50556:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48089:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50676:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48057:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32806:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47836:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30254:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7623:103;;;;;;;;;;;;;:::i;:::-;;48019:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47972:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6972:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33167:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50265:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48292:828;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34777:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50790:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47779:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35863:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47864:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49307:722;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48116:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50459:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51002:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35135:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7881:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50149:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29885:305;29987:4;30039:25;30024:40;;;:11;:40;;;;:105;;;;30096:33;30081:48;;;:11;:48;;;;30024:105;:158;;;;30146:36;30170:11;30146:23;:36::i;:::-;30024:158;30004:178;;29885:305;;;:::o;32998:100::-;33052:13;33085:5;33078:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32998:100;:::o;34501:204::-;34569:7;34594:16;34602:7;34594;:16::i;:::-;34589:64;;34619:34;;;;;;;;;;;;;;34589:64;34673:15;:24;34689:7;34673:24;;;;;;;;;;;;;;;;;;;;;34666:31;;34501:204;;;:::o;34064:371::-;34137:13;34153:24;34169:7;34153:15;:24::i;:::-;34137:40;;34198:5;34192:11;;:2;:11;;;34188:48;;;34212:24;;;;;;;;;;;;;;34188:48;34269:5;34253:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;34279:37;34296:5;34303:12;:10;:12::i;:::-;34279:16;:37::i;:::-;34278:38;34253:63;34249:138;;;34340:35;;;;;;;;;;;;;;34249:138;34399:28;34408:2;34412:7;34421:5;34399:8;:28::i;:::-;34126:309;34064:371;;:::o;50366:85::-;7203:12;:10;:12::i;:::-;7192:23;;:7;:5;:7::i;:::-;:23;;;7184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50437:6:::1;50428;;:15;;;;;;;;;;;;;;;;;;50366:85:::0;:::o;29134:303::-;29178:7;29403:15;:13;:15::i;:::-;29388:12;;29372:13;;:28;:46;29365:53;;29134:303;:::o;35366:170::-;35500:28;35510:4;35516:2;35520:7;35500:9;:28::i;:::-;35366:170;;;:::o;51201:413::-;7203:12;:10;:12::i;:::-;7192:23;;:7;:5;:7::i;:::-;:23;;;7184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51426:7:::1;51447;:5;:7::i;:::-;51439:21;;51468;51439:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51425:69;;;51513:2;51505:11;;;::::0;::::1;;51238:376;51201:413::o:0;35607:185::-;35745:39;35762:4;35768:2;35772:7;35745:39;;;;;;;;;;;;:16;:39::i;:::-;35607:185;;;:::o;50916:80::-;7203:12;:10;:12::i;:::-;7192:23;;:7;:5;:7::i;:::-;:23;;;7184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50974:14:::1;50980:7;50974:5;:14::i;:::-;50916:80:::0;:::o;50037:106::-;7203:12;:10;:12::i;:::-;7192:23;;:7;:5;:7::i;:::-;:23;;;7184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50121:14:::1;50108:10;:27;;;;50037:106:::0;:::o;50556:112::-;7203:12;:10;:12::i;:::-;7192:23;;:7;:5;:7::i;:::-;:23;;;7184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50656:4:::1;50636:17;:24;;;;;;;;;;;;:::i;:::-;;50556:112:::0;:::o;48089:20::-;;;;;;;;;;;;;:::o;50676:106::-;7203:12;:10;:12::i;:::-;7192:23;;:7;:5;:7::i;:::-;:23;;;7184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50763:11:::1;50753:7;:21;;;;;;;;;;;;:::i;:::-;;50676:106:::0;:::o;48057:25::-;;;;;;;;;;;;;:::o;32806:125::-;32870:7;32897:21;32910:7;32897:12;:21::i;:::-;:26;;;32890:33;;32806:125;;;:::o;47836:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30254:206::-;30318:7;30359:1;30342:19;;:5;:19;;;30338:60;;;30370:28;;;;;;;;;;;;;;30338:60;30424:12;:19;30437:5;30424:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30416:36;;30409:43;;30254:206;;;:::o;7623:103::-;7203:12;:10;:12::i;:::-;7192:23;;:7;:5;:7::i;:::-;:23;;;7184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7688:30:::1;7715:1;7688:18;:30::i;:::-;7623:103::o:0;48019:29::-;;;;:::o;47972:40::-;;;;:::o;6972:87::-;7018:7;7045:6;;;;;;;;;;;7038:13;;6972:87;:::o;33167:104::-;33223:13;33256:7;33249:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33167:104;:::o;50265:95::-;7203:12;:10;:12::i;:::-;7192:23;;:7;:5;:7::i;:::-;:23;;;7184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50345:7:::1;50333:9;:19;;;;50265:95:::0;:::o;48292:828::-;1785:1;2383:7;;:19;;2375:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1785:1;2516:7;:18;;;;48374:6:::1;;;;;;;;;;;48373:7;48365:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;48438:1;48427:8;:12;:53;;;;;48471:9;;48459:8;48443:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;48427:53;48419:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;48531:7;:5;:7::i;:::-;48517:21;;:10;:21;;;48513:558;;48603:9;;48591:8;48563:13;:25;48577:10;48563:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:49;;48555:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;48689:9;;48677:8;:21;;48669:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;48786:2;48774:8;:14;48771:237;;48855:1;48844:8;:12;;;;:::i;:::-;48830:10;;:27;;;;:::i;:::-;48817:9;:40;;48809:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;48771:237;;;48960:8;48947:10;;:21;;;;:::i;:::-;48934:9;:34;;48926:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;48771:237;49051:8;49022:13;:25;49036:10;49022:25;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;48513:558;49081:31;49091:10;49103:8;49081:9;:31::i;:::-;1741:1:::0;2695:7;:22;;;;48292:828;:::o;34777:287::-;34888:12;:10;:12::i;:::-;34876:24;;:8;:24;;;34872:54;;;34909:17;;;;;;;;;;;;;;34872:54;34984:8;34939:18;:32;34958:12;:10;:12::i;:::-;34939:32;;;;;;;;;;;;;;;:42;34972:8;34939:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;35037:8;35008:48;;35023:12;:10;:12::i;:::-;35008:48;;;35047:8;35008:48;;;;;;:::i;:::-;;;;;;;;34777:287;;:::o;50790:120::-;7203:12;:10;:12::i;:::-;7192:23;;:7;:5;:7::i;:::-;:23;;;7184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50873:29:::1;50883:8;50893;50873:9;:29::i;:::-;50790:120:::0;;:::o;47779:48::-;;;;;;;;;;;;;;;;;:::o;35863:369::-;36030:28;36040:4;36046:2;36050:7;36030:9;:28::i;:::-;36073:15;:2;:13;;;:15::i;:::-;:76;;;;;36093:56;36124:4;36130:2;36134:7;36143:5;36093:30;:56::i;:::-;36092:57;36073:76;36069:156;;;36173:40;;;;;;;;;;;;;;36069:156;35863:369;;;;:::o;47864:101::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49307:722::-;49425:13;49478:16;49486:7;49478;:16::i;:::-;49456:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;49598:5;49586:17;;:8;;;;;;;;;;;:17;;;49582:74;;;49627:17;49620:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49582:74;49668:28;49699:10;:8;:10::i;:::-;49668:41;;49771:1;49746:14;49740:28;:32;:281;;;;;;;;;;;;;;;;;49864:14;49905:18;:7;:16;:18::i;:::-;49821:159;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49740:281;49720:301;;;49307:722;;;;:::o;48116:31::-;;;;:::o;50459:89::-;7203:12;:10;:12::i;:::-;7192:23;;:7;:5;:7::i;:::-;:23;;;7184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50534:6:::1;50523:8;;:17;;;;;;;;;;;;;;;;;;50459:89:::0;:::o;51002:191::-;7203:12;:10;:12::i;:::-;7192:23;;:7;:5;:7::i;:::-;:23;;;7184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51080:13:::1;51075:111;51107:8;:15;51099:5;:23;51075:111;;;51152:22;51158:8;51167:5;51158:15;;;;;;;;:::i;:::-;;;;;;;;51152:5;:22::i;:::-;51124:7;;;;;:::i;:::-;;;;51075:111;;;;51002:191:::0;:::o;35135:164::-;35232:4;35256:18;:25;35275:5;35256:25;;;;;;;;;;;;;;;:35;35282:8;35256:35;;;;;;;;;;;;;;;;;;;;;;;;;35249:42;;35135:164;;;;:::o;7881:201::-;7203:12;:10;:12::i;:::-;7192:23;;:7;:5;:7::i;:::-;:23;;;7184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7990:1:::1;7970:22;;:8;:22;;;;7962:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8046:28;8065:8;8046:18;:28::i;:::-;7881:201:::0;:::o;50149:108::-;7203:12;:10;:12::i;:::-;7192:23;;:7;:5;:7::i;:::-;:23;;;7184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50236:13:::1;50224:9;:25;;;;50149:108:::0;:::o;19779:157::-;19864:4;19903:25;19888:40;;;:11;:40;;;;19881:47;;19779:157;;;:::o;36487:174::-;36544:4;36587:7;36568:15;:13;:15::i;:::-;:26;;:53;;;;;36608:13;;36598:7;:23;36568:53;:85;;;;;36626:11;:20;36638:7;36626:20;;;;;;;;;;;:27;;;;;;;;;;;;36625:28;36568:85;36561:92;;36487:174;;;:::o;5696:98::-;5749:7;5776:10;5769:17;;5696:98;:::o;44644:196::-;44786:2;44759:15;:24;44775:7;44759:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44824:7;44820:2;44804:28;;44813:5;44804:28;;;;;;;;;;;;44644:196;;;:::o;28908:92::-;28964:7;28991:1;28984:8;;28908:92;:::o;39587:2130::-;39702:35;39740:21;39753:7;39740:12;:21::i;:::-;39702:59;;39800:4;39778:26;;:13;:18;;;:26;;;39774:67;;39813:28;;;;;;;;;;;;;;39774:67;39854:22;39896:4;39880:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;39917:36;39934:4;39940:12;:10;:12::i;:::-;39917:16;:36::i;:::-;39880:73;:126;;;;39994:12;:10;:12::i;:::-;39970:36;;:20;39982:7;39970:11;:20::i;:::-;:36;;;39880:126;39854:153;;40025:17;40020:66;;40051:35;;;;;;;;;;;;;;40020:66;40115:1;40101:16;;:2;:16;;;40097:52;;;40126:23;;;;;;;;;;;;;;40097:52;40162:43;40184:4;40190:2;40194:7;40203:1;40162:21;:43::i;:::-;40270:35;40287:1;40291:7;40300:4;40270:8;:35::i;:::-;40631:1;40601:12;:18;40614:4;40601:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40675:1;40647:12;:16;40660:2;40647:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40693:31;40727:11;:20;40739:7;40727:20;;;;;;;;;;;40693:54;;40778:2;40762:8;:13;;;:18;;;;;;;;;;;;;;;;;;40828:15;40795:8;:23;;;:49;;;;;;;;;;;;;;;;;;41096:19;41128:1;41118:7;:11;41096:33;;41144:31;41178:11;:24;41190:11;41178:24;;;;;;;;;;;41144:58;;41246:1;41221:27;;:8;:13;;;;;;;;;;;;:27;;;41217:384;;;41431:13;;41416:11;:28;41412:174;;41485:4;41469:8;:13;;;:20;;;;;;;;;;;;;;;;;;41538:13;:28;;;41512:8;:23;;;:54;;;;;;;;;;;;;;;;;;41412:174;41217:384;40576:1036;;;41648:7;41644:2;41629:27;;41638:4;41629:27;;;;;;;;;;;;41667:42;41688:4;41694:2;41698:7;41707:1;41667:20;:42::i;:::-;39691:2026;;39587:2130;;;:::o;41800:89::-;41860:21;41866:7;41875:5;41860;:21::i;:::-;41800:89;:::o;31635:1109::-;31697:21;;:::i;:::-;31731:12;31746:7;31731:22;;31814:4;31795:15;:13;:15::i;:::-;:23;;:47;;;;;31829:13;;31822:4;:20;31795:47;31791:886;;;31863:31;31897:11;:17;31909:4;31897:17;;;;;;;;;;;31863:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31938:9;:16;;;31933:729;;32009:1;31983:28;;:9;:14;;;:28;;;31979:101;;32047:9;32040:16;;;;;;31979:101;32382:261;32389:4;32382:261;;;32422:6;;;;;;;;32467:11;:17;32479:4;32467:17;;;;;;;;;;;32455:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32541:1;32515:28;;:9;:14;;;:28;;;32511:109;;32583:9;32576:16;;;;;;32511:109;32382:261;;;31933:729;31844:833;31791:886;32705:31;;;;;;;;;;;;;;31635:1109;;;;:::o;8242:191::-;8316:16;8335:6;;;;;;;;;;;8316:25;;8361:8;8352:6;;:17;;;;;;;;;;;;;;;;;;8416:8;8385:40;;8406:8;8385:40;;;;;;;;;;;;8305:128;8242:191;:::o;36669:104::-;36738:27;36748:2;36752:8;36738:27;;;;;;;;;;;;:9;:27::i;:::-;36669:104;;:::o;9673:326::-;9733:4;9990:1;9968:7;:19;;;:23;9961:30;;9673:326;;;:::o;45332:667::-;45495:4;45532:2;45516:36;;;45553:12;:10;:12::i;:::-;45567:4;45573:7;45582:5;45516:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45512:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45767:1;45750:6;:13;:18;45746:235;;;45796:40;;;;;;;;;;;;;;45746:235;45939:6;45933:13;45924:6;45920:2;45916:15;45909:38;45512:480;45645:45;;;45635:55;;;:6;:55;;;;45628:62;;;45332:667;;;;;;:::o;49128:108::-;49188:13;49221:7;49214:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49128:108;:::o;3258:723::-;3314:13;3544:1;3535:5;:10;3531:53;;;3562:10;;;;;;;;;;;;;;;;;;;;;3531:53;3594:12;3609:5;3594:20;;3625:14;3650:78;3665:1;3657:4;:9;3650:78;;3683:8;;;;;:::i;:::-;;;;3714:2;3706:10;;;;;:::i;:::-;;;3650:78;;;3738:19;3770:6;3760:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3738:39;;3788:154;3804:1;3795:5;:10;3788:154;;3832:1;3822:11;;;;;:::i;:::-;;;3899:2;3891:5;:10;;;;:::i;:::-;3878:2;:24;;;;:::i;:::-;3865:39;;3848:6;3855;3848:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3928:2;3919:11;;;;;:::i;:::-;;;3788:154;;;3966:6;3952:21;;;;;3258:723;;;;:::o;46647:159::-;;;;;:::o;47465:158::-;;;;;:::o;42118:2408::-;42198:35;42236:21;42249:7;42236:12;:21::i;:::-;42198:59;;42270:12;42285:13;:18;;;42270:33;;42320:13;42316:290;;;42350:22;42392:4;42376:20;;:12;:10;:12::i;:::-;:20;;;:77;;;;42417:36;42434:4;42440:12;:10;:12::i;:::-;42417:16;:36::i;:::-;42376:77;:134;;;;42498:12;:10;:12::i;:::-;42474:36;;:20;42486:7;42474:11;:20::i;:::-;:36;;;42376:134;42350:161;;42533:17;42528:66;;42559:35;;;;;;;;;;;;;;42528:66;42335:271;42316:290;42618:51;42640:4;42654:1;42658:7;42667:1;42618:21;:51::i;:::-;42734:35;42751:1;42755:7;42764:4;42734:8;:35::i;:::-;43065:31;43099:12;:18;43112:4;43099:18;;;;;;;;;;;;;;;43065:52;;43155:1;43132:11;:19;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43199:1;43171:11;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43299:31;43333:11;:20;43345:7;43333:20;;;;;;;;;;;43299:54;;43384:4;43368:8;:13;;;:20;;;;;;;;;;;;;;;;;;43436:15;43403:8;:23;;;:49;;;;;;;;;;;;;;;;;;43485:4;43467:8;:15;;;:22;;;;;;;;;;;;;;;;;;43737:19;43769:1;43759:7;:11;43737:33;;43785:31;43819:11;:24;43831:11;43819:24;;;;;;;;;;;43785:58;;43887:1;43862:27;;:8;:13;;;;;;;;;;;;:27;;;43858:384;;;44072:13;;44057:11;:28;44053:174;;44126:4;44110:8;:13;;;:20;;;;;;;;;;;;;;;;;;44179:13;:28;;;44153:8;:23;;;:54;;;;;;;;;;;;;;;;;;44053:174;43858:384;43040:1213;;;;44297:7;44293:1;44270:35;;44279:4;44270:35;;;;;;;;;;;;44316:50;44337:4;44351:1;44355:7;44364:1;44316:20;:50::i;:::-;44493:12;;:14;;;;;;;;;;;;;42187:2339;;42118:2408;;:::o;37136:163::-;37259:32;37265:2;37269:8;37279:5;37286:4;37259:5;:32::i;:::-;37136:163;;;:::o;37558:1775::-;37697:20;37720:13;;37697:36;;37762:1;37748:16;;:2;:16;;;37744:48;;;37773:19;;;;;;;;;;;;;;37744:48;37819:1;37807:8;:13;37803:44;;;37829:18;;;;;;;;;;;;;;37803:44;37860:61;37890:1;37894:2;37898:12;37912:8;37860:21;:61::i;:::-;38233:8;38198:12;:16;38211:2;38198:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38297:8;38257:12;:16;38270:2;38257:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38356:2;38323:11;:25;38335:12;38323:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;38423:15;38373:11;:25;38385:12;38373:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;38456:20;38479:12;38456:35;;38506:11;38535:8;38520:12;:23;38506:37;;38564:4;:23;;;;;38572:15;:2;:13;;;:15::i;:::-;38564:23;38560:641;;;38608:314;38664:12;38660:2;38639:38;;38656:1;38639:38;;;;;;;;;;;;38705:69;38744:1;38748:2;38752:14;;;;;;38768:5;38705:30;:69::i;:::-;38700:174;;38810:40;;;;;;;;;;;;;;38700:174;38917:3;38901:12;:19;;38608:314;;39003:12;38986:13;;:29;38982:43;;39017:8;;;38982:43;38560:641;;;39066:120;39122:14;;;;;;39118:2;39097:40;;39114:1;39097:40;;;;;;;;;;;;39181:3;39165:12;:19;;39066:120;;38560:641;39231:12;39215:13;:28;;;;38173:1082;;39265:60;39294:1;39298:2;39302:12;39316:8;39265:20;:60::i;:::-;37686:1647;37558:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:474::-;9238:6;9246;9295:2;9283:9;9274:7;9270:23;9266:32;9263:119;;;9301:79;;:::i;:::-;9263:119;9421:1;9446:53;9491:7;9482:6;9471:9;9467:22;9446:53;:::i;:::-;9436:63;;9392:117;9548:2;9574:53;9619:7;9610:6;9599:9;9595:22;9574:53;:::i;:::-;9564:63;;9519:118;9170:474;;;;;:::o;9650:118::-;9737:24;9755:5;9737:24;:::i;:::-;9732:3;9725:37;9650:118;;:::o;9774:109::-;9855:21;9870:5;9855:21;:::i;:::-;9850:3;9843:34;9774:109;;:::o;9889:360::-;9975:3;10003:38;10035:5;10003:38;:::i;:::-;10057:70;10120:6;10115:3;10057:70;:::i;:::-;10050:77;;10136:52;10181:6;10176:3;10169:4;10162:5;10158:16;10136:52;:::i;:::-;10213:29;10235:6;10213:29;:::i;:::-;10208:3;10204:39;10197:46;;9979:270;9889:360;;;;:::o;10255:364::-;10343:3;10371:39;10404:5;10371:39;:::i;:::-;10426:71;10490:6;10485:3;10426:71;:::i;:::-;10419:78;;10506:52;10551:6;10546:3;10539:4;10532:5;10528:16;10506:52;:::i;:::-;10583:29;10605:6;10583:29;:::i;:::-;10578:3;10574:39;10567:46;;10347:272;10255:364;;;;:::o;10625:377::-;10731:3;10759:39;10792:5;10759:39;:::i;:::-;10814:89;10896:6;10891:3;10814:89;:::i;:::-;10807:96;;10912:52;10957:6;10952:3;10945:4;10938:5;10934:16;10912:52;:::i;:::-;10989:6;10984:3;10980:16;10973:23;;10735:267;10625:377;;;;:::o;11008:366::-;11150:3;11171:67;11235:2;11230:3;11171:67;:::i;:::-;11164:74;;11247:93;11336:3;11247:93;:::i;:::-;11365:2;11360:3;11356:12;11349:19;;11008:366;;;:::o;11380:::-;11522:3;11543:67;11607:2;11602:3;11543:67;:::i;:::-;11536:74;;11619:93;11708:3;11619:93;:::i;:::-;11737:2;11732:3;11728:12;11721:19;;11380:366;;;:::o;11752:::-;11894:3;11915:67;11979:2;11974:3;11915:67;:::i;:::-;11908:74;;11991:93;12080:3;11991:93;:::i;:::-;12109:2;12104:3;12100:12;12093:19;;11752:366;;;:::o;12124:::-;12266:3;12287:67;12351:2;12346:3;12287:67;:::i;:::-;12280:74;;12363:93;12452:3;12363:93;:::i;:::-;12481:2;12476:3;12472:12;12465:19;;12124:366;;;:::o;12496:400::-;12656:3;12677:84;12759:1;12754:3;12677:84;:::i;:::-;12670:91;;12770:93;12859:3;12770:93;:::i;:::-;12888:1;12883:3;12879:11;12872:18;;12496:400;;;:::o;12902:366::-;13044:3;13065:67;13129:2;13124:3;13065:67;:::i;:::-;13058:74;;13141:93;13230:3;13141:93;:::i;:::-;13259:2;13254:3;13250:12;13243:19;;12902:366;;;:::o;13274:::-;13416:3;13437:67;13501:2;13496:3;13437:67;:::i;:::-;13430:74;;13513:93;13602:3;13513:93;:::i;:::-;13631:2;13626:3;13622:12;13615:19;;13274:366;;;:::o;13646:::-;13788:3;13809:67;13873:2;13868:3;13809:67;:::i;:::-;13802:74;;13885:93;13974:3;13885:93;:::i;:::-;14003:2;13998:3;13994:12;13987:19;;13646:366;;;:::o;14018:398::-;14177:3;14198:83;14279:1;14274:3;14198:83;:::i;:::-;14191:90;;14290:93;14379:3;14290:93;:::i;:::-;14408:1;14403:3;14399:11;14392:18;;14018:398;;;:::o;14422:366::-;14564:3;14585:67;14649:2;14644:3;14585:67;:::i;:::-;14578:74;;14661:93;14750:3;14661:93;:::i;:::-;14779:2;14774:3;14770:12;14763:19;;14422:366;;;:::o;14794:::-;14936:3;14957:67;15021:2;15016:3;14957:67;:::i;:::-;14950:74;;15033:93;15122:3;15033:93;:::i;:::-;15151:2;15146:3;15142:12;15135:19;;14794:366;;;:::o;15166:118::-;15253:24;15271:5;15253:24;:::i;:::-;15248:3;15241:37;15166:118;;:::o;15290:701::-;15571:3;15593:95;15684:3;15675:6;15593:95;:::i;:::-;15586:102;;15705:95;15796:3;15787:6;15705:95;:::i;:::-;15698:102;;15817:148;15961:3;15817:148;:::i;:::-;15810:155;;15982:3;15975:10;;15290:701;;;;;:::o;15997:379::-;16181:3;16203:147;16346:3;16203:147;:::i;:::-;16196:154;;16367:3;16360:10;;15997:379;;;:::o;16382:222::-;16475:4;16513:2;16502:9;16498:18;16490:26;;16526:71;16594:1;16583:9;16579:17;16570:6;16526:71;:::i;:::-;16382:222;;;;:::o;16610:640::-;16805:4;16843:3;16832:9;16828:19;16820:27;;16857:71;16925:1;16914:9;16910:17;16901:6;16857:71;:::i;:::-;16938:72;17006:2;16995:9;16991:18;16982:6;16938:72;:::i;:::-;17020;17088:2;17077:9;17073:18;17064:6;17020:72;:::i;:::-;17139:9;17133:4;17129:20;17124:2;17113:9;17109:18;17102:48;17167:76;17238:4;17229:6;17167:76;:::i;:::-;17159:84;;16610:640;;;;;;;:::o;17256:210::-;17343:4;17381:2;17370:9;17366:18;17358:26;;17394:65;17456:1;17445:9;17441:17;17432:6;17394:65;:::i;:::-;17256:210;;;;:::o;17472:313::-;17585:4;17623:2;17612:9;17608:18;17600:26;;17672:9;17666:4;17662:20;17658:1;17647:9;17643:17;17636:47;17700:78;17773:4;17764:6;17700:78;:::i;:::-;17692:86;;17472:313;;;;:::o;17791:419::-;17957:4;17995:2;17984:9;17980:18;17972:26;;18044:9;18038:4;18034:20;18030:1;18019:9;18015:17;18008:47;18072:131;18198:4;18072:131;:::i;:::-;18064:139;;17791:419;;;:::o;18216:::-;18382:4;18420:2;18409:9;18405:18;18397:26;;18469:9;18463:4;18459:20;18455:1;18444:9;18440:17;18433:47;18497:131;18623:4;18497:131;:::i;:::-;18489:139;;18216:419;;;:::o;18641:::-;18807:4;18845:2;18834:9;18830:18;18822:26;;18894:9;18888:4;18884:20;18880:1;18869:9;18865:17;18858:47;18922:131;19048:4;18922:131;:::i;:::-;18914:139;;18641:419;;;:::o;19066:::-;19232:4;19270:2;19259:9;19255:18;19247:26;;19319:9;19313:4;19309:20;19305:1;19294:9;19290:17;19283:47;19347:131;19473:4;19347:131;:::i;:::-;19339:139;;19066:419;;;:::o;19491:::-;19657:4;19695:2;19684:9;19680:18;19672:26;;19744:9;19738:4;19734:20;19730:1;19719:9;19715:17;19708:47;19772:131;19898:4;19772:131;:::i;:::-;19764:139;;19491:419;;;:::o;19916:::-;20082:4;20120:2;20109:9;20105:18;20097:26;;20169:9;20163:4;20159:20;20155:1;20144:9;20140:17;20133:47;20197:131;20323:4;20197:131;:::i;:::-;20189:139;;19916:419;;;:::o;20341:::-;20507:4;20545:2;20534:9;20530:18;20522:26;;20594:9;20588:4;20584:20;20580:1;20569:9;20565:17;20558:47;20622:131;20748:4;20622:131;:::i;:::-;20614:139;;20341:419;;;:::o;20766:::-;20932:4;20970:2;20959:9;20955:18;20947:26;;21019:9;21013:4;21009:20;21005:1;20994:9;20990:17;20983:47;21047:131;21173:4;21047:131;:::i;:::-;21039:139;;20766:419;;;:::o;21191:::-;21357:4;21395:2;21384:9;21380:18;21372:26;;21444:9;21438:4;21434:20;21430:1;21419:9;21415:17;21408:47;21472:131;21598:4;21472:131;:::i;:::-;21464:139;;21191:419;;;:::o;21616:222::-;21709:4;21747:2;21736:9;21732:18;21724:26;;21760:71;21828:1;21817:9;21813:17;21804:6;21760:71;:::i;:::-;21616:222;;;;:::o;21844:129::-;21878:6;21905:20;;:::i;:::-;21895:30;;21934:33;21962:4;21954:6;21934:33;:::i;:::-;21844:129;;;:::o;21979:75::-;22012:6;22045:2;22039:9;22029:19;;21979:75;:::o;22060:311::-;22137:4;22227:18;22219:6;22216:30;22213:56;;;22249:18;;:::i;:::-;22213:56;22299:4;22291:6;22287:17;22279:25;;22359:4;22353;22349:15;22341:23;;22060:311;;;:::o;22377:307::-;22438:4;22528:18;22520:6;22517:30;22514:56;;;22550:18;;:::i;:::-;22514:56;22588:29;22610:6;22588:29;:::i;:::-;22580:37;;22672:4;22666;22662:15;22654:23;;22377:307;;;:::o;22690:308::-;22752:4;22842:18;22834:6;22831:30;22828:56;;;22864:18;;:::i;:::-;22828:56;22902:29;22924:6;22902:29;:::i;:::-;22894:37;;22986:4;22980;22976:15;22968:23;;22690:308;;;:::o;23004:98::-;23055:6;23089:5;23083:12;23073:22;;23004:98;;;:::o;23108:99::-;23160:6;23194:5;23188:12;23178:22;;23108:99;;;:::o;23213:168::-;23296:11;23330:6;23325:3;23318:19;23370:4;23365:3;23361:14;23346:29;;23213:168;;;;:::o;23387:147::-;23488:11;23525:3;23510:18;;23387:147;;;;:::o;23540:169::-;23624:11;23658:6;23653:3;23646:19;23698:4;23693:3;23689:14;23674:29;;23540:169;;;;:::o;23715:148::-;23817:11;23854:3;23839:18;;23715:148;;;;:::o;23869:305::-;23909:3;23928:20;23946:1;23928:20;:::i;:::-;23923:25;;23962:20;23980:1;23962:20;:::i;:::-;23957:25;;24116:1;24048:66;24044:74;24041:1;24038:81;24035:107;;;24122:18;;:::i;:::-;24035:107;24166:1;24163;24159:9;24152:16;;23869:305;;;;:::o;24180:185::-;24220:1;24237:20;24255:1;24237:20;:::i;:::-;24232:25;;24271:20;24289:1;24271:20;:::i;:::-;24266:25;;24310:1;24300:35;;24315:18;;:::i;:::-;24300:35;24357:1;24354;24350:9;24345:14;;24180:185;;;;:::o;24371:348::-;24411:7;24434:20;24452:1;24434:20;:::i;:::-;24429:25;;24468:20;24486:1;24468:20;:::i;:::-;24463:25;;24656:1;24588:66;24584:74;24581:1;24578:81;24573:1;24566:9;24559:17;24555:105;24552:131;;;24663:18;;:::i;:::-;24552:131;24711:1;24708;24704:9;24693:20;;24371:348;;;;:::o;24725:191::-;24765:4;24785:20;24803:1;24785:20;:::i;:::-;24780:25;;24819:20;24837:1;24819:20;:::i;:::-;24814:25;;24858:1;24855;24852:8;24849:34;;;24863:18;;:::i;:::-;24849:34;24908:1;24905;24901:9;24893:17;;24725:191;;;;:::o;24922:96::-;24959:7;24988:24;25006:5;24988:24;:::i;:::-;24977:35;;24922:96;;;:::o;25024:90::-;25058:7;25101:5;25094:13;25087:21;25076:32;;25024:90;;;:::o;25120:149::-;25156:7;25196:66;25189:5;25185:78;25174:89;;25120:149;;;:::o;25275:126::-;25312:7;25352:42;25345:5;25341:54;25330:65;;25275:126;;;:::o;25407:77::-;25444:7;25473:5;25462:16;;25407:77;;;:::o;25490:154::-;25574:6;25569:3;25564;25551:30;25636:1;25627:6;25622:3;25618:16;25611:27;25490:154;;;:::o;25650:307::-;25718:1;25728:113;25742:6;25739:1;25736:13;25728:113;;;25827:1;25822:3;25818:11;25812:18;25808:1;25803:3;25799:11;25792:39;25764:2;25761:1;25757:10;25752:15;;25728:113;;;25859:6;25856:1;25853:13;25850:101;;;25939:1;25930:6;25925:3;25921:16;25914:27;25850:101;25699:258;25650:307;;;:::o;25963:320::-;26007:6;26044:1;26038:4;26034:12;26024:22;;26091:1;26085:4;26081:12;26112:18;26102:81;;26168:4;26160:6;26156:17;26146:27;;26102:81;26230:2;26222:6;26219:14;26199:18;26196:38;26193:84;;;26249:18;;:::i;:::-;26193:84;26014:269;25963:320;;;:::o;26289:281::-;26372:27;26394:4;26372:27;:::i;:::-;26364:6;26360:40;26502:6;26490:10;26487:22;26466:18;26454:10;26451:34;26448:62;26445:88;;;26513:18;;:::i;:::-;26445:88;26553:10;26549:2;26542:22;26332:238;26289:281;;:::o;26576:233::-;26615:3;26638:24;26656:5;26638:24;:::i;:::-;26629:33;;26684:66;26677:5;26674:77;26671:103;;;26754:18;;:::i;:::-;26671:103;26801:1;26794:5;26790:13;26783:20;;26576:233;;;:::o;26815:176::-;26847:1;26864:20;26882:1;26864:20;:::i;:::-;26859:25;;26898:20;26916:1;26898:20;:::i;:::-;26893:25;;26937:1;26927:35;;26942:18;;:::i;:::-;26927:35;26983:1;26980;26976:9;26971:14;;26815:176;;;;:::o;26997:180::-;27045:77;27042:1;27035:88;27142:4;27139:1;27132:15;27166:4;27163:1;27156:15;27183:180;27231:77;27228:1;27221:88;27328:4;27325:1;27318:15;27352:4;27349:1;27342:15;27369:180;27417:77;27414:1;27407:88;27514:4;27511:1;27504:15;27538:4;27535:1;27528:15;27555:180;27603:77;27600:1;27593:88;27700:4;27697:1;27690:15;27724:4;27721:1;27714:15;27741:180;27789:77;27786:1;27779:88;27886:4;27883:1;27876:15;27910:4;27907:1;27900:15;27927:117;28036:1;28033;28026:12;28050:117;28159:1;28156;28149:12;28173:117;28282:1;28279;28272:12;28296:117;28405:1;28402;28395:12;28419:117;28528:1;28525;28518:12;28542:102;28583:6;28634:2;28630:7;28625:2;28618:5;28614:14;28610:28;28600:38;;28542:102;;;:::o;28650:225::-;28790:34;28786:1;28778:6;28774:14;28767:58;28859:8;28854:2;28846:6;28842:15;28835:33;28650:225;:::o;28881:224::-;29021:34;29017:1;29009:6;29005:14;28998:58;29090:7;29085:2;29077:6;29073:15;29066:32;28881:224;:::o;29111:169::-;29251:21;29247:1;29239:6;29235:14;29228:45;29111:169;:::o;29286:165::-;29426:17;29422:1;29414:6;29410:14;29403:41;29286:165;:::o;29457:155::-;29597:7;29593:1;29585:6;29581:14;29574:31;29457:155;:::o;29618:182::-;29758:34;29754:1;29746:6;29742:14;29735:58;29618:182;:::o;29806:173::-;29946:25;29942:1;29934:6;29930:14;29923:49;29806:173;:::o;29985:234::-;30125:34;30121:1;30113:6;30109:14;30102:58;30194:17;30189:2;30181:6;30177:15;30170:42;29985:234;:::o;30225:114::-;;:::o;30345:240::-;30485:34;30481:1;30473:6;30469:14;30462:58;30554:23;30549:2;30541:6;30537:15;30530:48;30345:240;:::o;30591:181::-;30731:33;30727:1;30719:6;30715:14;30708:57;30591:181;:::o;30778:122::-;30851:24;30869:5;30851:24;:::i;:::-;30844:5;30841:35;30831:63;;30890:1;30887;30880:12;30831:63;30778:122;:::o;30906:116::-;30976:21;30991:5;30976:21;:::i;:::-;30969:5;30966:32;30956:60;;31012:1;31009;31002:12;30956:60;30906:116;:::o;31028:120::-;31100:23;31117:5;31100:23;:::i;:::-;31093:5;31090:34;31080:62;;31138:1;31135;31128:12;31080:62;31028:120;:::o;31154:122::-;31227:24;31245:5;31227:24;:::i;:::-;31220:5;31217:35;31207:63;;31266:1;31263;31256:12;31207:63;31154:122;:::o
Swarm Source
ipfs://50194ed55fab616d1742367421f1d0b818cf16791f6d25cf6c611b45091e723f
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.