Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
9,517 ABHS
Holders
1,696
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3,524 ABHSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AngelBabyHitSquad
Compiler Version
v0.8.2+commit.661d1103
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-11 */ // Sources flattened with hardhat v2.6.8 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/security/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/cryptography/[email protected] pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } } pragma solidity ^0.8.2; contract AngelBabyHitSquad is ERC721, Ownable { using Address for address; using MerkleProof for bytes32[]; string public baseTokenURI; uint public mintPrice = 0.0777 ether; uint public collectionSize = 11111; uint public maxAngelsPerTx = 7; uint public totalSupply = 0; bool public mintStart = false; event Mint(address indexed owner, uint256 tokenId); constructor() ERC721("Angel Baby Hit Squad", "ABHS") { } function setMintState(bool _mintState) public onlyOwner { mintStart = _mintState; } function mintAngels() external payable { require(mintStart, "Minting has not started"); // verify that the client sent enough eth to pay for the mint uint remainder = msg.value % mintPrice; require(remainder == 0, "Eth sent must be a multiple of 0.0777"); // calculate the amount of tokens we are minting based on the amount of eth sent uint amount = msg.value / mintPrice; require(amount > 0, "At least 1 Angel must be minted"); require(amount <= maxAngelsPerTx, "Maximum of 5 Angels per transaction only"); _mintWithoutValidation(msg.sender, amount); } function mintGiveaways(address to, uint amount) external onlyOwner { require((totalSupply + amount) <= collectionSize, "Insufficient tokens remaining"); _mintWithoutValidation(to, amount); } function _mintWithoutValidation(address to, uint amount) internal { require((totalSupply + amount) <= collectionSize, "Sold out"); for (uint i = 0; i < amount; i++) { totalSupply += 1; _mint(to, totalSupply); emit Mint(to, totalSupply); } } function setMaxItemsPerTrx(uint _maxAngelsPerTrx) public onlyOwner { maxAngelsPerTx = _maxAngelsPerTrx; } function setBaseTokenURI(string memory _baseTokenURI) external onlyOwner { baseTokenURI = _baseTokenURI; } function withdrawAll() external onlyOwner { uint totalAmount = address(this).balance; uint amount1 = totalAmount * 41323 / 100000; sendEth(0x4c8F62f1498FA55D4158CdBFEA7783f84556a68e, amount1); uint amount2 = totalAmount * 23200 / 100000; sendEth(0xEcd5e98BD002708868F36bB6daA29e16f11b98C0, amount2); uint amount3 = totalAmount * 4650 / 100000; sendEth(0xB3E7355d9535008c186636f946dAF9Ed0529e827, amount3); uint amount4 = totalAmount * 13000 / 100000; sendEth(0x43bDB395E6d8015640f7BFe677a252B340B7237f, amount4); uint amount5 = totalAmount * 8100 / 100000; sendEth(0xc63b3D9e7632017b84816fd9b30762270f69663C, amount5); uint amount6 = totalAmount * 8100 / 100000; sendEth(0xD1D6B21C5f0c24E8d3940D90e58a0479321D2f3A, amount6); uint amount7 = totalAmount * 1627 / 100000; sendEth(0xEc1fbc010DDB1166004C81dc8035827A7a066a85, amount7); } function sendEth(address to, uint amount) internal { (bool success,) = to.call{value: amount}(""); require(success, "Failed to send ether"); } function _burn(uint256 tokenId) internal override(ERC721) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) { return string(abi.encodePacked(baseTokenURI, Strings.toString(tokenId))); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAngelsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintAngels","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintGiveaways","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAngelsPerTrx","type":"uint256"}],"name":"setMaxItemsPerTrx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_mintState","type":"bool"}],"name":"setMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526701140bbd030c4000600855612b676009556007600a556000600b556000600c60006101000a81548160ff0219169083151502179055503480156200004857600080fd5b506040518060400160405280601481526020017f416e67656c2042616279204869742053717561640000000000000000000000008152506040518060400160405280600481526020017f41424853000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000cd929190620001dd565b508060019080519060200190620000e6929190620001dd565b50505062000109620000fd6200010f60201b60201c565b6200011760201b60201c565b620002f2565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001eb906200028d565b90600052602060002090601f0160209004810192826200020f57600085556200025b565b82601f106200022a57805160ff19168380011785556200025b565b828001600101855582156200025b579182015b828111156200025a5782518255916020019190600101906200023d565b5b5090506200026a91906200026e565b5090565b5b80821115620002895760008160009055506001016200026f565b5090565b60006002820490506001821680620002a657607f821691505b60208210811415620002bd57620002bc620002c3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613ae980620003026000396000f3fe6080604052600436106101b75760003560e01c80636817c76c116100ec578063aa11c3171161008a578063d547cfb711610064578063d547cfb7146105c5578063ddc914bb146105f0578063e985e9c514610619578063f2fde38b14610656576101b7565b8063aa11c31714610536578063b88d4fde1461055f578063c87b56dd14610588576101b7565b8063853828b6116100c6578063853828b6146104a05780638da5cb5b146104b757806395d89b41146104e2578063a22cb4651461050d576101b7565b80636817c76c1461042157806370a082311461044c578063715018a614610489576101b7565b806323be96a21161015957806330176e131161013357806330176e131461036757806342842e0e1461039057806345c0f533146103b95780636352211e146103e4576101b7565b806323be96a214610309578063255e46851461031357806326412aca1461033e576101b7565b8063095ea7b311610195578063095ea7b314610261578063109f39cc1461028a57806318160ddd146102b557806323b872dd146102e0576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612799565b61067f565b6040516101f09190612d69565b60405180910390f35b34801561020557600080fd5b5061020e610761565b60405161021b9190612d84565b60405180910390f35b34801561023057600080fd5b5061024b6004803603810190610246919061282c565b6107f3565b6040516102589190612d02565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612734565b610878565b005b34801561029657600080fd5b5061029f610990565b6040516102ac9190613066565b60405180910390f35b3480156102c157600080fd5b506102ca610996565b6040516102d79190613066565b60405180910390f35b3480156102ec57600080fd5b506103076004803603810190610302919061262e565b61099c565b005b6103116109fc565b005b34801561031f57600080fd5b50610328610b48565b6040516103359190612d69565b60405180910390f35b34801561034a57600080fd5b5061036560048036038101906103609190612770565b610b5b565b005b34801561037357600080fd5b5061038e600480360381019061038991906127eb565b610bf4565b005b34801561039c57600080fd5b506103b760048036038101906103b2919061262e565b610c8a565b005b3480156103c557600080fd5b506103ce610caa565b6040516103db9190613066565b60405180910390f35b3480156103f057600080fd5b5061040b6004803603810190610406919061282c565b610cb0565b6040516104189190612d02565b60405180910390f35b34801561042d57600080fd5b50610436610d62565b6040516104439190613066565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906125c9565b610d68565b6040516104809190613066565b60405180910390f35b34801561049557600080fd5b5061049e610e20565b005b3480156104ac57600080fd5b506104b5610ea8565b005b3480156104c357600080fd5b506104cc6110e5565b6040516104d99190612d02565b60405180910390f35b3480156104ee57600080fd5b506104f761110f565b6040516105049190612d84565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f91906126f8565b6111a1565b005b34801561054257600080fd5b5061055d6004803603810190610558919061282c565b611322565b005b34801561056b57600080fd5b506105866004803603810190610581919061267d565b6113a8565b005b34801561059457600080fd5b506105af60048036038101906105aa919061282c565b61140a565b6040516105bc9190612d84565b60405180910390f35b3480156105d157600080fd5b506105da61143e565b6040516105e79190612d84565b60405180910390f35b3480156105fc57600080fd5b5061061760048036038101906106129190612734565b6114cc565b005b34801561062557600080fd5b50610640600480360381019061063b91906125f2565b6115a8565b60405161064d9190612d69565b60405180910390f35b34801561066257600080fd5b5061067d600480360381019061067891906125c9565b61163c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061075a575061075982611734565b5b9050919050565b60606000805461077090613336565b80601f016020809104026020016040519081016040528092919081815260200182805461079c90613336565b80156107e95780601f106107be576101008083540402835291602001916107e9565b820191906000526020600020905b8154815290600101906020018083116107cc57829003601f168201915b5050505050905090565b60006107fe8261179e565b61083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490612f26565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088382610cb0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108eb90612fa6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661091361180a565b73ffffffffffffffffffffffffffffffffffffffff16148061094257506109418161093c61180a565b6115a8565b5b610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097890612ea6565b60405180910390fd5b61098b8383611812565b505050565b600a5481565b600b5481565b6109ad6109a761180a565b826118cb565b6109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e390612fe6565b60405180910390fd5b6109f78383836119a9565b505050565b600c60009054906101000a900460ff16610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290613046565b60405180910390fd5b600060085434610a5b91906133e2565b905060008114610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9790612fc6565b60405180910390fd5b600060085434610ab091906131c1565b905060008111610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec90613026565b60405180910390fd5b600a54811115610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3190612e06565b60405180910390fd5b610b443382611c05565b5050565b600c60009054906101000a900460ff1681565b610b6361180a565b73ffffffffffffffffffffffffffffffffffffffff16610b816110e5565b73ffffffffffffffffffffffffffffffffffffffff1614610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce90612f46565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b610bfc61180a565b73ffffffffffffffffffffffffffffffffffffffff16610c1a6110e5565b73ffffffffffffffffffffffffffffffffffffffff1614610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6790612f46565b60405180910390fd5b8060079080519060200190610c869291906123ed565b5050565b610ca5838383604051806020016040528060008152506113a8565b505050565b60095481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5090612ee6565b60405180910390fd5b80915050919050565b60085481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd090612ec6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e2861180a565b73ffffffffffffffffffffffffffffffffffffffff16610e466110e5565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9390612f46565b60405180910390fd5b610ea66000611cf0565b565b610eb061180a565b73ffffffffffffffffffffffffffffffffffffffff16610ece6110e5565b73ffffffffffffffffffffffffffffffffffffffff1614610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b90612f46565b60405180910390fd5b60004790506000620186a061a16b83610f3d91906131f2565b610f4791906131c1565b9050610f67734c8f62f1498fa55d4158cdbfea7783f84556a68e82611db6565b6000620186a0615aa084610f7b91906131f2565b610f8591906131c1565b9050610fa573ecd5e98bd002708868f36bb6daa29e16f11b98c082611db6565b6000620186a061122a85610fb991906131f2565b610fc391906131c1565b9050610fe373b3e7355d9535008c186636f946daf9ed0529e82782611db6565b6000620186a06132c886610ff791906131f2565b61100191906131c1565b90506110217343bdb395e6d8015640f7bfe677a252b340b7237f82611db6565b6000620186a0611fa48761103591906131f2565b61103f91906131c1565b905061105f73c63b3d9e7632017b84816fd9b30762270f69663c82611db6565b6000620186a0611fa48861107391906131f2565b61107d91906131c1565b905061109d73d1d6b21c5f0c24e8d3940d90e58a0479321d2f3a82611db6565b6000620186a061065b896110b191906131f2565b6110bb91906131c1565b90506110db73ec1fbc010ddb1166004c81dc8035827a7a066a8582611db6565b5050505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461111e90613336565b80601f016020809104026020016040519081016040528092919081815260200182805461114a90613336565b80156111975780601f1061116c57610100808354040283529160200191611197565b820191906000526020600020905b81548152906001019060200180831161117a57829003601f168201915b5050505050905090565b6111a961180a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e90612e46565b60405180910390fd5b806005600061122461180a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112d161180a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113169190612d69565b60405180910390a35050565b61132a61180a565b73ffffffffffffffffffffffffffffffffffffffff166113486110e5565b73ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139590612f46565b60405180910390fd5b80600a8190555050565b6113b96113b361180a565b836118cb565b6113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90612fe6565b60405180910390fd5b61140484848484611e67565b50505050565b6060600761141783611ec3565b604051602001611428929190612cc9565b6040516020818303038152906040529050919050565b6007805461144b90613336565b80601f016020809104026020016040519081016040528092919081815260200182805461147790613336565b80156114c45780601f10611499576101008083540402835291602001916114c4565b820191906000526020600020905b8154815290600101906020018083116114a757829003601f168201915b505050505081565b6114d461180a565b73ffffffffffffffffffffffffffffffffffffffff166114f26110e5565b73ffffffffffffffffffffffffffffffffffffffff1614611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90612f46565b60405180910390fd5b60095481600b54611559919061316b565b111561159a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159190612e86565b60405180910390fd5b6115a48282611c05565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61164461180a565b73ffffffffffffffffffffffffffffffffffffffff166116626110e5565b73ffffffffffffffffffffffffffffffffffffffff16146116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af90612f46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f90612dc6565b60405180910390fd5b61173181611cf0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661188583610cb0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118d68261179e565b611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c90612e66565b60405180910390fd5b600061192083610cb0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061198f57508373ffffffffffffffffffffffffffffffffffffffff16611977846107f3565b73ffffffffffffffffffffffffffffffffffffffff16145b806119a0575061199f81856115a8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119c982610cb0565b73ffffffffffffffffffffffffffffffffffffffff1614611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690612f86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690612e26565b60405180910390fd5b611a9a838383612070565b611aa5600082611812565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af5919061324c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b4c919061316b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60095481600b54611c16919061316b565b1115611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e90613006565b60405180910390fd5b60005b81811015611ceb576001600b6000828254611c75919061316b565b92505081905550611c8883600b54612075565b8273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885600b54604051611cd09190613066565b60405180910390a28080611ce390613399565b915050611c5a565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611ddc90612ced565b60006040518083038185875af1925050503d8060008114611e19576040519150601f19603f3d011682016040523d82523d6000602084013e611e1e565b606091505b5050905080611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5990612f66565b60405180910390fd5b505050565b611e728484846119a9565b611e7e84848484612243565b611ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb490612da6565b60405180910390fd5b50505050565b60606000821415611f0b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061206b565b600082905060005b60008214611f3d578080611f2690613399565b915050600a82611f3691906131c1565b9150611f13565b60008167ffffffffffffffff811115611f7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611fb15781602001600182028036833780820191505090505b5090505b6000851461206457600182611fca919061324c565b9150600a85611fd991906133e2565b6030611fe5919061316b565b60f81b818381518110612021577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561205d91906131c1565b9450611fb5565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc90612f06565b60405180910390fd5b6120ee8161179e565b1561212e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212590612de6565b60405180910390fd5b61213a60008383612070565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461218a919061316b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006122648473ffffffffffffffffffffffffffffffffffffffff166123da565b156123cd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261228d61180a565b8786866040518563ffffffff1660e01b81526004016122af9493929190612d1d565b602060405180830381600087803b1580156122c957600080fd5b505af19250505080156122fa57506040513d601f19601f820116820180604052508101906122f791906127c2565b60015b61237d573d806000811461232a576040519150601f19603f3d011682016040523d82523d6000602084013e61232f565b606091505b50600081511415612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c90612da6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123d2565b600190505b949350505050565b600080823b905060008111915050919050565b8280546123f990613336565b90600052602060002090601f01602090048101928261241b5760008555612462565b82601f1061243457805160ff1916838001178555612462565b82800160010185558215612462579182015b82811115612461578251825591602001919060010190612446565b5b50905061246f9190612473565b5090565b5b8082111561248c576000816000905550600101612474565b5090565b60006124a361249e846130a6565b613081565b9050828152602081018484840111156124bb57600080fd5b6124c68482856132f4565b509392505050565b60006124e16124dc846130d7565b613081565b9050828152602081018484840111156124f957600080fd5b6125048482856132f4565b509392505050565b60008135905061251b81613a57565b92915050565b60008135905061253081613a6e565b92915050565b60008135905061254581613a85565b92915050565b60008151905061255a81613a85565b92915050565b600082601f83011261257157600080fd5b8135612581848260208601612490565b91505092915050565b600082601f83011261259b57600080fd5b81356125ab8482602086016124ce565b91505092915050565b6000813590506125c381613a9c565b92915050565b6000602082840312156125db57600080fd5b60006125e98482850161250c565b91505092915050565b6000806040838503121561260557600080fd5b60006126138582860161250c565b92505060206126248582860161250c565b9150509250929050565b60008060006060848603121561264357600080fd5b60006126518682870161250c565b93505060206126628682870161250c565b9250506040612673868287016125b4565b9150509250925092565b6000806000806080858703121561269357600080fd5b60006126a18782880161250c565b94505060206126b28782880161250c565b93505060406126c3878288016125b4565b925050606085013567ffffffffffffffff8111156126e057600080fd5b6126ec87828801612560565b91505092959194509250565b6000806040838503121561270b57600080fd5b60006127198582860161250c565b925050602061272a85828601612521565b9150509250929050565b6000806040838503121561274757600080fd5b60006127558582860161250c565b9250506020612766858286016125b4565b9150509250929050565b60006020828403121561278257600080fd5b600061279084828501612521565b91505092915050565b6000602082840312156127ab57600080fd5b60006127b984828501612536565b91505092915050565b6000602082840312156127d457600080fd5b60006127e28482850161254b565b91505092915050565b6000602082840312156127fd57600080fd5b600082013567ffffffffffffffff81111561281757600080fd5b6128238482850161258a565b91505092915050565b60006020828403121561283e57600080fd5b600061284c848285016125b4565b91505092915050565b61285e81613280565b82525050565b61286d81613292565b82525050565b600061287e8261311d565b6128888185613133565b9350612898818560208601613303565b6128a1816134cf565b840191505092915050565b60006128b782613128565b6128c1818561314f565b93506128d1818560208601613303565b6128da816134cf565b840191505092915050565b60006128f082613128565b6128fa8185613160565b935061290a818560208601613303565b80840191505092915050565b6000815461292381613336565b61292d8186613160565b9450600182166000811461294857600181146129595761298c565b60ff1983168652818601935061298c565b61296285613108565b60005b8381101561298457815481890152600182019150602081019050612965565b838801955050505b50505092915050565b60006129a260328361314f565b91506129ad826134e0565b604082019050919050565b60006129c560268361314f565b91506129d08261352f565b604082019050919050565b60006129e8601c8361314f565b91506129f38261357e565b602082019050919050565b6000612a0b60288361314f565b9150612a16826135a7565b604082019050919050565b6000612a2e60248361314f565b9150612a39826135f6565b604082019050919050565b6000612a5160198361314f565b9150612a5c82613645565b602082019050919050565b6000612a74602c8361314f565b9150612a7f8261366e565b604082019050919050565b6000612a97601d8361314f565b9150612aa2826136bd565b602082019050919050565b6000612aba60388361314f565b9150612ac5826136e6565b604082019050919050565b6000612add602a8361314f565b9150612ae882613735565b604082019050919050565b6000612b0060298361314f565b9150612b0b82613784565b604082019050919050565b6000612b2360208361314f565b9150612b2e826137d3565b602082019050919050565b6000612b46602c8361314f565b9150612b51826137fc565b604082019050919050565b6000612b6960208361314f565b9150612b748261384b565b602082019050919050565b6000612b8c60148361314f565b9150612b9782613874565b602082019050919050565b6000612baf60298361314f565b9150612bba8261389d565b604082019050919050565b6000612bd260218361314f565b9150612bdd826138ec565b604082019050919050565b6000612bf5600083613144565b9150612c008261393b565b600082019050919050565b6000612c1860258361314f565b9150612c238261393e565b604082019050919050565b6000612c3b60318361314f565b9150612c468261398d565b604082019050919050565b6000612c5e60088361314f565b9150612c69826139dc565b602082019050919050565b6000612c81601f8361314f565b9150612c8c82613a05565b602082019050919050565b6000612ca460178361314f565b9150612caf82613a2e565b602082019050919050565b612cc3816132ea565b82525050565b6000612cd58285612916565b9150612ce182846128e5565b91508190509392505050565b6000612cf882612be8565b9150819050919050565b6000602082019050612d176000830184612855565b92915050565b6000608082019050612d326000830187612855565b612d3f6020830186612855565b612d4c6040830185612cba565b8181036060830152612d5e8184612873565b905095945050505050565b6000602082019050612d7e6000830184612864565b92915050565b60006020820190508181036000830152612d9e81846128ac565b905092915050565b60006020820190508181036000830152612dbf81612995565b9050919050565b60006020820190508181036000830152612ddf816129b8565b9050919050565b60006020820190508181036000830152612dff816129db565b9050919050565b60006020820190508181036000830152612e1f816129fe565b9050919050565b60006020820190508181036000830152612e3f81612a21565b9050919050565b60006020820190508181036000830152612e5f81612a44565b9050919050565b60006020820190508181036000830152612e7f81612a67565b9050919050565b60006020820190508181036000830152612e9f81612a8a565b9050919050565b60006020820190508181036000830152612ebf81612aad565b9050919050565b60006020820190508181036000830152612edf81612ad0565b9050919050565b60006020820190508181036000830152612eff81612af3565b9050919050565b60006020820190508181036000830152612f1f81612b16565b9050919050565b60006020820190508181036000830152612f3f81612b39565b9050919050565b60006020820190508181036000830152612f5f81612b5c565b9050919050565b60006020820190508181036000830152612f7f81612b7f565b9050919050565b60006020820190508181036000830152612f9f81612ba2565b9050919050565b60006020820190508181036000830152612fbf81612bc5565b9050919050565b60006020820190508181036000830152612fdf81612c0b565b9050919050565b60006020820190508181036000830152612fff81612c2e565b9050919050565b6000602082019050818103600083015261301f81612c51565b9050919050565b6000602082019050818103600083015261303f81612c74565b9050919050565b6000602082019050818103600083015261305f81612c97565b9050919050565b600060208201905061307b6000830184612cba565b92915050565b600061308b61309c565b90506130978282613368565b919050565b6000604051905090565b600067ffffffffffffffff8211156130c1576130c06134a0565b5b6130ca826134cf565b9050602081019050919050565b600067ffffffffffffffff8211156130f2576130f16134a0565b5b6130fb826134cf565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613176826132ea565b9150613181836132ea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131b6576131b5613413565b5b828201905092915050565b60006131cc826132ea565b91506131d7836132ea565b9250826131e7576131e6613442565b5b828204905092915050565b60006131fd826132ea565b9150613208836132ea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561324157613240613413565b5b828202905092915050565b6000613257826132ea565b9150613262836132ea565b92508282101561327557613274613413565b5b828203905092915050565b600061328b826132ca565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613321578082015181840152602081019050613306565b83811115613330576000848401525b50505050565b6000600282049050600182168061334e57607f821691505b6020821081141561336257613361613471565b5b50919050565b613371826134cf565b810181811067ffffffffffffffff821117156133905761338f6134a0565b5b80604052505050565b60006133a4826132ea565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133d7576133d6613413565b5b600182019050919050565b60006133ed826132ea565b91506133f8836132ea565b92508261340857613407613442565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d6178696d756d206f66203520416e67656c7320706572207472616e7361637460008201527f696f6e206f6e6c79000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e7420746f6b656e732072656d61696e696e67000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4574682073656e74206d7573742062652061206d756c7469706c65206f66203060008201527f2e30373737000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f4174206c65617374203120416e67656c206d757374206265206d696e74656400600082015250565b7f4d696e74696e6720686173206e6f742073746172746564000000000000000000600082015250565b613a6081613280565b8114613a6b57600080fd5b50565b613a7781613292565b8114613a8257600080fd5b50565b613a8e8161329e565b8114613a9957600080fd5b50565b613aa5816132ea565b8114613ab057600080fd5b5056fea2646970667358221220d512615bed73e414e2f4a0f1b6e8fd6c1023566ad4aa5a89c59cf8d5bdfd2e0a64736f6c63430008020033
Deployed Bytecode
0x6080604052600436106101b75760003560e01c80636817c76c116100ec578063aa11c3171161008a578063d547cfb711610064578063d547cfb7146105c5578063ddc914bb146105f0578063e985e9c514610619578063f2fde38b14610656576101b7565b8063aa11c31714610536578063b88d4fde1461055f578063c87b56dd14610588576101b7565b8063853828b6116100c6578063853828b6146104a05780638da5cb5b146104b757806395d89b41146104e2578063a22cb4651461050d576101b7565b80636817c76c1461042157806370a082311461044c578063715018a614610489576101b7565b806323be96a21161015957806330176e131161013357806330176e131461036757806342842e0e1461039057806345c0f533146103b95780636352211e146103e4576101b7565b806323be96a214610309578063255e46851461031357806326412aca1461033e576101b7565b8063095ea7b311610195578063095ea7b314610261578063109f39cc1461028a57806318160ddd146102b557806323b872dd146102e0576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612799565b61067f565b6040516101f09190612d69565b60405180910390f35b34801561020557600080fd5b5061020e610761565b60405161021b9190612d84565b60405180910390f35b34801561023057600080fd5b5061024b6004803603810190610246919061282c565b6107f3565b6040516102589190612d02565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612734565b610878565b005b34801561029657600080fd5b5061029f610990565b6040516102ac9190613066565b60405180910390f35b3480156102c157600080fd5b506102ca610996565b6040516102d79190613066565b60405180910390f35b3480156102ec57600080fd5b506103076004803603810190610302919061262e565b61099c565b005b6103116109fc565b005b34801561031f57600080fd5b50610328610b48565b6040516103359190612d69565b60405180910390f35b34801561034a57600080fd5b5061036560048036038101906103609190612770565b610b5b565b005b34801561037357600080fd5b5061038e600480360381019061038991906127eb565b610bf4565b005b34801561039c57600080fd5b506103b760048036038101906103b2919061262e565b610c8a565b005b3480156103c557600080fd5b506103ce610caa565b6040516103db9190613066565b60405180910390f35b3480156103f057600080fd5b5061040b6004803603810190610406919061282c565b610cb0565b6040516104189190612d02565b60405180910390f35b34801561042d57600080fd5b50610436610d62565b6040516104439190613066565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906125c9565b610d68565b6040516104809190613066565b60405180910390f35b34801561049557600080fd5b5061049e610e20565b005b3480156104ac57600080fd5b506104b5610ea8565b005b3480156104c357600080fd5b506104cc6110e5565b6040516104d99190612d02565b60405180910390f35b3480156104ee57600080fd5b506104f761110f565b6040516105049190612d84565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f91906126f8565b6111a1565b005b34801561054257600080fd5b5061055d6004803603810190610558919061282c565b611322565b005b34801561056b57600080fd5b506105866004803603810190610581919061267d565b6113a8565b005b34801561059457600080fd5b506105af60048036038101906105aa919061282c565b61140a565b6040516105bc9190612d84565b60405180910390f35b3480156105d157600080fd5b506105da61143e565b6040516105e79190612d84565b60405180910390f35b3480156105fc57600080fd5b5061061760048036038101906106129190612734565b6114cc565b005b34801561062557600080fd5b50610640600480360381019061063b91906125f2565b6115a8565b60405161064d9190612d69565b60405180910390f35b34801561066257600080fd5b5061067d600480360381019061067891906125c9565b61163c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061075a575061075982611734565b5b9050919050565b60606000805461077090613336565b80601f016020809104026020016040519081016040528092919081815260200182805461079c90613336565b80156107e95780601f106107be576101008083540402835291602001916107e9565b820191906000526020600020905b8154815290600101906020018083116107cc57829003601f168201915b5050505050905090565b60006107fe8261179e565b61083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490612f26565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088382610cb0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108eb90612fa6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661091361180a565b73ffffffffffffffffffffffffffffffffffffffff16148061094257506109418161093c61180a565b6115a8565b5b610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097890612ea6565b60405180910390fd5b61098b8383611812565b505050565b600a5481565b600b5481565b6109ad6109a761180a565b826118cb565b6109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e390612fe6565b60405180910390fd5b6109f78383836119a9565b505050565b600c60009054906101000a900460ff16610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290613046565b60405180910390fd5b600060085434610a5b91906133e2565b905060008114610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9790612fc6565b60405180910390fd5b600060085434610ab091906131c1565b905060008111610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec90613026565b60405180910390fd5b600a54811115610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3190612e06565b60405180910390fd5b610b443382611c05565b5050565b600c60009054906101000a900460ff1681565b610b6361180a565b73ffffffffffffffffffffffffffffffffffffffff16610b816110e5565b73ffffffffffffffffffffffffffffffffffffffff1614610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce90612f46565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b610bfc61180a565b73ffffffffffffffffffffffffffffffffffffffff16610c1a6110e5565b73ffffffffffffffffffffffffffffffffffffffff1614610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6790612f46565b60405180910390fd5b8060079080519060200190610c869291906123ed565b5050565b610ca5838383604051806020016040528060008152506113a8565b505050565b60095481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5090612ee6565b60405180910390fd5b80915050919050565b60085481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd090612ec6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e2861180a565b73ffffffffffffffffffffffffffffffffffffffff16610e466110e5565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9390612f46565b60405180910390fd5b610ea66000611cf0565b565b610eb061180a565b73ffffffffffffffffffffffffffffffffffffffff16610ece6110e5565b73ffffffffffffffffffffffffffffffffffffffff1614610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b90612f46565b60405180910390fd5b60004790506000620186a061a16b83610f3d91906131f2565b610f4791906131c1565b9050610f67734c8f62f1498fa55d4158cdbfea7783f84556a68e82611db6565b6000620186a0615aa084610f7b91906131f2565b610f8591906131c1565b9050610fa573ecd5e98bd002708868f36bb6daa29e16f11b98c082611db6565b6000620186a061122a85610fb991906131f2565b610fc391906131c1565b9050610fe373b3e7355d9535008c186636f946daf9ed0529e82782611db6565b6000620186a06132c886610ff791906131f2565b61100191906131c1565b90506110217343bdb395e6d8015640f7bfe677a252b340b7237f82611db6565b6000620186a0611fa48761103591906131f2565b61103f91906131c1565b905061105f73c63b3d9e7632017b84816fd9b30762270f69663c82611db6565b6000620186a0611fa48861107391906131f2565b61107d91906131c1565b905061109d73d1d6b21c5f0c24e8d3940d90e58a0479321d2f3a82611db6565b6000620186a061065b896110b191906131f2565b6110bb91906131c1565b90506110db73ec1fbc010ddb1166004c81dc8035827a7a066a8582611db6565b5050505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461111e90613336565b80601f016020809104026020016040519081016040528092919081815260200182805461114a90613336565b80156111975780601f1061116c57610100808354040283529160200191611197565b820191906000526020600020905b81548152906001019060200180831161117a57829003601f168201915b5050505050905090565b6111a961180a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e90612e46565b60405180910390fd5b806005600061122461180a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112d161180a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113169190612d69565b60405180910390a35050565b61132a61180a565b73ffffffffffffffffffffffffffffffffffffffff166113486110e5565b73ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139590612f46565b60405180910390fd5b80600a8190555050565b6113b96113b361180a565b836118cb565b6113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90612fe6565b60405180910390fd5b61140484848484611e67565b50505050565b6060600761141783611ec3565b604051602001611428929190612cc9565b6040516020818303038152906040529050919050565b6007805461144b90613336565b80601f016020809104026020016040519081016040528092919081815260200182805461147790613336565b80156114c45780601f10611499576101008083540402835291602001916114c4565b820191906000526020600020905b8154815290600101906020018083116114a757829003601f168201915b505050505081565b6114d461180a565b73ffffffffffffffffffffffffffffffffffffffff166114f26110e5565b73ffffffffffffffffffffffffffffffffffffffff1614611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90612f46565b60405180910390fd5b60095481600b54611559919061316b565b111561159a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159190612e86565b60405180910390fd5b6115a48282611c05565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61164461180a565b73ffffffffffffffffffffffffffffffffffffffff166116626110e5565b73ffffffffffffffffffffffffffffffffffffffff16146116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af90612f46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f90612dc6565b60405180910390fd5b61173181611cf0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661188583610cb0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118d68261179e565b611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c90612e66565b60405180910390fd5b600061192083610cb0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061198f57508373ffffffffffffffffffffffffffffffffffffffff16611977846107f3565b73ffffffffffffffffffffffffffffffffffffffff16145b806119a0575061199f81856115a8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119c982610cb0565b73ffffffffffffffffffffffffffffffffffffffff1614611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690612f86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690612e26565b60405180910390fd5b611a9a838383612070565b611aa5600082611812565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af5919061324c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b4c919061316b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60095481600b54611c16919061316b565b1115611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e90613006565b60405180910390fd5b60005b81811015611ceb576001600b6000828254611c75919061316b565b92505081905550611c8883600b54612075565b8273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885600b54604051611cd09190613066565b60405180910390a28080611ce390613399565b915050611c5a565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611ddc90612ced565b60006040518083038185875af1925050503d8060008114611e19576040519150601f19603f3d011682016040523d82523d6000602084013e611e1e565b606091505b5050905080611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5990612f66565b60405180910390fd5b505050565b611e728484846119a9565b611e7e84848484612243565b611ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb490612da6565b60405180910390fd5b50505050565b60606000821415611f0b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061206b565b600082905060005b60008214611f3d578080611f2690613399565b915050600a82611f3691906131c1565b9150611f13565b60008167ffffffffffffffff811115611f7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611fb15781602001600182028036833780820191505090505b5090505b6000851461206457600182611fca919061324c565b9150600a85611fd991906133e2565b6030611fe5919061316b565b60f81b818381518110612021577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561205d91906131c1565b9450611fb5565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc90612f06565b60405180910390fd5b6120ee8161179e565b1561212e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212590612de6565b60405180910390fd5b61213a60008383612070565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461218a919061316b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006122648473ffffffffffffffffffffffffffffffffffffffff166123da565b156123cd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261228d61180a565b8786866040518563ffffffff1660e01b81526004016122af9493929190612d1d565b602060405180830381600087803b1580156122c957600080fd5b505af19250505080156122fa57506040513d601f19601f820116820180604052508101906122f791906127c2565b60015b61237d573d806000811461232a576040519150601f19603f3d011682016040523d82523d6000602084013e61232f565b606091505b50600081511415612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c90612da6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123d2565b600190505b949350505050565b600080823b905060008111915050919050565b8280546123f990613336565b90600052602060002090601f01602090048101928261241b5760008555612462565b82601f1061243457805160ff1916838001178555612462565b82800160010185558215612462579182015b82811115612461578251825591602001919060010190612446565b5b50905061246f9190612473565b5090565b5b8082111561248c576000816000905550600101612474565b5090565b60006124a361249e846130a6565b613081565b9050828152602081018484840111156124bb57600080fd5b6124c68482856132f4565b509392505050565b60006124e16124dc846130d7565b613081565b9050828152602081018484840111156124f957600080fd5b6125048482856132f4565b509392505050565b60008135905061251b81613a57565b92915050565b60008135905061253081613a6e565b92915050565b60008135905061254581613a85565b92915050565b60008151905061255a81613a85565b92915050565b600082601f83011261257157600080fd5b8135612581848260208601612490565b91505092915050565b600082601f83011261259b57600080fd5b81356125ab8482602086016124ce565b91505092915050565b6000813590506125c381613a9c565b92915050565b6000602082840312156125db57600080fd5b60006125e98482850161250c565b91505092915050565b6000806040838503121561260557600080fd5b60006126138582860161250c565b92505060206126248582860161250c565b9150509250929050565b60008060006060848603121561264357600080fd5b60006126518682870161250c565b93505060206126628682870161250c565b9250506040612673868287016125b4565b9150509250925092565b6000806000806080858703121561269357600080fd5b60006126a18782880161250c565b94505060206126b28782880161250c565b93505060406126c3878288016125b4565b925050606085013567ffffffffffffffff8111156126e057600080fd5b6126ec87828801612560565b91505092959194509250565b6000806040838503121561270b57600080fd5b60006127198582860161250c565b925050602061272a85828601612521565b9150509250929050565b6000806040838503121561274757600080fd5b60006127558582860161250c565b9250506020612766858286016125b4565b9150509250929050565b60006020828403121561278257600080fd5b600061279084828501612521565b91505092915050565b6000602082840312156127ab57600080fd5b60006127b984828501612536565b91505092915050565b6000602082840312156127d457600080fd5b60006127e28482850161254b565b91505092915050565b6000602082840312156127fd57600080fd5b600082013567ffffffffffffffff81111561281757600080fd5b6128238482850161258a565b91505092915050565b60006020828403121561283e57600080fd5b600061284c848285016125b4565b91505092915050565b61285e81613280565b82525050565b61286d81613292565b82525050565b600061287e8261311d565b6128888185613133565b9350612898818560208601613303565b6128a1816134cf565b840191505092915050565b60006128b782613128565b6128c1818561314f565b93506128d1818560208601613303565b6128da816134cf565b840191505092915050565b60006128f082613128565b6128fa8185613160565b935061290a818560208601613303565b80840191505092915050565b6000815461292381613336565b61292d8186613160565b9450600182166000811461294857600181146129595761298c565b60ff1983168652818601935061298c565b61296285613108565b60005b8381101561298457815481890152600182019150602081019050612965565b838801955050505b50505092915050565b60006129a260328361314f565b91506129ad826134e0565b604082019050919050565b60006129c560268361314f565b91506129d08261352f565b604082019050919050565b60006129e8601c8361314f565b91506129f38261357e565b602082019050919050565b6000612a0b60288361314f565b9150612a16826135a7565b604082019050919050565b6000612a2e60248361314f565b9150612a39826135f6565b604082019050919050565b6000612a5160198361314f565b9150612a5c82613645565b602082019050919050565b6000612a74602c8361314f565b9150612a7f8261366e565b604082019050919050565b6000612a97601d8361314f565b9150612aa2826136bd565b602082019050919050565b6000612aba60388361314f565b9150612ac5826136e6565b604082019050919050565b6000612add602a8361314f565b9150612ae882613735565b604082019050919050565b6000612b0060298361314f565b9150612b0b82613784565b604082019050919050565b6000612b2360208361314f565b9150612b2e826137d3565b602082019050919050565b6000612b46602c8361314f565b9150612b51826137fc565b604082019050919050565b6000612b6960208361314f565b9150612b748261384b565b602082019050919050565b6000612b8c60148361314f565b9150612b9782613874565b602082019050919050565b6000612baf60298361314f565b9150612bba8261389d565b604082019050919050565b6000612bd260218361314f565b9150612bdd826138ec565b604082019050919050565b6000612bf5600083613144565b9150612c008261393b565b600082019050919050565b6000612c1860258361314f565b9150612c238261393e565b604082019050919050565b6000612c3b60318361314f565b9150612c468261398d565b604082019050919050565b6000612c5e60088361314f565b9150612c69826139dc565b602082019050919050565b6000612c81601f8361314f565b9150612c8c82613a05565b602082019050919050565b6000612ca460178361314f565b9150612caf82613a2e565b602082019050919050565b612cc3816132ea565b82525050565b6000612cd58285612916565b9150612ce182846128e5565b91508190509392505050565b6000612cf882612be8565b9150819050919050565b6000602082019050612d176000830184612855565b92915050565b6000608082019050612d326000830187612855565b612d3f6020830186612855565b612d4c6040830185612cba565b8181036060830152612d5e8184612873565b905095945050505050565b6000602082019050612d7e6000830184612864565b92915050565b60006020820190508181036000830152612d9e81846128ac565b905092915050565b60006020820190508181036000830152612dbf81612995565b9050919050565b60006020820190508181036000830152612ddf816129b8565b9050919050565b60006020820190508181036000830152612dff816129db565b9050919050565b60006020820190508181036000830152612e1f816129fe565b9050919050565b60006020820190508181036000830152612e3f81612a21565b9050919050565b60006020820190508181036000830152612e5f81612a44565b9050919050565b60006020820190508181036000830152612e7f81612a67565b9050919050565b60006020820190508181036000830152612e9f81612a8a565b9050919050565b60006020820190508181036000830152612ebf81612aad565b9050919050565b60006020820190508181036000830152612edf81612ad0565b9050919050565b60006020820190508181036000830152612eff81612af3565b9050919050565b60006020820190508181036000830152612f1f81612b16565b9050919050565b60006020820190508181036000830152612f3f81612b39565b9050919050565b60006020820190508181036000830152612f5f81612b5c565b9050919050565b60006020820190508181036000830152612f7f81612b7f565b9050919050565b60006020820190508181036000830152612f9f81612ba2565b9050919050565b60006020820190508181036000830152612fbf81612bc5565b9050919050565b60006020820190508181036000830152612fdf81612c0b565b9050919050565b60006020820190508181036000830152612fff81612c2e565b9050919050565b6000602082019050818103600083015261301f81612c51565b9050919050565b6000602082019050818103600083015261303f81612c74565b9050919050565b6000602082019050818103600083015261305f81612c97565b9050919050565b600060208201905061307b6000830184612cba565b92915050565b600061308b61309c565b90506130978282613368565b919050565b6000604051905090565b600067ffffffffffffffff8211156130c1576130c06134a0565b5b6130ca826134cf565b9050602081019050919050565b600067ffffffffffffffff8211156130f2576130f16134a0565b5b6130fb826134cf565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613176826132ea565b9150613181836132ea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131b6576131b5613413565b5b828201905092915050565b60006131cc826132ea565b91506131d7836132ea565b9250826131e7576131e6613442565b5b828204905092915050565b60006131fd826132ea565b9150613208836132ea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561324157613240613413565b5b828202905092915050565b6000613257826132ea565b9150613262836132ea565b92508282101561327557613274613413565b5b828203905092915050565b600061328b826132ca565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613321578082015181840152602081019050613306565b83811115613330576000848401525b50505050565b6000600282049050600182168061334e57607f821691505b6020821081141561336257613361613471565b5b50919050565b613371826134cf565b810181811067ffffffffffffffff821117156133905761338f6134a0565b5b80604052505050565b60006133a4826132ea565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133d7576133d6613413565b5b600182019050919050565b60006133ed826132ea565b91506133f8836132ea565b92508261340857613407613442565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d6178696d756d206f66203520416e67656c7320706572207472616e7361637460008201527f696f6e206f6e6c79000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e7420746f6b656e732072656d61696e696e67000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4574682073656e74206d7573742062652061206d756c7469706c65206f66203060008201527f2e30373737000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f4174206c65617374203120416e67656c206d757374206265206d696e74656400600082015250565b7f4d696e74696e6720686173206e6f742073746172746564000000000000000000600082015250565b613a6081613280565b8114613a6b57600080fd5b50565b613a7781613292565b8114613a8257600080fd5b50565b613a8e8161329e565b8114613a9957600080fd5b50565b613aa5816132ea565b8114613ab057600080fd5b5056fea2646970667358221220d512615bed73e414e2f4a0f1b6e8fd6c1023566ad4aa5a89c59cf8d5bdfd2e0a64736f6c63430008020033
Deployed Bytecode Sourcemap
39164:3503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20786:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21731:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23290:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22813:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39410:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39447:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24180:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39756:650;;;:::i;:::-;;39483:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39651:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41083:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24590:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39369:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21425:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39326:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21155:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36826:94;;;;;;;;;;;;;:::i;:::-;;41211:988;;;;;;;;;;;;;:::i;:::-;;36175:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21900:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23583:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40956:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24846:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42485:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39291:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40414:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23949:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37075:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20786:305;20888:4;20940:25;20925:40;;;:11;:40;;;;:105;;;;20997:33;20982:48;;;:11;:48;;;;20925:105;:158;;;;21047:36;21071:11;21047:23;:36::i;:::-;20925:158;20905:178;;20786:305;;;:::o;21731:100::-;21785:13;21818:5;21811:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21731:100;:::o;23290:221::-;23366:7;23394:16;23402:7;23394;:16::i;:::-;23386:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23479:15;:24;23495:7;23479:24;;;;;;;;;;;;;;;;;;;;;23472:31;;23290:221;;;:::o;22813:411::-;22894:13;22910:23;22925:7;22910:14;:23::i;:::-;22894:39;;22958:5;22952:11;;:2;:11;;;;22944:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23052:5;23036:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23061:37;23078:5;23085:12;:10;:12::i;:::-;23061:16;:37::i;:::-;23036:62;23014:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23195:21;23204:2;23208:7;23195:8;:21::i;:::-;22813:411;;;:::o;39410:30::-;;;;:::o;39447:27::-;;;;:::o;24180:339::-;24375:41;24394:12;:10;:12::i;:::-;24408:7;24375:18;:41::i;:::-;24367:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24483:28;24493:4;24499:2;24503:7;24483:9;:28::i;:::-;24180:339;;;:::o;39756:650::-;39814:9;;;;;;;;;;;39806:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;39935:14;39964:9;;39952;:21;;;;:::i;:::-;39935:38;;40005:1;39992:9;:14;39984:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40151:11;40177:9;;40165;:21;;;;:::i;:::-;40151:35;;40216:1;40207:6;:10;40199:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;40284:14;;40274:6;:24;;40266:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40356:42;40379:10;40391:6;40356:22;:42::i;:::-;39756:650;;:::o;39483:29::-;;;;;;;;;;;;;:::o;39651:97::-;36406:12;:10;:12::i;:::-;36395:23;;:7;:5;:7::i;:::-;:23;;;36387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39730:10:::1;39718:9;;:22;;;;;;;;;;;;;;;;;;39651:97:::0;:::o;41083:120::-;36406:12;:10;:12::i;:::-;36395:23;;:7;:5;:7::i;:::-;:23;;;36387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41182:13:::1;41167:12;:28;;;;;;;;;;;;:::i;:::-;;41083:120:::0;:::o;24590:185::-;24728:39;24745:4;24751:2;24755:7;24728:39;;;;;;;;;;;;:16;:39::i;:::-;24590:185;;;:::o;39369:34::-;;;;:::o;21425:239::-;21497:7;21517:13;21533:7;:16;21541:7;21533:16;;;;;;;;;;;;;;;;;;;;;21517:32;;21585:1;21568:19;;:5;:19;;;;21560:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21651:5;21644:12;;;21425:239;;;:::o;39326:36::-;;;;:::o;21155:208::-;21227:7;21272:1;21255:19;;:5;:19;;;;21247:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21339:9;:16;21349:5;21339:16;;;;;;;;;;;;;;;;21332:23;;21155:208;;;:::o;36826:94::-;36406:12;:10;:12::i;:::-;36395:23;;:7;:5;:7::i;:::-;:23;;;36387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36891:21:::1;36909:1;36891:9;:21::i;:::-;36826:94::o:0;41211:988::-;36406:12;:10;:12::i;:::-;36395:23;;:7;:5;:7::i;:::-;:23;;;36387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41266:16:::1;41285:21;41266:40;;41319:12;41356:6;41348:5;41334:11;:19;;;;:::i;:::-;:28;;;;:::i;:::-;41319:43;;41373:60;41381:42;41425:7;41373;:60::i;:::-;41446:12;41483:6;41475:5;41461:11;:19;;;;:::i;:::-;:28;;;;:::i;:::-;41446:43;;41500:60;41508:42;41552:7;41500;:60::i;:::-;41573:12;41609:6;41602:4;41588:11;:18;;;;:::i;:::-;:27;;;;:::i;:::-;41573:42;;41626:60;41634:42;41678:7;41626;:60::i;:::-;41699:12;41736:6;41728:5;41714:11;:19;;;;:::i;:::-;:28;;;;:::i;:::-;41699:43;;41753:60;41761:42;41805:7;41753;:60::i;:::-;41826:12;41862:6;41855:4;41841:11;:18;;;;:::i;:::-;:27;;;;:::i;:::-;41826:42;;41879:60;41887:42;41931:7;41879;:60::i;:::-;41952:12;41988:6;41981:4;41967:11;:18;;;;:::i;:::-;:27;;;;:::i;:::-;41952:42;;42005:60;42013:42;42057:7;42005;:60::i;:::-;42078:12;42114:6;42107:4;42093:11;:18;;;;:::i;:::-;:27;;;;:::i;:::-;42078:42;;42131:60;42139:42;42183:7;42131;:60::i;:::-;36466:1;;;;;;;;41211:988::o:0;36175:87::-;36221:7;36248:6;;;;;;;;;;;36241:13;;36175:87;:::o;21900:104::-;21956:13;21989:7;21982:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21900:104;:::o;23583:295::-;23698:12;:10;:12::i;:::-;23686:24;;:8;:24;;;;23678:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23798:8;23753:18;:32;23772:12;:10;:12::i;:::-;23753:32;;;;;;;;;;;;;;;:42;23786:8;23753:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23851:8;23822:48;;23837:12;:10;:12::i;:::-;23822:48;;;23861:8;23822:48;;;;;;:::i;:::-;;;;;;;;23583:295;;:::o;40956:119::-;36406:12;:10;:12::i;:::-;36395:23;;:7;:5;:7::i;:::-;:23;;;36387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41051:16:::1;41034:14;:33;;;;40956:119:::0;:::o;24846:328::-;25021:41;25040:12;:10;:12::i;:::-;25054:7;25021:18;:41::i;:::-;25013:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25127:39;25141:4;25147:2;25151:7;25160:5;25127:13;:39::i;:::-;24846:328;;;;:::o;42485:179::-;42558:13;42615:12;42629:25;42646:7;42629:16;:25::i;:::-;42598:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42584:72;;42485:179;;;:::o;39291:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40414:215::-;36406:12;:10;:12::i;:::-;36395:23;;:7;:5;:7::i;:::-;:23;;;36387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40526:14:::1;;40515:6;40501:11;;:20;;;;:::i;:::-;40500:40;;40492:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;40587:34;40610:2;40614:6;40587:22;:34::i;:::-;40414:215:::0;;:::o;23949:164::-;24046:4;24070:18;:25;24089:5;24070:25;;;;;;;;;;;;;;;:35;24096:8;24070:35;;;;;;;;;;;;;;;;;;;;;;;;;24063:42;;23949:164;;;;:::o;37075:192::-;36406:12;:10;:12::i;:::-;36395:23;;:7;:5;:7::i;:::-;:23;;;36387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37184:1:::1;37164:22;;:8;:22;;;;37156:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37240:19;37250:8;37240:9;:19::i;:::-;37075:192:::0;:::o;19286:157::-;19371:4;19410:25;19395:40;;;:11;:40;;;;19388:47;;19286:157;;;:::o;26684:127::-;26749:4;26801:1;26773:30;;:7;:16;26781:7;26773:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26766:37;;26684:127;;;:::o;16194:98::-;16247:7;16274:10;16267:17;;16194:98;:::o;30666:174::-;30768:2;30741:15;:24;30757:7;30741:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30824:7;30820:2;30786:46;;30795:23;30810:7;30795:14;:23::i;:::-;30786:46;;;;;;;;;;;;30666:174;;:::o;26978:348::-;27071:4;27096:16;27104:7;27096;:16::i;:::-;27088:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27172:13;27188:23;27203:7;27188:14;:23::i;:::-;27172:39;;27241:5;27230:16;;:7;:16;;;:51;;;;27274:7;27250:31;;:20;27262:7;27250:11;:20::i;:::-;:31;;;27230:51;:87;;;;27285:32;27302:5;27309:7;27285:16;:32::i;:::-;27230:87;27222:96;;;26978:348;;;;:::o;29970:578::-;30129:4;30102:31;;:23;30117:7;30102:14;:23::i;:::-;:31;;;30094:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30212:1;30198:16;;:2;:16;;;;30190:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30268:39;30289:4;30295:2;30299:7;30268:20;:39::i;:::-;30372:29;30389:1;30393:7;30372:8;:29::i;:::-;30433:1;30414:9;:15;30424:4;30414:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30462:1;30445:9;:13;30455:2;30445:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30493:2;30474:7;:16;30482:7;30474:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30532:7;30528:2;30513:27;;30522:4;30513:27;;;;;;;;;;;;29970:578;;;:::o;40637:311::-;40748:14;;40737:6;40723:11;;:20;;;;:::i;:::-;40722:40;;40714:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40791:6;40786:155;40807:6;40803:1;:10;40786:155;;;40850:1;40835:11;;:16;;;;;;;:::i;:::-;;;;;;;;40866:22;40872:2;40876:11;;40866:5;:22::i;:::-;40913:2;40908:21;;;40917:11;;40908:21;;;;;;:::i;:::-;;;;;;;;40815:3;;;;;:::i;:::-;;;;40786:155;;;;40637:311;;:::o;37275:173::-;37331:16;37350:6;;;;;;;;;;;37331:25;;37376:8;37367:6;;:17;;;;;;;;;;;;;;;;;;37431:8;37400:40;;37421:8;37400:40;;;;;;;;;;;;37275:173;;:::o;42207:165::-;42270:12;42287:2;:7;;42302:6;42287:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42269:44;;;42332:7;42324:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;42207:165;;;:::o;26056:315::-;26213:28;26223:4;26229:2;26233:7;26213:9;:28::i;:::-;26260:48;26283:4;26289:2;26293:7;26302:5;26260:22;:48::i;:::-;26252:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26056:315;;;;:::o;16725:723::-;16781:13;17011:1;17002:5;:10;16998:53;;;17029:10;;;;;;;;;;;;;;;;;;;;;16998:53;17061:12;17076:5;17061:20;;17092:14;17117:78;17132:1;17124:4;:9;17117:78;;17150:8;;;;;:::i;:::-;;;;17181:2;17173:10;;;;;:::i;:::-;;;17117:78;;;17205:19;17237:6;17227:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17205:39;;17255:154;17271:1;17262:5;:10;17255:154;;17299:1;17289:11;;;;;:::i;:::-;;;17366:2;17358:5;:10;;;;:::i;:::-;17345:2;:24;;;;:::i;:::-;17332:39;;17315:6;17322;17315:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17395:2;17386:11;;;;;:::i;:::-;;;17255:154;;;17433:6;17419:21;;;;;16725:723;;;;:::o;32776:126::-;;;;:::o;28662:382::-;28756:1;28742:16;;:2;:16;;;;28734:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28815:16;28823:7;28815;:16::i;:::-;28814:17;28806:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28877:45;28906:1;28910:2;28914:7;28877:20;:45::i;:::-;28952:1;28935:9;:13;28945:2;28935:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28983:2;28964:7;:16;28972:7;28964:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29028:7;29024:2;29003:33;;29020:1;29003:33;;;;;;;;;;;;28662:382;;:::o;31405:799::-;31560:4;31581:15;:2;:13;;;:15::i;:::-;31577:620;;;31633:2;31617:36;;;31654:12;:10;:12::i;:::-;31668:4;31674:7;31683:5;31617:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31613:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31876:1;31859:6;:13;:18;31855:272;;;31902:60;;;;;;;;;;:::i;:::-;;;;;;;;31855:272;32077:6;32071:13;32062:6;32058:2;32054:15;32047:38;31613:529;31750:41;;;31740:51;;;:6;:51;;;;31733:58;;;;;31577:620;32181:4;32174:11;;31405:799;;;;;;;:::o;8232:387::-;8292:4;8500:12;8567:7;8555:20;8547:28;;8610:1;8603:4;:8;8596:15;;;8232:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;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;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;;;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;;;;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;;;;;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;;;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;;;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:256::-;;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:50;5114:7;5105:6;5094:9;5090:22;5072:50;:::i;:::-;5062:60;;5018:114;4946:193;;;;:::o;5145:260::-;;5252:2;5240:9;5231:7;5227:23;5223:32;5220:2;;;5268:1;5265;5258:12;5220:2;5311:1;5336:52;5380:7;5371:6;5360:9;5356:22;5336:52;:::i;:::-;5326:62;;5282:116;5210:195;;;;:::o;5411:282::-;;5529:2;5517:9;5508:7;5504:23;5500:32;5497:2;;;5545:1;5542;5535:12;5497:2;5588:1;5613:63;5668:7;5659:6;5648:9;5644:22;5613:63;:::i;:::-;5603:73;;5559:127;5487:206;;;;:::o;5699:375::-;;5817:2;5805:9;5796:7;5792:23;5788:32;5785:2;;;5833:1;5830;5823:12;5785:2;5904:1;5893:9;5889:17;5876:31;5934:18;5926:6;5923:30;5920:2;;;5966:1;5963;5956:12;5920:2;5994:63;6049:7;6040:6;6029:9;6025:22;5994:63;:::i;:::-;5984:73;;5847:220;5775:299;;;;:::o;6080:262::-;;6188:2;6176:9;6167:7;6163:23;6159:32;6156:2;;;6204:1;6201;6194:12;6156:2;6247:1;6272:53;6317:7;6308:6;6297:9;6293:22;6272:53;:::i;:::-;6262:63;;6218:117;6146:196;;;;:::o;6348:118::-;6435:24;6453:5;6435:24;:::i;:::-;6430:3;6423:37;6413:53;;:::o;6472:109::-;6553:21;6568:5;6553:21;:::i;:::-;6548:3;6541:34;6531:50;;:::o;6587:360::-;;6701:38;6733:5;6701:38;:::i;:::-;6755:70;6818:6;6813:3;6755:70;:::i;:::-;6748:77;;6834:52;6879:6;6874:3;6867:4;6860:5;6856:16;6834:52;:::i;:::-;6911:29;6933:6;6911:29;:::i;:::-;6906:3;6902:39;6895:46;;6677:270;;;;;:::o;6953:364::-;;7069:39;7102:5;7069:39;:::i;:::-;7124:71;7188:6;7183:3;7124:71;:::i;:::-;7117:78;;7204:52;7249:6;7244:3;7237:4;7230:5;7226:16;7204:52;:::i;:::-;7281:29;7303:6;7281:29;:::i;:::-;7276:3;7272:39;7265:46;;7045:272;;;;;:::o;7323:377::-;;7457:39;7490:5;7457:39;:::i;:::-;7512:89;7594:6;7589:3;7512:89;:::i;:::-;7505:96;;7610:52;7655:6;7650:3;7643:4;7636:5;7632:16;7610:52;:::i;:::-;7687:6;7682:3;7678:16;7671:23;;7433:267;;;;;:::o;7730:845::-;;7870:5;7864:12;7899:36;7925:9;7899:36;:::i;:::-;7951:89;8033:6;8028:3;7951:89;:::i;:::-;7944:96;;8071:1;8060:9;8056:17;8087:1;8082:137;;;;8233:1;8228:341;;;;8049:520;;8082:137;8166:4;8162:9;8151;8147:25;8142:3;8135:38;8202:6;8197:3;8193:16;8186:23;;8082:137;;8228:341;8295:38;8327:5;8295:38;:::i;:::-;8355:1;8369:154;8383:6;8380:1;8377:13;8369:154;;;8457:7;8451:14;8447:1;8442:3;8438:11;8431:35;8507:1;8498:7;8494:15;8483:26;;8405:4;8402:1;8398:12;8393:17;;8369:154;;;8552:6;8547:3;8543:16;8536:23;;8235:334;;8049:520;;7837:738;;;;;;:::o;8581:366::-;;8744:67;8808:2;8803:3;8744:67;:::i;:::-;8737:74;;8820:93;8909:3;8820:93;:::i;:::-;8938:2;8933:3;8929:12;8922:19;;8727:220;;;:::o;8953:366::-;;9116:67;9180:2;9175:3;9116:67;:::i;:::-;9109:74;;9192:93;9281:3;9192:93;:::i;:::-;9310:2;9305:3;9301:12;9294:19;;9099:220;;;:::o;9325:366::-;;9488:67;9552:2;9547:3;9488:67;:::i;:::-;9481:74;;9564:93;9653:3;9564:93;:::i;:::-;9682:2;9677:3;9673:12;9666:19;;9471:220;;;:::o;9697:366::-;;9860:67;9924:2;9919:3;9860:67;:::i;:::-;9853:74;;9936:93;10025:3;9936:93;:::i;:::-;10054:2;10049:3;10045:12;10038:19;;9843:220;;;:::o;10069:366::-;;10232:67;10296:2;10291:3;10232:67;:::i;:::-;10225:74;;10308:93;10397:3;10308:93;:::i;:::-;10426:2;10421:3;10417:12;10410:19;;10215:220;;;:::o;10441:366::-;;10604:67;10668:2;10663:3;10604:67;:::i;:::-;10597:74;;10680:93;10769:3;10680:93;:::i;:::-;10798:2;10793:3;10789:12;10782:19;;10587:220;;;:::o;10813:366::-;;10976:67;11040:2;11035:3;10976:67;:::i;:::-;10969:74;;11052:93;11141:3;11052:93;:::i;:::-;11170:2;11165:3;11161:12;11154:19;;10959:220;;;:::o;11185:366::-;;11348:67;11412:2;11407:3;11348:67;:::i;:::-;11341:74;;11424:93;11513:3;11424:93;:::i;:::-;11542:2;11537:3;11533:12;11526:19;;11331:220;;;:::o;11557:366::-;;11720:67;11784:2;11779:3;11720:67;:::i;:::-;11713:74;;11796:93;11885:3;11796:93;:::i;:::-;11914:2;11909:3;11905:12;11898:19;;11703:220;;;:::o;11929:366::-;;12092:67;12156:2;12151:3;12092:67;:::i;:::-;12085:74;;12168:93;12257:3;12168:93;:::i;:::-;12286:2;12281:3;12277:12;12270:19;;12075:220;;;:::o;12301:366::-;;12464:67;12528:2;12523:3;12464:67;:::i;:::-;12457:74;;12540:93;12629:3;12540:93;:::i;:::-;12658:2;12653:3;12649:12;12642:19;;12447:220;;;:::o;12673:366::-;;12836:67;12900:2;12895:3;12836:67;:::i;:::-;12829:74;;12912:93;13001:3;12912:93;:::i;:::-;13030:2;13025:3;13021:12;13014:19;;12819:220;;;:::o;13045:366::-;;13208:67;13272:2;13267:3;13208:67;:::i;:::-;13201:74;;13284:93;13373:3;13284:93;:::i;:::-;13402:2;13397:3;13393:12;13386:19;;13191:220;;;:::o;13417:366::-;;13580:67;13644:2;13639:3;13580:67;:::i;:::-;13573:74;;13656:93;13745:3;13656:93;:::i;:::-;13774:2;13769:3;13765:12;13758:19;;13563:220;;;:::o;13789:366::-;;13952:67;14016:2;14011:3;13952:67;:::i;:::-;13945:74;;14028:93;14117:3;14028:93;:::i;:::-;14146:2;14141:3;14137:12;14130:19;;13935:220;;;:::o;14161:366::-;;14324:67;14388:2;14383:3;14324:67;:::i;:::-;14317:74;;14400:93;14489:3;14400:93;:::i;:::-;14518:2;14513:3;14509:12;14502:19;;14307:220;;;:::o;14533:366::-;;14696:67;14760:2;14755:3;14696:67;:::i;:::-;14689:74;;14772:93;14861:3;14772:93;:::i;:::-;14890:2;14885:3;14881:12;14874:19;;14679:220;;;:::o;14905:398::-;;15085:83;15166:1;15161:3;15085:83;:::i;:::-;15078:90;;15177:93;15266:3;15177:93;:::i;:::-;15295:1;15290:3;15286:11;15279:18;;15068:235;;;:::o;15309:366::-;;15472:67;15536:2;15531:3;15472:67;:::i;:::-;15465:74;;15548:93;15637:3;15548:93;:::i;:::-;15666:2;15661:3;15657:12;15650:19;;15455:220;;;:::o;15681:366::-;;15844:67;15908:2;15903:3;15844:67;:::i;:::-;15837:74;;15920:93;16009:3;15920:93;:::i;:::-;16038:2;16033:3;16029:12;16022:19;;15827:220;;;:::o;16053:365::-;;16216:66;16280:1;16275:3;16216:66;:::i;:::-;16209:73;;16291:93;16380:3;16291:93;:::i;:::-;16409:2;16404:3;16400:12;16393:19;;16199:219;;;:::o;16424:366::-;;16587:67;16651:2;16646:3;16587:67;:::i;:::-;16580:74;;16663:93;16752:3;16663:93;:::i;:::-;16781:2;16776:3;16772:12;16765:19;;16570:220;;;:::o;16796:366::-;;16959:67;17023:2;17018:3;16959:67;:::i;:::-;16952:74;;17035:93;17124:3;17035:93;:::i;:::-;17153:2;17148:3;17144:12;17137:19;;16942:220;;;:::o;17168:118::-;17255:24;17273:5;17255:24;:::i;:::-;17250:3;17243:37;17233:53;;:::o;17292:429::-;;17491:92;17579:3;17570:6;17491:92;:::i;:::-;17484:99;;17600:95;17691:3;17682:6;17600:95;:::i;:::-;17593:102;;17712:3;17705:10;;17473:248;;;;;:::o;17727:379::-;;17933:147;18076:3;17933:147;:::i;:::-;17926:154;;18097:3;18090:10;;17915:191;;;:::o;18112:222::-;;18243:2;18232:9;18228:18;18220:26;;18256:71;18324:1;18313:9;18309:17;18300:6;18256:71;:::i;:::-;18210:124;;;;:::o;18340:640::-;;18573:3;18562:9;18558:19;18550:27;;18587:71;18655:1;18644:9;18640:17;18631:6;18587:71;:::i;:::-;18668:72;18736:2;18725:9;18721:18;18712:6;18668:72;:::i;:::-;18750;18818:2;18807:9;18803:18;18794:6;18750:72;:::i;:::-;18869:9;18863:4;18859:20;18854:2;18843:9;18839:18;18832:48;18897:76;18968:4;18959:6;18897:76;:::i;:::-;18889:84;;18540:440;;;;;;;:::o;18986:210::-;;19111:2;19100:9;19096:18;19088:26;;19124:65;19186:1;19175:9;19171:17;19162:6;19124:65;:::i;:::-;19078:118;;;;:::o;19202:313::-;;19353:2;19342:9;19338:18;19330:26;;19402:9;19396:4;19392:20;19388:1;19377:9;19373:17;19366:47;19430:78;19503:4;19494:6;19430:78;:::i;:::-;19422:86;;19320:195;;;;:::o;19521:419::-;;19725:2;19714:9;19710:18;19702:26;;19774:9;19768:4;19764:20;19760:1;19749:9;19745:17;19738:47;19802:131;19928:4;19802:131;:::i;:::-;19794:139;;19692:248;;;:::o;19946:419::-;;20150:2;20139:9;20135:18;20127:26;;20199:9;20193:4;20189:20;20185:1;20174:9;20170:17;20163:47;20227:131;20353:4;20227:131;:::i;:::-;20219:139;;20117:248;;;:::o;20371:419::-;;20575:2;20564:9;20560:18;20552:26;;20624:9;20618:4;20614:20;20610:1;20599:9;20595:17;20588:47;20652:131;20778:4;20652:131;:::i;:::-;20644:139;;20542:248;;;:::o;20796:419::-;;21000:2;20989:9;20985:18;20977:26;;21049:9;21043:4;21039:20;21035:1;21024:9;21020:17;21013:47;21077:131;21203:4;21077:131;:::i;:::-;21069:139;;20967:248;;;:::o;21221:419::-;;21425:2;21414:9;21410:18;21402:26;;21474:9;21468:4;21464:20;21460:1;21449:9;21445:17;21438:47;21502:131;21628:4;21502:131;:::i;:::-;21494:139;;21392:248;;;:::o;21646:419::-;;21850:2;21839:9;21835:18;21827:26;;21899:9;21893:4;21889:20;21885:1;21874:9;21870:17;21863:47;21927:131;22053:4;21927:131;:::i;:::-;21919:139;;21817:248;;;:::o;22071:419::-;;22275:2;22264:9;22260:18;22252:26;;22324:9;22318:4;22314:20;22310:1;22299:9;22295:17;22288:47;22352:131;22478:4;22352:131;:::i;:::-;22344:139;;22242:248;;;:::o;22496:419::-;;22700:2;22689:9;22685:18;22677:26;;22749:9;22743:4;22739:20;22735:1;22724:9;22720:17;22713:47;22777:131;22903:4;22777:131;:::i;:::-;22769:139;;22667:248;;;:::o;22921:419::-;;23125:2;23114:9;23110:18;23102:26;;23174:9;23168:4;23164:20;23160:1;23149:9;23145:17;23138:47;23202:131;23328:4;23202:131;:::i;:::-;23194:139;;23092:248;;;:::o;23346:419::-;;23550:2;23539:9;23535:18;23527:26;;23599:9;23593:4;23589:20;23585:1;23574:9;23570:17;23563:47;23627:131;23753:4;23627:131;:::i;:::-;23619:139;;23517:248;;;:::o;23771:419::-;;23975:2;23964:9;23960:18;23952:26;;24024:9;24018:4;24014:20;24010:1;23999:9;23995:17;23988:47;24052:131;24178:4;24052:131;:::i;:::-;24044:139;;23942:248;;;:::o;24196:419::-;;24400:2;24389:9;24385:18;24377:26;;24449:9;24443:4;24439:20;24435:1;24424:9;24420:17;24413:47;24477:131;24603:4;24477:131;:::i;:::-;24469:139;;24367:248;;;:::o;24621:419::-;;24825:2;24814:9;24810:18;24802:26;;24874:9;24868:4;24864:20;24860:1;24849:9;24845:17;24838:47;24902:131;25028:4;24902:131;:::i;:::-;24894:139;;24792:248;;;:::o;25046:419::-;;25250:2;25239:9;25235:18;25227:26;;25299:9;25293:4;25289:20;25285:1;25274:9;25270:17;25263:47;25327:131;25453:4;25327:131;:::i;:::-;25319:139;;25217:248;;;:::o;25471:419::-;;25675:2;25664:9;25660:18;25652:26;;25724:9;25718:4;25714:20;25710:1;25699:9;25695:17;25688:47;25752:131;25878:4;25752:131;:::i;:::-;25744:139;;25642:248;;;:::o;25896:419::-;;26100:2;26089:9;26085:18;26077:26;;26149:9;26143:4;26139:20;26135:1;26124:9;26120:17;26113:47;26177:131;26303:4;26177:131;:::i;:::-;26169:139;;26067:248;;;:::o;26321:419::-;;26525:2;26514:9;26510:18;26502:26;;26574:9;26568:4;26564:20;26560:1;26549:9;26545:17;26538:47;26602:131;26728:4;26602:131;:::i;:::-;26594:139;;26492:248;;;:::o;26746:419::-;;26950:2;26939:9;26935:18;26927:26;;26999:9;26993:4;26989:20;26985:1;26974:9;26970:17;26963:47;27027:131;27153:4;27027:131;:::i;:::-;27019:139;;26917:248;;;:::o;27171:419::-;;27375:2;27364:9;27360:18;27352:26;;27424:9;27418:4;27414:20;27410:1;27399:9;27395:17;27388:47;27452:131;27578:4;27452:131;:::i;:::-;27444:139;;27342:248;;;:::o;27596:419::-;;27800:2;27789:9;27785:18;27777:26;;27849:9;27843:4;27839:20;27835:1;27824:9;27820:17;27813:47;27877:131;28003:4;27877:131;:::i;:::-;27869:139;;27767:248;;;:::o;28021:419::-;;28225:2;28214:9;28210:18;28202:26;;28274:9;28268:4;28264:20;28260:1;28249:9;28245:17;28238:47;28302:131;28428:4;28302:131;:::i;:::-;28294:139;;28192:248;;;:::o;28446:419::-;;28650:2;28639:9;28635:18;28627:26;;28699:9;28693:4;28689:20;28685:1;28674:9;28670:17;28663:47;28727:131;28853:4;28727:131;:::i;:::-;28719:139;;28617:248;;;:::o;28871:222::-;;29002:2;28991:9;28987:18;28979:26;;29015:71;29083:1;29072:9;29068:17;29059:6;29015:71;:::i;:::-;28969:124;;;;:::o;29099:129::-;;29160:20;;:::i;:::-;29150:30;;29189:33;29217:4;29209:6;29189:33;:::i;:::-;29140:88;;;:::o;29234:75::-;;29300:2;29294:9;29284:19;;29274:35;:::o;29315:307::-;;29466:18;29458:6;29455:30;29452:2;;;29488:18;;:::i;:::-;29452:2;29526:29;29548:6;29526:29;:::i;:::-;29518:37;;29610:4;29604;29600:15;29592:23;;29381:241;;;:::o;29628:308::-;;29780:18;29772:6;29769:30;29766:2;;;29802:18;;:::i;:::-;29766:2;29840:29;29862:6;29840:29;:::i;:::-;29832:37;;29924:4;29918;29914:15;29906:23;;29695:241;;;:::o;29942:141::-;;30014:3;30006:11;;30037:3;30034:1;30027:14;30071:4;30068:1;30058:18;30050:26;;29996:87;;;:::o;30089:98::-;;30174:5;30168:12;30158:22;;30147:40;;;:::o;30193:99::-;;30279:5;30273:12;30263:22;;30252:40;;;:::o;30298:168::-;;30415:6;30410:3;30403:19;30455:4;30450:3;30446:14;30431:29;;30393:73;;;;:::o;30472:147::-;;30610:3;30595:18;;30585:34;;;;:::o;30625:169::-;;30743:6;30738:3;30731:19;30783:4;30778:3;30774:14;30759:29;;30721:73;;;;:::o;30800:148::-;;30939:3;30924:18;;30914:34;;;;:::o;30954:305::-;;31013:20;31031:1;31013:20;:::i;:::-;31008:25;;31047:20;31065:1;31047:20;:::i;:::-;31042:25;;31201:1;31133:66;31129:74;31126:1;31123:81;31120:2;;;31207:18;;:::i;:::-;31120:2;31251:1;31248;31244:9;31237:16;;30998:261;;;;:::o;31265:185::-;;31322:20;31340:1;31322:20;:::i;:::-;31317:25;;31356:20;31374:1;31356:20;:::i;:::-;31351:25;;31395:1;31385:2;;31400:18;;:::i;:::-;31385:2;31442:1;31439;31435:9;31430:14;;31307:143;;;;:::o;31456:348::-;;31519:20;31537:1;31519:20;:::i;:::-;31514:25;;31553:20;31571:1;31553:20;:::i;:::-;31548:25;;31741:1;31673:66;31669:74;31666:1;31663:81;31658:1;31651:9;31644:17;31640:105;31637:2;;;31748:18;;:::i;:::-;31637:2;31796:1;31793;31789:9;31778:20;;31504:300;;;;:::o;31810:191::-;;31870:20;31888:1;31870:20;:::i;:::-;31865:25;;31904:20;31922:1;31904:20;:::i;:::-;31899:25;;31943:1;31940;31937:8;31934:2;;;31948:18;;:::i;:::-;31934:2;31993:1;31990;31986:9;31978:17;;31855:146;;;;:::o;32007:96::-;;32073:24;32091:5;32073:24;:::i;:::-;32062:35;;32052:51;;;:::o;32109:90::-;;32186:5;32179:13;32172:21;32161:32;;32151:48;;;:::o;32205:149::-;;32281:66;32274:5;32270:78;32259:89;;32249:105;;;:::o;32360:126::-;;32437:42;32430:5;32426:54;32415:65;;32405:81;;;:::o;32492:77::-;;32558:5;32547:16;;32537:32;;;:::o;32575:154::-;32659:6;32654:3;32649;32636:30;32721:1;32712:6;32707:3;32703:16;32696:27;32626:103;;;:::o;32735:307::-;32803:1;32813:113;32827:6;32824:1;32821:13;32813:113;;;32912:1;32907:3;32903:11;32897:18;32893:1;32888:3;32884:11;32877:39;32849:2;32846:1;32842:10;32837:15;;32813:113;;;32944:6;32941:1;32938:13;32935:2;;;33024:1;33015:6;33010:3;33006:16;32999:27;32935:2;32784:258;;;;:::o;33048:320::-;;33129:1;33123:4;33119:12;33109:22;;33176:1;33170:4;33166:12;33197:18;33187:2;;33253:4;33245:6;33241:17;33231:27;;33187:2;33315;33307:6;33304:14;33284:18;33281:38;33278:2;;;33334:18;;:::i;:::-;33278:2;33099:269;;;;:::o;33374:281::-;33457:27;33479:4;33457:27;:::i;:::-;33449:6;33445:40;33587:6;33575:10;33572:22;33551:18;33539:10;33536:34;33533:62;33530:2;;;33598:18;;:::i;:::-;33530:2;33638:10;33634:2;33627:22;33417:238;;;:::o;33661:233::-;;33723:24;33741:5;33723:24;:::i;:::-;33714:33;;33769:66;33762:5;33759:77;33756:2;;;33839:18;;:::i;:::-;33756:2;33886:1;33879:5;33875:13;33868:20;;33704:190;;;:::o;33900:176::-;;33949:20;33967:1;33949:20;:::i;:::-;33944:25;;33983:20;34001:1;33983:20;:::i;:::-;33978:25;;34022:1;34012:2;;34027:18;;:::i;:::-;34012:2;34068:1;34065;34061:9;34056:14;;33934:142;;;;:::o;34082:180::-;34130:77;34127:1;34120:88;34227:4;34224:1;34217:15;34251:4;34248:1;34241:15;34268:180;34316:77;34313:1;34306:88;34413:4;34410:1;34403:15;34437:4;34434:1;34427:15;34454:180;34502:77;34499:1;34492:88;34599:4;34596:1;34589:15;34623:4;34620:1;34613:15;34640:180;34688:77;34685:1;34678:88;34785:4;34782:1;34775:15;34809:4;34806:1;34799:15;34826:102;;34918:2;34914:7;34909:2;34902:5;34898:14;34894:28;34884:38;;34874:54;;;:::o;34934:237::-;35074:34;35070:1;35062:6;35058:14;35051:58;35143:20;35138:2;35130:6;35126:15;35119:45;35040:131;:::o;35177:225::-;35317:34;35313:1;35305:6;35301:14;35294:58;35386:8;35381:2;35373:6;35369:15;35362:33;35283:119;:::o;35408:178::-;35548:30;35544:1;35536:6;35532:14;35525:54;35514:72;:::o;35592:227::-;35732:34;35728:1;35720:6;35716:14;35709:58;35801:10;35796:2;35788:6;35784:15;35777:35;35698:121;:::o;35825:223::-;35965:34;35961:1;35953:6;35949:14;35942:58;36034:6;36029:2;36021:6;36017:15;36010:31;35931:117;:::o;36054:175::-;36194:27;36190:1;36182:6;36178:14;36171:51;36160:69;:::o;36235:231::-;36375:34;36371:1;36363:6;36359:14;36352:58;36444:14;36439:2;36431:6;36427:15;36420:39;36341:125;:::o;36472:179::-;36612:31;36608:1;36600:6;36596:14;36589:55;36578:73;:::o;36657:243::-;36797:34;36793:1;36785:6;36781:14;36774:58;36866:26;36861:2;36853:6;36849:15;36842:51;36763:137;:::o;36906:229::-;37046:34;37042:1;37034:6;37030:14;37023:58;37115:12;37110:2;37102:6;37098:15;37091:37;37012:123;:::o;37141:228::-;37281:34;37277:1;37269:6;37265:14;37258:58;37350:11;37345:2;37337:6;37333:15;37326:36;37247:122;:::o;37375:182::-;37515:34;37511:1;37503:6;37499:14;37492:58;37481:76;:::o;37563:231::-;37703:34;37699:1;37691:6;37687:14;37680:58;37772:14;37767:2;37759:6;37755:15;37748:39;37669:125;:::o;37800:182::-;37940:34;37936:1;37928:6;37924:14;37917:58;37906:76;:::o;37988:170::-;38128:22;38124:1;38116:6;38112:14;38105:46;38094:64;:::o;38164:228::-;38304:34;38300:1;38292:6;38288:14;38281:58;38373:11;38368:2;38360:6;38356:15;38349:36;38270:122;:::o;38398:220::-;38538:34;38534:1;38526:6;38522:14;38515:58;38607:3;38602:2;38594:6;38590:15;38583:28;38504:114;:::o;38624:::-;38730:8;:::o;38744:224::-;38884:34;38880:1;38872:6;38868:14;38861:58;38953:7;38948:2;38940:6;38936:15;38929:32;38850:118;:::o;38974:236::-;39114:34;39110:1;39102:6;39098:14;39091:58;39183:19;39178:2;39170:6;39166:15;39159:44;39080:130;:::o;39216:158::-;39356:10;39352:1;39344:6;39340:14;39333:34;39322:52;:::o;39380:181::-;39520:33;39516:1;39508:6;39504:14;39497:57;39486:75;:::o;39567:173::-;39707:25;39703:1;39695:6;39691:14;39684:49;39673:67;:::o;39746:122::-;39819:24;39837:5;39819:24;:::i;:::-;39812:5;39809:35;39799:2;;39858:1;39855;39848:12;39799:2;39789:79;:::o;39874:116::-;39944:21;39959:5;39944:21;:::i;:::-;39937:5;39934:32;39924:2;;39980:1;39977;39970:12;39924:2;39914:76;:::o;39996:120::-;40068:23;40085:5;40068:23;:::i;:::-;40061:5;40058:34;40048:2;;40106:1;40103;40096:12;40048:2;40038:78;:::o;40122:122::-;40195:24;40213:5;40195:24;:::i;:::-;40188:5;40185:35;40175:2;;40234:1;40231;40224:12;40175:2;40165:79;:::o
Swarm Source
ipfs://d512615bed73e414e2f4a0f1b6e8fd6c1023566ad4aa5a89c59cf8d5bdfd2e0a
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.