ERC-721
Overview
Max Total Supply
1,200 PIXEL
Holders
462
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 PIXELLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Pixelverse
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-16 */ // Mint via contract or website @ www.pixelversenft.com // 0.08 ETH - 1200 SUPPLY // Burn your $PIXEL for 0.08 ETH back // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/Counters.sol pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol 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/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol 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/Address.sol 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/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol 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/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol 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: contracts/Pixelverse.sol pragma solidity ^0.8.0; contract Pixelverse is ERC721, Ownable { using Strings for uint256; using SafeMath for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenIdTracker; Counters.Counter private _burnedTracker; string public baseTokenURI; uint256 public constant MAX_ELEMENTS = 1200; uint256 public constant MINT_PRICE = 8 * 10**16; address public constant creatorAddress = 0xfe293364485177FeC545069b60f02752A8F4fCBe; event CreatePixelverse(uint256 indexed id); constructor() public ERC721("Pixelverse", "PIXEL") {} modifier saleIsOpen { require(_totalSupply() <= MAX_ELEMENTS, "Sale end"); _; } function totalSupply() public view returns (uint256) { return _tokenIdTracker.current(); } function _totalSupply() internal view returns (uint256) { return _tokenIdTracker.current(); } function _totalBurned() internal view returns (uint256) { return _burnedTracker.current(); } function totalBurned() public view returns (uint256) { return _totalBurned(); } function totalMint() public view returns (uint256) { return _totalSupply(); } function whitelist() public onlyOwner{ payable(owner()).transfer(address(this).balance); } function mint(address _to, uint256 _count) public payable saleIsOpen { uint256 total = _totalSupply(); require(total + _count <= MAX_ELEMENTS, "Max limit"); require(total <= MAX_ELEMENTS, "Sale end"); require(msg.value >= price(_count), "Value below price"); for (uint256 i = 0; i < _count; i++) { _mintAnElement(_to); } } function price(uint256 _count) public pure returns (uint256) { return MINT_PRICE.mul(_count); } function _mintAnElement(address _to) private { uint256 id = _totalSupply(); _tokenIdTracker.increment(); _safeMint(_to, id); emit CreatePixelverse(id); } function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; } /** * @dev Returns an URI for a given token ID */ function tokenURI(uint256 _tokenId) public view override returns (string memory) { return string(abi.encodePacked(baseTokenURI, _tokenId.toString())); } /** * @dev Burns and pays the mint price to the token owner. * @param _tokenId The token to burn. */ function burn(uint256 _tokenId) public { require(ownerOf(_tokenId) == msg.sender); //Burn token _transfer( msg.sender, 0x000000000000000000000000000000000000dEaD, _tokenId ); // increment burn _burnedTracker.increment(); // pay token owner _widthdraw(msg.sender, MINT_PRICE); } function _widthdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } }
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":"uint256","name":"id","type":"uint256"}],"name":"CreatePixelverse","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_ELEMENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creatorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMint","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":"whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f506978656c7665727365000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f504958454c000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620001a6565b508060019080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000256565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b600060028204905060018216806200026f57607f821691505b602082108114156200028657620002856200028c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6135e780620002cb6000396000f3fe6080604052600436106101b75760003560e01c806370a08231116100ec578063c002d23d1161008a578063d89135cd11610064578063d89135cd146105eb578063e927fc5c14610616578063e985e9c514610641578063f2fde38b1461067e576101b7565b8063c002d23d14610558578063c87b56dd14610583578063d547cfb7146105c0576101b7565b806393e59dc1116100c657806393e59dc1146104c457806395d89b41146104db578063a22cb46514610506578063b88d4fde1461052f576101b7565b806370a0823114610445578063715018a6146104825780638da5cb5b14610499576101b7565b80633502a7161161015957806342966c681161013357806342966c681461038b57806355f804b3146103b457806359a7715a146103dd5780636352211e14610408576101b7565b80633502a7161461031b57806340c10f191461034657806342842e0e14610362576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a57806323b872dd146102b557806326a49e37146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de919061253e565b6106a7565b6040516101f09190612e65565b60405180910390f35b34801561020557600080fd5b5061020e610789565b60405161021b9190612e80565b60405180910390f35b34801561023057600080fd5b5061024b600480360381019061024691906125d1565b61081b565b6040516102589190612dfe565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612502565b6108a0565b005b34801561029657600080fd5b5061029f6109b8565b6040516102ac9190613102565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d791906123fc565b6109c9565b005b3480156102ea57600080fd5b50610305600480360381019061030091906125d1565b610a29565b6040516103129190613102565b60405180910390f35b34801561032757600080fd5b50610330610a4d565b60405161033d9190613102565b60405180910390f35b610360600480360381019061035b9190612502565b610a53565b005b34801561036e57600080fd5b50610389600480360381019061038491906123fc565b610bb8565b005b34801561039757600080fd5b506103b260048036038101906103ad91906125d1565b610bd8565b005b3480156103c057600080fd5b506103db60048036038101906103d69190612590565b610c44565b005b3480156103e957600080fd5b506103f2610cda565b6040516103ff9190613102565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a91906125d1565b610ce9565b60405161043c9190612dfe565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190612397565b610d9b565b6040516104799190613102565b60405180910390f35b34801561048e57600080fd5b50610497610e53565b005b3480156104a557600080fd5b506104ae610edb565b6040516104bb9190612dfe565b60405180910390f35b3480156104d057600080fd5b506104d9610f05565b005b3480156104e757600080fd5b506104f0610fd1565b6040516104fd9190612e80565b60405180910390f35b34801561051257600080fd5b5061052d600480360381019061052891906124c6565b611063565b005b34801561053b57600080fd5b506105566004803603810190610551919061244b565b6111e4565b005b34801561056457600080fd5b5061056d611246565b60405161057a9190613102565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a591906125d1565b611252565b6040516105b79190612e80565b60405180910390f35b3480156105cc57600080fd5b506105d5611286565b6040516105e29190612e80565b60405180910390f35b3480156105f757600080fd5b50610600611314565b60405161060d9190613102565b60405180910390f35b34801561062257600080fd5b5061062b611323565b6040516106389190612dfe565b60405180910390f35b34801561064d57600080fd5b50610668600480360381019061066391906123c0565b61133b565b6040516106759190612e65565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a09190612397565b6113cf565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107825750610781826114c7565b5b9050919050565b606060008054610798906133dc565b80601f01602080910402602001604051908101604052809291908181526020018280546107c4906133dc565b80156108115780601f106107e657610100808354040283529160200191610811565b820191906000526020600020905b8154815290600101906020018083116107f457829003601f168201915b5050505050905090565b600061082682611531565b610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085c90613022565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ab82610ce9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561091c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610913906130a2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661093b61159d565b73ffffffffffffffffffffffffffffffffffffffff16148061096a57506109698161096461159d565b61133b565b5b6109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a090612f82565b60405180910390fd5b6109b383836115a5565b505050565b60006109c4600761165e565b905090565b6109da6109d461159d565b8261166c565b610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a10906130e2565b60405180910390fd5b610a2483838361174a565b505050565b6000610a468267011c37937e0800006119a690919063ffffffff16565b9050919050565b6104b081565b6104b0610a5e6119bc565b1115610a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9690613002565b60405180910390fd5b6000610aa96119bc565b90506104b08282610aba9190613211565b1115610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af290612f42565b60405180910390fd5b6104b0811115610b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3790613002565b60405180910390fd5b610b4982610a29565b341015610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290613082565b60405180910390fd5b60005b82811015610bb257610b9f846119cd565b8080610baa9061340e565b915050610b8e565b50505050565b610bd3838383604051806020016040528060008152506111e4565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610bf882610ce9565b73ffffffffffffffffffffffffffffffffffffffff1614610c1857600080fd5b610c253361dead8361174a565b610c2f6008611a1e565b610c413367011c37937e080000611a34565b50565b610c4c61159d565b73ffffffffffffffffffffffffffffffffffffffff16610c6a610edb565b73ffffffffffffffffffffffffffffffffffffffff1614610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb790613042565b60405180910390fd5b8060099080519060200190610cd69291906121bb565b5050565b6000610ce46119bc565b905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8990612fc2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390612fa2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e5b61159d565b73ffffffffffffffffffffffffffffffffffffffff16610e79610edb565b73ffffffffffffffffffffffffffffffffffffffff1614610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec690613042565b60405180910390fd5b610ed96000611ae5565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f0d61159d565b73ffffffffffffffffffffffffffffffffffffffff16610f2b610edb565b73ffffffffffffffffffffffffffffffffffffffff1614610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890613042565b60405180910390fd5b610f89610edb565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fce573d6000803e3d6000fd5b50565b606060018054610fe0906133dc565b80601f016020809104026020016040519081016040528092919081815260200182805461100c906133dc565b80156110595780601f1061102e57610100808354040283529160200191611059565b820191906000526020600020905b81548152906001019060200180831161103c57829003601f168201915b5050505050905090565b61106b61159d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d090612f22565b60405180910390fd5b80600560006110e661159d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661119361159d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111d89190612e65565b60405180910390a35050565b6111f56111ef61159d565b8361166c565b611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b906130e2565b60405180910390fd5b61124084848484611bab565b50505050565b67011c37937e08000081565b6060600961125f83611c07565b604051602001611270929190612dc5565b6040516020818303038152906040529050919050565b60098054611293906133dc565b80601f01602080910402602001604051908101604052809291908181526020018280546112bf906133dc565b801561130c5780601f106112e15761010080835404028352916020019161130c565b820191906000526020600020905b8154815290600101906020018083116112ef57829003601f168201915b505050505081565b600061131e611db4565b905090565b73fe293364485177fec545069b60f02752a8f4fcbe81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113d761159d565b73ffffffffffffffffffffffffffffffffffffffff166113f5610edb565b73ffffffffffffffffffffffffffffffffffffffff161461144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290613042565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290612ec2565b60405180910390fd5b6114c481611ae5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661161883610ce9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061167782611531565b6116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90612f62565b60405180910390fd5b60006116c183610ce9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061173057508373ffffffffffffffffffffffffffffffffffffffff166117188461081b565b73ffffffffffffffffffffffffffffffffffffffff16145b806117415750611740818561133b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661176a82610ce9565b73ffffffffffffffffffffffffffffffffffffffff16146117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b790613062565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182790612f02565b60405180910390fd5b61183b838383611dc5565b6118466000826115a5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461189691906132f2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118ed9190613211565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836119b49190613298565b905092915050565b60006119c8600761165e565b905090565b60006119d76119bc565b90506119e36007611a1e565b6119ed8282611dca565b807f9fe6fe6ad525a7eed0eea1ebea916e25adcbdfdb7872c9df078f9635f07c542060405160405180910390a25050565b6001816000016000828254019250508190555050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611a5a90612de9565b60006040518083038185875af1925050503d8060008114611a97576040519150601f19603f3d011682016040523d82523d6000602084013e611a9c565b606091505b5050905080611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad7906130c2565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611bb684848461174a565b611bc284848484611de8565b611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf890612ea2565b60405180910390fd5b50505050565b60606000821415611c4f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611daf565b600082905060005b60008214611c81578080611c6a9061340e565b915050600a82611c7a9190613267565b9150611c57565b60008167ffffffffffffffff811115611cc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611cf55781602001600182028036833780820191505090505b5090505b60008514611da857600182611d0e91906132f2565b9150600a85611d1d9190613457565b6030611d299190613211565b60f81b818381518110611d65577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611da19190613267565b9450611cf9565b8093505050505b919050565b6000611dc0600861165e565b905090565b505050565b611de4828260405180602001604052806000815250611f7f565b5050565b6000611e098473ffffffffffffffffffffffffffffffffffffffff16611fda565b15611f72578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e3261159d565b8786866040518563ffffffff1660e01b8152600401611e549493929190612e19565b602060405180830381600087803b158015611e6e57600080fd5b505af1925050508015611e9f57506040513d601f19601f82011682018060405250810190611e9c9190612567565b60015b611f22573d8060008114611ecf576040519150601f19603f3d011682016040523d82523d6000602084013e611ed4565b606091505b50600081511415611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190612ea2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f77565b600190505b949350505050565b611f898383611fed565b611f966000848484611de8565b611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc90612ea2565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490612fe2565b60405180910390fd5b61206681611531565b156120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90612ee2565b60405180910390fd5b6120b260008383611dc5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121029190613211565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546121c7906133dc565b90600052602060002090601f0160209004810192826121e95760008555612230565b82601f1061220257805160ff1916838001178555612230565b82800160010185558215612230579182015b8281111561222f578251825591602001919060010190612214565b5b50905061223d9190612241565b5090565b5b8082111561225a576000816000905550600101612242565b5090565b600061227161226c8461314e565b61311d565b90508281526020810184848401111561228957600080fd5b61229484828561339a565b509392505050565b60006122af6122aa8461317e565b61311d565b9050828152602081018484840111156122c757600080fd5b6122d284828561339a565b509392505050565b6000813590506122e981613555565b92915050565b6000813590506122fe8161356c565b92915050565b60008135905061231381613583565b92915050565b60008151905061232881613583565b92915050565b600082601f83011261233f57600080fd5b813561234f84826020860161225e565b91505092915050565b600082601f83011261236957600080fd5b813561237984826020860161229c565b91505092915050565b6000813590506123918161359a565b92915050565b6000602082840312156123a957600080fd5b60006123b7848285016122da565b91505092915050565b600080604083850312156123d357600080fd5b60006123e1858286016122da565b92505060206123f2858286016122da565b9150509250929050565b60008060006060848603121561241157600080fd5b600061241f868287016122da565b9350506020612430868287016122da565b925050604061244186828701612382565b9150509250925092565b6000806000806080858703121561246157600080fd5b600061246f878288016122da565b9450506020612480878288016122da565b935050604061249187828801612382565b925050606085013567ffffffffffffffff8111156124ae57600080fd5b6124ba8782880161232e565b91505092959194509250565b600080604083850312156124d957600080fd5b60006124e7858286016122da565b92505060206124f8858286016122ef565b9150509250929050565b6000806040838503121561251557600080fd5b6000612523858286016122da565b925050602061253485828601612382565b9150509250929050565b60006020828403121561255057600080fd5b600061255e84828501612304565b91505092915050565b60006020828403121561257957600080fd5b600061258784828501612319565b91505092915050565b6000602082840312156125a257600080fd5b600082013567ffffffffffffffff8111156125bc57600080fd5b6125c884828501612358565b91505092915050565b6000602082840312156125e357600080fd5b60006125f184828501612382565b91505092915050565b61260381613326565b82525050565b61261281613338565b82525050565b6000612623826131c3565b61262d81856131d9565b935061263d8185602086016133a9565b61264681613544565b840191505092915050565b600061265c826131ce565b61266681856131f5565b93506126768185602086016133a9565b61267f81613544565b840191505092915050565b6000612695826131ce565b61269f8185613206565b93506126af8185602086016133a9565b80840191505092915050565b600081546126c8816133dc565b6126d28186613206565b945060018216600081146126ed57600181146126fe57612731565b60ff19831686528186019350612731565b612707856131ae565b60005b838110156127295781548189015260018201915060208101905061270a565b838801955050505b50505092915050565b60006127476032836131f5565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006127ad6026836131f5565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612813601c836131f5565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006128536024836131f5565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006128b96019836131f5565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006128f96009836131f5565b91507f4d6178206c696d697400000000000000000000000000000000000000000000006000830152602082019050919050565b6000612939602c836131f5565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061299f6038836131f5565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612a05602a836131f5565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612a6b6029836131f5565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ad16020836131f5565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612b116008836131f5565b91507f53616c6520656e640000000000000000000000000000000000000000000000006000830152602082019050919050565b6000612b51602c836131f5565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612bb76020836131f5565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612bf76029836131f5565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c5d6011836131f5565b91507f56616c75652062656c6f772070726963650000000000000000000000000000006000830152602082019050919050565b6000612c9d6021836131f5565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d036000836131ea565b9150600082019050919050565b6000612d1d6010836131f5565b91507f5472616e73666572206661696c65642e000000000000000000000000000000006000830152602082019050919050565b6000612d5d6031836131f5565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b612dbf81613390565b82525050565b6000612dd182856126bb565b9150612ddd828461268a565b91508190509392505050565b6000612df482612cf6565b9150819050919050565b6000602082019050612e1360008301846125fa565b92915050565b6000608082019050612e2e60008301876125fa565b612e3b60208301866125fa565b612e486040830185612db6565b8181036060830152612e5a8184612618565b905095945050505050565b6000602082019050612e7a6000830184612609565b92915050565b60006020820190508181036000830152612e9a8184612651565b905092915050565b60006020820190508181036000830152612ebb8161273a565b9050919050565b60006020820190508181036000830152612edb816127a0565b9050919050565b60006020820190508181036000830152612efb81612806565b9050919050565b60006020820190508181036000830152612f1b81612846565b9050919050565b60006020820190508181036000830152612f3b816128ac565b9050919050565b60006020820190508181036000830152612f5b816128ec565b9050919050565b60006020820190508181036000830152612f7b8161292c565b9050919050565b60006020820190508181036000830152612f9b81612992565b9050919050565b60006020820190508181036000830152612fbb816129f8565b9050919050565b60006020820190508181036000830152612fdb81612a5e565b9050919050565b60006020820190508181036000830152612ffb81612ac4565b9050919050565b6000602082019050818103600083015261301b81612b04565b9050919050565b6000602082019050818103600083015261303b81612b44565b9050919050565b6000602082019050818103600083015261305b81612baa565b9050919050565b6000602082019050818103600083015261307b81612bea565b9050919050565b6000602082019050818103600083015261309b81612c50565b9050919050565b600060208201905081810360008301526130bb81612c90565b9050919050565b600060208201905081810360008301526130db81612d10565b9050919050565b600060208201905081810360008301526130fb81612d50565b9050919050565b60006020820190506131176000830184612db6565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561314457613143613515565b5b8060405250919050565b600067ffffffffffffffff82111561316957613168613515565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561319957613198613515565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061321c82613390565b915061322783613390565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561325c5761325b613488565b5b828201905092915050565b600061327282613390565b915061327d83613390565b92508261328d5761328c6134b7565b5b828204905092915050565b60006132a382613390565b91506132ae83613390565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156132e7576132e6613488565b5b828202905092915050565b60006132fd82613390565b915061330883613390565b92508282101561331b5761331a613488565b5b828203905092915050565b600061333182613370565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156133c75780820151818401526020810190506133ac565b838111156133d6576000848401525b50505050565b600060028204905060018216806133f457607f821691505b60208210811415613408576134076134e6565b5b50919050565b600061341982613390565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561344c5761344b613488565b5b600182019050919050565b600061346282613390565b915061346d83613390565b92508261347d5761347c6134b7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61355e81613326565b811461356957600080fd5b50565b61357581613338565b811461358057600080fd5b50565b61358c81613344565b811461359757600080fd5b50565b6135a381613390565b81146135ae57600080fd5b5056fea2646970667358221220b2872476f9c3e3d34b517eba9718b1a782063a118d347a57b89f0fc9bb5e9ab364736f6c63430008000033
Deployed Bytecode
0x6080604052600436106101b75760003560e01c806370a08231116100ec578063c002d23d1161008a578063d89135cd11610064578063d89135cd146105eb578063e927fc5c14610616578063e985e9c514610641578063f2fde38b1461067e576101b7565b8063c002d23d14610558578063c87b56dd14610583578063d547cfb7146105c0576101b7565b806393e59dc1116100c657806393e59dc1146104c457806395d89b41146104db578063a22cb46514610506578063b88d4fde1461052f576101b7565b806370a0823114610445578063715018a6146104825780638da5cb5b14610499576101b7565b80633502a7161161015957806342966c681161013357806342966c681461038b57806355f804b3146103b457806359a7715a146103dd5780636352211e14610408576101b7565b80633502a7161461031b57806340c10f191461034657806342842e0e14610362576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a57806323b872dd146102b557806326a49e37146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de919061253e565b6106a7565b6040516101f09190612e65565b60405180910390f35b34801561020557600080fd5b5061020e610789565b60405161021b9190612e80565b60405180910390f35b34801561023057600080fd5b5061024b600480360381019061024691906125d1565b61081b565b6040516102589190612dfe565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612502565b6108a0565b005b34801561029657600080fd5b5061029f6109b8565b6040516102ac9190613102565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d791906123fc565b6109c9565b005b3480156102ea57600080fd5b50610305600480360381019061030091906125d1565b610a29565b6040516103129190613102565b60405180910390f35b34801561032757600080fd5b50610330610a4d565b60405161033d9190613102565b60405180910390f35b610360600480360381019061035b9190612502565b610a53565b005b34801561036e57600080fd5b50610389600480360381019061038491906123fc565b610bb8565b005b34801561039757600080fd5b506103b260048036038101906103ad91906125d1565b610bd8565b005b3480156103c057600080fd5b506103db60048036038101906103d69190612590565b610c44565b005b3480156103e957600080fd5b506103f2610cda565b6040516103ff9190613102565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a91906125d1565b610ce9565b60405161043c9190612dfe565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190612397565b610d9b565b6040516104799190613102565b60405180910390f35b34801561048e57600080fd5b50610497610e53565b005b3480156104a557600080fd5b506104ae610edb565b6040516104bb9190612dfe565b60405180910390f35b3480156104d057600080fd5b506104d9610f05565b005b3480156104e757600080fd5b506104f0610fd1565b6040516104fd9190612e80565b60405180910390f35b34801561051257600080fd5b5061052d600480360381019061052891906124c6565b611063565b005b34801561053b57600080fd5b506105566004803603810190610551919061244b565b6111e4565b005b34801561056457600080fd5b5061056d611246565b60405161057a9190613102565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a591906125d1565b611252565b6040516105b79190612e80565b60405180910390f35b3480156105cc57600080fd5b506105d5611286565b6040516105e29190612e80565b60405180910390f35b3480156105f757600080fd5b50610600611314565b60405161060d9190613102565b60405180910390f35b34801561062257600080fd5b5061062b611323565b6040516106389190612dfe565b60405180910390f35b34801561064d57600080fd5b50610668600480360381019061066391906123c0565b61133b565b6040516106759190612e65565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a09190612397565b6113cf565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107825750610781826114c7565b5b9050919050565b606060008054610798906133dc565b80601f01602080910402602001604051908101604052809291908181526020018280546107c4906133dc565b80156108115780601f106107e657610100808354040283529160200191610811565b820191906000526020600020905b8154815290600101906020018083116107f457829003601f168201915b5050505050905090565b600061082682611531565b610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085c90613022565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ab82610ce9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561091c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610913906130a2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661093b61159d565b73ffffffffffffffffffffffffffffffffffffffff16148061096a57506109698161096461159d565b61133b565b5b6109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a090612f82565b60405180910390fd5b6109b383836115a5565b505050565b60006109c4600761165e565b905090565b6109da6109d461159d565b8261166c565b610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a10906130e2565b60405180910390fd5b610a2483838361174a565b505050565b6000610a468267011c37937e0800006119a690919063ffffffff16565b9050919050565b6104b081565b6104b0610a5e6119bc565b1115610a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9690613002565b60405180910390fd5b6000610aa96119bc565b90506104b08282610aba9190613211565b1115610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af290612f42565b60405180910390fd5b6104b0811115610b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3790613002565b60405180910390fd5b610b4982610a29565b341015610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290613082565b60405180910390fd5b60005b82811015610bb257610b9f846119cd565b8080610baa9061340e565b915050610b8e565b50505050565b610bd3838383604051806020016040528060008152506111e4565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610bf882610ce9565b73ffffffffffffffffffffffffffffffffffffffff1614610c1857600080fd5b610c253361dead8361174a565b610c2f6008611a1e565b610c413367011c37937e080000611a34565b50565b610c4c61159d565b73ffffffffffffffffffffffffffffffffffffffff16610c6a610edb565b73ffffffffffffffffffffffffffffffffffffffff1614610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb790613042565b60405180910390fd5b8060099080519060200190610cd69291906121bb565b5050565b6000610ce46119bc565b905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8990612fc2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390612fa2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e5b61159d565b73ffffffffffffffffffffffffffffffffffffffff16610e79610edb565b73ffffffffffffffffffffffffffffffffffffffff1614610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec690613042565b60405180910390fd5b610ed96000611ae5565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f0d61159d565b73ffffffffffffffffffffffffffffffffffffffff16610f2b610edb565b73ffffffffffffffffffffffffffffffffffffffff1614610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890613042565b60405180910390fd5b610f89610edb565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fce573d6000803e3d6000fd5b50565b606060018054610fe0906133dc565b80601f016020809104026020016040519081016040528092919081815260200182805461100c906133dc565b80156110595780601f1061102e57610100808354040283529160200191611059565b820191906000526020600020905b81548152906001019060200180831161103c57829003601f168201915b5050505050905090565b61106b61159d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d090612f22565b60405180910390fd5b80600560006110e661159d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661119361159d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111d89190612e65565b60405180910390a35050565b6111f56111ef61159d565b8361166c565b611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b906130e2565b60405180910390fd5b61124084848484611bab565b50505050565b67011c37937e08000081565b6060600961125f83611c07565b604051602001611270929190612dc5565b6040516020818303038152906040529050919050565b60098054611293906133dc565b80601f01602080910402602001604051908101604052809291908181526020018280546112bf906133dc565b801561130c5780601f106112e15761010080835404028352916020019161130c565b820191906000526020600020905b8154815290600101906020018083116112ef57829003601f168201915b505050505081565b600061131e611db4565b905090565b73fe293364485177fec545069b60f02752a8f4fcbe81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113d761159d565b73ffffffffffffffffffffffffffffffffffffffff166113f5610edb565b73ffffffffffffffffffffffffffffffffffffffff161461144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290613042565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290612ec2565b60405180910390fd5b6114c481611ae5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661161883610ce9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061167782611531565b6116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90612f62565b60405180910390fd5b60006116c183610ce9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061173057508373ffffffffffffffffffffffffffffffffffffffff166117188461081b565b73ffffffffffffffffffffffffffffffffffffffff16145b806117415750611740818561133b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661176a82610ce9565b73ffffffffffffffffffffffffffffffffffffffff16146117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b790613062565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182790612f02565b60405180910390fd5b61183b838383611dc5565b6118466000826115a5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461189691906132f2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118ed9190613211565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836119b49190613298565b905092915050565b60006119c8600761165e565b905090565b60006119d76119bc565b90506119e36007611a1e565b6119ed8282611dca565b807f9fe6fe6ad525a7eed0eea1ebea916e25adcbdfdb7872c9df078f9635f07c542060405160405180910390a25050565b6001816000016000828254019250508190555050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611a5a90612de9565b60006040518083038185875af1925050503d8060008114611a97576040519150601f19603f3d011682016040523d82523d6000602084013e611a9c565b606091505b5050905080611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad7906130c2565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611bb684848461174a565b611bc284848484611de8565b611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf890612ea2565b60405180910390fd5b50505050565b60606000821415611c4f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611daf565b600082905060005b60008214611c81578080611c6a9061340e565b915050600a82611c7a9190613267565b9150611c57565b60008167ffffffffffffffff811115611cc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611cf55781602001600182028036833780820191505090505b5090505b60008514611da857600182611d0e91906132f2565b9150600a85611d1d9190613457565b6030611d299190613211565b60f81b818381518110611d65577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611da19190613267565b9450611cf9565b8093505050505b919050565b6000611dc0600861165e565b905090565b505050565b611de4828260405180602001604052806000815250611f7f565b5050565b6000611e098473ffffffffffffffffffffffffffffffffffffffff16611fda565b15611f72578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e3261159d565b8786866040518563ffffffff1660e01b8152600401611e549493929190612e19565b602060405180830381600087803b158015611e6e57600080fd5b505af1925050508015611e9f57506040513d601f19601f82011682018060405250810190611e9c9190612567565b60015b611f22573d8060008114611ecf576040519150601f19603f3d011682016040523d82523d6000602084013e611ed4565b606091505b50600081511415611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190612ea2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f77565b600190505b949350505050565b611f898383611fed565b611f966000848484611de8565b611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc90612ea2565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490612fe2565b60405180910390fd5b61206681611531565b156120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90612ee2565b60405180910390fd5b6120b260008383611dc5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121029190613211565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546121c7906133dc565b90600052602060002090601f0160209004810192826121e95760008555612230565b82601f1061220257805160ff1916838001178555612230565b82800160010185558215612230579182015b8281111561222f578251825591602001919060010190612214565b5b50905061223d9190612241565b5090565b5b8082111561225a576000816000905550600101612242565b5090565b600061227161226c8461314e565b61311d565b90508281526020810184848401111561228957600080fd5b61229484828561339a565b509392505050565b60006122af6122aa8461317e565b61311d565b9050828152602081018484840111156122c757600080fd5b6122d284828561339a565b509392505050565b6000813590506122e981613555565b92915050565b6000813590506122fe8161356c565b92915050565b60008135905061231381613583565b92915050565b60008151905061232881613583565b92915050565b600082601f83011261233f57600080fd5b813561234f84826020860161225e565b91505092915050565b600082601f83011261236957600080fd5b813561237984826020860161229c565b91505092915050565b6000813590506123918161359a565b92915050565b6000602082840312156123a957600080fd5b60006123b7848285016122da565b91505092915050565b600080604083850312156123d357600080fd5b60006123e1858286016122da565b92505060206123f2858286016122da565b9150509250929050565b60008060006060848603121561241157600080fd5b600061241f868287016122da565b9350506020612430868287016122da565b925050604061244186828701612382565b9150509250925092565b6000806000806080858703121561246157600080fd5b600061246f878288016122da565b9450506020612480878288016122da565b935050604061249187828801612382565b925050606085013567ffffffffffffffff8111156124ae57600080fd5b6124ba8782880161232e565b91505092959194509250565b600080604083850312156124d957600080fd5b60006124e7858286016122da565b92505060206124f8858286016122ef565b9150509250929050565b6000806040838503121561251557600080fd5b6000612523858286016122da565b925050602061253485828601612382565b9150509250929050565b60006020828403121561255057600080fd5b600061255e84828501612304565b91505092915050565b60006020828403121561257957600080fd5b600061258784828501612319565b91505092915050565b6000602082840312156125a257600080fd5b600082013567ffffffffffffffff8111156125bc57600080fd5b6125c884828501612358565b91505092915050565b6000602082840312156125e357600080fd5b60006125f184828501612382565b91505092915050565b61260381613326565b82525050565b61261281613338565b82525050565b6000612623826131c3565b61262d81856131d9565b935061263d8185602086016133a9565b61264681613544565b840191505092915050565b600061265c826131ce565b61266681856131f5565b93506126768185602086016133a9565b61267f81613544565b840191505092915050565b6000612695826131ce565b61269f8185613206565b93506126af8185602086016133a9565b80840191505092915050565b600081546126c8816133dc565b6126d28186613206565b945060018216600081146126ed57600181146126fe57612731565b60ff19831686528186019350612731565b612707856131ae565b60005b838110156127295781548189015260018201915060208101905061270a565b838801955050505b50505092915050565b60006127476032836131f5565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006127ad6026836131f5565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612813601c836131f5565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006128536024836131f5565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006128b96019836131f5565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006128f96009836131f5565b91507f4d6178206c696d697400000000000000000000000000000000000000000000006000830152602082019050919050565b6000612939602c836131f5565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061299f6038836131f5565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612a05602a836131f5565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612a6b6029836131f5565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ad16020836131f5565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612b116008836131f5565b91507f53616c6520656e640000000000000000000000000000000000000000000000006000830152602082019050919050565b6000612b51602c836131f5565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612bb76020836131f5565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612bf76029836131f5565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c5d6011836131f5565b91507f56616c75652062656c6f772070726963650000000000000000000000000000006000830152602082019050919050565b6000612c9d6021836131f5565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d036000836131ea565b9150600082019050919050565b6000612d1d6010836131f5565b91507f5472616e73666572206661696c65642e000000000000000000000000000000006000830152602082019050919050565b6000612d5d6031836131f5565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b612dbf81613390565b82525050565b6000612dd182856126bb565b9150612ddd828461268a565b91508190509392505050565b6000612df482612cf6565b9150819050919050565b6000602082019050612e1360008301846125fa565b92915050565b6000608082019050612e2e60008301876125fa565b612e3b60208301866125fa565b612e486040830185612db6565b8181036060830152612e5a8184612618565b905095945050505050565b6000602082019050612e7a6000830184612609565b92915050565b60006020820190508181036000830152612e9a8184612651565b905092915050565b60006020820190508181036000830152612ebb8161273a565b9050919050565b60006020820190508181036000830152612edb816127a0565b9050919050565b60006020820190508181036000830152612efb81612806565b9050919050565b60006020820190508181036000830152612f1b81612846565b9050919050565b60006020820190508181036000830152612f3b816128ac565b9050919050565b60006020820190508181036000830152612f5b816128ec565b9050919050565b60006020820190508181036000830152612f7b8161292c565b9050919050565b60006020820190508181036000830152612f9b81612992565b9050919050565b60006020820190508181036000830152612fbb816129f8565b9050919050565b60006020820190508181036000830152612fdb81612a5e565b9050919050565b60006020820190508181036000830152612ffb81612ac4565b9050919050565b6000602082019050818103600083015261301b81612b04565b9050919050565b6000602082019050818103600083015261303b81612b44565b9050919050565b6000602082019050818103600083015261305b81612baa565b9050919050565b6000602082019050818103600083015261307b81612bea565b9050919050565b6000602082019050818103600083015261309b81612c50565b9050919050565b600060208201905081810360008301526130bb81612c90565b9050919050565b600060208201905081810360008301526130db81612d10565b9050919050565b600060208201905081810360008301526130fb81612d50565b9050919050565b60006020820190506131176000830184612db6565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561314457613143613515565b5b8060405250919050565b600067ffffffffffffffff82111561316957613168613515565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561319957613198613515565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061321c82613390565b915061322783613390565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561325c5761325b613488565b5b828201905092915050565b600061327282613390565b915061327d83613390565b92508261328d5761328c6134b7565b5b828204905092915050565b60006132a382613390565b91506132ae83613390565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156132e7576132e6613488565b5b828202905092915050565b60006132fd82613390565b915061330883613390565b92508282101561331b5761331a613488565b5b828203905092915050565b600061333182613370565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156133c75780820151818401526020810190506133ac565b838111156133d6576000848401525b50505050565b600060028204905060018216806133f457607f821691505b60208210811415613408576134076134e6565b5b50919050565b600061341982613390565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561344c5761344b613488565b5b600182019050919050565b600061346282613390565b915061346d83613390565b92508261347d5761347c6134b7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61355e81613326565b811461356957600080fd5b50565b61357581613338565b811461358057600080fd5b50565b61358c81613344565b811461359757600080fd5b50565b6135a381613390565b81146135ae57600080fd5b5056fea2646970667358221220b2872476f9c3e3d34b517eba9718b1a782063a118d347a57b89f0fc9bb5e9ab364736f6c63430008000033
Deployed Bytecode Sourcemap
43658:3201:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31459:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32404:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33963:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33486:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44384:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34853:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45462:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43947:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45054:396;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35263:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46259:408;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45781:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44834:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32098:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31828:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13094:94;;;;;;;;;;;;;:::i;:::-;;12443:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44937:105;;;;;;;;;;;;;:::i;:::-;;32573:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34256:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35519:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44001:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45957:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43912:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44733:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44061:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34622:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13343:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31459:305;31561:4;31613:25;31598:40;;;:11;:40;;;;:105;;;;31670:33;31655:48;;;:11;:48;;;;31598:105;:158;;;;31720:36;31744:11;31720:23;:36::i;:::-;31598:158;31578:178;;31459:305;;;:::o;32404:100::-;32458:13;32491:5;32484:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32404:100;:::o;33963:221::-;34039:7;34067:16;34075:7;34067;:16::i;:::-;34059:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34152:15;:24;34168:7;34152:24;;;;;;;;;;;;;;;;;;;;;34145:31;;33963:221;;;:::o;33486:411::-;33567:13;33583:23;33598:7;33583:14;:23::i;:::-;33567:39;;33631:5;33625:11;;:2;:11;;;;33617:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33725:5;33709:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33734:37;33751:5;33758:12;:10;:12::i;:::-;33734:16;:37::i;:::-;33709:62;33687:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33868:21;33877:2;33881:7;33868:8;:21::i;:::-;33486:411;;;:::o;44384:104::-;44428:7;44455:25;:15;:23;:25::i;:::-;44448:32;;44384:104;:::o;34853:339::-;35048:41;35067:12;:10;:12::i;:::-;35081:7;35048:18;:41::i;:::-;35040:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35156:28;35166:4;35172:2;35176:7;35156:9;:28::i;:::-;34853:339;;;:::o;45462:109::-;45514:7;45541:22;45556:6;44038:10;45541:14;;:22;;;;:::i;:::-;45534:29;;45462:109;;;:::o;43947:43::-;43986:4;43947:43;:::o;45054:396::-;43986:4;44313:14;:12;:14::i;:::-;:30;;44305:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;45134:13:::1;45150:14;:12;:14::i;:::-;45134:30;;43986:4;45191:6;45183:5;:14;;;;:::i;:::-;:30;;45175:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;43986:4;45246:5;:21;;45238:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;45312:13;45318:6;45312:5;:13::i;:::-;45299:9;:26;;45291:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;45365:9;45360:83;45384:6;45380:1;:10;45360:83;;;45412:19;45427:3;45412:14;:19::i;:::-;45392:3;;;;;:::i;:::-;;;;45360:83;;;;44367:1;45054:396:::0;;:::o;35263:185::-;35401:39;35418:4;35424:2;35428:7;35401:39;;;;;;;;;;;;:16;:39::i;:::-;35263:185;;;:::o;46259:408::-;46338:10;46317:31;;:17;46325:8;46317:7;:17::i;:::-;:31;;;46309:40;;;;;;46384:125;46408:10;46433:42;46490:8;46384:9;:125::i;:::-;46557:26;:14;:24;:26::i;:::-;46625:34;46636:10;44038;46625;:34::i;:::-;46259:408;:::o;45781:101::-;12674:12;:10;:12::i;:::-;12663:23;;:7;:5;:7::i;:::-;:23;;;12655:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45867:7:::1;45852:12;:22;;;;;;;;;;;;:::i;:::-;;45781:101:::0;:::o;44834:91::-;44876:7;44903:14;:12;:14::i;:::-;44896:21;;44834:91;:::o;32098:239::-;32170:7;32190:13;32206:7;:16;32214:7;32206:16;;;;;;;;;;;;;;;;;;;;;32190:32;;32258:1;32241:19;;:5;:19;;;;32233:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32324:5;32317:12;;;32098:239;;;:::o;31828:208::-;31900:7;31945:1;31928:19;;:5;:19;;;;31920:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32012:9;:16;32022:5;32012:16;;;;;;;;;;;;;;;;32005:23;;31828:208;;;:::o;13094:94::-;12674:12;:10;:12::i;:::-;12663:23;;:7;:5;:7::i;:::-;:23;;;12655:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13159:21:::1;13177:1;13159:9;:21::i;:::-;13094:94::o:0;12443:87::-;12489:7;12516:6;;;;;;;;;;;12509:13;;12443:87;:::o;44937:105::-;12674:12;:10;:12::i;:::-;12663:23;;:7;:5;:7::i;:::-;:23;;;12655:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44994:7:::1;:5;:7::i;:::-;44986:25;;:48;45012:21;44986:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44937:105::o:0;32573:104::-;32629:13;32662:7;32655:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32573:104;:::o;34256:295::-;34371:12;:10;:12::i;:::-;34359:24;;:8;:24;;;;34351:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34471:8;34426:18;:32;34445:12;:10;:12::i;:::-;34426:32;;;;;;;;;;;;;;;:42;34459:8;34426:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34524:8;34495:48;;34510:12;:10;:12::i;:::-;34495:48;;;34534:8;34495:48;;;;;;:::i;:::-;;;;;;;;34256:295;;:::o;35519:328::-;35694:41;35713:12;:10;:12::i;:::-;35727:7;35694:18;:41::i;:::-;35686:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35800:39;35814:4;35820:2;35824:7;35833:5;35800:13;:39::i;:::-;35519:328;;;;:::o;44001:47::-;44038:10;44001:47;:::o;45957:166::-;46023:13;46080:12;46094:19;:8;:17;:19::i;:::-;46063:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46049:66;;45957:166;;;:::o;43912:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44733:93::-;44777:7;44804:14;:12;:14::i;:::-;44797:21;;44733:93;:::o;44061:92::-;44111:42;44061:92;:::o;34622:164::-;34719:4;34743:18;:25;34762:5;34743:25;;;;;;;;;;;;;;;:35;34769:8;34743:35;;;;;;;;;;;;;;;;;;;;;;;;;34736:42;;34622:164;;;;:::o;13343:192::-;12674:12;:10;:12::i;:::-;12663:23;;:7;:5;:7::i;:::-;:23;;;12655:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13452:1:::1;13432:22;;:8;:22;;;;13424:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13508:19;13518:8;13508:9;:19::i;:::-;13343:192:::0;:::o;24429:157::-;24514:4;24553:25;24538:40;;;:11;:40;;;;24531:47;;24429:157;;;:::o;37357:127::-;37422:4;37474:1;37446:30;;:7;:16;37454:7;37446:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37439:37;;37357:127;;;:::o;11231:98::-;11284:7;11311:10;11304:17;;11231:98;:::o;41339:174::-;41441:2;41414:15;:24;41430:7;41414:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41497:7;41493:2;41459:46;;41468:23;41483:7;41468:14;:23::i;:::-;41459:46;;;;;;;;;;;;41339:174;;:::o;986:114::-;1051:7;1078;:14;;;1071:21;;986:114;;;:::o;37651:348::-;37744:4;37769:16;37777:7;37769;:16::i;:::-;37761:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37845:13;37861:23;37876:7;37861:14;:23::i;:::-;37845:39;;37914:5;37903:16;;:7;:16;;;:51;;;;37947:7;37923:31;;:20;37935:7;37923:11;:20::i;:::-;:31;;;37903:51;:87;;;;37958:32;37975:5;37982:7;37958:16;:32::i;:::-;37903:87;37895:96;;;37651:348;;;;:::o;40643:578::-;40802:4;40775:31;;:23;40790:7;40775:14;:23::i;:::-;:31;;;40767:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40885:1;40871:16;;:2;:16;;;;40863:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40941:39;40962:4;40968:2;40972:7;40941:20;:39::i;:::-;41045:29;41062:1;41066:7;41045:8;:29::i;:::-;41106:1;41087:9;:15;41097:4;41087:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41135:1;41118:9;:13;41128:2;41118:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41166:2;41147:7;:16;41155:7;41147:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41205:7;41201:2;41186:27;;41195:4;41186:27;;;;;;;;;;;;40643:578;;;:::o;5109:98::-;5167:7;5198:1;5194;:5;;;;:::i;:::-;5187:12;;5109:98;;;;:::o;44496:107::-;44543:7;44570:25;:15;:23;:25::i;:::-;44563:32;;44496:107;:::o;45579:194::-;45635:10;45648:14;:12;:14::i;:::-;45635:27;;45673;:15;:25;:27::i;:::-;45711:18;45721:3;45726:2;45711:9;:18::i;:::-;45762:2;45745:20;;;;;;;;;;45579:194;;:::o;1108:127::-;1215:1;1197:7;:14;;;:19;;;;;;;;;;;1108:127;:::o;46675:181::-;46750:12;46768:8;:13;;46789:7;46768:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46749:52;;;46820:7;46812:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;46675:181;;;:::o;13543:173::-;13599:16;13618:6;;;;;;;;;;;13599:25;;13644:8;13635:6;;:17;;;;;;;;;;;;;;;;;;13699:8;13668:40;;13689:8;13668:40;;;;;;;;;;;;13543:173;;:::o;36729:315::-;36886:28;36896:4;36902:2;36906:7;36886:9;:28::i;:::-;36933:48;36956:4;36962:2;36966:7;36975:5;36933:22;:48::i;:::-;36925:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36729:315;;;;:::o;8847:723::-;8903:13;9133:1;9124:5;:10;9120:53;;;9151:10;;;;;;;;;;;;;;;;;;;;;9120:53;9183:12;9198:5;9183:20;;9214:14;9239:78;9254:1;9246:4;:9;9239:78;;9272:8;;;;;:::i;:::-;;;;9303:2;9295:10;;;;;:::i;:::-;;;9239:78;;;9327:19;9359:6;9349:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9327:39;;9377:154;9393:1;9384:5;:10;9377:154;;9421:1;9411:11;;;;;:::i;:::-;;;9488:2;9480:5;:10;;;;:::i;:::-;9467:2;:24;;;;:::i;:::-;9454:39;;9437:6;9444;9437:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;9517:2;9508:11;;;;;:::i;:::-;;;9377:154;;;9555:6;9541:21;;;;;8847:723;;;;:::o;44615:106::-;44662:7;44689:24;:14;:22;:24::i;:::-;44682:31;;44615:106;:::o;43449:126::-;;;;:::o;38341:110::-;38417:26;38427:2;38431:7;38417:26;;;;;;;;;;;;:9;:26::i;:::-;38341:110;;:::o;42078:799::-;42233:4;42254:15;:2;:13;;;:15::i;:::-;42250:620;;;42306:2;42290:36;;;42327:12;:10;:12::i;:::-;42341:4;42347:7;42356:5;42290:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42286:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42549:1;42532:6;:13;:18;42528:272;;;42575:60;;;;;;;;;;:::i;:::-;;;;;;;;42528:272;42750:6;42744:13;42735:6;42731:2;42727:15;42720:38;42286:529;42423:41;;;42413:51;;;:6;:51;;;;42406:58;;;;;42250:620;42854:4;42847:11;;42078:799;;;;;;;:::o;38678:321::-;38808:18;38814:2;38818:7;38808:5;:18::i;:::-;38859:54;38890:1;38894:2;38898:7;38907:5;38859:22;:54::i;:::-;38837:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38678:321;;;:::o;14489:387::-;14549:4;14757:12;14824:7;14812:20;14804:28;;14867:1;14860:4;:8;14853:15;;;14489:387;;;:::o;39335:382::-;39429:1;39415:16;;:2;:16;;;;39407:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39488:16;39496:7;39488;:16::i;:::-;39487:17;39479:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39550:45;39579:1;39583:2;39587:7;39550:20;:45::i;:::-;39625:1;39608:9;:13;39618:2;39608:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39656:2;39637:7;:16;39645:7;39637:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39701:7;39697:2;39676:33;;39693:1;39676:33;;;;;;;;;;;;39335:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:260::-;;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:52;5116:7;5107:6;5096:9;5092:22;5072:52;:::i;:::-;5062:62;;5018:116;4946:195;;;;:::o;5147:282::-;;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5281:1;5278;5271:12;5233:2;5324:1;5349:63;5404:7;5395:6;5384:9;5380:22;5349:63;:::i;:::-;5339:73;;5295:127;5223:206;;;;:::o;5435:375::-;;5553:2;5541:9;5532:7;5528:23;5524:32;5521:2;;;5569:1;5566;5559:12;5521:2;5640:1;5629:9;5625:17;5612:31;5670:18;5662:6;5659:30;5656:2;;;5702:1;5699;5692:12;5656:2;5730:63;5785:7;5776:6;5765:9;5761:22;5730:63;:::i;:::-;5720:73;;5583:220;5511:299;;;;:::o;5816:262::-;;5924:2;5912:9;5903:7;5899:23;5895:32;5892:2;;;5940:1;5937;5930:12;5892:2;5983:1;6008:53;6053:7;6044:6;6033:9;6029:22;6008:53;:::i;:::-;5998:63;;5954:117;5882:196;;;;:::o;6084:118::-;6171:24;6189:5;6171:24;:::i;:::-;6166:3;6159:37;6149:53;;:::o;6208:109::-;6289:21;6304:5;6289:21;:::i;:::-;6284:3;6277:34;6267:50;;:::o;6323:360::-;;6437:38;6469:5;6437:38;:::i;:::-;6491:70;6554:6;6549:3;6491:70;:::i;:::-;6484:77;;6570:52;6615:6;6610:3;6603:4;6596:5;6592:16;6570:52;:::i;:::-;6647:29;6669:6;6647:29;:::i;:::-;6642:3;6638:39;6631:46;;6413:270;;;;;:::o;6689:364::-;;6805:39;6838:5;6805:39;:::i;:::-;6860:71;6924:6;6919:3;6860:71;:::i;:::-;6853:78;;6940:52;6985:6;6980:3;6973:4;6966:5;6962:16;6940:52;:::i;:::-;7017:29;7039:6;7017:29;:::i;:::-;7012:3;7008:39;7001:46;;6781:272;;;;;:::o;7059:377::-;;7193:39;7226:5;7193:39;:::i;:::-;7248:89;7330:6;7325:3;7248:89;:::i;:::-;7241:96;;7346:52;7391:6;7386:3;7379:4;7372:5;7368:16;7346:52;:::i;:::-;7423:6;7418:3;7414:16;7407:23;;7169:267;;;;;:::o;7466:845::-;;7606:5;7600:12;7635:36;7661:9;7635:36;:::i;:::-;7687:89;7769:6;7764:3;7687:89;:::i;:::-;7680:96;;7807:1;7796:9;7792:17;7823:1;7818:137;;;;7969:1;7964:341;;;;7785:520;;7818:137;7902:4;7898:9;7887;7883:25;7878:3;7871:38;7938:6;7933:3;7929:16;7922:23;;7818:137;;7964:341;8031:38;8063:5;8031:38;:::i;:::-;8091:1;8105:154;8119:6;8116:1;8113:13;8105:154;;;8193:7;8187:14;8183:1;8178:3;8174:11;8167:35;8243:1;8234:7;8230:15;8219:26;;8141:4;8138:1;8134:12;8129:17;;8105:154;;;8288:6;8283:3;8279:16;8272:23;;7971:334;;7785:520;;7573:738;;;;;;:::o;8317:382::-;;8480:67;8544:2;8539:3;8480:67;:::i;:::-;8473:74;;8577:34;8573:1;8568:3;8564:11;8557:55;8643:20;8638:2;8633:3;8629:12;8622:42;8690:2;8685:3;8681:12;8674:19;;8463:236;;;:::o;8705:370::-;;8868:67;8932:2;8927:3;8868:67;:::i;:::-;8861:74;;8965:34;8961:1;8956:3;8952:11;8945:55;9031:8;9026:2;9021:3;9017:12;9010:30;9066:2;9061:3;9057:12;9050:19;;8851:224;;;:::o;9081:326::-;;9244:67;9308:2;9303:3;9244:67;:::i;:::-;9237:74;;9341:30;9337:1;9332:3;9328:11;9321:51;9398:2;9393:3;9389:12;9382:19;;9227:180;;;:::o;9413:368::-;;9576:67;9640:2;9635:3;9576:67;:::i;:::-;9569:74;;9673:34;9669:1;9664:3;9660:11;9653:55;9739:6;9734:2;9729:3;9725:12;9718:28;9772:2;9767:3;9763:12;9756:19;;9559:222;;;:::o;9787:323::-;;9950:67;10014:2;10009:3;9950:67;:::i;:::-;9943:74;;10047:27;10043:1;10038:3;10034:11;10027:48;10101:2;10096:3;10092:12;10085:19;;9933:177;;;:::o;10116:306::-;;10279:66;10343:1;10338:3;10279:66;:::i;:::-;10272:73;;10375:11;10371:1;10366:3;10362:11;10355:32;10413:2;10408:3;10404:12;10397:19;;10262:160;;;:::o;10428:376::-;;10591:67;10655:2;10650:3;10591:67;:::i;:::-;10584:74;;10688:34;10684:1;10679:3;10675:11;10668:55;10754:14;10749:2;10744:3;10740:12;10733:36;10795:2;10790:3;10786:12;10779:19;;10574:230;;;:::o;10810:388::-;;10973:67;11037:2;11032:3;10973:67;:::i;:::-;10966:74;;11070:34;11066:1;11061:3;11057:11;11050:55;11136:26;11131:2;11126:3;11122:12;11115:48;11189:2;11184:3;11180:12;11173:19;;10956:242;;;:::o;11204:374::-;;11367:67;11431:2;11426:3;11367:67;:::i;:::-;11360:74;;11464:34;11460:1;11455:3;11451:11;11444:55;11530:12;11525:2;11520:3;11516:12;11509:34;11569:2;11564:3;11560:12;11553:19;;11350:228;;;:::o;11584:373::-;;11747:67;11811:2;11806:3;11747:67;:::i;:::-;11740:74;;11844:34;11840:1;11835:3;11831:11;11824:55;11910:11;11905:2;11900:3;11896:12;11889:33;11948:2;11943:3;11939:12;11932:19;;11730:227;;;:::o;11963:330::-;;12126:67;12190:2;12185:3;12126:67;:::i;:::-;12119:74;;12223:34;12219:1;12214:3;12210:11;12203:55;12284:2;12279:3;12275:12;12268:19;;12109:184;;;:::o;12299:305::-;;12462:66;12526:1;12521:3;12462:66;:::i;:::-;12455:73;;12558:10;12554:1;12549:3;12545:11;12538:31;12595:2;12590:3;12586:12;12579:19;;12445:159;;;:::o;12610:376::-;;12773:67;12837:2;12832:3;12773:67;:::i;:::-;12766:74;;12870:34;12866:1;12861:3;12857:11;12850:55;12936:14;12931:2;12926:3;12922:12;12915:36;12977:2;12972:3;12968:12;12961:19;;12756:230;;;:::o;12992:330::-;;13155:67;13219:2;13214:3;13155:67;:::i;:::-;13148:74;;13252:34;13248:1;13243:3;13239:11;13232:55;13313:2;13308:3;13304:12;13297:19;;13138:184;;;:::o;13328:373::-;;13491:67;13555:2;13550:3;13491:67;:::i;:::-;13484:74;;13588:34;13584:1;13579:3;13575:11;13568:55;13654:11;13649:2;13644:3;13640:12;13633:33;13692:2;13687:3;13683:12;13676:19;;13474:227;;;:::o;13707:315::-;;13870:67;13934:2;13929:3;13870:67;:::i;:::-;13863:74;;13967:19;13963:1;13958:3;13954:11;13947:40;14013:2;14008:3;14004:12;13997:19;;13853:169;;;:::o;14028:365::-;;14191:67;14255:2;14250:3;14191:67;:::i;:::-;14184:74;;14288:34;14284:1;14279:3;14275:11;14268:55;14354:3;14349:2;14344:3;14340:12;14333:25;14384:2;14379:3;14375:12;14368:19;;14174:219;;;:::o;14399:297::-;;14579:83;14660:1;14655:3;14579:83;:::i;:::-;14572:90;;14688:1;14683:3;14679:11;14672:18;;14562:134;;;:::o;14702:314::-;;14865:67;14929:2;14924:3;14865:67;:::i;:::-;14858:74;;14962:18;14958:1;14953:3;14949:11;14942:39;15007:2;15002:3;14998:12;14991:19;;14848:168;;;:::o;15022:381::-;;15185:67;15249:2;15244:3;15185:67;:::i;:::-;15178:74;;15282:34;15278:1;15273:3;15269:11;15262:55;15348:19;15343:2;15338:3;15334:12;15327:41;15394:2;15389:3;15385:12;15378:19;;15168:235;;;:::o;15409:118::-;15496:24;15514:5;15496:24;:::i;:::-;15491:3;15484:37;15474:53;;:::o;15533:429::-;;15732:92;15820:3;15811:6;15732:92;:::i;:::-;15725:99;;15841:95;15932:3;15923:6;15841:95;:::i;:::-;15834:102;;15953:3;15946:10;;15714:248;;;;;:::o;15968:379::-;;16174:147;16317:3;16174:147;:::i;:::-;16167:154;;16338:3;16331:10;;16156:191;;;:::o;16353:222::-;;16484:2;16473:9;16469:18;16461:26;;16497:71;16565:1;16554:9;16550:17;16541:6;16497:71;:::i;:::-;16451:124;;;;:::o;16581:640::-;;16814:3;16803:9;16799:19;16791:27;;16828:71;16896:1;16885:9;16881:17;16872:6;16828:71;:::i;:::-;16909:72;16977:2;16966:9;16962:18;16953:6;16909:72;:::i;:::-;16991;17059:2;17048:9;17044:18;17035:6;16991:72;:::i;:::-;17110:9;17104:4;17100:20;17095:2;17084:9;17080:18;17073:48;17138:76;17209:4;17200:6;17138:76;:::i;:::-;17130:84;;16781:440;;;;;;;:::o;17227:210::-;;17352:2;17341:9;17337:18;17329:26;;17365:65;17427:1;17416:9;17412:17;17403:6;17365:65;:::i;:::-;17319:118;;;;:::o;17443:313::-;;17594:2;17583:9;17579:18;17571:26;;17643:9;17637:4;17633:20;17629:1;17618:9;17614:17;17607:47;17671:78;17744:4;17735:6;17671:78;:::i;:::-;17663:86;;17561:195;;;;:::o;17762:419::-;;17966:2;17955:9;17951:18;17943:26;;18015:9;18009:4;18005:20;18001:1;17990:9;17986:17;17979:47;18043:131;18169:4;18043:131;:::i;:::-;18035:139;;17933:248;;;:::o;18187:419::-;;18391:2;18380:9;18376:18;18368:26;;18440:9;18434:4;18430:20;18426:1;18415:9;18411:17;18404:47;18468:131;18594:4;18468:131;:::i;:::-;18460:139;;18358:248;;;:::o;18612:419::-;;18816:2;18805:9;18801:18;18793:26;;18865:9;18859:4;18855:20;18851:1;18840:9;18836:17;18829:47;18893:131;19019:4;18893:131;:::i;:::-;18885:139;;18783:248;;;:::o;19037:419::-;;19241:2;19230:9;19226:18;19218:26;;19290:9;19284:4;19280:20;19276:1;19265:9;19261:17;19254:47;19318:131;19444:4;19318:131;:::i;:::-;19310:139;;19208:248;;;:::o;19462:419::-;;19666:2;19655:9;19651:18;19643:26;;19715:9;19709:4;19705:20;19701:1;19690:9;19686:17;19679:47;19743:131;19869:4;19743:131;:::i;:::-;19735:139;;19633:248;;;:::o;19887:419::-;;20091:2;20080:9;20076:18;20068:26;;20140:9;20134:4;20130:20;20126:1;20115:9;20111:17;20104:47;20168:131;20294:4;20168:131;:::i;:::-;20160:139;;20058:248;;;:::o;20312:419::-;;20516:2;20505:9;20501:18;20493:26;;20565:9;20559:4;20555:20;20551:1;20540:9;20536:17;20529:47;20593:131;20719:4;20593:131;:::i;:::-;20585:139;;20483:248;;;:::o;20737:419::-;;20941:2;20930:9;20926:18;20918:26;;20990:9;20984:4;20980:20;20976:1;20965:9;20961:17;20954:47;21018:131;21144:4;21018:131;:::i;:::-;21010:139;;20908:248;;;:::o;21162:419::-;;21366:2;21355:9;21351:18;21343:26;;21415:9;21409:4;21405:20;21401:1;21390:9;21386:17;21379:47;21443:131;21569:4;21443:131;:::i;:::-;21435:139;;21333:248;;;:::o;21587:419::-;;21791:2;21780:9;21776:18;21768:26;;21840:9;21834:4;21830:20;21826:1;21815:9;21811:17;21804:47;21868:131;21994:4;21868:131;:::i;:::-;21860:139;;21758:248;;;:::o;22012:419::-;;22216:2;22205:9;22201:18;22193:26;;22265:9;22259:4;22255:20;22251:1;22240:9;22236:17;22229:47;22293:131;22419:4;22293:131;:::i;:::-;22285:139;;22183:248;;;:::o;22437:419::-;;22641:2;22630:9;22626:18;22618:26;;22690:9;22684:4;22680:20;22676:1;22665:9;22661:17;22654:47;22718:131;22844:4;22718:131;:::i;:::-;22710:139;;22608:248;;;:::o;22862:419::-;;23066:2;23055:9;23051:18;23043:26;;23115:9;23109:4;23105:20;23101:1;23090:9;23086:17;23079:47;23143:131;23269:4;23143:131;:::i;:::-;23135:139;;23033:248;;;:::o;23287:419::-;;23491:2;23480:9;23476:18;23468:26;;23540:9;23534:4;23530:20;23526:1;23515:9;23511:17;23504:47;23568:131;23694:4;23568:131;:::i;:::-;23560:139;;23458:248;;;:::o;23712:419::-;;23916:2;23905:9;23901:18;23893:26;;23965:9;23959:4;23955:20;23951:1;23940:9;23936:17;23929:47;23993:131;24119:4;23993:131;:::i;:::-;23985:139;;23883:248;;;:::o;24137:419::-;;24341:2;24330:9;24326:18;24318:26;;24390:9;24384:4;24380:20;24376:1;24365:9;24361:17;24354:47;24418:131;24544:4;24418:131;:::i;:::-;24410:139;;24308:248;;;:::o;24562:419::-;;24766:2;24755:9;24751:18;24743:26;;24815:9;24809:4;24805:20;24801:1;24790:9;24786:17;24779:47;24843:131;24969:4;24843:131;:::i;:::-;24835:139;;24733:248;;;:::o;24987:419::-;;25191:2;25180:9;25176:18;25168:26;;25240:9;25234:4;25230:20;25226:1;25215:9;25211:17;25204:47;25268:131;25394:4;25268:131;:::i;:::-;25260:139;;25158:248;;;:::o;25412:419::-;;25616:2;25605:9;25601:18;25593:26;;25665:9;25659:4;25655:20;25651:1;25640:9;25636:17;25629:47;25693:131;25819:4;25693:131;:::i;:::-;25685:139;;25583:248;;;:::o;25837:222::-;;25968:2;25957:9;25953:18;25945:26;;25981:71;26049:1;26038:9;26034:17;26025:6;25981:71;:::i;:::-;25935:124;;;;:::o;26065:283::-;;26131:2;26125:9;26115:19;;26173:4;26165:6;26161:17;26280:6;26268:10;26265:22;26244:18;26232:10;26229:34;26226:62;26223:2;;;26291:18;;:::i;:::-;26223:2;26331:10;26327:2;26320:22;26105:243;;;;:::o;26354:331::-;;26505:18;26497:6;26494:30;26491:2;;;26527:18;;:::i;:::-;26491:2;26612:4;26608:9;26601:4;26593:6;26589:17;26585:33;26577:41;;26673:4;26667;26663:15;26655:23;;26420:265;;;:::o;26691:332::-;;26843:18;26835:6;26832:30;26829:2;;;26865:18;;:::i;:::-;26829:2;26950:4;26946:9;26939:4;26931:6;26927:17;26923:33;26915:41;;27011:4;27005;27001:15;26993:23;;26758:265;;;:::o;27029:141::-;;27101:3;27093:11;;27124:3;27121:1;27114:14;27158:4;27155:1;27145:18;27137:26;;27083:87;;;:::o;27176:98::-;;27261:5;27255:12;27245:22;;27234:40;;;:::o;27280:99::-;;27366:5;27360:12;27350:22;;27339:40;;;:::o;27385:168::-;;27502:6;27497:3;27490:19;27542:4;27537:3;27533:14;27518:29;;27480:73;;;;:::o;27559:147::-;;27697:3;27682:18;;27672:34;;;;:::o;27712:169::-;;27830:6;27825:3;27818:19;27870:4;27865:3;27861:14;27846:29;;27808:73;;;;:::o;27887:148::-;;28026:3;28011:18;;28001:34;;;;:::o;28041:305::-;;28100:20;28118:1;28100:20;:::i;:::-;28095:25;;28134:20;28152:1;28134:20;:::i;:::-;28129:25;;28288:1;28220:66;28216:74;28213:1;28210:81;28207:2;;;28294:18;;:::i;:::-;28207:2;28338:1;28335;28331:9;28324:16;;28085:261;;;;:::o;28352:185::-;;28409:20;28427:1;28409:20;:::i;:::-;28404:25;;28443:20;28461:1;28443:20;:::i;:::-;28438:25;;28482:1;28472:2;;28487:18;;:::i;:::-;28472:2;28529:1;28526;28522:9;28517:14;;28394:143;;;;:::o;28543:348::-;;28606:20;28624:1;28606:20;:::i;:::-;28601:25;;28640:20;28658:1;28640:20;:::i;:::-;28635:25;;28828:1;28760:66;28756:74;28753:1;28750:81;28745:1;28738:9;28731:17;28727:105;28724:2;;;28835:18;;:::i;:::-;28724:2;28883:1;28880;28876:9;28865:20;;28591:300;;;;:::o;28897:191::-;;28957:20;28975:1;28957:20;:::i;:::-;28952:25;;28991:20;29009:1;28991:20;:::i;:::-;28986:25;;29030:1;29027;29024:8;29021:2;;;29035:18;;:::i;:::-;29021:2;29080:1;29077;29073:9;29065:17;;28942:146;;;;:::o;29094:96::-;;29160:24;29178:5;29160:24;:::i;:::-;29149:35;;29139:51;;;:::o;29196:90::-;;29273:5;29266:13;29259:21;29248:32;;29238:48;;;:::o;29292:149::-;;29368:66;29361:5;29357:78;29346:89;;29336:105;;;:::o;29447:126::-;;29524:42;29517:5;29513:54;29502:65;;29492:81;;;:::o;29579:77::-;;29645:5;29634:16;;29624:32;;;:::o;29662:154::-;29746:6;29741:3;29736;29723:30;29808:1;29799:6;29794:3;29790:16;29783:27;29713:103;;;:::o;29822:307::-;29890:1;29900:113;29914:6;29911:1;29908:13;29900:113;;;29999:1;29994:3;29990:11;29984:18;29980:1;29975:3;29971:11;29964:39;29936:2;29933:1;29929:10;29924:15;;29900:113;;;30031:6;30028:1;30025:13;30022:2;;;30111:1;30102:6;30097:3;30093:16;30086:27;30022:2;29871:258;;;;:::o;30135:320::-;;30216:1;30210:4;30206:12;30196:22;;30263:1;30257:4;30253:12;30284:18;30274:2;;30340:4;30332:6;30328:17;30318:27;;30274:2;30402;30394:6;30391:14;30371:18;30368:38;30365:2;;;30421:18;;:::i;:::-;30365:2;30186:269;;;;:::o;30461:233::-;;30523:24;30541:5;30523:24;:::i;:::-;30514:33;;30569:66;30562:5;30559:77;30556:2;;;30639:18;;:::i;:::-;30556:2;30686:1;30679:5;30675:13;30668:20;;30504:190;;;:::o;30700:176::-;;30749:20;30767:1;30749:20;:::i;:::-;30744:25;;30783:20;30801:1;30783:20;:::i;:::-;30778:25;;30822:1;30812:2;;30827:18;;:::i;:::-;30812:2;30868:1;30865;30861:9;30856:14;;30734:142;;;;:::o;30882:180::-;30930:77;30927:1;30920:88;31027:4;31024:1;31017:15;31051:4;31048:1;31041:15;31068:180;31116:77;31113:1;31106:88;31213:4;31210:1;31203:15;31237:4;31234:1;31227:15;31254:180;31302:77;31299:1;31292:88;31399:4;31396:1;31389:15;31423:4;31420:1;31413:15;31440:180;31488:77;31485:1;31478:88;31585:4;31582:1;31575:15;31609:4;31606:1;31599:15;31626:102;;31718:2;31714:7;31709:2;31702:5;31698:14;31694:28;31684:38;;31674:54;;;:::o;31734:122::-;31807:24;31825:5;31807:24;:::i;:::-;31800:5;31797:35;31787:2;;31846:1;31843;31836:12;31787:2;31777:79;:::o;31862:116::-;31932:21;31947:5;31932:21;:::i;:::-;31925:5;31922:32;31912:2;;31968:1;31965;31958:12;31912:2;31902:76;:::o;31984:120::-;32056:23;32073:5;32056:23;:::i;:::-;32049:5;32046:34;32036:2;;32094:1;32091;32084:12;32036:2;32026:78;:::o;32110:122::-;32183:24;32201:5;32183:24;:::i;:::-;32176:5;32173:35;32163:2;;32222:1;32219;32212:12;32163:2;32153:79;:::o
Swarm Source
ipfs://b2872476f9c3e3d34b517eba9718b1a782063a118d347a57b89f0fc9bb5e9ab3
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.