ERC-721
Overview
Max Total Supply
367 HBC
Holders
190
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 HBCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HoboBeardClub
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-07 */ // File: @openzeppelin/[email protected]/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/[email protected]/access/Ownable.sol // SPDX-License-Identifier: MIT 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/[email protected]/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/[email protected]/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/[email protected]/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/[email protected]/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/[email protected]/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/[email protected]/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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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/[email protected]/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/[email protected]/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/[email protected]/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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/[email protected]/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/[email protected]/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: paymentsplit.sol pragma solidity ^0.8.0; contract HoboBeardClub is ERC721Enumerable, Ownable { using SafeMath for uint256; string public BEARDO_PROVENANCE; string private baseURI; uint256 public constant price = 80000000000000000; uint16 public MAX_BEARDOS = 10000; bool public saleIsActive = false; // 25% TO THE COMMUNITY WALLET address cwpayment = 0x25c9DE88361b2E83f7C82446C7CCca2a369327dd; /* * Holy Beardo Genesis */ constructor(string memory uri) ERC721("HoboBeardClub", "HBC") { setBaseURI(uri); } /* * Creation. Just mint yourself a beardo. */ function mintMyBeardo(address _to, uint _count) public payable { require(saleIsActive, "Sale is not active yet"); require(totalSupply() < MAX_BEARDOS, "Sale has ended"); require(totalSupply().add(_count) <= MAX_BEARDOS, "Purchase amount exceeds supply"); require(_count <= 20, "You can only mint 20 beardos per tx"); require(msg.value >= price.mul(_count), "Value below price"); for(uint i = 0; i < _count; i++){ _safeMint(_to, totalSupply()); } } /* * Light. The beardos might burn. */ function burnBeardos() public onlyOwner { MAX_BEARDOS = uint16(totalSupply()); } /* * Truth. Set provenance once it's calculated. */ function setProvenanceHash(string memory provenanceHash) public onlyOwner { BEARDO_PROVENANCE = provenanceHash; } /* * Seed. Start sale. */ function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; } /* * Growth. Set some beardos aside for giveaways and anyone who helped us along the way. */ function reserveTokens() public onlyOwner { require(totalSupply() == 0); for (uint i = 0; i < 30; i++) { _safeMint(msg.sender, i); } } function withdrawAll() public payable onlyOwner { require(payable(cwpayment).send(address(this).balance)); } function _baseURI() internal view override returns (string memory) { return baseURI; } function setBaseURI(string memory uri) public onlyOwner { baseURI = uri; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BEARDO_PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BEARDOS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"burnBeardos","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintMyBeardo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052612710600d60006101000a81548161ffff021916908361ffff1602179055506000600d60026101000a81548160ff0219169083151502179055507325c9de88361b2e83f7c82446c7ccca2a369327dd600d60036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000a057600080fd5b5060405162004824380380620048248339818101604052810190620000c691906200046f565b6040518060400160405280600d81526020017f486f626f4265617264436c7562000000000000000000000000000000000000008152506040518060400160405280600381526020017f484243000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200014a92919062000341565b5080600190805190602001906200016392919062000341565b505050620001866200017a6200019e60201b60201c565b620001a660201b60201c565b62000197816200026c60201b60201c565b50620006c7565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200027c6200019e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a26200031760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f290620004e7565b60405180910390fd5b80600c90805190602001906200031392919062000341565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200034f90620005af565b90600052602060002090601f016020900481019282620003735760008555620003bf565b82601f106200038e57805160ff1916838001178555620003bf565b82800160010185558215620003bf579182015b82811115620003be578251825591602001919060010190620003a1565b5b509050620003ce9190620003d2565b5090565b5b80821115620003ed576000816000905550600101620003d3565b5090565b600062000408620004028462000532565b62000509565b9050828152602081018484840111156200042757620004266200067e565b5b6200043484828562000579565b509392505050565b600082601f83011262000454576200045362000679565b5b815162000466848260208601620003f1565b91505092915050565b60006020828403121562000488576200048762000688565b5b600082015167ffffffffffffffff811115620004a957620004a862000683565b5b620004b7848285016200043c565b91505092915050565b6000620004cf60208362000568565b9150620004dc826200069e565b602082019050919050565b600060208201905081810360008301526200050281620004c0565b9050919050565b60006200051562000528565b9050620005238282620005e5565b919050565b6000604051905090565b600067ffffffffffffffff82111562000550576200054f6200064a565b5b6200055b826200068d565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005995780820151818401526020810190506200057c565b83811115620005a9576000848401525b50505050565b60006002820490506001821680620005c857607f821691505b60208210811415620005df57620005de6200061b565b5b50919050565b620005f0826200068d565b810181811067ffffffffffffffff821117156200061257620006116200064a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61414d80620006d76000396000f3fe6080604052600436106101cd5760003560e01c80636352211e116100f75780639a7447aa11610095578063c87b56dd11610064578063c87b56dd1461060e578063e985e9c51461064b578063eb8d244414610688578063f2fde38b146106b3576101cd565b80639a7447aa14610575578063a035b1fe14610591578063a22cb465146105bc578063b88d4fde146105e5576101cd565b806382d17de6116100d157806382d17de6146104ea578063853828b6146105155780638da5cb5b1461051f57806395d89b411461054a576101cd565b80636352211e1461045957806370a0823114610496578063715018a6146104d3576101cd565b80631e6aa1271161016f57806334918dfd1161013e57806334918dfd146103b357806342842e0e146103ca5780634f6ccce7146103f357806355f804b314610430576101cd565b80631e6aa1271461031f57806323b872dd1461033657806327ac36c41461035f5780632f745c5914610376576101cd565b806308f46179116101ab57806308f4617914610277578063095ea7b3146102a257806310969523146102cb57806318160ddd146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612d61565b6106dc565b60405161020691906132c0565b60405180910390f35b34801561021b57600080fd5b50610224610756565b60405161023191906132db565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190612e04565b6107e8565b60405161026e9190613259565b60405180910390f35b34801561028357600080fd5b5061028c61086d565b60405161029991906135dd565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190612d21565b610881565b005b3480156102d757600080fd5b506102f260048036038101906102ed9190612dbb565b610999565b005b34801561030057600080fd5b50610309610a2f565b60405161031691906135f8565b60405180910390f35b34801561032b57600080fd5b50610334610a3c565b005b34801561034257600080fd5b5061035d60048036038101906103589190612c0b565b610ade565b005b34801561036b57600080fd5b50610374610b3e565b005b34801561038257600080fd5b5061039d60048036038101906103989190612d21565b610bfa565b6040516103aa91906135f8565b60405180910390f35b3480156103bf57600080fd5b506103c8610c9f565b005b3480156103d657600080fd5b506103f160048036038101906103ec9190612c0b565b610d47565b005b3480156103ff57600080fd5b5061041a60048036038101906104159190612e04565b610d67565b60405161042791906135f8565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190612dbb565b610dd8565b005b34801561046557600080fd5b50610480600480360381019061047b9190612e04565b610e6e565b60405161048d9190613259565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190612b9e565b610f20565b6040516104ca91906135f8565b60405180910390f35b3480156104df57600080fd5b506104e8610fd8565b005b3480156104f657600080fd5b506104ff611060565b60405161050c91906132db565b60405180910390f35b61051d6110ee565b005b34801561052b57600080fd5b506105346111cc565b6040516105419190613259565b60405180910390f35b34801561055657600080fd5b5061055f6111f6565b60405161056c91906132db565b60405180910390f35b61058f600480360381019061058a9190612d21565b611288565b005b34801561059d57600080fd5b506105a6611479565b6040516105b391906135f8565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de9190612ce1565b611485565b005b3480156105f157600080fd5b5061060c60048036038101906106079190612c5e565b611606565b005b34801561061a57600080fd5b5061063560048036038101906106309190612e04565b611668565b60405161064291906132db565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190612bcb565b61170f565b60405161067f91906132c0565b60405180910390f35b34801561069457600080fd5b5061069d6117a3565b6040516106aa91906132c0565b60405180910390f35b3480156106bf57600080fd5b506106da60048036038101906106d59190612b9e565b6117b6565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074f575061074e826118ae565b5b9050919050565b606060008054610765906138b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610791906138b6565b80156107de5780601f106107b3576101008083540402835291602001916107de565b820191906000526020600020905b8154815290600101906020018083116107c157829003601f168201915b5050505050905090565b60006107f382611990565b610832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610829906134dd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d60009054906101000a900461ffff1681565b600061088c82610e6e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f49061357d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661091c6119fc565b73ffffffffffffffffffffffffffffffffffffffff16148061094b575061094a816109456119fc565b61170f565b5b61098a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109819061343d565b60405180910390fd5b6109948383611a04565b505050565b6109a16119fc565b73ffffffffffffffffffffffffffffffffffffffff166109bf6111cc565b73ffffffffffffffffffffffffffffffffffffffff1614610a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c906134fd565b60405180910390fd5b80600b9080519060200190610a2b9291906129b2565b5050565b6000600880549050905090565b610a446119fc565b73ffffffffffffffffffffffffffffffffffffffff16610a626111cc565b73ffffffffffffffffffffffffffffffffffffffff1614610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf906134fd565b60405180910390fd5b610ac0610a2f565b600d60006101000a81548161ffff021916908361ffff160217905550565b610aef610ae96119fc565b82611abd565b610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b259061359d565b60405180910390fd5b610b39838383611b9b565b505050565b610b466119fc565b73ffffffffffffffffffffffffffffffffffffffff16610b646111cc565b73ffffffffffffffffffffffffffffffffffffffff1614610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb1906134fd565b60405180910390fd5b6000610bc4610a2f565b14610bce57600080fd5b60005b601e811015610bf757610be43382611df7565b8080610bef90613919565b915050610bd1565b50565b6000610c0583610f20565b8210610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d906132fd565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ca76119fc565b73ffffffffffffffffffffffffffffffffffffffff16610cc56111cc565b73ffffffffffffffffffffffffffffffffffffffff1614610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d12906134fd565b60405180910390fd5b600d60029054906101000a900460ff1615600d60026101000a81548160ff021916908315150217905550565b610d6283838360405180602001604052806000815250611606565b505050565b6000610d71610a2f565b8210610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da9906135bd565b60405180910390fd5b60088281548110610dc657610dc5613a4f565b5b90600052602060002001549050919050565b610de06119fc565b73ffffffffffffffffffffffffffffffffffffffff16610dfe6111cc565b73ffffffffffffffffffffffffffffffffffffffff1614610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b906134fd565b60405180910390fd5b80600c9080519060200190610e6a9291906129b2565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e9061349d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f889061345d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fe06119fc565b73ffffffffffffffffffffffffffffffffffffffff16610ffe6111cc565b73ffffffffffffffffffffffffffffffffffffffff1614611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b906134fd565b60405180910390fd5b61105e6000611e15565b565b600b805461106d906138b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611099906138b6565b80156110e65780601f106110bb576101008083540402835291602001916110e6565b820191906000526020600020905b8154815290600101906020018083116110c957829003601f168201915b505050505081565b6110f66119fc565b73ffffffffffffffffffffffffffffffffffffffff166111146111cc565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611161906134fd565b60405180910390fd5b600d60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506111ca57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611205906138b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611231906138b6565b801561127e5780601f106112535761010080835404028352916020019161127e565b820191906000526020600020905b81548152906001019060200180831161126157829003601f168201915b5050505050905090565b600d60029054906101000a900460ff166112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce9061337d565b60405180910390fd5b600d60009054906101000a900461ffff1661ffff166112f4610a2f565b10611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b9061339d565b60405180910390fd5b600d60009054906101000a900461ffff1661ffff1661136382611355610a2f565b611edb90919063ffffffff16565b11156113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b906133fd565b60405180910390fd5b60148111156113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df9061347d565b60405180910390fd5b6114038167011c37937e080000611ef190919063ffffffff16565b341015611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c9061355d565b60405180910390fd5b60005b81811015611474576114618361145c610a2f565b611df7565b808061146c90613919565b915050611448565b505050565b67011c37937e08000081565b61148d6119fc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f2906133dd565b60405180910390fd5b80600560006115086119fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115b56119fc565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115fa91906132c0565b60405180910390a35050565b6116176116116119fc565b83611abd565b611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d9061359d565b60405180910390fd5b61166284848484611f07565b50505050565b606061167382611990565b6116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a99061353d565b60405180910390fd5b60006116bc611f63565b905060008151116116dc5760405180602001604052806000815250611707565b806116e684611ff5565b6040516020016116f7929190613235565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d60029054906101000a900460ff1681565b6117be6119fc565b73ffffffffffffffffffffffffffffffffffffffff166117dc6111cc565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611829906134fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118999061333d565b60405180910390fd5b6118ab81611e15565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061197957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611989575061198882612156565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a7783610e6e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ac882611990565b611b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afe9061341d565b60405180910390fd5b6000611b1283610e6e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b8157508373ffffffffffffffffffffffffffffffffffffffff16611b69846107e8565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b925750611b91818561170f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611bbb82610e6e565b73ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c089061351d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c78906133bd565b60405180910390fd5b611c8c8383836121c0565b611c97600082611a04565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ce791906137be565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d3e91906136dd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611e118282604051806020016040528060008152506122d4565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611ee991906136dd565b905092915050565b60008183611eff9190613764565b905092915050565b611f12848484611b9b565b611f1e8484848461232f565b611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f549061331d565b60405180910390fd5b50505050565b6060600c8054611f72906138b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9e906138b6565b8015611feb5780601f10611fc057610100808354040283529160200191611feb565b820191906000526020600020905b815481529060010190602001808311611fce57829003601f168201915b5050505050905090565b6060600082141561203d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612151565b600082905060005b6000821461206f57808061205890613919565b915050600a826120689190613733565b9150612045565b60008167ffffffffffffffff81111561208b5761208a613a7e565b5b6040519080825280601f01601f1916602001820160405280156120bd5781602001600182028036833780820191505090505b5090505b6000851461214a576001826120d691906137be565b9150600a856120e59190613962565b60306120f191906136dd565b60f81b81838151811061210757612106613a4f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121439190613733565b94506120c1565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121cb8383836124c6565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561220e57612209816124cb565b61224d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461224c5761224b8382612514565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122905761228b81612681565b6122cf565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122ce576122cd8282612752565b5b5b505050565b6122de83836127d1565b6122eb600084848461232f565b61232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123219061331d565b60405180910390fd5b505050565b60006123508473ffffffffffffffffffffffffffffffffffffffff1661299f565b156124b9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123796119fc565b8786866040518563ffffffff1660e01b815260040161239b9493929190613274565b602060405180830381600087803b1580156123b557600080fd5b505af19250505080156123e657506040513d601f19601f820116820180604052508101906123e39190612d8e565b60015b612469573d8060008114612416576040519150601f19603f3d011682016040523d82523d6000602084013e61241b565b606091505b50600081511415612461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124589061331d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124be565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161252184610f20565b61252b91906137be565b9050600060076000848152602001908152602001600020549050818114612610576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061269591906137be565b90506000600960008481526020019081526020016000205490506000600883815481106126c5576126c4613a4f565b5b9060005260206000200154905080600883815481106126e7576126e6613a4f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061273657612735613a20565b5b6001900381819060005260206000200160009055905550505050565b600061275d83610f20565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612838906134bd565b60405180910390fd5b61284a81611990565b1561288a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128819061335d565b60405180910390fd5b612896600083836121c0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128e691906136dd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546129be906138b6565b90600052602060002090601f0160209004810192826129e05760008555612a27565b82601f106129f957805160ff1916838001178555612a27565b82800160010185558215612a27579182015b82811115612a26578251825591602001919060010190612a0b565b5b509050612a349190612a38565b5090565b5b80821115612a51576000816000905550600101612a39565b5090565b6000612a68612a6384613638565b613613565b905082815260208101848484011115612a8457612a83613ab2565b5b612a8f848285613874565b509392505050565b6000612aaa612aa584613669565b613613565b905082815260208101848484011115612ac657612ac5613ab2565b5b612ad1848285613874565b509392505050565b600081359050612ae8816140bb565b92915050565b600081359050612afd816140d2565b92915050565b600081359050612b12816140e9565b92915050565b600081519050612b27816140e9565b92915050565b600082601f830112612b4257612b41613aad565b5b8135612b52848260208601612a55565b91505092915050565b600082601f830112612b7057612b6f613aad565b5b8135612b80848260208601612a97565b91505092915050565b600081359050612b9881614100565b92915050565b600060208284031215612bb457612bb3613abc565b5b6000612bc284828501612ad9565b91505092915050565b60008060408385031215612be257612be1613abc565b5b6000612bf085828601612ad9565b9250506020612c0185828601612ad9565b9150509250929050565b600080600060608486031215612c2457612c23613abc565b5b6000612c3286828701612ad9565b9350506020612c4386828701612ad9565b9250506040612c5486828701612b89565b9150509250925092565b60008060008060808587031215612c7857612c77613abc565b5b6000612c8687828801612ad9565b9450506020612c9787828801612ad9565b9350506040612ca887828801612b89565b925050606085013567ffffffffffffffff811115612cc957612cc8613ab7565b5b612cd587828801612b2d565b91505092959194509250565b60008060408385031215612cf857612cf7613abc565b5b6000612d0685828601612ad9565b9250506020612d1785828601612aee565b9150509250929050565b60008060408385031215612d3857612d37613abc565b5b6000612d4685828601612ad9565b9250506020612d5785828601612b89565b9150509250929050565b600060208284031215612d7757612d76613abc565b5b6000612d8584828501612b03565b91505092915050565b600060208284031215612da457612da3613abc565b5b6000612db284828501612b18565b91505092915050565b600060208284031215612dd157612dd0613abc565b5b600082013567ffffffffffffffff811115612def57612dee613ab7565b5b612dfb84828501612b5b565b91505092915050565b600060208284031215612e1a57612e19613abc565b5b6000612e2884828501612b89565b91505092915050565b612e3a816137f2565b82525050565b612e4981613804565b82525050565b6000612e5a8261369a565b612e6481856136b0565b9350612e74818560208601613883565b612e7d81613ac1565b840191505092915050565b6000612e93826136a5565b612e9d81856136c1565b9350612ead818560208601613883565b612eb681613ac1565b840191505092915050565b6000612ecc826136a5565b612ed681856136d2565b9350612ee6818560208601613883565b80840191505092915050565b6000612eff602b836136c1565b9150612f0a82613ad2565b604082019050919050565b6000612f226032836136c1565b9150612f2d82613b21565b604082019050919050565b6000612f456026836136c1565b9150612f5082613b70565b604082019050919050565b6000612f68601c836136c1565b9150612f7382613bbf565b602082019050919050565b6000612f8b6016836136c1565b9150612f9682613be8565b602082019050919050565b6000612fae600e836136c1565b9150612fb982613c11565b602082019050919050565b6000612fd16024836136c1565b9150612fdc82613c3a565b604082019050919050565b6000612ff46019836136c1565b9150612fff82613c89565b602082019050919050565b6000613017601e836136c1565b915061302282613cb2565b602082019050919050565b600061303a602c836136c1565b915061304582613cdb565b604082019050919050565b600061305d6038836136c1565b915061306882613d2a565b604082019050919050565b6000613080602a836136c1565b915061308b82613d79565b604082019050919050565b60006130a36023836136c1565b91506130ae82613dc8565b604082019050919050565b60006130c66029836136c1565b91506130d182613e17565b604082019050919050565b60006130e96020836136c1565b91506130f482613e66565b602082019050919050565b600061310c602c836136c1565b915061311782613e8f565b604082019050919050565b600061312f6020836136c1565b915061313a82613ede565b602082019050919050565b60006131526029836136c1565b915061315d82613f07565b604082019050919050565b6000613175602f836136c1565b915061318082613f56565b604082019050919050565b60006131986011836136c1565b91506131a382613fa5565b602082019050919050565b60006131bb6021836136c1565b91506131c682613fce565b604082019050919050565b60006131de6031836136c1565b91506131e98261401d565b604082019050919050565b6000613201602c836136c1565b915061320c8261406c565b604082019050919050565b6132208161383c565b82525050565b61322f8161386a565b82525050565b60006132418285612ec1565b915061324d8284612ec1565b91508190509392505050565b600060208201905061326e6000830184612e31565b92915050565b60006080820190506132896000830187612e31565b6132966020830186612e31565b6132a36040830185613226565b81810360608301526132b58184612e4f565b905095945050505050565b60006020820190506132d56000830184612e40565b92915050565b600060208201905081810360008301526132f58184612e88565b905092915050565b6000602082019050818103600083015261331681612ef2565b9050919050565b6000602082019050818103600083015261333681612f15565b9050919050565b6000602082019050818103600083015261335681612f38565b9050919050565b6000602082019050818103600083015261337681612f5b565b9050919050565b6000602082019050818103600083015261339681612f7e565b9050919050565b600060208201905081810360008301526133b681612fa1565b9050919050565b600060208201905081810360008301526133d681612fc4565b9050919050565b600060208201905081810360008301526133f681612fe7565b9050919050565b600060208201905081810360008301526134168161300a565b9050919050565b600060208201905081810360008301526134368161302d565b9050919050565b6000602082019050818103600083015261345681613050565b9050919050565b6000602082019050818103600083015261347681613073565b9050919050565b6000602082019050818103600083015261349681613096565b9050919050565b600060208201905081810360008301526134b6816130b9565b9050919050565b600060208201905081810360008301526134d6816130dc565b9050919050565b600060208201905081810360008301526134f6816130ff565b9050919050565b6000602082019050818103600083015261351681613122565b9050919050565b6000602082019050818103600083015261353681613145565b9050919050565b6000602082019050818103600083015261355681613168565b9050919050565b600060208201905081810360008301526135768161318b565b9050919050565b60006020820190508181036000830152613596816131ae565b9050919050565b600060208201905081810360008301526135b6816131d1565b9050919050565b600060208201905081810360008301526135d6816131f4565b9050919050565b60006020820190506135f26000830184613217565b92915050565b600060208201905061360d6000830184613226565b92915050565b600061361d61362e565b905061362982826138e8565b919050565b6000604051905090565b600067ffffffffffffffff82111561365357613652613a7e565b5b61365c82613ac1565b9050602081019050919050565b600067ffffffffffffffff82111561368457613683613a7e565b5b61368d82613ac1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136e88261386a565b91506136f38361386a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561372857613727613993565b5b828201905092915050565b600061373e8261386a565b91506137498361386a565b925082613759576137586139c2565b5b828204905092915050565b600061376f8261386a565b915061377a8361386a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137b3576137b2613993565b5b828202905092915050565b60006137c98261386a565b91506137d48361386a565b9250828210156137e7576137e6613993565b5b828203905092915050565b60006137fd8261384a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138a1578082015181840152602081019050613886565b838111156138b0576000848401525b50505050565b600060028204905060018216806138ce57607f821691505b602082108114156138e2576138e16139f1565b5b50919050565b6138f182613ac1565b810181811067ffffffffffffffff821117156139105761390f613a7e565b5b80604052505050565b60006139248261386a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561395757613956613993565b5b600182019050919050565b600061396d8261386a565b91506139788361386a565b925082613988576139876139c2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65206973206e6f74206163746976652079657400000000000000000000600082015250565b7f53616c652068617320656e646564000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f507572636861736520616d6f756e74206578636565647320737570706c790000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f596f752063616e206f6e6c79206d696e742032302062656172646f732070657260008201527f2074780000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6140c4816137f2565b81146140cf57600080fd5b50565b6140db81613804565b81146140e657600080fd5b50565b6140f281613810565b81146140fd57600080fd5b50565b6141098161386a565b811461411457600080fd5b5056fea2646970667358221220968e2122e40a02f82353dd0e7fc06eef5ae13f87de7d2f046c28e9cf3024b10264736f6c634300080600330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003768747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f686263686f73742f6862636d6574612f6d61696e2f000000000000000000
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c80636352211e116100f75780639a7447aa11610095578063c87b56dd11610064578063c87b56dd1461060e578063e985e9c51461064b578063eb8d244414610688578063f2fde38b146106b3576101cd565b80639a7447aa14610575578063a035b1fe14610591578063a22cb465146105bc578063b88d4fde146105e5576101cd565b806382d17de6116100d157806382d17de6146104ea578063853828b6146105155780638da5cb5b1461051f57806395d89b411461054a576101cd565b80636352211e1461045957806370a0823114610496578063715018a6146104d3576101cd565b80631e6aa1271161016f57806334918dfd1161013e57806334918dfd146103b357806342842e0e146103ca5780634f6ccce7146103f357806355f804b314610430576101cd565b80631e6aa1271461031f57806323b872dd1461033657806327ac36c41461035f5780632f745c5914610376576101cd565b806308f46179116101ab57806308f4617914610277578063095ea7b3146102a257806310969523146102cb57806318160ddd146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612d61565b6106dc565b60405161020691906132c0565b60405180910390f35b34801561021b57600080fd5b50610224610756565b60405161023191906132db565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190612e04565b6107e8565b60405161026e9190613259565b60405180910390f35b34801561028357600080fd5b5061028c61086d565b60405161029991906135dd565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190612d21565b610881565b005b3480156102d757600080fd5b506102f260048036038101906102ed9190612dbb565b610999565b005b34801561030057600080fd5b50610309610a2f565b60405161031691906135f8565b60405180910390f35b34801561032b57600080fd5b50610334610a3c565b005b34801561034257600080fd5b5061035d60048036038101906103589190612c0b565b610ade565b005b34801561036b57600080fd5b50610374610b3e565b005b34801561038257600080fd5b5061039d60048036038101906103989190612d21565b610bfa565b6040516103aa91906135f8565b60405180910390f35b3480156103bf57600080fd5b506103c8610c9f565b005b3480156103d657600080fd5b506103f160048036038101906103ec9190612c0b565b610d47565b005b3480156103ff57600080fd5b5061041a60048036038101906104159190612e04565b610d67565b60405161042791906135f8565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190612dbb565b610dd8565b005b34801561046557600080fd5b50610480600480360381019061047b9190612e04565b610e6e565b60405161048d9190613259565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190612b9e565b610f20565b6040516104ca91906135f8565b60405180910390f35b3480156104df57600080fd5b506104e8610fd8565b005b3480156104f657600080fd5b506104ff611060565b60405161050c91906132db565b60405180910390f35b61051d6110ee565b005b34801561052b57600080fd5b506105346111cc565b6040516105419190613259565b60405180910390f35b34801561055657600080fd5b5061055f6111f6565b60405161056c91906132db565b60405180910390f35b61058f600480360381019061058a9190612d21565b611288565b005b34801561059d57600080fd5b506105a6611479565b6040516105b391906135f8565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de9190612ce1565b611485565b005b3480156105f157600080fd5b5061060c60048036038101906106079190612c5e565b611606565b005b34801561061a57600080fd5b5061063560048036038101906106309190612e04565b611668565b60405161064291906132db565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190612bcb565b61170f565b60405161067f91906132c0565b60405180910390f35b34801561069457600080fd5b5061069d6117a3565b6040516106aa91906132c0565b60405180910390f35b3480156106bf57600080fd5b506106da60048036038101906106d59190612b9e565b6117b6565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074f575061074e826118ae565b5b9050919050565b606060008054610765906138b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610791906138b6565b80156107de5780601f106107b3576101008083540402835291602001916107de565b820191906000526020600020905b8154815290600101906020018083116107c157829003601f168201915b5050505050905090565b60006107f382611990565b610832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610829906134dd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d60009054906101000a900461ffff1681565b600061088c82610e6e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f49061357d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661091c6119fc565b73ffffffffffffffffffffffffffffffffffffffff16148061094b575061094a816109456119fc565b61170f565b5b61098a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109819061343d565b60405180910390fd5b6109948383611a04565b505050565b6109a16119fc565b73ffffffffffffffffffffffffffffffffffffffff166109bf6111cc565b73ffffffffffffffffffffffffffffffffffffffff1614610a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c906134fd565b60405180910390fd5b80600b9080519060200190610a2b9291906129b2565b5050565b6000600880549050905090565b610a446119fc565b73ffffffffffffffffffffffffffffffffffffffff16610a626111cc565b73ffffffffffffffffffffffffffffffffffffffff1614610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf906134fd565b60405180910390fd5b610ac0610a2f565b600d60006101000a81548161ffff021916908361ffff160217905550565b610aef610ae96119fc565b82611abd565b610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b259061359d565b60405180910390fd5b610b39838383611b9b565b505050565b610b466119fc565b73ffffffffffffffffffffffffffffffffffffffff16610b646111cc565b73ffffffffffffffffffffffffffffffffffffffff1614610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb1906134fd565b60405180910390fd5b6000610bc4610a2f565b14610bce57600080fd5b60005b601e811015610bf757610be43382611df7565b8080610bef90613919565b915050610bd1565b50565b6000610c0583610f20565b8210610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d906132fd565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ca76119fc565b73ffffffffffffffffffffffffffffffffffffffff16610cc56111cc565b73ffffffffffffffffffffffffffffffffffffffff1614610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d12906134fd565b60405180910390fd5b600d60029054906101000a900460ff1615600d60026101000a81548160ff021916908315150217905550565b610d6283838360405180602001604052806000815250611606565b505050565b6000610d71610a2f565b8210610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da9906135bd565b60405180910390fd5b60088281548110610dc657610dc5613a4f565b5b90600052602060002001549050919050565b610de06119fc565b73ffffffffffffffffffffffffffffffffffffffff16610dfe6111cc565b73ffffffffffffffffffffffffffffffffffffffff1614610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b906134fd565b60405180910390fd5b80600c9080519060200190610e6a9291906129b2565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e9061349d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f889061345d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fe06119fc565b73ffffffffffffffffffffffffffffffffffffffff16610ffe6111cc565b73ffffffffffffffffffffffffffffffffffffffff1614611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b906134fd565b60405180910390fd5b61105e6000611e15565b565b600b805461106d906138b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611099906138b6565b80156110e65780601f106110bb576101008083540402835291602001916110e6565b820191906000526020600020905b8154815290600101906020018083116110c957829003601f168201915b505050505081565b6110f66119fc565b73ffffffffffffffffffffffffffffffffffffffff166111146111cc565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611161906134fd565b60405180910390fd5b600d60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506111ca57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611205906138b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611231906138b6565b801561127e5780601f106112535761010080835404028352916020019161127e565b820191906000526020600020905b81548152906001019060200180831161126157829003601f168201915b5050505050905090565b600d60029054906101000a900460ff166112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce9061337d565b60405180910390fd5b600d60009054906101000a900461ffff1661ffff166112f4610a2f565b10611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b9061339d565b60405180910390fd5b600d60009054906101000a900461ffff1661ffff1661136382611355610a2f565b611edb90919063ffffffff16565b11156113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b906133fd565b60405180910390fd5b60148111156113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df9061347d565b60405180910390fd5b6114038167011c37937e080000611ef190919063ffffffff16565b341015611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c9061355d565b60405180910390fd5b60005b81811015611474576114618361145c610a2f565b611df7565b808061146c90613919565b915050611448565b505050565b67011c37937e08000081565b61148d6119fc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f2906133dd565b60405180910390fd5b80600560006115086119fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115b56119fc565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115fa91906132c0565b60405180910390a35050565b6116176116116119fc565b83611abd565b611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d9061359d565b60405180910390fd5b61166284848484611f07565b50505050565b606061167382611990565b6116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a99061353d565b60405180910390fd5b60006116bc611f63565b905060008151116116dc5760405180602001604052806000815250611707565b806116e684611ff5565b6040516020016116f7929190613235565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d60029054906101000a900460ff1681565b6117be6119fc565b73ffffffffffffffffffffffffffffffffffffffff166117dc6111cc565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611829906134fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118999061333d565b60405180910390fd5b6118ab81611e15565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061197957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611989575061198882612156565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a7783610e6e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ac882611990565b611b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afe9061341d565b60405180910390fd5b6000611b1283610e6e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b8157508373ffffffffffffffffffffffffffffffffffffffff16611b69846107e8565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b925750611b91818561170f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611bbb82610e6e565b73ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c089061351d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c78906133bd565b60405180910390fd5b611c8c8383836121c0565b611c97600082611a04565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ce791906137be565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d3e91906136dd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611e118282604051806020016040528060008152506122d4565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611ee991906136dd565b905092915050565b60008183611eff9190613764565b905092915050565b611f12848484611b9b565b611f1e8484848461232f565b611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f549061331d565b60405180910390fd5b50505050565b6060600c8054611f72906138b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9e906138b6565b8015611feb5780601f10611fc057610100808354040283529160200191611feb565b820191906000526020600020905b815481529060010190602001808311611fce57829003601f168201915b5050505050905090565b6060600082141561203d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612151565b600082905060005b6000821461206f57808061205890613919565b915050600a826120689190613733565b9150612045565b60008167ffffffffffffffff81111561208b5761208a613a7e565b5b6040519080825280601f01601f1916602001820160405280156120bd5781602001600182028036833780820191505090505b5090505b6000851461214a576001826120d691906137be565b9150600a856120e59190613962565b60306120f191906136dd565b60f81b81838151811061210757612106613a4f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121439190613733565b94506120c1565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121cb8383836124c6565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561220e57612209816124cb565b61224d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461224c5761224b8382612514565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122905761228b81612681565b6122cf565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122ce576122cd8282612752565b5b5b505050565b6122de83836127d1565b6122eb600084848461232f565b61232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123219061331d565b60405180910390fd5b505050565b60006123508473ffffffffffffffffffffffffffffffffffffffff1661299f565b156124b9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123796119fc565b8786866040518563ffffffff1660e01b815260040161239b9493929190613274565b602060405180830381600087803b1580156123b557600080fd5b505af19250505080156123e657506040513d601f19601f820116820180604052508101906123e39190612d8e565b60015b612469573d8060008114612416576040519150601f19603f3d011682016040523d82523d6000602084013e61241b565b606091505b50600081511415612461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124589061331d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124be565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161252184610f20565b61252b91906137be565b9050600060076000848152602001908152602001600020549050818114612610576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061269591906137be565b90506000600960008481526020019081526020016000205490506000600883815481106126c5576126c4613a4f565b5b9060005260206000200154905080600883815481106126e7576126e6613a4f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061273657612735613a20565b5b6001900381819060005260206000200160009055905550505050565b600061275d83610f20565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612838906134bd565b60405180910390fd5b61284a81611990565b1561288a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128819061335d565b60405180910390fd5b612896600083836121c0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128e691906136dd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546129be906138b6565b90600052602060002090601f0160209004810192826129e05760008555612a27565b82601f106129f957805160ff1916838001178555612a27565b82800160010185558215612a27579182015b82811115612a26578251825591602001919060010190612a0b565b5b509050612a349190612a38565b5090565b5b80821115612a51576000816000905550600101612a39565b5090565b6000612a68612a6384613638565b613613565b905082815260208101848484011115612a8457612a83613ab2565b5b612a8f848285613874565b509392505050565b6000612aaa612aa584613669565b613613565b905082815260208101848484011115612ac657612ac5613ab2565b5b612ad1848285613874565b509392505050565b600081359050612ae8816140bb565b92915050565b600081359050612afd816140d2565b92915050565b600081359050612b12816140e9565b92915050565b600081519050612b27816140e9565b92915050565b600082601f830112612b4257612b41613aad565b5b8135612b52848260208601612a55565b91505092915050565b600082601f830112612b7057612b6f613aad565b5b8135612b80848260208601612a97565b91505092915050565b600081359050612b9881614100565b92915050565b600060208284031215612bb457612bb3613abc565b5b6000612bc284828501612ad9565b91505092915050565b60008060408385031215612be257612be1613abc565b5b6000612bf085828601612ad9565b9250506020612c0185828601612ad9565b9150509250929050565b600080600060608486031215612c2457612c23613abc565b5b6000612c3286828701612ad9565b9350506020612c4386828701612ad9565b9250506040612c5486828701612b89565b9150509250925092565b60008060008060808587031215612c7857612c77613abc565b5b6000612c8687828801612ad9565b9450506020612c9787828801612ad9565b9350506040612ca887828801612b89565b925050606085013567ffffffffffffffff811115612cc957612cc8613ab7565b5b612cd587828801612b2d565b91505092959194509250565b60008060408385031215612cf857612cf7613abc565b5b6000612d0685828601612ad9565b9250506020612d1785828601612aee565b9150509250929050565b60008060408385031215612d3857612d37613abc565b5b6000612d4685828601612ad9565b9250506020612d5785828601612b89565b9150509250929050565b600060208284031215612d7757612d76613abc565b5b6000612d8584828501612b03565b91505092915050565b600060208284031215612da457612da3613abc565b5b6000612db284828501612b18565b91505092915050565b600060208284031215612dd157612dd0613abc565b5b600082013567ffffffffffffffff811115612def57612dee613ab7565b5b612dfb84828501612b5b565b91505092915050565b600060208284031215612e1a57612e19613abc565b5b6000612e2884828501612b89565b91505092915050565b612e3a816137f2565b82525050565b612e4981613804565b82525050565b6000612e5a8261369a565b612e6481856136b0565b9350612e74818560208601613883565b612e7d81613ac1565b840191505092915050565b6000612e93826136a5565b612e9d81856136c1565b9350612ead818560208601613883565b612eb681613ac1565b840191505092915050565b6000612ecc826136a5565b612ed681856136d2565b9350612ee6818560208601613883565b80840191505092915050565b6000612eff602b836136c1565b9150612f0a82613ad2565b604082019050919050565b6000612f226032836136c1565b9150612f2d82613b21565b604082019050919050565b6000612f456026836136c1565b9150612f5082613b70565b604082019050919050565b6000612f68601c836136c1565b9150612f7382613bbf565b602082019050919050565b6000612f8b6016836136c1565b9150612f9682613be8565b602082019050919050565b6000612fae600e836136c1565b9150612fb982613c11565b602082019050919050565b6000612fd16024836136c1565b9150612fdc82613c3a565b604082019050919050565b6000612ff46019836136c1565b9150612fff82613c89565b602082019050919050565b6000613017601e836136c1565b915061302282613cb2565b602082019050919050565b600061303a602c836136c1565b915061304582613cdb565b604082019050919050565b600061305d6038836136c1565b915061306882613d2a565b604082019050919050565b6000613080602a836136c1565b915061308b82613d79565b604082019050919050565b60006130a36023836136c1565b91506130ae82613dc8565b604082019050919050565b60006130c66029836136c1565b91506130d182613e17565b604082019050919050565b60006130e96020836136c1565b91506130f482613e66565b602082019050919050565b600061310c602c836136c1565b915061311782613e8f565b604082019050919050565b600061312f6020836136c1565b915061313a82613ede565b602082019050919050565b60006131526029836136c1565b915061315d82613f07565b604082019050919050565b6000613175602f836136c1565b915061318082613f56565b604082019050919050565b60006131986011836136c1565b91506131a382613fa5565b602082019050919050565b60006131bb6021836136c1565b91506131c682613fce565b604082019050919050565b60006131de6031836136c1565b91506131e98261401d565b604082019050919050565b6000613201602c836136c1565b915061320c8261406c565b604082019050919050565b6132208161383c565b82525050565b61322f8161386a565b82525050565b60006132418285612ec1565b915061324d8284612ec1565b91508190509392505050565b600060208201905061326e6000830184612e31565b92915050565b60006080820190506132896000830187612e31565b6132966020830186612e31565b6132a36040830185613226565b81810360608301526132b58184612e4f565b905095945050505050565b60006020820190506132d56000830184612e40565b92915050565b600060208201905081810360008301526132f58184612e88565b905092915050565b6000602082019050818103600083015261331681612ef2565b9050919050565b6000602082019050818103600083015261333681612f15565b9050919050565b6000602082019050818103600083015261335681612f38565b9050919050565b6000602082019050818103600083015261337681612f5b565b9050919050565b6000602082019050818103600083015261339681612f7e565b9050919050565b600060208201905081810360008301526133b681612fa1565b9050919050565b600060208201905081810360008301526133d681612fc4565b9050919050565b600060208201905081810360008301526133f681612fe7565b9050919050565b600060208201905081810360008301526134168161300a565b9050919050565b600060208201905081810360008301526134368161302d565b9050919050565b6000602082019050818103600083015261345681613050565b9050919050565b6000602082019050818103600083015261347681613073565b9050919050565b6000602082019050818103600083015261349681613096565b9050919050565b600060208201905081810360008301526134b6816130b9565b9050919050565b600060208201905081810360008301526134d6816130dc565b9050919050565b600060208201905081810360008301526134f6816130ff565b9050919050565b6000602082019050818103600083015261351681613122565b9050919050565b6000602082019050818103600083015261353681613145565b9050919050565b6000602082019050818103600083015261355681613168565b9050919050565b600060208201905081810360008301526135768161318b565b9050919050565b60006020820190508181036000830152613596816131ae565b9050919050565b600060208201905081810360008301526135b6816131d1565b9050919050565b600060208201905081810360008301526135d6816131f4565b9050919050565b60006020820190506135f26000830184613217565b92915050565b600060208201905061360d6000830184613226565b92915050565b600061361d61362e565b905061362982826138e8565b919050565b6000604051905090565b600067ffffffffffffffff82111561365357613652613a7e565b5b61365c82613ac1565b9050602081019050919050565b600067ffffffffffffffff82111561368457613683613a7e565b5b61368d82613ac1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136e88261386a565b91506136f38361386a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561372857613727613993565b5b828201905092915050565b600061373e8261386a565b91506137498361386a565b925082613759576137586139c2565b5b828204905092915050565b600061376f8261386a565b915061377a8361386a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137b3576137b2613993565b5b828202905092915050565b60006137c98261386a565b91506137d48361386a565b9250828210156137e7576137e6613993565b5b828203905092915050565b60006137fd8261384a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138a1578082015181840152602081019050613886565b838111156138b0576000848401525b50505050565b600060028204905060018216806138ce57607f821691505b602082108114156138e2576138e16139f1565b5b50919050565b6138f182613ac1565b810181811067ffffffffffffffff821117156139105761390f613a7e565b5b80604052505050565b60006139248261386a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561395757613956613993565b5b600182019050919050565b600061396d8261386a565b91506139788361386a565b925082613988576139876139c2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65206973206e6f74206163746976652079657400000000000000000000600082015250565b7f53616c652068617320656e646564000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f507572636861736520616d6f756e74206578636565647320737570706c790000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f596f752063616e206f6e6c79206d696e742032302062656172646f732070657260008201527f2074780000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6140c4816137f2565b81146140cf57600080fd5b50565b6140db81613804565b81146140e657600080fd5b50565b6140f281613810565b81146140fd57600080fd5b50565b6141098161386a565b811461411457600080fd5b5056fea2646970667358221220968e2122e40a02f82353dd0e7fc06eef5ae13f87de7d2f046c28e9cf3024b10264736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003768747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f686263686f73742f6862636d6574612f6d61696e2f000000000000000000
-----Decoded View---------------
Arg [0] : uri (string): https://raw.githubusercontent.com/hbchost/hbcmeta/main/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000037
Arg [2] : 68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f
Arg [3] : 6d2f686263686f73742f6862636d6574612f6d61696e2f000000000000000000
Deployed Bytecode Sourcemap
49971:2314:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36808:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24694:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26253:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50186:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25776:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51369:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37448:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51191:94;;;;;;;;;;;;;:::i;:::-;;27143:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51763:179;;;;;;;;;;;;;:::i;:::-;;37116:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51554:89;;;;;;;;;;;;;:::i;:::-;;27553:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37638:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52194:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24388:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24118:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2526:94;;;;;;;;;;;;;:::i;:::-;;50063:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51954:122;;;:::i;:::-;;1875:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24863:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50597:528;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50130:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26546:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27809:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25038:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26912:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50226:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2775:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36808:224;36910:4;36949:35;36934:50;;;:11;:50;;;;:90;;;;36988:36;37012:11;36988:23;:36::i;:::-;36934:90;36927:97;;36808:224;;;:::o;24694:100::-;24748:13;24781:5;24774:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24694:100;:::o;26253:221::-;26329:7;26357:16;26365:7;26357;:16::i;:::-;26349:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26442:15;:24;26458:7;26442:24;;;;;;;;;;;;;;;;;;;;;26435:31;;26253:221;;;:::o;50186:33::-;;;;;;;;;;;;;:::o;25776:411::-;25857:13;25873:23;25888:7;25873:14;:23::i;:::-;25857:39;;25921:5;25915:11;;:2;:11;;;;25907:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26015:5;25999:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26024:37;26041:5;26048:12;:10;:12::i;:::-;26024:16;:37::i;:::-;25999:62;25977:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26158:21;26167:2;26171:7;26158:8;:21::i;:::-;25846:341;25776:411;;:::o;51369:127::-;2106:12;:10;:12::i;:::-;2095:23;;:7;:5;:7::i;:::-;:23;;;2087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51474:14:::1;51454:17;:34;;;;;;;;;;;;:::i;:::-;;51369:127:::0;:::o;37448:113::-;37509:7;37536:10;:17;;;;37529:24;;37448:113;:::o;51191:94::-;2106:12;:10;:12::i;:::-;2095:23;;:7;:5;:7::i;:::-;:23;;;2087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51263:13:::1;:11;:13::i;:::-;51242:11;;:35;;;;;;;;;;;;;;;;;;51191:94::o:0;27143:339::-;27338:41;27357:12;:10;:12::i;:::-;27371:7;27338:18;:41::i;:::-;27330:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27446:28;27456:4;27462:2;27466:7;27446:9;:28::i;:::-;27143:339;;;:::o;51763:179::-;2106:12;:10;:12::i;:::-;2095:23;;:7;:5;:7::i;:::-;:23;;;2087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51841:1:::1;51824:13;:11;:13::i;:::-;:18;51816:27;;;::::0;::::1;;51859:6;51854:81;51875:2;51871:1;:6;51854:81;;;51899:24;51909:10;51921:1;51899:9;:24::i;:::-;51879:3;;;;;:::i;:::-;;;;51854:81;;;;51763:179::o:0;37116:256::-;37213:7;37249:23;37266:5;37249:16;:23::i;:::-;37241:5;:31;37233:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37338:12;:19;37351:5;37338:19;;;;;;;;;;;;;;;:26;37358:5;37338:26;;;;;;;;;;;;37331:33;;37116:256;;;;:::o;51554:89::-;2106:12;:10;:12::i;:::-;2095:23;;:7;:5;:7::i;:::-;:23;;;2087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51623:12:::1;;;;;;;;;;;51622:13;51607:12;;:28;;;;;;;;;;;;;;;;;;51554:89::o:0;27553:185::-;27691:39;27708:4;27714:2;27718:7;27691:39;;;;;;;;;;;;:16;:39::i;:::-;27553:185;;;:::o;37638:233::-;37713:7;37749:30;:28;:30::i;:::-;37741:5;:38;37733:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37846:10;37857:5;37846:17;;;;;;;;:::i;:::-;;;;;;;;;;37839:24;;37638:233;;;:::o;52194:86::-;2106:12;:10;:12::i;:::-;2095:23;;:7;:5;:7::i;:::-;:23;;;2087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52269:3:::1;52259:7;:13;;;;;;;;;;;;:::i;:::-;;52194:86:::0;:::o;24388:239::-;24460:7;24480:13;24496:7;:16;24504:7;24496:16;;;;;;;;;;;;;;;;;;;;;24480:32;;24548:1;24531:19;;:5;:19;;;;24523:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24614:5;24607:12;;;24388:239;;;:::o;24118:208::-;24190:7;24235:1;24218:19;;:5;:19;;;;24210:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24302:9;:16;24312:5;24302:16;;;;;;;;;;;;;;;;24295:23;;24118:208;;;:::o;2526:94::-;2106:12;:10;:12::i;:::-;2095:23;;:7;:5;:7::i;:::-;:23;;;2087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2591:21:::1;2609:1;2591:9;:21::i;:::-;2526:94::o:0;50063:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51954:122::-;2106:12;:10;:12::i;:::-;2095:23;;:7;:5;:7::i;:::-;:23;;;2087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52029:9:::1;;;;;;;;;;;52021:23;;:46;52045:21;52021:46;;;;;;;;;;;;;;;;;;;;;;;52013:55;;;::::0;::::1;;51954:122::o:0;1875:87::-;1921:7;1948:6;;;;;;;;;;;1941:13;;1875:87;:::o;24863:104::-;24919:13;24952:7;24945:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24863:104;:::o;50597:528::-;50679:12;;;;;;;;;;;50671:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;50753:11;;;;;;;;;;;50737:27;;:13;:11;:13::i;:::-;:27;50729:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;50831:11;;;;;;;;;;;50802:40;;:25;50820:6;50802:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:40;;50794:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;50906:2;50896:6;:12;;50888:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;50980:17;50990:6;50162:17;50980:9;;:17;;;;:::i;:::-;50967:9;:30;;50959:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;51034:6;51030:88;51050:6;51046:1;:10;51030:88;;;51077:29;51087:3;51092:13;:11;:13::i;:::-;51077:9;:29::i;:::-;51058:3;;;;;:::i;:::-;;;;51030:88;;;;50597:528;;:::o;50130:49::-;50162:17;50130:49;:::o;26546:295::-;26661:12;:10;:12::i;:::-;26649:24;;:8;:24;;;;26641:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26761:8;26716:18;:32;26735:12;:10;:12::i;:::-;26716:32;;;;;;;;;;;;;;;:42;26749:8;26716:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26814:8;26785:48;;26800:12;:10;:12::i;:::-;26785:48;;;26824:8;26785:48;;;;;;:::i;:::-;;;;;;;;26546:295;;:::o;27809:328::-;27984:41;28003:12;:10;:12::i;:::-;28017:7;27984:18;:41::i;:::-;27976:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28090:39;28104:4;28110:2;28114:7;28123:5;28090:13;:39::i;:::-;27809:328;;;;:::o;25038:334::-;25111:13;25145:16;25153:7;25145;:16::i;:::-;25137:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25226:21;25250:10;:8;:10::i;:::-;25226:34;;25302:1;25284:7;25278:21;:25;:86;;;;;;;;;;;;;;;;;25330:7;25339:18;:7;:16;:18::i;:::-;25313:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25278:86;25271:93;;;25038:334;;;:::o;26912:164::-;27009:4;27033:18;:25;27052:5;27033:25;;;;;;;;;;;;;;;:35;27059:8;27033:35;;;;;;;;;;;;;;;;;;;;;;;;;27026:42;;26912:164;;;;:::o;50226:32::-;;;;;;;;;;;;;:::o;2775:192::-;2106:12;:10;:12::i;:::-;2095:23;;:7;:5;:7::i;:::-;:23;;;2087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2884:1:::1;2864:22;;:8;:22;;;;2856:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2940:19;2950:8;2940:9;:19::i;:::-;2775:192:::0;:::o;23749:305::-;23851:4;23903:25;23888:40;;;:11;:40;;;;:105;;;;23960:33;23945:48;;;:11;:48;;;;23888:105;:158;;;;24010:36;24034:11;24010:23;:36::i;:::-;23888:158;23868:178;;23749:305;;;:::o;29647:127::-;29712:4;29764:1;29736:30;;:7;:16;29744:7;29736:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29729:37;;29647:127;;;:::o;626:98::-;679:7;706:10;699:17;;626:98;:::o;33629:174::-;33731:2;33704:15;:24;33720:7;33704:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33787:7;33783:2;33749:46;;33758:23;33773:7;33758:14;:23::i;:::-;33749:46;;;;;;;;;;;;33629:174;;:::o;29941:348::-;30034:4;30059:16;30067:7;30059;:16::i;:::-;30051:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30135:13;30151:23;30166:7;30151:14;:23::i;:::-;30135:39;;30204:5;30193:16;;:7;:16;;;:51;;;;30237:7;30213:31;;:20;30225:7;30213:11;:20::i;:::-;:31;;;30193:51;:87;;;;30248:32;30265:5;30272:7;30248:16;:32::i;:::-;30193:87;30185:96;;;29941:348;;;;:::o;32933:578::-;33092:4;33065:31;;:23;33080:7;33065:14;:23::i;:::-;:31;;;33057:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33175:1;33161:16;;:2;:16;;;;33153:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33231:39;33252:4;33258:2;33262:7;33231:20;:39::i;:::-;33335:29;33352:1;33356:7;33335:8;:29::i;:::-;33396:1;33377:9;:15;33387:4;33377:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33425:1;33408:9;:13;33418:2;33408:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33456:2;33437:7;:16;33445:7;33437:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33495:7;33491:2;33476:27;;33485:4;33476:27;;;;;;;;;;;;32933:578;;;:::o;30631:110::-;30707:26;30717:2;30721:7;30707:26;;;;;;;;;;;;:9;:26::i;:::-;30631:110;;:::o;2975:173::-;3031:16;3050:6;;;;;;;;;;;3031:25;;3076:8;3067:6;;:17;;;;;;;;;;;;;;;;;;3131:8;3100:40;;3121:8;3100:40;;;;;;;;;;;;3020:128;2975:173;:::o;45750:98::-;45808:7;45839:1;45835;:5;;;;:::i;:::-;45828:12;;45750:98;;;;:::o;46488:::-;46546:7;46577:1;46573;:5;;;;:::i;:::-;46566:12;;46488:98;;;;:::o;29019:315::-;29176:28;29186:4;29192:2;29196:7;29176:9;:28::i;:::-;29223:48;29246:4;29252:2;29256:7;29265:5;29223:22;:48::i;:::-;29215:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29019:315;;;;:::o;52084:98::-;52136:13;52167:7;52160:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52084:98;:::o;11087:723::-;11143:13;11373:1;11364:5;:10;11360:53;;;11391:10;;;;;;;;;;;;;;;;;;;;;11360:53;11423:12;11438:5;11423:20;;11454:14;11479:78;11494:1;11486:4;:9;11479:78;;11512:8;;;;;:::i;:::-;;;;11543:2;11535:10;;;;;:::i;:::-;;;11479:78;;;11567:19;11599:6;11589:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11567:39;;11617:154;11633:1;11624:5;:10;11617:154;;11661:1;11651:11;;;;;:::i;:::-;;;11728:2;11720:5;:10;;;;:::i;:::-;11707:2;:24;;;;:::i;:::-;11694:39;;11677:6;11684;11677:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;11757:2;11748:11;;;;;:::i;:::-;;;11617:154;;;11795:6;11781:21;;;;;11087:723;;;;:::o;10610:157::-;10695:4;10734:25;10719:40;;;:11;:40;;;;10712:47;;10610:157;;;:::o;38484:589::-;38628:45;38655:4;38661:2;38665:7;38628:26;:45::i;:::-;38706:1;38690:18;;:4;:18;;;38686:187;;;38725:40;38757:7;38725:31;:40::i;:::-;38686:187;;;38795:2;38787:10;;:4;:10;;;38783:90;;38814:47;38847:4;38853:7;38814:32;:47::i;:::-;38783:90;38686:187;38901:1;38887:16;;:2;:16;;;38883:183;;;38920:45;38957:7;38920:36;:45::i;:::-;38883:183;;;38993:4;38987:10;;:2;:10;;;38983:83;;39014:40;39042:2;39046:7;39014:27;:40::i;:::-;38983:83;38883:183;38484:589;;;:::o;30968:321::-;31098:18;31104:2;31108:7;31098:5;:18::i;:::-;31149:54;31180:1;31184:2;31188:7;31197:5;31149:22;:54::i;:::-;31127:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30968:321;;;:::o;34368:803::-;34523:4;34544:15;:2;:13;;;:15::i;:::-;34540:624;;;34596:2;34580:36;;;34617:12;:10;:12::i;:::-;34631:4;34637:7;34646:5;34580:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34576:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34843:1;34826:6;:13;:18;34822:272;;;34869:60;;;;;;;;;;:::i;:::-;;;;;;;;34822:272;35044:6;35038:13;35029:6;35025:2;35021:15;35014:38;34576:533;34713:45;;;34703:55;;;:6;:55;;;;34696:62;;;;;34540:624;35148:4;35141:11;;34368:803;;;;;;;:::o;35743:126::-;;;;:::o;39796:164::-;39900:10;:17;;;;39873:15;:24;39889:7;39873:24;;;;;;;;;;;:44;;;;39928:10;39944:7;39928:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39796:164;:::o;40587:988::-;40853:22;40903:1;40878:22;40895:4;40878:16;:22::i;:::-;:26;;;;:::i;:::-;40853:51;;40915:18;40936:17;:26;40954:7;40936:26;;;;;;;;;;;;40915:47;;41083:14;41069:10;:28;41065:328;;41114:19;41136:12;:18;41149:4;41136:18;;;;;;;;;;;;;;;:34;41155:14;41136:34;;;;;;;;;;;;41114:56;;41220:11;41187:12;:18;41200:4;41187:18;;;;;;;;;;;;;;;:30;41206:10;41187:30;;;;;;;;;;;:44;;;;41337:10;41304:17;:30;41322:11;41304:30;;;;;;;;;;;:43;;;;41099:294;41065:328;41489:17;:26;41507:7;41489:26;;;;;;;;;;;41482:33;;;41533:12;:18;41546:4;41533:18;;;;;;;;;;;;;;;:34;41552:14;41533:34;;;;;;;;;;;41526:41;;;40668:907;;40587:988;;:::o;41870:1079::-;42123:22;42168:1;42148:10;:17;;;;:21;;;;:::i;:::-;42123:46;;42180:18;42201:15;:24;42217:7;42201:24;;;;;;;;;;;;42180:45;;42552:19;42574:10;42585:14;42574:26;;;;;;;;:::i;:::-;;;;;;;;;;42552:48;;42638:11;42613:10;42624;42613:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42749:10;42718:15;:28;42734:11;42718:28;;;;;;;;;;;:41;;;;42890:15;:24;42906:7;42890:24;;;;;;;;;;;42883:31;;;42925:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41941:1008;;;41870:1079;:::o;39374:221::-;39459:14;39476:20;39493:2;39476:16;:20::i;:::-;39459:37;;39534:7;39507:12;:16;39520:2;39507:16;;;;;;;;;;;;;;;:24;39524:6;39507:24;;;;;;;;;;;:34;;;;39581:6;39552:17;:26;39570:7;39552:26;;;;;;;;;;;:35;;;;39448:147;39374:221;;:::o;31625:382::-;31719:1;31705:16;;:2;:16;;;;31697:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31778:16;31786:7;31778;:16::i;:::-;31777:17;31769:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31840:45;31869:1;31873:2;31877:7;31840:20;:45::i;:::-;31915:1;31898:9;:13;31908:2;31898:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31946:2;31927:7;:16;31935:7;31927:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31991:7;31987:2;31966:33;;31983:1;31966:33;;;;;;;;;;;;31625:382;;:::o;13616:387::-;13676:4;13884:12;13951:7;13939:20;13931:28;;13994:1;13987:4;:8;13980:15;;;13616:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2391:79;;:::i;:::-;2353:2;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2343:263;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:2;;;2743:79;;:::i;:::-;2705:2;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2695:391;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:2;;;3240:79;;:::i;:::-;3202:2;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3192:519;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:2;;;3892:79;;:::i;:::-;3853:2;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:2;;;4476:79;;:::i;:::-;4440:2;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3843:817;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:2;;;4794:79;;:::i;:::-;4756:2;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4746:388;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5271:79;;:::i;:::-;5233:2;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5223:391;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:2;;;5733:79;;:::i;:::-;5695:2;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5685:262;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:2;;;6077:79;;:::i;:::-;6039:2;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;6029:273;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:2;;;6432:79;;:::i;:::-;6394:2;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:2;;;6632:79;;:::i;:::-;6596:2;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6384:433;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:2;;;6937:79;;:::i;:::-;6899:2;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6889:263;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7223:53;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7341:50;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;;;;;:::o;8516:366::-;8658:3;8679:67;8743:2;8738:3;8679:67;:::i;:::-;8672:74;;8755:93;8844:3;8755:93;:::i;:::-;8873:2;8868:3;8864:12;8857:19;;8662:220;;;:::o;8888:366::-;9030:3;9051:67;9115:2;9110:3;9051:67;:::i;:::-;9044:74;;9127:93;9216:3;9127:93;:::i;:::-;9245:2;9240:3;9236:12;9229:19;;9034:220;;;:::o;9260:366::-;9402:3;9423:67;9487:2;9482:3;9423:67;:::i;:::-;9416:74;;9499:93;9588:3;9499:93;:::i;:::-;9617:2;9612:3;9608:12;9601:19;;9406:220;;;:::o;9632:366::-;9774:3;9795:67;9859:2;9854:3;9795:67;:::i;:::-;9788:74;;9871:93;9960:3;9871:93;:::i;:::-;9989:2;9984:3;9980:12;9973:19;;9778:220;;;:::o;10004:366::-;10146:3;10167:67;10231:2;10226:3;10167:67;:::i;:::-;10160:74;;10243:93;10332:3;10243:93;:::i;:::-;10361:2;10356:3;10352:12;10345:19;;10150:220;;;:::o;10376:366::-;10518:3;10539:67;10603:2;10598:3;10539:67;:::i;:::-;10532:74;;10615:93;10704:3;10615:93;:::i;:::-;10733:2;10728:3;10724:12;10717:19;;10522:220;;;:::o;10748:366::-;10890:3;10911:67;10975:2;10970:3;10911:67;:::i;:::-;10904:74;;10987:93;11076:3;10987:93;:::i;:::-;11105:2;11100:3;11096:12;11089:19;;10894:220;;;:::o;11120:366::-;11262:3;11283:67;11347:2;11342:3;11283:67;:::i;:::-;11276:74;;11359:93;11448:3;11359:93;:::i;:::-;11477:2;11472:3;11468:12;11461:19;;11266:220;;;:::o;11492:366::-;11634:3;11655:67;11719:2;11714:3;11655:67;:::i;:::-;11648:74;;11731:93;11820:3;11731:93;:::i;:::-;11849:2;11844:3;11840:12;11833:19;;11638:220;;;:::o;11864:366::-;12006:3;12027:67;12091:2;12086:3;12027:67;:::i;:::-;12020:74;;12103:93;12192:3;12103:93;:::i;:::-;12221:2;12216:3;12212:12;12205:19;;12010:220;;;:::o;12236:366::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12382:220;;;:::o;12608:366::-;12750:3;12771:67;12835:2;12830:3;12771:67;:::i;:::-;12764:74;;12847:93;12936:3;12847:93;:::i;:::-;12965:2;12960:3;12956:12;12949:19;;12754:220;;;:::o;12980:366::-;13122:3;13143:67;13207:2;13202:3;13143:67;:::i;:::-;13136:74;;13219:93;13308:3;13219:93;:::i;:::-;13337:2;13332:3;13328:12;13321:19;;13126:220;;;:::o;13352:366::-;13494:3;13515:67;13579:2;13574:3;13515:67;:::i;:::-;13508:74;;13591:93;13680:3;13591:93;:::i;:::-;13709:2;13704:3;13700:12;13693:19;;13498:220;;;:::o;13724:366::-;13866:3;13887:67;13951:2;13946:3;13887:67;:::i;:::-;13880:74;;13963:93;14052:3;13963:93;:::i;:::-;14081:2;14076:3;14072:12;14065:19;;13870:220;;;:::o;14096:366::-;14238:3;14259:67;14323:2;14318:3;14259:67;:::i;:::-;14252:74;;14335:93;14424:3;14335:93;:::i;:::-;14453:2;14448:3;14444:12;14437:19;;14242:220;;;:::o;14468:366::-;14610:3;14631:67;14695:2;14690:3;14631:67;:::i;:::-;14624:74;;14707:93;14796:3;14707:93;:::i;:::-;14825:2;14820:3;14816:12;14809:19;;14614:220;;;:::o;14840:366::-;14982:3;15003:67;15067:2;15062:3;15003:67;:::i;:::-;14996:74;;15079:93;15168:3;15079:93;:::i;:::-;15197:2;15192:3;15188:12;15181:19;;14986:220;;;:::o;15212:366::-;15354:3;15375:67;15439:2;15434:3;15375:67;:::i;:::-;15368:74;;15451:93;15540:3;15451:93;:::i;:::-;15569:2;15564:3;15560:12;15553:19;;15358:220;;;:::o;15584:366::-;15726:3;15747:67;15811:2;15806:3;15747:67;:::i;:::-;15740:74;;15823:93;15912:3;15823:93;:::i;:::-;15941:2;15936:3;15932:12;15925:19;;15730:220;;;:::o;15956:366::-;16098:3;16119:67;16183:2;16178:3;16119:67;:::i;:::-;16112:74;;16195:93;16284:3;16195:93;:::i;:::-;16313:2;16308:3;16304:12;16297:19;;16102:220;;;:::o;16328:366::-;16470:3;16491:67;16555:2;16550:3;16491:67;:::i;:::-;16484:74;;16567:93;16656:3;16567:93;:::i;:::-;16685:2;16680:3;16676:12;16669:19;;16474:220;;;:::o;16700:366::-;16842:3;16863:67;16927:2;16922:3;16863:67;:::i;:::-;16856:74;;16939:93;17028:3;16939:93;:::i;:::-;17057:2;17052:3;17048:12;17041:19;;16846:220;;;:::o;17072:115::-;17157:23;17174:5;17157:23;:::i;:::-;17152:3;17145:36;17135:52;;:::o;17193:118::-;17280:24;17298:5;17280:24;:::i;:::-;17275:3;17268:37;17258:53;;:::o;17317:435::-;17497:3;17519:95;17610:3;17601:6;17519:95;:::i;:::-;17512:102;;17631:95;17722:3;17713:6;17631:95;:::i;:::-;17624:102;;17743:3;17736:10;;17501:251;;;;;:::o;17758:222::-;17851:4;17889:2;17878:9;17874:18;17866:26;;17902:71;17970:1;17959:9;17955:17;17946:6;17902:71;:::i;:::-;17856:124;;;;:::o;17986:640::-;18181:4;18219:3;18208:9;18204:19;18196:27;;18233:71;18301:1;18290:9;18286:17;18277:6;18233:71;:::i;:::-;18314:72;18382:2;18371:9;18367:18;18358:6;18314:72;:::i;:::-;18396;18464:2;18453:9;18449:18;18440:6;18396:72;:::i;:::-;18515:9;18509:4;18505:20;18500:2;18489:9;18485:18;18478:48;18543:76;18614:4;18605:6;18543:76;:::i;:::-;18535:84;;18186:440;;;;;;;:::o;18632:210::-;18719:4;18757:2;18746:9;18742:18;18734:26;;18770:65;18832:1;18821:9;18817:17;18808:6;18770:65;:::i;:::-;18724:118;;;;:::o;18848:313::-;18961:4;18999:2;18988:9;18984:18;18976:26;;19048:9;19042:4;19038:20;19034:1;19023:9;19019:17;19012:47;19076:78;19149:4;19140:6;19076:78;:::i;:::-;19068:86;;18966:195;;;;:::o;19167:419::-;19333:4;19371:2;19360:9;19356:18;19348:26;;19420:9;19414:4;19410:20;19406:1;19395:9;19391:17;19384:47;19448:131;19574:4;19448:131;:::i;:::-;19440:139;;19338:248;;;:::o;19592:419::-;19758:4;19796:2;19785:9;19781:18;19773:26;;19845:9;19839:4;19835:20;19831:1;19820:9;19816:17;19809:47;19873:131;19999:4;19873:131;:::i;:::-;19865:139;;19763:248;;;:::o;20017:419::-;20183:4;20221:2;20210:9;20206:18;20198:26;;20270:9;20264:4;20260:20;20256:1;20245:9;20241:17;20234:47;20298:131;20424:4;20298:131;:::i;:::-;20290:139;;20188:248;;;:::o;20442:419::-;20608:4;20646:2;20635:9;20631:18;20623:26;;20695:9;20689:4;20685:20;20681:1;20670:9;20666:17;20659:47;20723:131;20849:4;20723:131;:::i;:::-;20715:139;;20613:248;;;:::o;20867:419::-;21033:4;21071:2;21060:9;21056:18;21048:26;;21120:9;21114:4;21110:20;21106:1;21095:9;21091:17;21084:47;21148:131;21274:4;21148:131;:::i;:::-;21140:139;;21038:248;;;:::o;21292:419::-;21458:4;21496:2;21485:9;21481:18;21473:26;;21545:9;21539:4;21535:20;21531:1;21520:9;21516:17;21509:47;21573:131;21699:4;21573:131;:::i;:::-;21565:139;;21463:248;;;:::o;21717:419::-;21883:4;21921:2;21910:9;21906:18;21898:26;;21970:9;21964:4;21960:20;21956:1;21945:9;21941:17;21934:47;21998:131;22124:4;21998:131;:::i;:::-;21990:139;;21888:248;;;:::o;22142:419::-;22308:4;22346:2;22335:9;22331:18;22323:26;;22395:9;22389:4;22385:20;22381:1;22370:9;22366:17;22359:47;22423:131;22549:4;22423:131;:::i;:::-;22415:139;;22313:248;;;:::o;22567:419::-;22733:4;22771:2;22760:9;22756:18;22748:26;;22820:9;22814:4;22810:20;22806:1;22795:9;22791:17;22784:47;22848:131;22974:4;22848:131;:::i;:::-;22840:139;;22738:248;;;:::o;22992:419::-;23158:4;23196:2;23185:9;23181:18;23173:26;;23245:9;23239:4;23235:20;23231:1;23220:9;23216:17;23209:47;23273:131;23399:4;23273:131;:::i;:::-;23265:139;;23163:248;;;:::o;23417:419::-;23583:4;23621:2;23610:9;23606:18;23598:26;;23670:9;23664:4;23660:20;23656:1;23645:9;23641:17;23634:47;23698:131;23824:4;23698:131;:::i;:::-;23690:139;;23588:248;;;:::o;23842:419::-;24008:4;24046:2;24035:9;24031:18;24023:26;;24095:9;24089:4;24085:20;24081:1;24070:9;24066:17;24059:47;24123:131;24249:4;24123:131;:::i;:::-;24115:139;;24013:248;;;:::o;24267:419::-;24433:4;24471:2;24460:9;24456:18;24448:26;;24520:9;24514:4;24510:20;24506:1;24495:9;24491:17;24484:47;24548:131;24674:4;24548:131;:::i;:::-;24540:139;;24438:248;;;:::o;24692:419::-;24858:4;24896:2;24885:9;24881:18;24873:26;;24945:9;24939:4;24935:20;24931:1;24920:9;24916:17;24909:47;24973:131;25099:4;24973:131;:::i;:::-;24965:139;;24863:248;;;:::o;25117:419::-;25283:4;25321:2;25310:9;25306:18;25298:26;;25370:9;25364:4;25360:20;25356:1;25345:9;25341:17;25334:47;25398:131;25524:4;25398:131;:::i;:::-;25390:139;;25288:248;;;:::o;25542:419::-;25708:4;25746:2;25735:9;25731:18;25723:26;;25795:9;25789:4;25785:20;25781:1;25770:9;25766:17;25759:47;25823:131;25949:4;25823:131;:::i;:::-;25815:139;;25713:248;;;:::o;25967:419::-;26133:4;26171:2;26160:9;26156:18;26148:26;;26220:9;26214:4;26210:20;26206:1;26195:9;26191:17;26184:47;26248:131;26374:4;26248:131;:::i;:::-;26240:139;;26138:248;;;:::o;26392:419::-;26558:4;26596:2;26585:9;26581:18;26573:26;;26645:9;26639:4;26635:20;26631:1;26620:9;26616:17;26609:47;26673:131;26799:4;26673:131;:::i;:::-;26665:139;;26563:248;;;:::o;26817:419::-;26983:4;27021:2;27010:9;27006:18;26998:26;;27070:9;27064:4;27060:20;27056:1;27045:9;27041:17;27034:47;27098:131;27224:4;27098:131;:::i;:::-;27090:139;;26988:248;;;:::o;27242:419::-;27408:4;27446:2;27435:9;27431:18;27423:26;;27495:9;27489:4;27485:20;27481:1;27470:9;27466:17;27459:47;27523:131;27649:4;27523:131;:::i;:::-;27515:139;;27413:248;;;:::o;27667:419::-;27833:4;27871:2;27860:9;27856:18;27848:26;;27920:9;27914:4;27910:20;27906:1;27895:9;27891:17;27884:47;27948:131;28074:4;27948:131;:::i;:::-;27940:139;;27838:248;;;:::o;28092:419::-;28258:4;28296:2;28285:9;28281:18;28273:26;;28345:9;28339:4;28335:20;28331:1;28320:9;28316:17;28309:47;28373:131;28499:4;28373:131;:::i;:::-;28365:139;;28263:248;;;:::o;28517:419::-;28683:4;28721:2;28710:9;28706:18;28698:26;;28770:9;28764:4;28760:20;28756:1;28745:9;28741:17;28734:47;28798:131;28924:4;28798:131;:::i;:::-;28790:139;;28688:248;;;:::o;28942:218::-;29033:4;29071:2;29060:9;29056:18;29048:26;;29084:69;29150:1;29139:9;29135:17;29126:6;29084:69;:::i;:::-;29038:122;;;;:::o;29166:222::-;29259:4;29297:2;29286:9;29282:18;29274:26;;29310:71;29378:1;29367:9;29363:17;29354:6;29310:71;:::i;:::-;29264:124;;;;:::o;29394:129::-;29428:6;29455:20;;:::i;:::-;29445:30;;29484:33;29512:4;29504:6;29484:33;:::i;:::-;29435:88;;;:::o;29529:75::-;29562:6;29595:2;29589:9;29579:19;;29569:35;:::o;29610:307::-;29671:4;29761:18;29753:6;29750:30;29747:2;;;29783:18;;:::i;:::-;29747:2;29821:29;29843:6;29821:29;:::i;:::-;29813:37;;29905:4;29899;29895:15;29887:23;;29676:241;;;:::o;29923:308::-;29985:4;30075:18;30067:6;30064:30;30061:2;;;30097:18;;:::i;:::-;30061:2;30135:29;30157:6;30135:29;:::i;:::-;30127:37;;30219:4;30213;30209:15;30201:23;;29990:241;;;:::o;30237:98::-;30288:6;30322:5;30316:12;30306:22;;30295:40;;;:::o;30341:99::-;30393:6;30427:5;30421:12;30411:22;;30400:40;;;:::o;30446:168::-;30529:11;30563:6;30558:3;30551:19;30603:4;30598:3;30594:14;30579:29;;30541:73;;;;:::o;30620:169::-;30704:11;30738:6;30733:3;30726:19;30778:4;30773:3;30769:14;30754:29;;30716:73;;;;:::o;30795:148::-;30897:11;30934:3;30919:18;;30909:34;;;;:::o;30949:305::-;30989:3;31008:20;31026:1;31008:20;:::i;:::-;31003:25;;31042:20;31060:1;31042:20;:::i;:::-;31037:25;;31196:1;31128:66;31124:74;31121:1;31118:81;31115:2;;;31202:18;;:::i;:::-;31115:2;31246:1;31243;31239:9;31232:16;;30993:261;;;;:::o;31260:185::-;31300:1;31317:20;31335:1;31317:20;:::i;:::-;31312:25;;31351:20;31369:1;31351:20;:::i;:::-;31346:25;;31390:1;31380:2;;31395:18;;:::i;:::-;31380:2;31437:1;31434;31430:9;31425:14;;31302:143;;;;:::o;31451:348::-;31491:7;31514:20;31532:1;31514:20;:::i;:::-;31509:25;;31548:20;31566:1;31548:20;:::i;:::-;31543:25;;31736:1;31668:66;31664:74;31661:1;31658:81;31653:1;31646:9;31639:17;31635:105;31632:2;;;31743:18;;:::i;:::-;31632:2;31791:1;31788;31784:9;31773:20;;31499:300;;;;:::o;31805:191::-;31845:4;31865:20;31883:1;31865:20;:::i;:::-;31860:25;;31899:20;31917:1;31899:20;:::i;:::-;31894:25;;31938:1;31935;31932:8;31929:2;;;31943:18;;:::i;:::-;31929:2;31988:1;31985;31981:9;31973:17;;31850:146;;;;:::o;32002:96::-;32039:7;32068:24;32086:5;32068:24;:::i;:::-;32057:35;;32047:51;;;:::o;32104:90::-;32138:7;32181:5;32174:13;32167:21;32156:32;;32146:48;;;:::o;32200:149::-;32236:7;32276:66;32269:5;32265:78;32254:89;;32244:105;;;:::o;32355:89::-;32391:7;32431:6;32424:5;32420:18;32409:29;;32399:45;;;:::o;32450:126::-;32487:7;32527:42;32520:5;32516:54;32505:65;;32495:81;;;:::o;32582:77::-;32619:7;32648:5;32637:16;;32627:32;;;:::o;32665:154::-;32749:6;32744:3;32739;32726:30;32811:1;32802:6;32797:3;32793:16;32786:27;32716:103;;;:::o;32825:307::-;32893:1;32903:113;32917:6;32914:1;32911:13;32903:113;;;33002:1;32997:3;32993:11;32987:18;32983:1;32978:3;32974:11;32967:39;32939:2;32936:1;32932:10;32927:15;;32903:113;;;33034:6;33031:1;33028:13;33025:2;;;33114:1;33105:6;33100:3;33096:16;33089:27;33025:2;32874:258;;;;:::o;33138:320::-;33182:6;33219:1;33213:4;33209:12;33199:22;;33266:1;33260:4;33256:12;33287:18;33277:2;;33343:4;33335:6;33331:17;33321:27;;33277:2;33405;33397:6;33394:14;33374:18;33371:38;33368:2;;;33424:18;;:::i;:::-;33368:2;33189:269;;;;:::o;33464:281::-;33547:27;33569:4;33547:27;:::i;:::-;33539:6;33535:40;33677:6;33665:10;33662:22;33641:18;33629:10;33626:34;33623:62;33620:2;;;33688:18;;:::i;:::-;33620:2;33728:10;33724:2;33717:22;33507:238;;;:::o;33751:233::-;33790:3;33813:24;33831:5;33813:24;:::i;:::-;33804:33;;33859:66;33852:5;33849:77;33846:2;;;33929:18;;:::i;:::-;33846:2;33976:1;33969:5;33965:13;33958:20;;33794:190;;;:::o;33990:176::-;34022:1;34039:20;34057:1;34039:20;:::i;:::-;34034:25;;34073:20;34091:1;34073:20;:::i;:::-;34068:25;;34112:1;34102:2;;34117:18;;:::i;:::-;34102:2;34158:1;34155;34151:9;34146:14;;34024:142;;;;:::o;34172:180::-;34220:77;34217:1;34210:88;34317:4;34314:1;34307:15;34341:4;34338:1;34331:15;34358:180;34406:77;34403:1;34396:88;34503:4;34500:1;34493:15;34527:4;34524:1;34517:15;34544:180;34592:77;34589:1;34582:88;34689:4;34686:1;34679:15;34713:4;34710:1;34703:15;34730:180;34778:77;34775:1;34768:88;34875:4;34872:1;34865:15;34899:4;34896:1;34889:15;34916:180;34964:77;34961:1;34954:88;35061:4;35058:1;35051:15;35085:4;35082:1;35075:15;35102:180;35150:77;35147:1;35140:88;35247:4;35244:1;35237:15;35271:4;35268:1;35261:15;35288:117;35397:1;35394;35387:12;35411:117;35520:1;35517;35510:12;35534:117;35643:1;35640;35633:12;35657:117;35766:1;35763;35756:12;35780:102;35821:6;35872:2;35868:7;35863:2;35856:5;35852:14;35848:28;35838:38;;35828:54;;;:::o;35888:230::-;36028:34;36024:1;36016:6;36012:14;36005:58;36097:13;36092:2;36084:6;36080:15;36073:38;35994:124;:::o;36124:237::-;36264:34;36260:1;36252:6;36248:14;36241:58;36333:20;36328:2;36320:6;36316:15;36309:45;36230:131;:::o;36367:225::-;36507:34;36503:1;36495:6;36491:14;36484:58;36576:8;36571:2;36563:6;36559:15;36552:33;36473:119;:::o;36598:178::-;36738:30;36734:1;36726:6;36722:14;36715:54;36704:72;:::o;36782:172::-;36922:24;36918:1;36910:6;36906:14;36899:48;36888:66;:::o;36960:164::-;37100:16;37096:1;37088:6;37084:14;37077:40;37066:58;:::o;37130:223::-;37270:34;37266:1;37258:6;37254:14;37247:58;37339:6;37334:2;37326:6;37322:15;37315:31;37236:117;:::o;37359:175::-;37499:27;37495:1;37487:6;37483:14;37476:51;37465:69;:::o;37540:180::-;37680:32;37676:1;37668:6;37664:14;37657:56;37646:74;:::o;37726:231::-;37866:34;37862:1;37854:6;37850:14;37843:58;37935:14;37930:2;37922:6;37918:15;37911:39;37832:125;:::o;37963:243::-;38103:34;38099:1;38091:6;38087:14;38080:58;38172:26;38167:2;38159:6;38155:15;38148:51;38069:137;:::o;38212:229::-;38352:34;38348:1;38340:6;38336:14;38329:58;38421:12;38416:2;38408:6;38404:15;38397:37;38318:123;:::o;38447:222::-;38587:34;38583:1;38575:6;38571:14;38564:58;38656:5;38651:2;38643:6;38639:15;38632:30;38553:116;:::o;38675:228::-;38815:34;38811:1;38803:6;38799:14;38792:58;38884:11;38879:2;38871:6;38867:15;38860:36;38781:122;:::o;38909:182::-;39049:34;39045:1;39037:6;39033:14;39026:58;39015:76;:::o;39097:231::-;39237:34;39233:1;39225:6;39221:14;39214:58;39306:14;39301:2;39293:6;39289:15;39282:39;39203:125;:::o;39334:182::-;39474:34;39470:1;39462:6;39458:14;39451:58;39440:76;:::o;39522:228::-;39662:34;39658:1;39650:6;39646:14;39639:58;39731:11;39726:2;39718:6;39714:15;39707:36;39628:122;:::o;39756:234::-;39896:34;39892:1;39884:6;39880:14;39873:58;39965:17;39960:2;39952:6;39948:15;39941:42;39862:128;:::o;39996:167::-;40136:19;40132:1;40124:6;40120:14;40113:43;40102:61;:::o;40169:220::-;40309:34;40305:1;40297:6;40293:14;40286:58;40378:3;40373:2;40365:6;40361:15;40354:28;40275:114;:::o;40395:236::-;40535:34;40531:1;40523:6;40519:14;40512:58;40604:19;40599:2;40591:6;40587:15;40580:44;40501:130;:::o;40637:231::-;40777:34;40773:1;40765:6;40761:14;40754:58;40846:14;40841:2;40833:6;40829:15;40822:39;40743:125;:::o;40874:122::-;40947:24;40965:5;40947:24;:::i;:::-;40940:5;40937:35;40927:2;;40986:1;40983;40976:12;40927:2;40917:79;:::o;41002:116::-;41072:21;41087:5;41072:21;:::i;:::-;41065:5;41062:32;41052:2;;41108:1;41105;41098:12;41052:2;41042:76;:::o;41124:120::-;41196:23;41213:5;41196:23;:::i;:::-;41189:5;41186:34;41176:2;;41234:1;41231;41224:12;41176:2;41166:78;:::o;41250:122::-;41323:24;41341:5;41323:24;:::i;:::-;41316:5;41313:35;41303:2;;41362:1;41359;41352:12;41303:2;41293:79;:::o
Swarm Source
ipfs://968e2122e40a02f82353dd0e7fc06eef5ae13f87de7d2f046c28e9cf3024b102
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.