ERC-721
Overview
Max Total Supply
95 POTOS
Holders
57
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 POTOSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
POTOS
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-26 */ // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] 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() { _setOwner(_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 { _setOwner(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" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/math/[email protected] pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File @openzeppelin/contracts/utils/introspection/[email protected] 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/token/ERC721/[email protected] 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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] 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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] 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 @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] 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/introspection/[email protected] 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/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @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 virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _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 { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * 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 ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/security/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev ERC721 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. */ abstract contract ERC721Pausable is ERC721, Pausable { /** * @dev See {ERC721-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); require(!paused(), "ERC721Pausable: token transfer while paused"); } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Storage based implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ abstract contract ERC165Storage is ERC165 { /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } // File @openzeppelin/contracts/security/[email protected] 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 make 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; } } /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } contract POTOS is Ownable, ERC721Enumerable, ReentrancyGuard { using SafeMath for uint256; using Counters for Counters.Counter; uint256 public constant MAX_TOKEN = 5000; uint256 public PRICE = 0.05 ether; uint256 public PREORDER_PRICE = 0.00 ether; uint256 public MINT_LIMIT = 5; uint256 public PRESALE_MINT_LIMIT = 1; string public TOKEN_PROVENANCE = ""; string public BASE_URI = ""; Counters.Counter private supply; bool public saleIsActive = false; bool public presaleIsActive = true; mapping(address => uint256) public presaleMints; constructor() ERC721("POTOS", "POTOS") {} /** * @dev Send value to address */ function withdraw() public onlyOwner { uint256 value = address(this).balance; sendValueTo(msg.sender, value); } function sendValueTo(address to_, uint256 value) internal { address payable to = payable(to_); (bool success, ) = to.call{value: value}(""); require(success, "Transfer failed."); } function totalSupply() public view override returns (uint256) { return supply.current(); } /** * @dev Flip the pre / main sale flags */ function flipPresaleState() public onlyOwner { presaleIsActive = !presaleIsActive; } function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; } /** * @dev Return base URI */ function _baseURI() internal view override returns (string memory) { return BASE_URI; } /** * @dev Set data */ function setBaseURI(string memory baseURI_) public onlyOwner { BASE_URI = baseURI_; } function setProvenanceHash(string memory provenanceHash) public onlyOwner { TOKEN_PROVENANCE = provenanceHash; } function setPresaleCost(uint256 _newCost) public onlyOwner { PREORDER_PRICE = _newCost; } function setCost(uint256 _newCost) public onlyOwner { PRICE = _newCost; } function setMaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { MINT_LIMIT = _newmaxMintAmount; } function setPresaleMaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { PRESALE_MINT_LIMIT = _newmaxMintAmount; } /** * @dev Minting functions */ function mint(uint256 _mintAmount) public payable nonReentrant { require(saleIsActive, "Sale is not active"); require(msg.value >= PRICE * _mintAmount, "Insufficient funds!"); require(supply.current() + _mintAmount <= MAX_TOKEN, "Max supply exceeded!"); require(_mintAmount > 0 && _mintAmount <= MINT_LIMIT, "Invalid mint amount!"); _mintLoop(msg.sender, _mintAmount); } function presalemint(uint256 _mintAmount) public payable nonReentrant { require(presaleIsActive, "Presale is not active"); require(msg.value >= PREORDER_PRICE * _mintAmount, "Insufficient funds!"); require(supply.current() + _mintAmount <= MAX_TOKEN, "Max supply exceeded!"); require(presaleMints[msg.sender] + _mintAmount <= PRESALE_MINT_LIMIT, "Exceeds remaining presale balance"); _mintLoop(msg.sender, _mintAmount); presaleMints[msg.sender] += _mintAmount; } function reserve(address _to, uint256 _mintAmount) public onlyOwner { require(supply.current() + _mintAmount <= MAX_TOKEN, "Max supply exceeded!"); _mintLoop(_to, _mintAmount); } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { _safeMint(_receiver, supply.current()); supply.increment(); } } /** * @dev Returns a list of tokens for an address */ function tokensOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BASE_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PREORDER_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPresaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","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":"presaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"presalemint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setPresaleMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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
608060405266b1a2bc2ec50000600c556000600d556005600e556001600f556040518060200160405280600081525060109080519060200190620000459291906200024c565b5060405180602001604052806000815250601190805190602001906200006d9291906200024c565b506000601360006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff021916908315150217905550348015620000b157600080fd5b506040518060400160405280600581526020017f504f544f530000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f504f544f530000000000000000000000000000000000000000000000000000008152506200013e620001326200018060201b60201c565b6200018860201b60201c565b8160019080519060200190620001569291906200024c565b5080600290805190602001906200016f9291906200024c565b5050506001600b8190555062000361565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025a90620002fc565b90600052602060002090601f0160209004810192826200027e5760008555620002ca565b82601f106200029957805160ff1916838001178555620002ca565b82800160010185558215620002ca579182015b82811115620002c9578251825591602001919060010190620002ac565b5b509050620002d99190620002dd565b5090565b5b80821115620002f8576000816000905550600101620002de565b5090565b600060028204905060018216806200031557607f821691505b602082108114156200032c576200032b62000332565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614ce180620003716000396000f3fe6080604052600436106102515760003560e01c8063715018a611610139578063c87b56dd116100b6578063f02b12e51161007a578063f02b12e5146108a1578063f2fde38b146108cc578063f5ebec80146108f5578063f81227d414610920578063ff2e666c14610937578063ff5018851461095357610251565b8063c87b56dd146107a8578063cc47a40b146107e5578063dbddb26a1461080e578063e985e9c514610839578063eb8d24441461087657610251565b806395d89b41116100fd57806395d89b41146106e4578063a0712d681461070f578063a22cb4651461072b578063b88d4fde14610754578063bf8a944b1461077d57610251565b8063715018a6146106115780638462151c146106285780638d859f3e146106655780638da5cb5b146106905780638fdcf942146106bb57610251565b806330f72cd4116101d25780634f6ccce7116101965780634f6ccce7146104dd57806355f804b31461051a5780636352211e146105435780636d0f259a146105805780636e1bd323146105a957806370a08231146105d457610251565b806330f72cd41461043257806334918dfd1461045d5780633ccfd60b1461047457806342842e0e1461048b57806344a0d68a146104b457610251565b8063095ea7b311610219578063095ea7b31461034f578063109695231461037857806318160ddd146103a157806323b872dd146103cc5780632f745c59146103f557610251565b806301ffc9a714610256578063027752401461029357806306fdde03146102be578063081812fc146102e9578063088a4ed014610326575b600080fd5b34801561026257600080fd5b5061027d600480360381019061027891906136c3565b610990565b60405161028a9190613d5b565b60405180910390f35b34801561029f57600080fd5b506102a8610a0a565b6040516102b591906140d8565b60405180910390f35b3480156102ca57600080fd5b506102d3610a10565b6040516102e09190613d76565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613766565b610aa2565b60405161031d9190613cd2565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613766565b610b27565b005b34801561035b57600080fd5b5061037660048036038101906103719190613683565b610bad565b005b34801561038457600080fd5b5061039f600480360381019061039a919061371d565b610cc5565b005b3480156103ad57600080fd5b506103b6610d5b565b6040516103c391906140d8565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee919061356d565b610d6c565b005b34801561040157600080fd5b5061041c60048036038101906104179190613683565b610dcc565b60405161042991906140d8565b60405180910390f35b34801561043e57600080fd5b50610447610e71565b6040516104549190613d5b565b60405180910390f35b34801561046957600080fd5b50610472610e84565b005b34801561048057600080fd5b50610489610f2c565b005b34801561049757600080fd5b506104b260048036038101906104ad919061356d565b610fba565b005b3480156104c057600080fd5b506104db60048036038101906104d69190613766565b610fda565b005b3480156104e957600080fd5b5061050460048036038101906104ff9190613766565b611060565b60405161051191906140d8565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c919061371d565b6110d1565b005b34801561054f57600080fd5b5061056a60048036038101906105659190613766565b611167565b6040516105779190613cd2565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190613766565b611219565b005b3480156105b557600080fd5b506105be61129f565b6040516105cb91906140d8565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f69190613500565b6112a5565b60405161060891906140d8565b60405180910390f35b34801561061d57600080fd5b5061062661135d565b005b34801561063457600080fd5b5061064f600480360381019061064a9190613500565b6113e5565b60405161065c9190613d39565b60405180910390f35b34801561067157600080fd5b5061067a6114ef565b60405161068791906140d8565b60405180910390f35b34801561069c57600080fd5b506106a56114f5565b6040516106b29190613cd2565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190613766565b61151e565b005b3480156106f057600080fd5b506106f96115a4565b6040516107069190613d76565b60405180910390f35b61072960048036038101906107249190613766565b611636565b005b34801561073757600080fd5b50610752600480360381019061074d9190613643565b6117e2565b005b34801561076057600080fd5b5061077b600480360381019061077691906135c0565b611963565b005b34801561078957600080fd5b506107926119c5565b60405161079f9190613d76565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190613766565b611a53565b6040516107dc9190613d76565b60405180910390f35b3480156107f157600080fd5b5061080c60048036038101906108079190613683565b611afa565b005b34801561081a57600080fd5b50610823611bdd565b6040516108309190613d76565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b919061352d565b611c6b565b60405161086d9190613d5b565b60405180910390f35b34801561088257600080fd5b5061088b611cff565b6040516108989190613d5b565b60405180910390f35b3480156108ad57600080fd5b506108b6611d12565b6040516108c391906140d8565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee9190613500565b611d18565b005b34801561090157600080fd5b5061090a611e10565b60405161091791906140d8565b60405180910390f35b34801561092c57600080fd5b50610935611e16565b005b610951600480360381019061094c9190613766565b611ebe565b005b34801561095f57600080fd5b5061097a60048036038101906109759190613500565b6120fe565b60405161098791906140d8565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a035750610a0282612116565b5b9050919050565b600e5481565b606060018054610a1f906143cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4b906143cc565b8015610a985780601f10610a6d57610100808354040283529160200191610a98565b820191906000526020600020905b815481529060010190602001808311610a7b57829003601f168201915b5050505050905090565b6000610aad826121f8565b610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae390613f58565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b2f612264565b73ffffffffffffffffffffffffffffffffffffffff16610b4d6114f5565b73ffffffffffffffffffffffffffffffffffffffff1614610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90613f78565b60405180910390fd5b80600e8190555050565b6000610bb882611167565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2090613fd8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c48612264565b73ffffffffffffffffffffffffffffffffffffffff161480610c775750610c7681610c71612264565b611c6b565b5b610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad90613ed8565b60405180910390fd5b610cc0838361226c565b505050565b610ccd612264565b73ffffffffffffffffffffffffffffffffffffffff16610ceb6114f5565b73ffffffffffffffffffffffffffffffffffffffff1614610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3890613f78565b60405180910390fd5b8060109080519060200190610d57929190613314565b5050565b6000610d676012612325565b905090565b610d7d610d77612264565b82612333565b610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390614038565b60405180910390fd5b610dc7838383612411565b505050565b6000610dd7836112a5565b8210610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f90613d98565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601360019054906101000a900460ff1681565b610e8c612264565b73ffffffffffffffffffffffffffffffffffffffff16610eaa6114f5565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790613f78565b60405180910390fd5b601360009054906101000a900460ff1615601360006101000a81548160ff021916908315150217905550565b610f34612264565b73ffffffffffffffffffffffffffffffffffffffff16610f526114f5565b73ffffffffffffffffffffffffffffffffffffffff1614610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f90613f78565b60405180910390fd5b6000479050610fb7338261266d565b50565b610fd583838360405180602001604052806000815250611963565b505050565b610fe2612264565b73ffffffffffffffffffffffffffffffffffffffff166110006114f5565b73ffffffffffffffffffffffffffffffffffffffff1614611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104d90613f78565b60405180910390fd5b80600c8190555050565b600061106a612724565b82106110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a290614058565b60405180910390fd5b600982815481106110bf576110be614565565b5b90600052602060002001549050919050565b6110d9612264565b73ffffffffffffffffffffffffffffffffffffffff166110f76114f5565b73ffffffffffffffffffffffffffffffffffffffff161461114d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114490613f78565b60405180910390fd5b8060119080519060200190611163929190613314565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120790613f18565b60405180910390fd5b80915050919050565b611221612264565b73ffffffffffffffffffffffffffffffffffffffff1661123f6114f5565b73ffffffffffffffffffffffffffffffffffffffff1614611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c90613f78565b60405180910390fd5b80600f8190555050565b61138881565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90613ef8565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611365612264565b73ffffffffffffffffffffffffffffffffffffffff166113836114f5565b73ffffffffffffffffffffffffffffffffffffffff16146113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090613f78565b60405180910390fd5b6113e36000612731565b565b606060006113f2836112a5565b9050600081141561144f57600067ffffffffffffffff81111561141857611417614594565b5b6040519080825280602002602001820160405280156114465781602001602082028036833780820191505090505b509150506114ea565b60008167ffffffffffffffff81111561146b5761146a614594565b5b6040519080825280602002602001820160405280156114995781602001602082028036833780820191505090505b50905060005b828110156114e3576114b18582610dcc565b8282815181106114c4576114c3614565565b5b60200260200101818152505080806114db9061442f565b91505061149f565b8193505050505b919050565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611526612264565b73ffffffffffffffffffffffffffffffffffffffff166115446114f5565b73ffffffffffffffffffffffffffffffffffffffff161461159a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159190613f78565b60405180910390fd5b80600d8190555050565b6060600280546115b3906143cc565b80601f01602080910402602001604051908101604052809291908181526020018280546115df906143cc565b801561162c5780601f106116015761010080835404028352916020019161162c565b820191906000526020600020905b81548152906001019060200180831161160f57829003601f168201915b5050505050905090565b6002600b54141561167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167390614098565b60405180910390fd5b6002600b81905550601360009054906101000a900460ff166116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca90613e78565b60405180910390fd5b80600c546116e19190614288565b341015611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a906140b8565b60405180910390fd5b611388816117316012612325565b61173b9190614201565b111561177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177390613ff8565b60405180910390fd5b60008111801561178e5750600e548111155b6117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490613e18565b60405180910390fd5b6117d733826127f5565b6001600b8190555050565b6117ea612264565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90613e58565b60405180910390fd5b8060066000611865612264565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611912612264565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119579190613d5b565b60405180910390a35050565b61197461196e612264565b83612333565b6119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90614038565b60405180910390fd5b6119bf84848484612835565b50505050565b601080546119d2906143cc565b80601f01602080910402602001604051908101604052809291908181526020018280546119fe906143cc565b8015611a4b5780601f10611a2057610100808354040283529160200191611a4b565b820191906000526020600020905b815481529060010190602001808311611a2e57829003601f168201915b505050505081565b6060611a5e826121f8565b611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490613fb8565b60405180910390fd5b6000611aa7612891565b90506000815111611ac75760405180602001604052806000815250611af2565b80611ad184612923565b604051602001611ae2929190613c99565b6040516020818303038152906040525b915050919050565b611b02612264565b73ffffffffffffffffffffffffffffffffffffffff16611b206114f5565b73ffffffffffffffffffffffffffffffffffffffff1614611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d90613f78565b60405180910390fd5b61138881611b846012612325565b611b8e9190614201565b1115611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690613ff8565b60405180910390fd5b611bd982826127f5565b5050565b60118054611bea906143cc565b80601f0160208091040260200160405190810160405280929190818152602001828054611c16906143cc565b8015611c635780601f10611c3857610100808354040283529160200191611c63565b820191906000526020600020905b815481529060010190602001808311611c4657829003601f168201915b505050505081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601360009054906101000a900460ff1681565b600d5481565b611d20612264565b73ffffffffffffffffffffffffffffffffffffffff16611d3e6114f5565b73ffffffffffffffffffffffffffffffffffffffff1614611d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8b90613f78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfb90613dd8565b60405180910390fd5b611e0d81612731565b50565b600f5481565b611e1e612264565b73ffffffffffffffffffffffffffffffffffffffff16611e3c6114f5565b73ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990613f78565b60405180910390fd5b601360019054906101000a900460ff1615601360016101000a81548160ff021916908315150217905550565b6002600b541415611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90614098565b60405180910390fd5b6002600b81905550601360019054906101000a900460ff16611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5290614078565b60405180910390fd5b80600d54611f699190614288565b341015611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa2906140b8565b60405180910390fd5b61138881611fb96012612325565b611fc39190614201565b1115612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90613ff8565b60405180910390fd5b600f5481601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120529190614201565b1115612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a90613eb8565b60405180910390fd5b61209d33826127f5565b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ec9190614201565b925050819055506001600b8190555050565b60146020528060005260406000206000915090505481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121e157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121f157506121f082612a84565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122df83611167565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061233e826121f8565b61237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490613e98565b60405180910390fd5b600061238883611167565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123f757508373ffffffffffffffffffffffffffffffffffffffff166123df84610aa2565b73ffffffffffffffffffffffffffffffffffffffff16145b8061240857506124078185611c6b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661243182611167565b73ffffffffffffffffffffffffffffffffffffffff1614612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90613f98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee90613e38565b60405180910390fd5b612502838383612aee565b61250d60008261226c565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255d91906142e2565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125b49190614201565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600082905060008173ffffffffffffffffffffffffffffffffffffffff168360405161269890613cbd565b60006040518083038185875af1925050503d80600081146126d5576040519150601f19603f3d011682016040523d82523d6000602084013e6126da565b606091505b505090508061271e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271590614018565b60405180910390fd5b50505050565b6000600980549050905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612830576128138361280e6012612325565b612c02565b61281d6012612c20565b80806128289061442f565b9150506127f8565b505050565b612840848484612411565b61284c84848484612c36565b61288b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288290613db8565b60405180910390fd5b50505050565b6060601180546128a0906143cc565b80601f01602080910402602001604051908101604052809291908181526020018280546128cc906143cc565b80156129195780601f106128ee57610100808354040283529160200191612919565b820191906000526020600020905b8154815290600101906020018083116128fc57829003601f168201915b5050505050905090565b6060600082141561296b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a7f565b600082905060005b6000821461299d5780806129869061442f565b915050600a826129969190614257565b9150612973565b60008167ffffffffffffffff8111156129b9576129b8614594565b5b6040519080825280601f01601f1916602001820160405280156129eb5781602001600182028036833780820191505090505b5090505b60008514612a7857600182612a0491906142e2565b9150600a85612a139190614478565b6030612a1f9190614201565b60f81b818381518110612a3557612a34614565565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a719190614257565b94506129ef565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612af9838383612dcd565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b3c57612b3781612dd2565b612b7b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b7a57612b798382612e1b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bbe57612bb981612f88565b612bfd565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bfc57612bfb8282613059565b5b5b505050565b612c1c8282604051806020016040528060008152506130d8565b5050565b6001816000016000828254019250508190555050565b6000612c578473ffffffffffffffffffffffffffffffffffffffff16613133565b15612dc0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c80612264565b8786866040518563ffffffff1660e01b8152600401612ca29493929190613ced565b602060405180830381600087803b158015612cbc57600080fd5b505af1925050508015612ced57506040513d601f19601f82011682018060405250810190612cea91906136f0565b60015b612d70573d8060008114612d1d576040519150601f19603f3d011682016040523d82523d6000602084013e612d22565b606091505b50600081511415612d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5f90613db8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dc5565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e28846112a5565b612e3291906142e2565b9050600060086000848152602001908152602001600020549050818114612f17576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612f9c91906142e2565b90506000600a6000848152602001908152602001600020549050600060098381548110612fcc57612fcb614565565b5b906000526020600020015490508060098381548110612fee57612fed614565565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548061303d5761303c614536565b5b6001900381819060005260206000200160009055905550505050565b6000613064836112a5565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b6130e28383613146565b6130ef6000848484612c36565b61312e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312590613db8565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ad90613f38565b60405180910390fd5b6131bf816121f8565b156131ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f690613df8565b60405180910390fd5b61320b60008383612aee565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461325b9190614201565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613320906143cc565b90600052602060002090601f0160209004810192826133425760008555613389565b82601f1061335b57805160ff1916838001178555613389565b82800160010185558215613389579182015b8281111561338857825182559160200191906001019061336d565b5b509050613396919061339a565b5090565b5b808211156133b357600081600090555060010161339b565b5090565b60006133ca6133c584614118565b6140f3565b9050828152602081018484840111156133e6576133e56145c8565b5b6133f184828561438a565b509392505050565b600061340c61340784614149565b6140f3565b905082815260208101848484011115613428576134276145c8565b5b61343384828561438a565b509392505050565b60008135905061344a81614c4f565b92915050565b60008135905061345f81614c66565b92915050565b60008135905061347481614c7d565b92915050565b60008151905061348981614c7d565b92915050565b600082601f8301126134a4576134a36145c3565b5b81356134b48482602086016133b7565b91505092915050565b600082601f8301126134d2576134d16145c3565b5b81356134e28482602086016133f9565b91505092915050565b6000813590506134fa81614c94565b92915050565b600060208284031215613516576135156145d2565b5b60006135248482850161343b565b91505092915050565b60008060408385031215613544576135436145d2565b5b60006135528582860161343b565b92505060206135638582860161343b565b9150509250929050565b600080600060608486031215613586576135856145d2565b5b60006135948682870161343b565b93505060206135a58682870161343b565b92505060406135b6868287016134eb565b9150509250925092565b600080600080608085870312156135da576135d96145d2565b5b60006135e88782880161343b565b94505060206135f98782880161343b565b935050604061360a878288016134eb565b925050606085013567ffffffffffffffff81111561362b5761362a6145cd565b5b6136378782880161348f565b91505092959194509250565b6000806040838503121561365a576136596145d2565b5b60006136688582860161343b565b925050602061367985828601613450565b9150509250929050565b6000806040838503121561369a576136996145d2565b5b60006136a88582860161343b565b92505060206136b9858286016134eb565b9150509250929050565b6000602082840312156136d9576136d86145d2565b5b60006136e784828501613465565b91505092915050565b600060208284031215613706576137056145d2565b5b60006137148482850161347a565b91505092915050565b600060208284031215613733576137326145d2565b5b600082013567ffffffffffffffff811115613751576137506145cd565b5b61375d848285016134bd565b91505092915050565b60006020828403121561377c5761377b6145d2565b5b600061378a848285016134eb565b91505092915050565b600061379f8383613c7b565b60208301905092915050565b6137b481614316565b82525050565b60006137c58261418a565b6137cf81856141b8565b93506137da8361417a565b8060005b8381101561380b5781516137f28882613793565b97506137fd836141ab565b9250506001810190506137de565b5085935050505092915050565b61382181614328565b82525050565b600061383282614195565b61383c81856141c9565b935061384c818560208601614399565b613855816145d7565b840191505092915050565b600061386b826141a0565b61387581856141e5565b9350613885818560208601614399565b61388e816145d7565b840191505092915050565b60006138a4826141a0565b6138ae81856141f6565b93506138be818560208601614399565b80840191505092915050565b60006138d7602b836141e5565b91506138e2826145e8565b604082019050919050565b60006138fa6032836141e5565b915061390582614637565b604082019050919050565b600061391d6026836141e5565b915061392882614686565b604082019050919050565b6000613940601c836141e5565b915061394b826146d5565b602082019050919050565b60006139636014836141e5565b915061396e826146fe565b602082019050919050565b60006139866024836141e5565b915061399182614727565b604082019050919050565b60006139a96019836141e5565b91506139b482614776565b602082019050919050565b60006139cc6012836141e5565b91506139d78261479f565b602082019050919050565b60006139ef602c836141e5565b91506139fa826147c8565b604082019050919050565b6000613a126021836141e5565b9150613a1d82614817565b604082019050919050565b6000613a356038836141e5565b9150613a4082614866565b604082019050919050565b6000613a58602a836141e5565b9150613a63826148b5565b604082019050919050565b6000613a7b6029836141e5565b9150613a8682614904565b604082019050919050565b6000613a9e6020836141e5565b9150613aa982614953565b602082019050919050565b6000613ac1602c836141e5565b9150613acc8261497c565b604082019050919050565b6000613ae46020836141e5565b9150613aef826149cb565b602082019050919050565b6000613b076029836141e5565b9150613b12826149f4565b604082019050919050565b6000613b2a602f836141e5565b9150613b3582614a43565b604082019050919050565b6000613b4d6021836141e5565b9150613b5882614a92565b604082019050919050565b6000613b706000836141da565b9150613b7b82614ae1565b600082019050919050565b6000613b936014836141e5565b9150613b9e82614ae4565b602082019050919050565b6000613bb66010836141e5565b9150613bc182614b0d565b602082019050919050565b6000613bd96031836141e5565b9150613be482614b36565b604082019050919050565b6000613bfc602c836141e5565b9150613c0782614b85565b604082019050919050565b6000613c1f6015836141e5565b9150613c2a82614bd4565b602082019050919050565b6000613c42601f836141e5565b9150613c4d82614bfd565b602082019050919050565b6000613c656013836141e5565b9150613c7082614c26565b602082019050919050565b613c8481614380565b82525050565b613c9381614380565b82525050565b6000613ca58285613899565b9150613cb18284613899565b91508190509392505050565b6000613cc882613b63565b9150819050919050565b6000602082019050613ce760008301846137ab565b92915050565b6000608082019050613d0260008301876137ab565b613d0f60208301866137ab565b613d1c6040830185613c8a565b8181036060830152613d2e8184613827565b905095945050505050565b60006020820190508181036000830152613d5381846137ba565b905092915050565b6000602082019050613d706000830184613818565b92915050565b60006020820190508181036000830152613d908184613860565b905092915050565b60006020820190508181036000830152613db1816138ca565b9050919050565b60006020820190508181036000830152613dd1816138ed565b9050919050565b60006020820190508181036000830152613df181613910565b9050919050565b60006020820190508181036000830152613e1181613933565b9050919050565b60006020820190508181036000830152613e3181613956565b9050919050565b60006020820190508181036000830152613e5181613979565b9050919050565b60006020820190508181036000830152613e718161399c565b9050919050565b60006020820190508181036000830152613e91816139bf565b9050919050565b60006020820190508181036000830152613eb1816139e2565b9050919050565b60006020820190508181036000830152613ed181613a05565b9050919050565b60006020820190508181036000830152613ef181613a28565b9050919050565b60006020820190508181036000830152613f1181613a4b565b9050919050565b60006020820190508181036000830152613f3181613a6e565b9050919050565b60006020820190508181036000830152613f5181613a91565b9050919050565b60006020820190508181036000830152613f7181613ab4565b9050919050565b60006020820190508181036000830152613f9181613ad7565b9050919050565b60006020820190508181036000830152613fb181613afa565b9050919050565b60006020820190508181036000830152613fd181613b1d565b9050919050565b60006020820190508181036000830152613ff181613b40565b9050919050565b6000602082019050818103600083015261401181613b86565b9050919050565b6000602082019050818103600083015261403181613ba9565b9050919050565b6000602082019050818103600083015261405181613bcc565b9050919050565b6000602082019050818103600083015261407181613bef565b9050919050565b6000602082019050818103600083015261409181613c12565b9050919050565b600060208201905081810360008301526140b181613c35565b9050919050565b600060208201905081810360008301526140d181613c58565b9050919050565b60006020820190506140ed6000830184613c8a565b92915050565b60006140fd61410e565b905061410982826143fe565b919050565b6000604051905090565b600067ffffffffffffffff82111561413357614132614594565b5b61413c826145d7565b9050602081019050919050565b600067ffffffffffffffff82111561416457614163614594565b5b61416d826145d7565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061420c82614380565b915061421783614380565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561424c5761424b6144a9565b5b828201905092915050565b600061426282614380565b915061426d83614380565b92508261427d5761427c6144d8565b5b828204905092915050565b600061429382614380565b915061429e83614380565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142d7576142d66144a9565b5b828202905092915050565b60006142ed82614380565b91506142f883614380565b92508282101561430b5761430a6144a9565b5b828203905092915050565b600061432182614360565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143b757808201518184015260208101905061439c565b838111156143c6576000848401525b50505050565b600060028204905060018216806143e457607f821691505b602082108114156143f8576143f7614507565b5b50919050565b614407826145d7565b810181811067ffffffffffffffff8211171561442657614425614594565b5b80604052505050565b600061443a82614380565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561446d5761446c6144a9565b5b600182019050919050565b600061448382614380565b915061448e83614380565b92508261449e5761449d6144d8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f457863656564732072656d61696e696e672070726573616c652062616c616e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f50726573616c65206973206e6f74206163746976650000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614c5881614316565b8114614c6357600080fd5b50565b614c6f81614328565b8114614c7a57600080fd5b50565b614c8681614334565b8114614c9157600080fd5b50565b614c9d81614380565b8114614ca857600080fd5b5056fea2646970667358221220dbef6712aa64ff403f49417e87c5af1ae2fb04e5efd639429e462eab3d26b04564736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102515760003560e01c8063715018a611610139578063c87b56dd116100b6578063f02b12e51161007a578063f02b12e5146108a1578063f2fde38b146108cc578063f5ebec80146108f5578063f81227d414610920578063ff2e666c14610937578063ff5018851461095357610251565b8063c87b56dd146107a8578063cc47a40b146107e5578063dbddb26a1461080e578063e985e9c514610839578063eb8d24441461087657610251565b806395d89b41116100fd57806395d89b41146106e4578063a0712d681461070f578063a22cb4651461072b578063b88d4fde14610754578063bf8a944b1461077d57610251565b8063715018a6146106115780638462151c146106285780638d859f3e146106655780638da5cb5b146106905780638fdcf942146106bb57610251565b806330f72cd4116101d25780634f6ccce7116101965780634f6ccce7146104dd57806355f804b31461051a5780636352211e146105435780636d0f259a146105805780636e1bd323146105a957806370a08231146105d457610251565b806330f72cd41461043257806334918dfd1461045d5780633ccfd60b1461047457806342842e0e1461048b57806344a0d68a146104b457610251565b8063095ea7b311610219578063095ea7b31461034f578063109695231461037857806318160ddd146103a157806323b872dd146103cc5780632f745c59146103f557610251565b806301ffc9a714610256578063027752401461029357806306fdde03146102be578063081812fc146102e9578063088a4ed014610326575b600080fd5b34801561026257600080fd5b5061027d600480360381019061027891906136c3565b610990565b60405161028a9190613d5b565b60405180910390f35b34801561029f57600080fd5b506102a8610a0a565b6040516102b591906140d8565b60405180910390f35b3480156102ca57600080fd5b506102d3610a10565b6040516102e09190613d76565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613766565b610aa2565b60405161031d9190613cd2565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613766565b610b27565b005b34801561035b57600080fd5b5061037660048036038101906103719190613683565b610bad565b005b34801561038457600080fd5b5061039f600480360381019061039a919061371d565b610cc5565b005b3480156103ad57600080fd5b506103b6610d5b565b6040516103c391906140d8565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee919061356d565b610d6c565b005b34801561040157600080fd5b5061041c60048036038101906104179190613683565b610dcc565b60405161042991906140d8565b60405180910390f35b34801561043e57600080fd5b50610447610e71565b6040516104549190613d5b565b60405180910390f35b34801561046957600080fd5b50610472610e84565b005b34801561048057600080fd5b50610489610f2c565b005b34801561049757600080fd5b506104b260048036038101906104ad919061356d565b610fba565b005b3480156104c057600080fd5b506104db60048036038101906104d69190613766565b610fda565b005b3480156104e957600080fd5b5061050460048036038101906104ff9190613766565b611060565b60405161051191906140d8565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c919061371d565b6110d1565b005b34801561054f57600080fd5b5061056a60048036038101906105659190613766565b611167565b6040516105779190613cd2565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190613766565b611219565b005b3480156105b557600080fd5b506105be61129f565b6040516105cb91906140d8565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f69190613500565b6112a5565b60405161060891906140d8565b60405180910390f35b34801561061d57600080fd5b5061062661135d565b005b34801561063457600080fd5b5061064f600480360381019061064a9190613500565b6113e5565b60405161065c9190613d39565b60405180910390f35b34801561067157600080fd5b5061067a6114ef565b60405161068791906140d8565b60405180910390f35b34801561069c57600080fd5b506106a56114f5565b6040516106b29190613cd2565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190613766565b61151e565b005b3480156106f057600080fd5b506106f96115a4565b6040516107069190613d76565b60405180910390f35b61072960048036038101906107249190613766565b611636565b005b34801561073757600080fd5b50610752600480360381019061074d9190613643565b6117e2565b005b34801561076057600080fd5b5061077b600480360381019061077691906135c0565b611963565b005b34801561078957600080fd5b506107926119c5565b60405161079f9190613d76565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190613766565b611a53565b6040516107dc9190613d76565b60405180910390f35b3480156107f157600080fd5b5061080c60048036038101906108079190613683565b611afa565b005b34801561081a57600080fd5b50610823611bdd565b6040516108309190613d76565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b919061352d565b611c6b565b60405161086d9190613d5b565b60405180910390f35b34801561088257600080fd5b5061088b611cff565b6040516108989190613d5b565b60405180910390f35b3480156108ad57600080fd5b506108b6611d12565b6040516108c391906140d8565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee9190613500565b611d18565b005b34801561090157600080fd5b5061090a611e10565b60405161091791906140d8565b60405180910390f35b34801561092c57600080fd5b50610935611e16565b005b610951600480360381019061094c9190613766565b611ebe565b005b34801561095f57600080fd5b5061097a60048036038101906109759190613500565b6120fe565b60405161098791906140d8565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a035750610a0282612116565b5b9050919050565b600e5481565b606060018054610a1f906143cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4b906143cc565b8015610a985780601f10610a6d57610100808354040283529160200191610a98565b820191906000526020600020905b815481529060010190602001808311610a7b57829003601f168201915b5050505050905090565b6000610aad826121f8565b610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae390613f58565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b2f612264565b73ffffffffffffffffffffffffffffffffffffffff16610b4d6114f5565b73ffffffffffffffffffffffffffffffffffffffff1614610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90613f78565b60405180910390fd5b80600e8190555050565b6000610bb882611167565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2090613fd8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c48612264565b73ffffffffffffffffffffffffffffffffffffffff161480610c775750610c7681610c71612264565b611c6b565b5b610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad90613ed8565b60405180910390fd5b610cc0838361226c565b505050565b610ccd612264565b73ffffffffffffffffffffffffffffffffffffffff16610ceb6114f5565b73ffffffffffffffffffffffffffffffffffffffff1614610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3890613f78565b60405180910390fd5b8060109080519060200190610d57929190613314565b5050565b6000610d676012612325565b905090565b610d7d610d77612264565b82612333565b610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390614038565b60405180910390fd5b610dc7838383612411565b505050565b6000610dd7836112a5565b8210610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f90613d98565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601360019054906101000a900460ff1681565b610e8c612264565b73ffffffffffffffffffffffffffffffffffffffff16610eaa6114f5565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790613f78565b60405180910390fd5b601360009054906101000a900460ff1615601360006101000a81548160ff021916908315150217905550565b610f34612264565b73ffffffffffffffffffffffffffffffffffffffff16610f526114f5565b73ffffffffffffffffffffffffffffffffffffffff1614610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f90613f78565b60405180910390fd5b6000479050610fb7338261266d565b50565b610fd583838360405180602001604052806000815250611963565b505050565b610fe2612264565b73ffffffffffffffffffffffffffffffffffffffff166110006114f5565b73ffffffffffffffffffffffffffffffffffffffff1614611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104d90613f78565b60405180910390fd5b80600c8190555050565b600061106a612724565b82106110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a290614058565b60405180910390fd5b600982815481106110bf576110be614565565b5b90600052602060002001549050919050565b6110d9612264565b73ffffffffffffffffffffffffffffffffffffffff166110f76114f5565b73ffffffffffffffffffffffffffffffffffffffff161461114d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114490613f78565b60405180910390fd5b8060119080519060200190611163929190613314565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120790613f18565b60405180910390fd5b80915050919050565b611221612264565b73ffffffffffffffffffffffffffffffffffffffff1661123f6114f5565b73ffffffffffffffffffffffffffffffffffffffff1614611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c90613f78565b60405180910390fd5b80600f8190555050565b61138881565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90613ef8565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611365612264565b73ffffffffffffffffffffffffffffffffffffffff166113836114f5565b73ffffffffffffffffffffffffffffffffffffffff16146113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090613f78565b60405180910390fd5b6113e36000612731565b565b606060006113f2836112a5565b9050600081141561144f57600067ffffffffffffffff81111561141857611417614594565b5b6040519080825280602002602001820160405280156114465781602001602082028036833780820191505090505b509150506114ea565b60008167ffffffffffffffff81111561146b5761146a614594565b5b6040519080825280602002602001820160405280156114995781602001602082028036833780820191505090505b50905060005b828110156114e3576114b18582610dcc565b8282815181106114c4576114c3614565565b5b60200260200101818152505080806114db9061442f565b91505061149f565b8193505050505b919050565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611526612264565b73ffffffffffffffffffffffffffffffffffffffff166115446114f5565b73ffffffffffffffffffffffffffffffffffffffff161461159a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159190613f78565b60405180910390fd5b80600d8190555050565b6060600280546115b3906143cc565b80601f01602080910402602001604051908101604052809291908181526020018280546115df906143cc565b801561162c5780601f106116015761010080835404028352916020019161162c565b820191906000526020600020905b81548152906001019060200180831161160f57829003601f168201915b5050505050905090565b6002600b54141561167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167390614098565b60405180910390fd5b6002600b81905550601360009054906101000a900460ff166116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca90613e78565b60405180910390fd5b80600c546116e19190614288565b341015611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a906140b8565b60405180910390fd5b611388816117316012612325565b61173b9190614201565b111561177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177390613ff8565b60405180910390fd5b60008111801561178e5750600e548111155b6117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490613e18565b60405180910390fd5b6117d733826127f5565b6001600b8190555050565b6117ea612264565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90613e58565b60405180910390fd5b8060066000611865612264565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611912612264565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119579190613d5b565b60405180910390a35050565b61197461196e612264565b83612333565b6119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90614038565b60405180910390fd5b6119bf84848484612835565b50505050565b601080546119d2906143cc565b80601f01602080910402602001604051908101604052809291908181526020018280546119fe906143cc565b8015611a4b5780601f10611a2057610100808354040283529160200191611a4b565b820191906000526020600020905b815481529060010190602001808311611a2e57829003601f168201915b505050505081565b6060611a5e826121f8565b611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490613fb8565b60405180910390fd5b6000611aa7612891565b90506000815111611ac75760405180602001604052806000815250611af2565b80611ad184612923565b604051602001611ae2929190613c99565b6040516020818303038152906040525b915050919050565b611b02612264565b73ffffffffffffffffffffffffffffffffffffffff16611b206114f5565b73ffffffffffffffffffffffffffffffffffffffff1614611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d90613f78565b60405180910390fd5b61138881611b846012612325565b611b8e9190614201565b1115611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690613ff8565b60405180910390fd5b611bd982826127f5565b5050565b60118054611bea906143cc565b80601f0160208091040260200160405190810160405280929190818152602001828054611c16906143cc565b8015611c635780601f10611c3857610100808354040283529160200191611c63565b820191906000526020600020905b815481529060010190602001808311611c4657829003601f168201915b505050505081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601360009054906101000a900460ff1681565b600d5481565b611d20612264565b73ffffffffffffffffffffffffffffffffffffffff16611d3e6114f5565b73ffffffffffffffffffffffffffffffffffffffff1614611d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8b90613f78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfb90613dd8565b60405180910390fd5b611e0d81612731565b50565b600f5481565b611e1e612264565b73ffffffffffffffffffffffffffffffffffffffff16611e3c6114f5565b73ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990613f78565b60405180910390fd5b601360019054906101000a900460ff1615601360016101000a81548160ff021916908315150217905550565b6002600b541415611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90614098565b60405180910390fd5b6002600b81905550601360019054906101000a900460ff16611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5290614078565b60405180910390fd5b80600d54611f699190614288565b341015611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa2906140b8565b60405180910390fd5b61138881611fb96012612325565b611fc39190614201565b1115612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90613ff8565b60405180910390fd5b600f5481601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120529190614201565b1115612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a90613eb8565b60405180910390fd5b61209d33826127f5565b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ec9190614201565b925050819055506001600b8190555050565b60146020528060005260406000206000915090505481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121e157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121f157506121f082612a84565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122df83611167565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061233e826121f8565b61237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490613e98565b60405180910390fd5b600061238883611167565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123f757508373ffffffffffffffffffffffffffffffffffffffff166123df84610aa2565b73ffffffffffffffffffffffffffffffffffffffff16145b8061240857506124078185611c6b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661243182611167565b73ffffffffffffffffffffffffffffffffffffffff1614612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90613f98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee90613e38565b60405180910390fd5b612502838383612aee565b61250d60008261226c565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255d91906142e2565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125b49190614201565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600082905060008173ffffffffffffffffffffffffffffffffffffffff168360405161269890613cbd565b60006040518083038185875af1925050503d80600081146126d5576040519150601f19603f3d011682016040523d82523d6000602084013e6126da565b606091505b505090508061271e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271590614018565b60405180910390fd5b50505050565b6000600980549050905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612830576128138361280e6012612325565b612c02565b61281d6012612c20565b80806128289061442f565b9150506127f8565b505050565b612840848484612411565b61284c84848484612c36565b61288b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288290613db8565b60405180910390fd5b50505050565b6060601180546128a0906143cc565b80601f01602080910402602001604051908101604052809291908181526020018280546128cc906143cc565b80156129195780601f106128ee57610100808354040283529160200191612919565b820191906000526020600020905b8154815290600101906020018083116128fc57829003601f168201915b5050505050905090565b6060600082141561296b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a7f565b600082905060005b6000821461299d5780806129869061442f565b915050600a826129969190614257565b9150612973565b60008167ffffffffffffffff8111156129b9576129b8614594565b5b6040519080825280601f01601f1916602001820160405280156129eb5781602001600182028036833780820191505090505b5090505b60008514612a7857600182612a0491906142e2565b9150600a85612a139190614478565b6030612a1f9190614201565b60f81b818381518110612a3557612a34614565565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a719190614257565b94506129ef565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612af9838383612dcd565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b3c57612b3781612dd2565b612b7b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b7a57612b798382612e1b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bbe57612bb981612f88565b612bfd565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bfc57612bfb8282613059565b5b5b505050565b612c1c8282604051806020016040528060008152506130d8565b5050565b6001816000016000828254019250508190555050565b6000612c578473ffffffffffffffffffffffffffffffffffffffff16613133565b15612dc0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c80612264565b8786866040518563ffffffff1660e01b8152600401612ca29493929190613ced565b602060405180830381600087803b158015612cbc57600080fd5b505af1925050508015612ced57506040513d601f19601f82011682018060405250810190612cea91906136f0565b60015b612d70573d8060008114612d1d576040519150601f19603f3d011682016040523d82523d6000602084013e612d22565b606091505b50600081511415612d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5f90613db8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dc5565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e28846112a5565b612e3291906142e2565b9050600060086000848152602001908152602001600020549050818114612f17576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612f9c91906142e2565b90506000600a6000848152602001908152602001600020549050600060098381548110612fcc57612fcb614565565b5b906000526020600020015490508060098381548110612fee57612fed614565565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548061303d5761303c614536565b5b6001900381819060005260206000200160009055905550505050565b6000613064836112a5565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b6130e28383613146565b6130ef6000848484612c36565b61312e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312590613db8565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ad90613f38565b60405180910390fd5b6131bf816121f8565b156131ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f690613df8565b60405180910390fd5b61320b60008383612aee565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461325b9190614201565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613320906143cc565b90600052602060002090601f0160209004810192826133425760008555613389565b82601f1061335b57805160ff1916838001178555613389565b82800160010185558215613389579182015b8281111561338857825182559160200191906001019061336d565b5b509050613396919061339a565b5090565b5b808211156133b357600081600090555060010161339b565b5090565b60006133ca6133c584614118565b6140f3565b9050828152602081018484840111156133e6576133e56145c8565b5b6133f184828561438a565b509392505050565b600061340c61340784614149565b6140f3565b905082815260208101848484011115613428576134276145c8565b5b61343384828561438a565b509392505050565b60008135905061344a81614c4f565b92915050565b60008135905061345f81614c66565b92915050565b60008135905061347481614c7d565b92915050565b60008151905061348981614c7d565b92915050565b600082601f8301126134a4576134a36145c3565b5b81356134b48482602086016133b7565b91505092915050565b600082601f8301126134d2576134d16145c3565b5b81356134e28482602086016133f9565b91505092915050565b6000813590506134fa81614c94565b92915050565b600060208284031215613516576135156145d2565b5b60006135248482850161343b565b91505092915050565b60008060408385031215613544576135436145d2565b5b60006135528582860161343b565b92505060206135638582860161343b565b9150509250929050565b600080600060608486031215613586576135856145d2565b5b60006135948682870161343b565b93505060206135a58682870161343b565b92505060406135b6868287016134eb565b9150509250925092565b600080600080608085870312156135da576135d96145d2565b5b60006135e88782880161343b565b94505060206135f98782880161343b565b935050604061360a878288016134eb565b925050606085013567ffffffffffffffff81111561362b5761362a6145cd565b5b6136378782880161348f565b91505092959194509250565b6000806040838503121561365a576136596145d2565b5b60006136688582860161343b565b925050602061367985828601613450565b9150509250929050565b6000806040838503121561369a576136996145d2565b5b60006136a88582860161343b565b92505060206136b9858286016134eb565b9150509250929050565b6000602082840312156136d9576136d86145d2565b5b60006136e784828501613465565b91505092915050565b600060208284031215613706576137056145d2565b5b60006137148482850161347a565b91505092915050565b600060208284031215613733576137326145d2565b5b600082013567ffffffffffffffff811115613751576137506145cd565b5b61375d848285016134bd565b91505092915050565b60006020828403121561377c5761377b6145d2565b5b600061378a848285016134eb565b91505092915050565b600061379f8383613c7b565b60208301905092915050565b6137b481614316565b82525050565b60006137c58261418a565b6137cf81856141b8565b93506137da8361417a565b8060005b8381101561380b5781516137f28882613793565b97506137fd836141ab565b9250506001810190506137de565b5085935050505092915050565b61382181614328565b82525050565b600061383282614195565b61383c81856141c9565b935061384c818560208601614399565b613855816145d7565b840191505092915050565b600061386b826141a0565b61387581856141e5565b9350613885818560208601614399565b61388e816145d7565b840191505092915050565b60006138a4826141a0565b6138ae81856141f6565b93506138be818560208601614399565b80840191505092915050565b60006138d7602b836141e5565b91506138e2826145e8565b604082019050919050565b60006138fa6032836141e5565b915061390582614637565b604082019050919050565b600061391d6026836141e5565b915061392882614686565b604082019050919050565b6000613940601c836141e5565b915061394b826146d5565b602082019050919050565b60006139636014836141e5565b915061396e826146fe565b602082019050919050565b60006139866024836141e5565b915061399182614727565b604082019050919050565b60006139a96019836141e5565b91506139b482614776565b602082019050919050565b60006139cc6012836141e5565b91506139d78261479f565b602082019050919050565b60006139ef602c836141e5565b91506139fa826147c8565b604082019050919050565b6000613a126021836141e5565b9150613a1d82614817565b604082019050919050565b6000613a356038836141e5565b9150613a4082614866565b604082019050919050565b6000613a58602a836141e5565b9150613a63826148b5565b604082019050919050565b6000613a7b6029836141e5565b9150613a8682614904565b604082019050919050565b6000613a9e6020836141e5565b9150613aa982614953565b602082019050919050565b6000613ac1602c836141e5565b9150613acc8261497c565b604082019050919050565b6000613ae46020836141e5565b9150613aef826149cb565b602082019050919050565b6000613b076029836141e5565b9150613b12826149f4565b604082019050919050565b6000613b2a602f836141e5565b9150613b3582614a43565b604082019050919050565b6000613b4d6021836141e5565b9150613b5882614a92565b604082019050919050565b6000613b706000836141da565b9150613b7b82614ae1565b600082019050919050565b6000613b936014836141e5565b9150613b9e82614ae4565b602082019050919050565b6000613bb66010836141e5565b9150613bc182614b0d565b602082019050919050565b6000613bd96031836141e5565b9150613be482614b36565b604082019050919050565b6000613bfc602c836141e5565b9150613c0782614b85565b604082019050919050565b6000613c1f6015836141e5565b9150613c2a82614bd4565b602082019050919050565b6000613c42601f836141e5565b9150613c4d82614bfd565b602082019050919050565b6000613c656013836141e5565b9150613c7082614c26565b602082019050919050565b613c8481614380565b82525050565b613c9381614380565b82525050565b6000613ca58285613899565b9150613cb18284613899565b91508190509392505050565b6000613cc882613b63565b9150819050919050565b6000602082019050613ce760008301846137ab565b92915050565b6000608082019050613d0260008301876137ab565b613d0f60208301866137ab565b613d1c6040830185613c8a565b8181036060830152613d2e8184613827565b905095945050505050565b60006020820190508181036000830152613d5381846137ba565b905092915050565b6000602082019050613d706000830184613818565b92915050565b60006020820190508181036000830152613d908184613860565b905092915050565b60006020820190508181036000830152613db1816138ca565b9050919050565b60006020820190508181036000830152613dd1816138ed565b9050919050565b60006020820190508181036000830152613df181613910565b9050919050565b60006020820190508181036000830152613e1181613933565b9050919050565b60006020820190508181036000830152613e3181613956565b9050919050565b60006020820190508181036000830152613e5181613979565b9050919050565b60006020820190508181036000830152613e718161399c565b9050919050565b60006020820190508181036000830152613e91816139bf565b9050919050565b60006020820190508181036000830152613eb1816139e2565b9050919050565b60006020820190508181036000830152613ed181613a05565b9050919050565b60006020820190508181036000830152613ef181613a28565b9050919050565b60006020820190508181036000830152613f1181613a4b565b9050919050565b60006020820190508181036000830152613f3181613a6e565b9050919050565b60006020820190508181036000830152613f5181613a91565b9050919050565b60006020820190508181036000830152613f7181613ab4565b9050919050565b60006020820190508181036000830152613f9181613ad7565b9050919050565b60006020820190508181036000830152613fb181613afa565b9050919050565b60006020820190508181036000830152613fd181613b1d565b9050919050565b60006020820190508181036000830152613ff181613b40565b9050919050565b6000602082019050818103600083015261401181613b86565b9050919050565b6000602082019050818103600083015261403181613ba9565b9050919050565b6000602082019050818103600083015261405181613bcc565b9050919050565b6000602082019050818103600083015261407181613bef565b9050919050565b6000602082019050818103600083015261409181613c12565b9050919050565b600060208201905081810360008301526140b181613c35565b9050919050565b600060208201905081810360008301526140d181613c58565b9050919050565b60006020820190506140ed6000830184613c8a565b92915050565b60006140fd61410e565b905061410982826143fe565b919050565b6000604051905090565b600067ffffffffffffffff82111561413357614132614594565b5b61413c826145d7565b9050602081019050919050565b600067ffffffffffffffff82111561416457614163614594565b5b61416d826145d7565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061420c82614380565b915061421783614380565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561424c5761424b6144a9565b5b828201905092915050565b600061426282614380565b915061426d83614380565b92508261427d5761427c6144d8565b5b828204905092915050565b600061429382614380565b915061429e83614380565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142d7576142d66144a9565b5b828202905092915050565b60006142ed82614380565b91506142f883614380565b92508282101561430b5761430a6144a9565b5b828203905092915050565b600061432182614360565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143b757808201518184015260208101905061439c565b838111156143c6576000848401525b50505050565b600060028204905060018216806143e457607f821691505b602082108114156143f8576143f7614507565b5b50919050565b614407826145d7565b810181811067ffffffffffffffff8211171561442657614425614594565b5b80604052505050565b600061443a82614380565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561446d5761446c6144a9565b5b600182019050919050565b600061448382614380565b915061448e83614380565b92508261449e5761449d6144d8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f457863656564732072656d61696e696e672070726573616c652062616c616e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f50726573616c65206973206e6f74206163746976650000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614c5881614316565b8114614c6357600080fd5b50565b614c6f81614328565b8114614c7a57600080fd5b50565b614c8681614334565b8114614c9157600080fd5b50565b614c9d81614380565b8114614ca857600080fd5b5056fea2646970667358221220dbef6712aa64ff403f49417e87c5af1ae2fb04e5efd639429e462eab3d26b04564736f6c63430008070033
Deployed Bytecode Sourcemap
60839:4390:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49010:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61120:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32011:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33704:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62930:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33227:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62592:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61920:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34763:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49394:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61359:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62196:89;;;;;;;;;;;;;:::i;:::-;;61558:134;;;;;;;;;;;;;:::i;:::-;;35210:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62835:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50003:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62485:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31618:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63057:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60984:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31261:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2550:94;;;;;;;;;;;;;:::i;:::-;;64719:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61031:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1899:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62726:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32180:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63246:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34084:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35466:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61202:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32355:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64207:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61244:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34482:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61320:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61071:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2799:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61156:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62092:98;;;;;;;;;;;;;:::i;:::-;;63676:523;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61402:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49010:300;49157:4;49214:35;49199:50;;;:11;:50;;;;:103;;;;49266:36;49290:11;49266:23;:36::i;:::-;49199:103;49179:123;;49010:300;;;:::o;61120:29::-;;;;:::o;32011:100::-;32065:13;32098:5;32091:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32011:100;:::o;33704:308::-;33825:7;33872:16;33880:7;33872;:16::i;:::-;33850:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33980:15;:24;33996:7;33980:24;;;;;;;;;;;;;;;;;;;;;33973:31;;33704:308;;;:::o;62930:119::-;2130:12;:10;:12::i;:::-;2119:23;;:7;:5;:7::i;:::-;:23;;;2111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63024:17:::1;63011:10;:30;;;;62930:119:::0;:::o;33227:411::-;33308:13;33324:23;33339:7;33324:14;:23::i;:::-;33308:39;;33372:5;33366:11;;:2;:11;;;;33358:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33466:5;33450:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33475:37;33492:5;33499:12;:10;:12::i;:::-;33475:16;:37::i;:::-;33450:62;33428:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33609:21;33618:2;33622:7;33609:8;:21::i;:::-;33297:341;33227:411;;:::o;62592:126::-;2130:12;:10;:12::i;:::-;2119:23;;:7;:5;:7::i;:::-;:23;;;2111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62696:14:::1;62677:16;:33;;;;;;;;;;;;:::i;:::-;;62592:126:::0;:::o;61920:104::-;61973:7;62000:16;:6;:14;:16::i;:::-;61993:23;;61920:104;:::o;34763:376::-;34972:41;34991:12;:10;:12::i;:::-;35005:7;34972:18;:41::i;:::-;34950:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;35103:28;35113:4;35119:2;35123:7;35103:9;:28::i;:::-;34763:376;;;:::o;49394:343::-;49536:7;49591:23;49608:5;49591:16;:23::i;:::-;49583:5;:31;49561:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;49703:12;:19;49716:5;49703:19;;;;;;;;;;;;;;;:26;49723:5;49703:26;;;;;;;;;;;;49696:33;;49394:343;;;;:::o;61359:34::-;;;;;;;;;;;;;:::o;62196:89::-;2130:12;:10;:12::i;:::-;2119:23;;:7;:5;:7::i;:::-;:23;;;2111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62265:12:::1;;;;;;;;;;;62264:13;62249:12;;:28;;;;;;;;;;;;;;;;;;62196:89::o:0;61558:134::-;2130:12;:10;:12::i;:::-;2119:23;;:7;:5;:7::i;:::-;:23;;;2111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61606:13:::1;61622:21;61606:37;;61654:30;61666:10;61678:5;61654:11;:30::i;:::-;61595:97;61558:134::o:0;35210:185::-;35348:39;35365:4;35371:2;35375:7;35348:39;;;;;;;;;;;;:16;:39::i;:::-;35210:185;;;:::o;62835:87::-;2130:12;:10;:12::i;:::-;2119:23;;:7;:5;:7::i;:::-;:23;;;2111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62906:8:::1;62898:5;:16;;;;62835:87:::0;:::o;50003:320::-;50123:7;50178:30;:28;:30::i;:::-;50170:5;:38;50148:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;50298:10;50309:5;50298:17;;;;;;;;:::i;:::-;;;;;;;;;;50291:24;;50003:320;;;:::o;62485:99::-;2130:12;:10;:12::i;:::-;2119:23;;:7;:5;:7::i;:::-;:23;;;2111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62568:8:::1;62557;:19;;;;;;;;;;;;:::i;:::-;;62485:99:::0;:::o;31618:326::-;31735:7;31760:13;31776:7;:16;31784:7;31776:16;;;;;;;;;;;;;;;;;;;;;31760:32;;31842:1;31825:19;;:5;:19;;;;31803:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31931:5;31924:12;;;31618:326;;;:::o;63057:134::-;2130:12;:10;:12::i;:::-;2119:23;;:7;:5;:7::i;:::-;:23;;;2111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63166:17:::1;63145:18;:38;;;;63057:134:::0;:::o;60984:40::-;61020:4;60984:40;:::o;31261:295::-;31378:7;31442:1;31425:19;;:5;:19;;;;31403:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31532:9;:16;31542:5;31532:16;;;;;;;;;;;;;;;;31525:23;;31261:295;;;:::o;2550:94::-;2130:12;:10;:12::i;:::-;2119:23;;:7;:5;:7::i;:::-;:23;;;2111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2615:21:::1;2633:1;2615:9;:21::i;:::-;2550:94::o:0;64719:507::-;64781:16;64815:18;64836:17;64846:6;64836:9;:17::i;:::-;64815:38;;64882:1;64868:10;:15;64864:355;;;64921:1;64907:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64900:23;;;;;64864:355;64956:23;64996:10;64982:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64956:51;;65022:13;65050:130;65074:10;65066:5;:18;65050:130;;;65130:34;65150:6;65158:5;65130:19;:34::i;:::-;65114:6;65121:5;65114:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;65086:7;;;;;:::i;:::-;;;;65050:130;;;65201:6;65194:13;;;;;64719:507;;;;:::o;61031:33::-;;;;:::o;1899:87::-;1945:7;1972:6;;;;;;;;;;;1965:13;;1899:87;:::o;62726:101::-;2130:12;:10;:12::i;:::-;2119:23;;:7;:5;:7::i;:::-;:23;;;2111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62811:8:::1;62794:14;:25;;;;62726:101:::0;:::o;32180:104::-;32236:13;32269:7;32262:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32180:104;:::o;63246:422::-;58615:1;59211:7;;:19;;59203:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;58615:1;59344:7;:18;;;;63328:12:::1;;;;;;;;;;;63320:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;63403:11;63395:5;;:19;;;;:::i;:::-;63382:9;:32;;63374:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;61020:4;63476:11;63457:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;63449:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;63558:1;63544:11;:15;:44;;;;;63578:10;;63563:11;:25;;63544:44;63536:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;63626:34;63636:10;63648:11;63626:9;:34::i;:::-;58571:1:::0;59523:7;:22;;;;63246:422;:::o;34084:327::-;34231:12;:10;:12::i;:::-;34219:24;;:8;:24;;;;34211:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34331:8;34286:18;:32;34305:12;:10;:12::i;:::-;34286:32;;;;;;;;;;;;;;;:42;34319:8;34286:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34384:8;34355:48;;34370:12;:10;:12::i;:::-;34355:48;;;34394:8;34355:48;;;;;;:::i;:::-;;;;;;;;34084:327;;:::o;35466:365::-;35655:41;35674:12;:10;:12::i;:::-;35688:7;35655:18;:41::i;:::-;35633:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;35784:39;35798:4;35804:2;35808:7;35817:5;35784:13;:39::i;:::-;35466:365;;;;:::o;61202:35::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32355:468::-;32473:13;32526:16;32534:7;32526;:16::i;:::-;32504:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;32630:21;32654:10;:8;:10::i;:::-;32630:34;;32719:1;32701:7;32695:21;:25;:120;;;;;;;;;;;;;;;;;32764:7;32773:18;:7;:16;:18::i;:::-;32747:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32695:120;32675:140;;;32355:468;;;:::o;64207:201::-;2130:12;:10;:12::i;:::-;2119:23;;:7;:5;:7::i;:::-;:23;;;2111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61020:4:::1;64313:11;64294:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;64286:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;64373:27;64383:3;64388:11;64373:9;:27::i;:::-;64207:201:::0;;:::o;61244:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34482:214::-;34624:4;34653:18;:25;34672:5;34653:25;;;;;;;;;;;;;;;:35;34679:8;34653:35;;;;;;;;;;;;;;;;;;;;;;;;;34646:42;;34482:214;;;;:::o;61320:32::-;;;;;;;;;;;;;:::o;61071:42::-;;;;:::o;2799:229::-;2130:12;:10;:12::i;:::-;2119:23;;:7;:5;:7::i;:::-;:23;;;2111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2922:1:::1;2902:22;;:8;:22;;;;2880:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3001:19;3011:8;3001:9;:19::i;:::-;2799:229:::0;:::o;61156:37::-;;;;:::o;62092:98::-;2130:12;:10;:12::i;:::-;2119:23;;:7;:5;:7::i;:::-;:23;;;2111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62167:15:::1;;;;;;;;;;;62166:16;62148:15;;:34;;;;;;;;;;;;;;;;;;62092:98::o:0;63676:523::-;58615:1;59211:7;;:19;;59203:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;58615:1;59344:7;:18;;;;63765:15:::1;;;;;;;;;;;63757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;63855:11;63838:14;;:28;;;;:::i;:::-;63825:9;:41;;63817:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;61020:4;63928:11;63909:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;63901:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;64038:18;;64023:11;63996:12;:24;64009:10;63996:24;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;:60;;63988:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;64107:34;64117:10;64129:11;64107:9;:34::i;:::-;64180:11;64152:12;:24;64165:10;64152:24;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;58571:1:::0;59523:7;:22;;;;63676:523;:::o;61402:47::-;;;;;;;;;;;;;;;;;:::o;30842:355::-;30989:4;31046:25;31031:40;;;:11;:40;;;;:105;;;;31103:33;31088:48;;;:11;:48;;;;31031:105;:158;;;;31153:36;31177:11;31153:23;:36::i;:::-;31031:158;31011:178;;30842:355;;;:::o;37378:127::-;37443:4;37495:1;37467:30;;:7;:16;37475:7;37467:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37460:37;;37378:127;;;:::o;662:98::-;715:7;742:10;735:17;;662:98;:::o;41501:174::-;41603:2;41576:15;:24;41592:7;41576:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41659:7;41655:2;41621:46;;41630:23;41645:7;41630:14;:23::i;:::-;41621:46;;;;;;;;;;;;41501:174;;:::o;60278:110::-;60343:7;60368;:14;;;60361:21;;60278:110;;;:::o;37672:452::-;37801:4;37845:16;37853:7;37845;:16::i;:::-;37823:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;37944:13;37960:23;37975:7;37960:14;:23::i;:::-;37944:39;;38013:5;38002:16;;:7;:16;;;:64;;;;38059:7;38035:31;;:20;38047:7;38035:11;:20::i;:::-;:31;;;38002:64;:113;;;;38083:32;38100:5;38107:7;38083:16;:32::i;:::-;38002:113;37994:122;;;37672:452;;;;:::o;40768:615::-;40941:4;40914:31;;:23;40929:7;40914:14;:23::i;:::-;:31;;;40892:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;41047:1;41033:16;;:2;:16;;;;41025:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41103:39;41124:4;41130:2;41134:7;41103:20;:39::i;:::-;41207:29;41224:1;41228:7;41207:8;:29::i;:::-;41268:1;41249:9;:15;41259:4;41249:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41297:1;41280:9;:13;41290:2;41280:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41328:2;41309:7;:16;41317:7;41309:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41367:7;41363:2;41348:27;;41357:4;41348:27;;;;;;;;;;;;40768:615;;;:::o;61700:212::-;61769:18;61798:3;61769:33;;61814:12;61832:2;:7;;61847:5;61832:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61813:44;;;61876:7;61868:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;61758:154;;61700:212;;:::o;49813:113::-;49874:7;49901:10;:17;;;;49894:24;;49813:113;:::o;3036:173::-;3092:16;3111:6;;;;;;;;;;;3092:25;;3137:8;3128:6;;:17;;;;;;;;;;;;;;;;;;3192:8;3161:40;;3182:8;3161:40;;;;;;;;;;;;3081:128;3036:173;:::o;64416:226::-;64500:9;64495:140;64519:11;64515:1;:15;64495:140;;;64552:38;64562:9;64573:16;:6;:14;:16::i;:::-;64552:9;:38::i;:::-;64605:18;:6;:16;:18::i;:::-;64532:3;;;;;:::i;:::-;;;;64495:140;;;;64416:226;;:::o;36713:352::-;36870:28;36880:4;36886:2;36890:7;36870:9;:28::i;:::-;36931:48;36954:4;36960:2;36964:7;36973:5;36931:22;:48::i;:::-;36909:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;36713:352;;;;:::o;62338:101::-;62390:13;62423:8;62416:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62338:101;:::o;26719:723::-;26775:13;27005:1;26996:5;:10;26992:53;;;27023:10;;;;;;;;;;;;;;;;;;;;;26992:53;27055:12;27070:5;27055:20;;27086:14;27111:78;27126:1;27118:4;:9;27111:78;;27144:8;;;;;:::i;:::-;;;;27175:2;27167:10;;;;;:::i;:::-;;;27111:78;;;27199:19;27231:6;27221:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27199:39;;27249:154;27265:1;27256:5;:10;27249:154;;27293:1;27283:11;;;;;:::i;:::-;;;27360:2;27352:5;:10;;;;:::i;:::-;27339:2;:24;;;;:::i;:::-;27326:39;;27309:6;27316;27309:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;27389:2;27380:11;;;;;:::i;:::-;;;27249:154;;;27427:6;27413:21;;;;;26719:723;;;;:::o;29308:207::-;29438:4;29482:25;29467:40;;;:11;:40;;;;29460:47;;29308:207;;;:::o;50936:589::-;51080:45;51107:4;51113:2;51117:7;51080:26;:45::i;:::-;51158:1;51142:18;;:4;:18;;;51138:187;;;51177:40;51209:7;51177:31;:40::i;:::-;51138:187;;;51247:2;51239:10;;:4;:10;;;51235:90;;51266:47;51299:4;51305:7;51266:32;:47::i;:::-;51235:90;51138:187;51353:1;51339:16;;:2;:16;;;51335:183;;;51372:45;51409:7;51372:36;:45::i;:::-;51335:183;;;51445:4;51439:10;;:2;:10;;;51435:83;;51466:40;51494:2;51498:7;51466:27;:40::i;:::-;51435:83;51335:183;50936:589;;;:::o;38466:110::-;38542:26;38552:2;38556:7;38542:26;;;;;;;;;;;;:9;:26::i;:::-;38466:110;;:::o;60394:119::-;60497:1;60479:7;:14;;;:19;;;;;;;;;;;60394:119;:::o;42240:980::-;42395:4;42416:15;:2;:13;;;:15::i;:::-;42412:801;;;42485:2;42469:36;;;42528:12;:10;:12::i;:::-;42563:4;42590:7;42620:5;42469:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42448:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42844:1;42827:6;:13;:18;42823:320;;;42870:108;;;;;;;;;;:::i;:::-;;;;;;;;42823:320;43093:6;43087:13;43078:6;43074:2;43070:15;43063:38;42448:710;42718:41;;;42708:51;;;:6;:51;;;;42701:58;;;;;42412:801;43197:4;43190:11;;42240:980;;;;;;;:::o;43792:126::-;;;;:::o;52248:164::-;52352:10;:17;;;;52325:15;:24;52341:7;52325:24;;;;;;;;;;;:44;;;;52380:10;52396:7;52380:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52248:164;:::o;53039:1002::-;53319:22;53369:1;53344:22;53361:4;53344:16;:22::i;:::-;:26;;;;:::i;:::-;53319:51;;53381:18;53402:17;:26;53420:7;53402:26;;;;;;;;;;;;53381:47;;53549:14;53535:10;:28;53531:328;;53580:19;53602:12;:18;53615:4;53602:18;;;;;;;;;;;;;;;:34;53621:14;53602:34;;;;;;;;;;;;53580:56;;53686:11;53653:12;:18;53666:4;53653:18;;;;;;;;;;;;;;;:30;53672:10;53653:30;;;;;;;;;;;:44;;;;53803:10;53770:17;:30;53788:11;53770:30;;;;;;;;;;;:43;;;;53565:294;53531:328;53955:17;:26;53973:7;53955:26;;;;;;;;;;;53948:33;;;53999:12;:18;54012:4;53999:18;;;;;;;;;;;;;;;:34;54018:14;53999:34;;;;;;;;;;;53992:41;;;53134:907;;53039:1002;;:::o;54336:1079::-;54589:22;54634:1;54614:10;:17;;;;:21;;;;:::i;:::-;54589:46;;54646:18;54667:15;:24;54683:7;54667:24;;;;;;;;;;;;54646:45;;55018:19;55040:10;55051:14;55040:26;;;;;;;;:::i;:::-;;;;;;;;;;55018:48;;55104:11;55079:10;55090;55079:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;55215:10;55184:15;:28;55200:11;55184:28;;;;;;;;;;;:41;;;;55356:15;:24;55372:7;55356:24;;;;;;;;;;;55349:31;;;55391:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;54407:1008;;;54336:1079;:::o;51826:221::-;51911:14;51928:20;51945:2;51928:16;:20::i;:::-;51911:37;;51986:7;51959:12;:16;51972:2;51959:16;;;;;;;;;;;;;;;:24;51976:6;51959:24;;;;;;;;;;;:34;;;;52033:6;52004:17;:26;52022:7;52004:26;;;;;;;;;;;:35;;;;51900:147;51826:221;;:::o;38803:321::-;38933:18;38939:2;38943:7;38933:5;:18::i;:::-;38984:54;39015:1;39019:2;39023:7;39032:5;38984:22;:54::i;:::-;38962:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38803:321;;;:::o;18608:387::-;18668:4;18876:12;18943:7;18931:20;18923:28;;18986:1;18979:4;:8;18972:15;;;18608:387;;;:::o;39460:382::-;39554:1;39540:16;;:2;:16;;;;39532:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39613:16;39621:7;39613;:16::i;:::-;39612:17;39604:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39675:45;39704:1;39708:2;39712:7;39675:20;:45::i;:::-;39750:1;39733:9;:13;39743:2;39733:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39781:2;39762:7;:16;39770:7;39762:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39826:7;39822:2;39801:33;;39818:1;39801:33;;;;;;;;;;;;39460:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:179::-;7227:10;7248:46;7290:3;7282:6;7248:46;:::i;:::-;7326:4;7321:3;7317:14;7303:28;;7158:179;;;;:::o;7343:118::-;7430:24;7448:5;7430:24;:::i;:::-;7425:3;7418:37;7343:118;;:::o;7497:732::-;7616:3;7645:54;7693:5;7645:54;:::i;:::-;7715:86;7794:6;7789:3;7715:86;:::i;:::-;7708:93;;7825:56;7875:5;7825:56;:::i;:::-;7904:7;7935:1;7920:284;7945:6;7942:1;7939:13;7920:284;;;8021:6;8015:13;8048:63;8107:3;8092:13;8048:63;:::i;:::-;8041:70;;8134:60;8187:6;8134:60;:::i;:::-;8124:70;;7980:224;7967:1;7964;7960:9;7955:14;;7920:284;;;7924:14;8220:3;8213:10;;7621:608;;;7497:732;;;;:::o;8235:109::-;8316:21;8331:5;8316:21;:::i;:::-;8311:3;8304:34;8235:109;;:::o;8350:360::-;8436:3;8464:38;8496:5;8464:38;:::i;:::-;8518:70;8581:6;8576:3;8518:70;:::i;:::-;8511:77;;8597:52;8642:6;8637:3;8630:4;8623:5;8619:16;8597:52;:::i;:::-;8674:29;8696:6;8674:29;:::i;:::-;8669:3;8665:39;8658:46;;8440:270;8350:360;;;;:::o;8716:364::-;8804:3;8832:39;8865:5;8832:39;:::i;:::-;8887:71;8951:6;8946:3;8887:71;:::i;:::-;8880:78;;8967:52;9012:6;9007:3;9000:4;8993:5;8989:16;8967:52;:::i;:::-;9044:29;9066:6;9044:29;:::i;:::-;9039:3;9035:39;9028:46;;8808:272;8716:364;;;;:::o;9086:377::-;9192:3;9220:39;9253:5;9220:39;:::i;:::-;9275:89;9357:6;9352:3;9275:89;:::i;:::-;9268:96;;9373:52;9418:6;9413:3;9406:4;9399:5;9395:16;9373:52;:::i;:::-;9450:6;9445:3;9441:16;9434:23;;9196:267;9086:377;;;;:::o;9469:366::-;9611:3;9632:67;9696:2;9691:3;9632:67;:::i;:::-;9625:74;;9708:93;9797:3;9708:93;:::i;:::-;9826:2;9821:3;9817:12;9810:19;;9469:366;;;:::o;9841:::-;9983:3;10004:67;10068:2;10063:3;10004:67;:::i;:::-;9997:74;;10080:93;10169:3;10080:93;:::i;:::-;10198:2;10193:3;10189:12;10182:19;;9841:366;;;:::o;10213:::-;10355:3;10376:67;10440:2;10435:3;10376:67;:::i;:::-;10369:74;;10452:93;10541:3;10452:93;:::i;:::-;10570:2;10565:3;10561:12;10554:19;;10213:366;;;:::o;10585:::-;10727:3;10748:67;10812:2;10807:3;10748:67;:::i;:::-;10741:74;;10824:93;10913:3;10824:93;:::i;:::-;10942:2;10937:3;10933:12;10926:19;;10585:366;;;:::o;10957:::-;11099:3;11120:67;11184:2;11179:3;11120:67;:::i;:::-;11113:74;;11196:93;11285:3;11196:93;:::i;:::-;11314:2;11309:3;11305:12;11298:19;;10957:366;;;:::o;11329:::-;11471:3;11492:67;11556:2;11551:3;11492:67;:::i;:::-;11485:74;;11568:93;11657:3;11568:93;:::i;:::-;11686:2;11681:3;11677:12;11670:19;;11329:366;;;:::o;11701:::-;11843:3;11864:67;11928:2;11923:3;11864:67;:::i;:::-;11857:74;;11940:93;12029:3;11940:93;:::i;:::-;12058:2;12053:3;12049:12;12042:19;;11701:366;;;:::o;12073:::-;12215:3;12236:67;12300:2;12295:3;12236:67;:::i;:::-;12229:74;;12312:93;12401:3;12312:93;:::i;:::-;12430:2;12425:3;12421:12;12414:19;;12073:366;;;:::o;12445:::-;12587:3;12608:67;12672:2;12667:3;12608:67;:::i;:::-;12601:74;;12684:93;12773:3;12684:93;:::i;:::-;12802:2;12797:3;12793:12;12786:19;;12445:366;;;:::o;12817:::-;12959:3;12980:67;13044:2;13039:3;12980:67;:::i;:::-;12973:74;;13056:93;13145:3;13056:93;:::i;:::-;13174:2;13169:3;13165:12;13158:19;;12817:366;;;:::o;13189:::-;13331:3;13352:67;13416:2;13411:3;13352:67;:::i;:::-;13345:74;;13428:93;13517:3;13428:93;:::i;:::-;13546:2;13541:3;13537:12;13530:19;;13189:366;;;:::o;13561:::-;13703:3;13724:67;13788:2;13783:3;13724:67;:::i;:::-;13717:74;;13800:93;13889:3;13800:93;:::i;:::-;13918:2;13913:3;13909:12;13902:19;;13561:366;;;:::o;13933:::-;14075:3;14096:67;14160:2;14155:3;14096:67;:::i;:::-;14089:74;;14172:93;14261:3;14172:93;:::i;:::-;14290:2;14285:3;14281:12;14274:19;;13933:366;;;:::o;14305:::-;14447:3;14468:67;14532:2;14527:3;14468:67;:::i;:::-;14461:74;;14544:93;14633:3;14544:93;:::i;:::-;14662:2;14657:3;14653:12;14646:19;;14305:366;;;:::o;14677:::-;14819:3;14840:67;14904:2;14899:3;14840:67;:::i;:::-;14833:74;;14916:93;15005:3;14916:93;:::i;:::-;15034:2;15029:3;15025:12;15018:19;;14677:366;;;:::o;15049:::-;15191:3;15212:67;15276:2;15271:3;15212:67;:::i;:::-;15205:74;;15288:93;15377:3;15288:93;:::i;:::-;15406:2;15401:3;15397:12;15390:19;;15049:366;;;:::o;15421:::-;15563:3;15584:67;15648:2;15643:3;15584:67;:::i;:::-;15577:74;;15660:93;15749:3;15660:93;:::i;:::-;15778:2;15773:3;15769:12;15762:19;;15421:366;;;:::o;15793:::-;15935:3;15956:67;16020:2;16015:3;15956:67;:::i;:::-;15949:74;;16032:93;16121:3;16032:93;:::i;:::-;16150:2;16145:3;16141:12;16134:19;;15793:366;;;:::o;16165:::-;16307:3;16328:67;16392:2;16387:3;16328:67;:::i;:::-;16321:74;;16404:93;16493:3;16404:93;:::i;:::-;16522:2;16517:3;16513:12;16506:19;;16165:366;;;:::o;16537:398::-;16696:3;16717:83;16798:1;16793:3;16717:83;:::i;:::-;16710:90;;16809:93;16898:3;16809:93;:::i;:::-;16927:1;16922:3;16918:11;16911:18;;16537:398;;;:::o;16941:366::-;17083:3;17104:67;17168:2;17163:3;17104:67;:::i;:::-;17097:74;;17180:93;17269:3;17180:93;:::i;:::-;17298:2;17293:3;17289:12;17282:19;;16941:366;;;:::o;17313:::-;17455:3;17476:67;17540:2;17535:3;17476:67;:::i;:::-;17469:74;;17552:93;17641:3;17552:93;:::i;:::-;17670:2;17665:3;17661:12;17654:19;;17313:366;;;:::o;17685:::-;17827:3;17848:67;17912:2;17907:3;17848:67;:::i;:::-;17841:74;;17924:93;18013:3;17924:93;:::i;:::-;18042:2;18037:3;18033:12;18026:19;;17685:366;;;:::o;18057:::-;18199:3;18220:67;18284:2;18279:3;18220:67;:::i;:::-;18213:74;;18296:93;18385:3;18296:93;:::i;:::-;18414:2;18409:3;18405:12;18398:19;;18057:366;;;:::o;18429:::-;18571:3;18592:67;18656:2;18651:3;18592:67;:::i;:::-;18585:74;;18668:93;18757:3;18668:93;:::i;:::-;18786:2;18781:3;18777:12;18770:19;;18429:366;;;:::o;18801:::-;18943:3;18964:67;19028:2;19023:3;18964:67;:::i;:::-;18957:74;;19040:93;19129:3;19040:93;:::i;:::-;19158:2;19153:3;19149:12;19142:19;;18801:366;;;:::o;19173:::-;19315:3;19336:67;19400:2;19395:3;19336:67;:::i;:::-;19329:74;;19412:93;19501:3;19412:93;:::i;:::-;19530:2;19525:3;19521:12;19514:19;;19173:366;;;:::o;19545:108::-;19622:24;19640:5;19622:24;:::i;:::-;19617:3;19610:37;19545:108;;:::o;19659:118::-;19746:24;19764:5;19746:24;:::i;:::-;19741:3;19734:37;19659:118;;:::o;19783:435::-;19963:3;19985:95;20076:3;20067:6;19985:95;:::i;:::-;19978:102;;20097:95;20188:3;20179:6;20097:95;:::i;:::-;20090:102;;20209:3;20202:10;;19783:435;;;;;:::o;20224:379::-;20408:3;20430:147;20573:3;20430:147;:::i;:::-;20423:154;;20594:3;20587:10;;20224:379;;;:::o;20609:222::-;20702:4;20740:2;20729:9;20725:18;20717:26;;20753:71;20821:1;20810:9;20806:17;20797:6;20753:71;:::i;:::-;20609:222;;;;:::o;20837:640::-;21032:4;21070:3;21059:9;21055:19;21047:27;;21084:71;21152:1;21141:9;21137:17;21128:6;21084:71;:::i;:::-;21165:72;21233:2;21222:9;21218:18;21209:6;21165:72;:::i;:::-;21247;21315:2;21304:9;21300:18;21291:6;21247:72;:::i;:::-;21366:9;21360:4;21356:20;21351:2;21340:9;21336:18;21329:48;21394:76;21465:4;21456:6;21394:76;:::i;:::-;21386:84;;20837:640;;;;;;;:::o;21483:373::-;21626:4;21664:2;21653:9;21649:18;21641:26;;21713:9;21707:4;21703:20;21699:1;21688:9;21684:17;21677:47;21741:108;21844:4;21835:6;21741:108;:::i;:::-;21733:116;;21483:373;;;;:::o;21862:210::-;21949:4;21987:2;21976:9;21972:18;21964:26;;22000:65;22062:1;22051:9;22047:17;22038:6;22000:65;:::i;:::-;21862:210;;;;:::o;22078:313::-;22191:4;22229:2;22218:9;22214:18;22206:26;;22278:9;22272:4;22268:20;22264:1;22253:9;22249:17;22242:47;22306:78;22379:4;22370:6;22306:78;:::i;:::-;22298:86;;22078:313;;;;:::o;22397:419::-;22563:4;22601:2;22590:9;22586:18;22578:26;;22650:9;22644:4;22640:20;22636:1;22625:9;22621:17;22614:47;22678:131;22804:4;22678:131;:::i;:::-;22670:139;;22397:419;;;:::o;22822:::-;22988:4;23026:2;23015:9;23011:18;23003:26;;23075:9;23069:4;23065:20;23061:1;23050:9;23046:17;23039:47;23103:131;23229:4;23103:131;:::i;:::-;23095:139;;22822:419;;;:::o;23247:::-;23413:4;23451:2;23440:9;23436:18;23428:26;;23500:9;23494:4;23490:20;23486:1;23475:9;23471:17;23464:47;23528:131;23654:4;23528:131;:::i;:::-;23520:139;;23247:419;;;:::o;23672:::-;23838:4;23876:2;23865:9;23861:18;23853:26;;23925:9;23919:4;23915:20;23911:1;23900:9;23896:17;23889:47;23953:131;24079:4;23953:131;:::i;:::-;23945:139;;23672:419;;;:::o;24097:::-;24263:4;24301:2;24290:9;24286:18;24278:26;;24350:9;24344:4;24340:20;24336:1;24325:9;24321:17;24314:47;24378:131;24504:4;24378:131;:::i;:::-;24370:139;;24097:419;;;:::o;24522:::-;24688:4;24726:2;24715:9;24711:18;24703:26;;24775:9;24769:4;24765:20;24761:1;24750:9;24746:17;24739:47;24803:131;24929:4;24803:131;:::i;:::-;24795:139;;24522:419;;;:::o;24947:::-;25113:4;25151:2;25140:9;25136:18;25128:26;;25200:9;25194:4;25190:20;25186:1;25175:9;25171:17;25164:47;25228:131;25354:4;25228:131;:::i;:::-;25220:139;;24947:419;;;:::o;25372:::-;25538:4;25576:2;25565:9;25561:18;25553:26;;25625:9;25619:4;25615:20;25611:1;25600:9;25596:17;25589:47;25653:131;25779:4;25653:131;:::i;:::-;25645:139;;25372:419;;;:::o;25797:::-;25963:4;26001:2;25990:9;25986:18;25978:26;;26050:9;26044:4;26040:20;26036:1;26025:9;26021:17;26014:47;26078:131;26204:4;26078:131;:::i;:::-;26070:139;;25797:419;;;:::o;26222:::-;26388:4;26426:2;26415:9;26411:18;26403:26;;26475:9;26469:4;26465:20;26461:1;26450:9;26446:17;26439:47;26503:131;26629:4;26503:131;:::i;:::-;26495:139;;26222:419;;;:::o;26647:::-;26813:4;26851:2;26840:9;26836:18;26828:26;;26900:9;26894:4;26890:20;26886:1;26875:9;26871:17;26864:47;26928:131;27054:4;26928:131;:::i;:::-;26920:139;;26647:419;;;:::o;27072:::-;27238:4;27276:2;27265:9;27261:18;27253:26;;27325:9;27319:4;27315:20;27311:1;27300:9;27296:17;27289:47;27353:131;27479:4;27353:131;:::i;:::-;27345:139;;27072:419;;;:::o;27497:::-;27663:4;27701:2;27690:9;27686:18;27678:26;;27750:9;27744:4;27740:20;27736:1;27725:9;27721:17;27714:47;27778:131;27904:4;27778:131;:::i;:::-;27770:139;;27497:419;;;:::o;27922:::-;28088:4;28126:2;28115:9;28111:18;28103:26;;28175:9;28169:4;28165:20;28161:1;28150:9;28146:17;28139:47;28203:131;28329:4;28203:131;:::i;:::-;28195:139;;27922:419;;;:::o;28347:::-;28513:4;28551:2;28540:9;28536:18;28528:26;;28600:9;28594:4;28590:20;28586:1;28575:9;28571:17;28564:47;28628:131;28754:4;28628:131;:::i;:::-;28620:139;;28347:419;;;:::o;28772:::-;28938:4;28976:2;28965:9;28961:18;28953:26;;29025:9;29019:4;29015:20;29011:1;29000:9;28996:17;28989:47;29053:131;29179:4;29053:131;:::i;:::-;29045:139;;28772:419;;;:::o;29197:::-;29363:4;29401:2;29390:9;29386:18;29378:26;;29450:9;29444:4;29440:20;29436:1;29425:9;29421:17;29414:47;29478:131;29604:4;29478:131;:::i;:::-;29470:139;;29197:419;;;:::o;29622:::-;29788:4;29826:2;29815:9;29811:18;29803:26;;29875:9;29869:4;29865:20;29861:1;29850:9;29846:17;29839:47;29903:131;30029:4;29903:131;:::i;:::-;29895:139;;29622:419;;;:::o;30047:::-;30213:4;30251:2;30240:9;30236:18;30228:26;;30300:9;30294:4;30290:20;30286:1;30275:9;30271:17;30264:47;30328:131;30454:4;30328:131;:::i;:::-;30320:139;;30047:419;;;:::o;30472:::-;30638:4;30676:2;30665:9;30661:18;30653:26;;30725:9;30719:4;30715:20;30711:1;30700:9;30696:17;30689:47;30753:131;30879:4;30753:131;:::i;:::-;30745:139;;30472:419;;;:::o;30897:::-;31063:4;31101:2;31090:9;31086:18;31078:26;;31150:9;31144:4;31140:20;31136:1;31125:9;31121:17;31114:47;31178:131;31304:4;31178:131;:::i;:::-;31170:139;;30897:419;;;:::o;31322:::-;31488:4;31526:2;31515:9;31511:18;31503:26;;31575:9;31569:4;31565:20;31561:1;31550:9;31546:17;31539:47;31603:131;31729:4;31603:131;:::i;:::-;31595:139;;31322:419;;;:::o;31747:::-;31913:4;31951:2;31940:9;31936:18;31928:26;;32000:9;31994:4;31990:20;31986:1;31975:9;31971:17;31964:47;32028:131;32154:4;32028:131;:::i;:::-;32020:139;;31747:419;;;:::o;32172:::-;32338:4;32376:2;32365:9;32361:18;32353:26;;32425:9;32419:4;32415:20;32411:1;32400:9;32396:17;32389:47;32453:131;32579:4;32453:131;:::i;:::-;32445:139;;32172:419;;;:::o;32597:::-;32763:4;32801:2;32790:9;32786:18;32778:26;;32850:9;32844:4;32840:20;32836:1;32825:9;32821:17;32814:47;32878:131;33004:4;32878:131;:::i;:::-;32870:139;;32597:419;;;:::o;33022:::-;33188:4;33226:2;33215:9;33211:18;33203:26;;33275:9;33269:4;33265:20;33261:1;33250:9;33246:17;33239:47;33303:131;33429:4;33303:131;:::i;:::-;33295:139;;33022:419;;;:::o;33447:222::-;33540:4;33578:2;33567:9;33563:18;33555:26;;33591:71;33659:1;33648:9;33644:17;33635:6;33591:71;:::i;:::-;33447:222;;;;:::o;33675:129::-;33709:6;33736:20;;:::i;:::-;33726:30;;33765:33;33793:4;33785:6;33765:33;:::i;:::-;33675:129;;;:::o;33810:75::-;33843:6;33876:2;33870:9;33860:19;;33810:75;:::o;33891:307::-;33952:4;34042:18;34034:6;34031:30;34028:56;;;34064:18;;:::i;:::-;34028:56;34102:29;34124:6;34102:29;:::i;:::-;34094:37;;34186:4;34180;34176:15;34168:23;;33891:307;;;:::o;34204:308::-;34266:4;34356:18;34348:6;34345:30;34342:56;;;34378:18;;:::i;:::-;34342:56;34416:29;34438:6;34416:29;:::i;:::-;34408:37;;34500:4;34494;34490:15;34482:23;;34204:308;;;:::o;34518:132::-;34585:4;34608:3;34600:11;;34638:4;34633:3;34629:14;34621:22;;34518:132;;;:::o;34656:114::-;34723:6;34757:5;34751:12;34741:22;;34656:114;;;:::o;34776:98::-;34827:6;34861:5;34855:12;34845:22;;34776:98;;;:::o;34880:99::-;34932:6;34966:5;34960:12;34950:22;;34880:99;;;:::o;34985:113::-;35055:4;35087;35082:3;35078:14;35070:22;;34985:113;;;:::o;35104:184::-;35203:11;35237:6;35232:3;35225:19;35277:4;35272:3;35268:14;35253:29;;35104:184;;;;:::o;35294:168::-;35377:11;35411:6;35406:3;35399:19;35451:4;35446:3;35442:14;35427:29;;35294:168;;;;:::o;35468:147::-;35569:11;35606:3;35591:18;;35468:147;;;;:::o;35621:169::-;35705:11;35739:6;35734:3;35727:19;35779:4;35774:3;35770:14;35755:29;;35621:169;;;;:::o;35796:148::-;35898:11;35935:3;35920:18;;35796:148;;;;:::o;35950:305::-;35990:3;36009:20;36027:1;36009:20;:::i;:::-;36004:25;;36043:20;36061:1;36043:20;:::i;:::-;36038:25;;36197:1;36129:66;36125:74;36122:1;36119:81;36116:107;;;36203:18;;:::i;:::-;36116:107;36247:1;36244;36240:9;36233:16;;35950:305;;;;:::o;36261:185::-;36301:1;36318:20;36336:1;36318:20;:::i;:::-;36313:25;;36352:20;36370:1;36352:20;:::i;:::-;36347:25;;36391:1;36381:35;;36396:18;;:::i;:::-;36381:35;36438:1;36435;36431:9;36426:14;;36261:185;;;;:::o;36452:348::-;36492:7;36515:20;36533:1;36515:20;:::i;:::-;36510:25;;36549:20;36567:1;36549:20;:::i;:::-;36544:25;;36737:1;36669:66;36665:74;36662:1;36659:81;36654:1;36647:9;36640:17;36636:105;36633:131;;;36744:18;;:::i;:::-;36633:131;36792:1;36789;36785:9;36774:20;;36452:348;;;;:::o;36806:191::-;36846:4;36866:20;36884:1;36866:20;:::i;:::-;36861:25;;36900:20;36918:1;36900:20;:::i;:::-;36895:25;;36939:1;36936;36933:8;36930:34;;;36944:18;;:::i;:::-;36930:34;36989:1;36986;36982:9;36974:17;;36806:191;;;;:::o;37003:96::-;37040:7;37069:24;37087:5;37069:24;:::i;:::-;37058:35;;37003:96;;;:::o;37105:90::-;37139:7;37182:5;37175:13;37168:21;37157:32;;37105:90;;;:::o;37201:149::-;37237:7;37277:66;37270:5;37266:78;37255:89;;37201:149;;;:::o;37356:126::-;37393:7;37433:42;37426:5;37422:54;37411:65;;37356:126;;;:::o;37488:77::-;37525:7;37554:5;37543:16;;37488:77;;;:::o;37571:154::-;37655:6;37650:3;37645;37632:30;37717:1;37708:6;37703:3;37699:16;37692:27;37571:154;;;:::o;37731:307::-;37799:1;37809:113;37823:6;37820:1;37817:13;37809:113;;;37908:1;37903:3;37899:11;37893:18;37889:1;37884:3;37880:11;37873:39;37845:2;37842:1;37838:10;37833:15;;37809:113;;;37940:6;37937:1;37934:13;37931:101;;;38020:1;38011:6;38006:3;38002:16;37995:27;37931:101;37780:258;37731:307;;;:::o;38044:320::-;38088:6;38125:1;38119:4;38115:12;38105:22;;38172:1;38166:4;38162:12;38193:18;38183:81;;38249:4;38241:6;38237:17;38227:27;;38183:81;38311:2;38303:6;38300:14;38280:18;38277:38;38274:84;;;38330:18;;:::i;:::-;38274:84;38095:269;38044:320;;;:::o;38370:281::-;38453:27;38475:4;38453:27;:::i;:::-;38445:6;38441:40;38583:6;38571:10;38568:22;38547:18;38535:10;38532:34;38529:62;38526:88;;;38594:18;;:::i;:::-;38526:88;38634:10;38630:2;38623:22;38413:238;38370:281;;:::o;38657:233::-;38696:3;38719:24;38737:5;38719:24;:::i;:::-;38710:33;;38765:66;38758:5;38755:77;38752:103;;;38835:18;;:::i;:::-;38752:103;38882:1;38875:5;38871:13;38864:20;;38657:233;;;:::o;38896:176::-;38928:1;38945:20;38963:1;38945:20;:::i;:::-;38940:25;;38979:20;38997:1;38979:20;:::i;:::-;38974:25;;39018:1;39008:35;;39023:18;;:::i;:::-;39008:35;39064:1;39061;39057:9;39052:14;;38896:176;;;;:::o;39078:180::-;39126:77;39123:1;39116:88;39223:4;39220:1;39213:15;39247:4;39244:1;39237:15;39264:180;39312:77;39309:1;39302:88;39409:4;39406:1;39399:15;39433:4;39430:1;39423:15;39450:180;39498:77;39495:1;39488:88;39595:4;39592:1;39585:15;39619:4;39616:1;39609:15;39636:180;39684:77;39681:1;39674:88;39781:4;39778:1;39771:15;39805:4;39802:1;39795:15;39822:180;39870:77;39867:1;39860:88;39967:4;39964:1;39957:15;39991:4;39988:1;39981:15;40008:180;40056:77;40053:1;40046:88;40153:4;40150:1;40143:15;40177:4;40174:1;40167:15;40194:117;40303:1;40300;40293:12;40317:117;40426:1;40423;40416:12;40440:117;40549:1;40546;40539:12;40563:117;40672:1;40669;40662:12;40686:102;40727:6;40778:2;40774:7;40769:2;40762:5;40758:14;40754:28;40744:38;;40686:102;;;:::o;40794:230::-;40934:34;40930:1;40922:6;40918:14;40911:58;41003:13;40998:2;40990:6;40986:15;40979:38;40794:230;:::o;41030:237::-;41170:34;41166:1;41158:6;41154:14;41147:58;41239:20;41234:2;41226:6;41222:15;41215:45;41030:237;:::o;41273:225::-;41413:34;41409:1;41401:6;41397:14;41390:58;41482:8;41477:2;41469:6;41465:15;41458:33;41273:225;:::o;41504:178::-;41644:30;41640:1;41632:6;41628:14;41621:54;41504:178;:::o;41688:170::-;41828:22;41824:1;41816:6;41812:14;41805:46;41688:170;:::o;41864:223::-;42004:34;42000:1;41992:6;41988:14;41981:58;42073:6;42068:2;42060:6;42056:15;42049:31;41864:223;:::o;42093:175::-;42233:27;42229:1;42221:6;42217:14;42210:51;42093:175;:::o;42274:168::-;42414:20;42410:1;42402:6;42398:14;42391:44;42274:168;:::o;42448:231::-;42588:34;42584:1;42576:6;42572:14;42565:58;42657:14;42652:2;42644:6;42640:15;42633:39;42448:231;:::o;42685:220::-;42825:34;42821:1;42813:6;42809:14;42802:58;42894:3;42889:2;42881:6;42877:15;42870:28;42685:220;:::o;42911:243::-;43051:34;43047:1;43039:6;43035:14;43028:58;43120:26;43115:2;43107:6;43103:15;43096:51;42911:243;:::o;43160:229::-;43300:34;43296:1;43288:6;43284:14;43277:58;43369:12;43364:2;43356:6;43352:15;43345:37;43160:229;:::o;43395:228::-;43535:34;43531:1;43523:6;43519:14;43512:58;43604:11;43599:2;43591:6;43587:15;43580:36;43395:228;:::o;43629:182::-;43769:34;43765:1;43757:6;43753:14;43746:58;43629:182;:::o;43817:231::-;43957:34;43953:1;43945:6;43941:14;43934:58;44026:14;44021:2;44013:6;44009:15;44002:39;43817:231;:::o;44054:182::-;44194:34;44190:1;44182:6;44178:14;44171:58;44054:182;:::o;44242:228::-;44382:34;44378:1;44370:6;44366:14;44359:58;44451:11;44446:2;44438:6;44434:15;44427:36;44242:228;:::o;44476:234::-;44616:34;44612:1;44604:6;44600:14;44593:58;44685:17;44680:2;44672:6;44668:15;44661:42;44476:234;:::o;44716:220::-;44856:34;44852:1;44844:6;44840:14;44833:58;44925:3;44920:2;44912:6;44908:15;44901:28;44716:220;:::o;44942:114::-;;:::o;45062:170::-;45202:22;45198:1;45190:6;45186:14;45179:46;45062:170;:::o;45238:166::-;45378:18;45374:1;45366:6;45362:14;45355:42;45238:166;:::o;45410:236::-;45550:34;45546:1;45538:6;45534:14;45527:58;45619:19;45614:2;45606:6;45602:15;45595:44;45410:236;:::o;45652:231::-;45792:34;45788:1;45780:6;45776:14;45769:58;45861:14;45856:2;45848:6;45844:15;45837:39;45652:231;:::o;45889:171::-;46029:23;46025:1;46017:6;46013:14;46006:47;45889:171;:::o;46066:181::-;46206:33;46202:1;46194:6;46190:14;46183:57;46066:181;:::o;46253:169::-;46393:21;46389:1;46381:6;46377:14;46370:45;46253:169;:::o;46428:122::-;46501:24;46519:5;46501:24;:::i;:::-;46494:5;46491:35;46481:63;;46540:1;46537;46530:12;46481:63;46428:122;:::o;46556:116::-;46626:21;46641:5;46626:21;:::i;:::-;46619:5;46616:32;46606:60;;46662:1;46659;46652:12;46606:60;46556:116;:::o;46678:120::-;46750:23;46767:5;46750:23;:::i;:::-;46743:5;46740:34;46730:62;;46788:1;46785;46778:12;46730:62;46678:120;:::o;46804:122::-;46877:24;46895:5;46877:24;:::i;:::-;46870:5;46867:35;46857:63;;46916:1;46913;46906:12;46857:63;46804:122;:::o
Swarm Source
ipfs://dbef6712aa64ff403f49417e87c5af1ae2fb04e5efd639429e462eab3d26b045
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.