ERC-721
Overview
Max Total Supply
549 Tigero
Holders
124
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
11 TigeroLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TigeroContract
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-30 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @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/IERC721.sol /** * @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/IERC721Receiver.sol /** * @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/IERC721Metadata.sol /** * @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/Address.sol /** * @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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Context.sol /* * @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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/utils/Strings.sol /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol /** * @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/ERC721.sol /** * @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}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly 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` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol /** * @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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface TigerCollection { // Required methods function ownerOf(uint256 tokenId) external view returns (address); } // File: contracts/Tigero.sol contract TigeroContract is ERC721Enumerable, Ownable { using SafeMath for uint256; address admin; uint256 public maxTigeroPurchase = 30; uint256 public tigeroPrice = 0; //0 ETH uint256 public maxTigeros = 10000; bool public saleIsActive = false; bool public pause = true; mapping(uint256 => bool) public tigers; address tigerAddress; TigerCollection public tigerCollection; // Base URI string private m_BaseURI = ""; constructor( string memory name, string memory symbol, string memory baseURI, address _tigerAddress ) ERC721(name, symbol) { tigerAddress = _tigerAddress; tigerCollection = TigerCollection(tigerAddress); admin = msg.sender; m_BaseURI = baseURI; } modifier onlyAdmin() { require(msg.sender == admin, "Not admin"); _; } /** * Mint Tigeros */ function mintTigerosByTiger(uint256[] memory tokens) public payable { require(tokens.length <= maxTigeroPurchase, "Exceeds max number of Tigeros in one transaction"); require(!pause, "Pause mint"); require(!saleIsActive, "Sale is active"); require(totalSupply().add(tokens.length) <= maxTigeros, "Purchase would exceed max supply of Tigeros"); require(tigeroPrice.mul(tokens.length) == msg.value, "Ether value sent is not correct"); for (uint i = 0; i < tokens.length; i++) { //Tigers cannot be reused require(!tigers[tokens[i]], "This tiger has been used"); //Verify the owner of the tiger require(tigerCollection.ownerOf(tokens[i]) == _msgSender(), "No permission"); //Modify the tag of this tiger tigers[tokens[i]] = true; uint tokenId = totalSupply(); _safeMint(_msgSender(), tokenId); } } /** * Mint Tigeros */ function mintTigeros(uint numberOfTokens) public payable { require(numberOfTokens <= maxTigeroPurchase, "Exceeds max number of Tigeros in one transaction"); require(!pause, "Pause mint"); require(saleIsActive, "Sale is not active"); require(totalSupply().add(numberOfTokens) <= maxTigeros, "Purchase would exceed max supply of Tigeros"); require(tigeroPrice.mul(numberOfTokens) == msg.value, "Ether value sent is not correct"); for(uint i = 0; i < numberOfTokens; i++) { uint tokenId = totalSupply(); _safeMint(_msgSender(), tokenId); } } /** * Withdraw all balance to the admin address */ function withdraw() public onlyAdmin { uint256 balance = address(this).balance; require(balance > 0); payable(_msgSender()).transfer(balance); } //Sales switch function flipSaleState() public onlyAdmin { saleIsActive = !saleIsActive; } //Sales pause function flipPauseState() public onlyAdmin { pause = !pause; } function setAdmin(address addr) external onlyAdmin() { admin = addr; } function setMaxToken(uint256 _value) external onlyAdmin { require( _value > totalSupply() && _value <= 10_000, "Wrong value for max supply" ); maxTigeros = _value; } function setPrice(uint256 _price) external onlyAdmin { tigeroPrice = _price; } function setMaxPurchase(uint256 _value) external onlyAdmin { require(_value > 0, "Invalid value"); maxTigeroPurchase = _value; } // setBaseURI // - Metadata lives here function setBaseURI(string memory baseURI) external onlyAdmin() { m_BaseURI = baseURI; } // _baseURI function _baseURI() internal view override returns (string memory) { return m_BaseURI; } //All tokens under this address function tokensOfOwner(address _owner) external view returns(uint256[] memory ownerTokens) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); for(uint256 i=0; i<tokenCount; i++) { uint256 index = tokenOfOwnerByIndex(_owner,i); result[i] = index; } return result; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"address","name":"_tigerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"flipPauseState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTigeroPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTigeros","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintTigeros","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"mintTigerosByTiger","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxPurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","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":[],"name":"tigerCollection","outputs":[{"internalType":"contract TigerCollection","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tigeroPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tigers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"ownerTokens","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052601e600c556000600d55612710600e556000600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff0219169083151502179055506040518060200160405280600081525060139080519060200190620000719291906200029c565b503480156200007f57600080fd5b5060405162005608380380620056088339818101604052810190620000a59190620003e1565b83838160009080519060200190620000bf9291906200029c565b508060019080519060200190620000d89291906200029c565b5050506000620000ed6200029460201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160139080519060200190620002899291906200029c565b505050505062000682565b600033905090565b828054620002aa9062000579565b90600052602060002090601f016020900481019282620002ce57600085556200031a565b82601f10620002e957805160ff19168380011785556200031a565b828001600101855582156200031a579182015b8281111562000319578251825591602001919060010190620002fc565b5b5090506200032991906200032d565b5090565b5b80821115620003485760008160009055506001016200032e565b5090565b6000620003636200035d84620004d9565b620004b0565b90508281526020810184848401111562000382576200038162000648565b5b6200038f84828562000543565b509392505050565b600081519050620003a88162000668565b92915050565b600082601f830112620003c657620003c562000643565b5b8151620003d88482602086016200034c565b91505092915050565b60008060008060808587031215620003fe57620003fd62000652565b5b600085015167ffffffffffffffff8111156200041f576200041e6200064d565b5b6200042d87828801620003ae565b945050602085015167ffffffffffffffff8111156200045157620004506200064d565b5b6200045f87828801620003ae565b935050604085015167ffffffffffffffff8111156200048357620004826200064d565b5b6200049187828801620003ae565b9250506060620004a48782880162000397565b91505092959194509250565b6000620004bc620004cf565b9050620004ca8282620005af565b919050565b6000604051905090565b600067ffffffffffffffff821115620004f757620004f662000614565b5b620005028262000657565b9050602081019050919050565b60006200051c8262000523565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200056357808201518184015260208101905062000546565b8381111562000573576000848401525b50505050565b600060028204905060018216806200059257607f821691505b60208210811415620005a957620005a8620005e5565b5b50919050565b620005ba8262000657565b810181811067ffffffffffffffff82111715620005dc57620005db62000614565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b62000673816200050f565b81146200067f57600080fd5b50565b614f7680620006926000396000f3fe60806040526004361061021a5760003560e01c8063711897421161012357806395d89b41116100ab578063e985e9c51161006f578063e985e9c5146107ae578063eb8d2444146107eb578063eef21f7514610816578063f2fde38b14610841578063fab624e01461086a5761021a565b806395d89b41146106c95780639a7bf9cd146106f4578063a22cb4651461071f578063b88d4fde14610748578063c87b56dd146107715761021a565b80638456cb59116100f25780638456cb59146105e25780638462151c1461060d5780638da5cb5b1461064a578063910103c71461067557806391b7f5ed146106a05761021a565b80637118974214610549578063715018a6146105725780637370b414146105895780637612fcb3146105c65761021a565b806334918dfd116101a65780634f6ccce7116101755780634f6ccce71461044057806355f804b31461047d5780636352211e146104a6578063704b6c02146104e357806370a082311461050c5761021a565b806334918dfd146103be57806335b01592146103d55780633ccfd60b1461040057806342842e0e146104175761021a565b806309acc2cb116101ed57806309acc2cb146102ed57806318160ddd146103165780631f227aca1461034157806323b872dd146103585780632f745c59146103815761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906137a3565b610886565b6040516102539190613e7b565b60405180910390f35b34801561026857600080fd5b50610271610900565b60405161027e9190613eb1565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613846565b610992565b6040516102bb9190613df2565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e6919061371a565b610a17565b005b3480156102f957600080fd5b50610314600480360381019061030f9190613846565b610b2f565b005b34801561032257600080fd5b5061032b610c20565b6040516103389190614273565b60405180910390f35b34801561034d57600080fd5b50610356610c2d565b005b34801561036457600080fd5b5061037f600480360381019061037a9190613604565b610ce9565b005b34801561038d57600080fd5b506103a860048036038101906103a3919061371a565b610d49565b6040516103b59190614273565b60405180910390f35b3480156103ca57600080fd5b506103d3610dee565b005b3480156103e157600080fd5b506103ea610eaa565b6040516103f79190614273565b60405180910390f35b34801561040c57600080fd5b50610415610eb0565b005b34801561042357600080fd5b5061043e60048036038101906104399190613604565b610fa3565b005b34801561044c57600080fd5b5061046760048036038101906104629190613846565b610fc3565b6040516104749190614273565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f91906137fd565b611034565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190613846565b6110de565b6040516104da9190613df2565b60405180910390f35b3480156104ef57600080fd5b5061050a6004803603810190610505919061356a565b611190565b005b34801561051857600080fd5b50610533600480360381019061052e919061356a565b611264565b6040516105409190614273565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b9190613846565b61131c565b005b34801561057e57600080fd5b506105876113f9565b005b34801561059557600080fd5b506105b060048036038101906105ab9190613846565b611536565b6040516105bd9190613e7b565b60405180910390f35b6105e060048036038101906105db9190613846565b611556565b005b3480156105ee57600080fd5b506105f761172e565b6040516106049190613e7b565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f919061356a565b611741565b6040516106419190613e59565b60405180910390f35b34801561065657600080fd5b5061065f611851565b60405161066c9190613df2565b60405180910390f35b34801561068157600080fd5b5061068a61187b565b6040516106979190614273565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190613846565b611881565b005b3480156106d557600080fd5b506106de61191b565b6040516106eb9190613eb1565b60405180910390f35b34801561070057600080fd5b506107096119ad565b6040516107169190614273565b60405180910390f35b34801561072b57600080fd5b50610746600480360381019061074191906136da565b6119b3565b005b34801561075457600080fd5b5061076f600480360381019061076a9190613657565b611b34565b005b34801561077d57600080fd5b5061079860048036038101906107939190613846565b611b96565b6040516107a59190613eb1565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d091906135c4565b611c3d565b6040516107e29190613e7b565b60405180910390f35b3480156107f757600080fd5b50610800611cd1565b60405161080d9190613e7b565b60405180910390f35b34801561082257600080fd5b5061082b611ce4565b6040516108389190613e96565b60405180910390f35b34801561084d57600080fd5b506108686004803603810190610863919061356a565b611d0a565b005b610884600480360381019061087f919061375a565b611eb6565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f957506108f88261228d565b5b9050919050565b60606000805461090f906145be565b80601f016020809104026020016040519081016040528092919081815260200182805461093b906145be565b80156109885780601f1061095d57610100808354040283529160200191610988565b820191906000526020600020905b81548152906001019060200180831161096b57829003601f168201915b5050505050905090565b600061099d8261236f565b6109dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d3906140d3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a22826110de565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a906141b3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ab26123db565b73ffffffffffffffffffffffffffffffffffffffff161480610ae15750610ae081610adb6123db565b611c3d565b5b610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1790614033565b60405180910390fd5b610b2a83836123e3565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690614253565b60405180910390fd5b610bc7610c20565b81118015610bd757506127108111155b610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d90614213565b60405180910390fd5b80600e8190555050565b6000600880549050905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb490614253565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b610cfa610cf46123db565b8261249c565b610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d30906141d3565b60405180910390fd5b610d4483838361257a565b505050565b6000610d5483611264565b8210610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90613ef3565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7590614253565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600d5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3790614253565b60405180910390fd5b600047905060008111610f5257600080fd5b610f5a6123db565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f9f573d6000803e3d6000fd5b5050565b610fbe83838360405180602001604052806000815250611b34565b505050565b6000610fcd610c20565b821061100e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611005906141f3565b60405180910390fd5b6008828154811061102257611021614757565b5b90600052602060002001549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb90614253565b60405180910390fd5b80601390805190602001906110da9291906132cb565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e90614073565b60405180910390fd5b80915050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790614253565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90614053565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614253565b60405180910390fd5b600081116113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690614153565b60405180910390fd5b80600c8190555050565b6114016123db565b73ffffffffffffffffffffffffffffffffffffffff1661141f611851565b73ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c90614113565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60106020528060005260406000206000915054906101000a900460ff1681565b600c5481111561159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290614093565b60405180910390fd5b600f60019054906101000a900460ff16156115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e290613ed3565b60405180910390fd5b600f60009054906101000a900460ff1661163a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163190613fb3565b60405180910390fd5b600e5461165782611649610c20565b6127d690919063ffffffff16565b1115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614013565b60405180910390fd5b346116ae82600d546127ec90919063ffffffff16565b146116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613fd3565b60405180910390fd5b60005b8181101561172a576000611703610c20565b90506117166117106123db565b82612802565b50808061172290614621565b9150506116f1565b5050565b600f60019054906101000a900460ff1681565b6060600061174e83611264565b905060008114156117ab57600067ffffffffffffffff81111561177457611773614786565b5b6040519080825280602002602001820160405280156117a25781602001602082028036833780820191505090505b5091505061184c565b60008167ffffffffffffffff8111156117c7576117c6614786565b5b6040519080825280602002602001820160405280156117f55781602001602082028036833780820191505090505b50905060005b8281101561184557600061180f8683610d49565b90508083838151811061182557611824614757565b5b60200260200101818152505050808061183d90614621565b9150506117fb565b5080925050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190890614253565b60405180910390fd5b80600d8190555050565b60606001805461192a906145be565b80601f0160208091040260200160405190810160405280929190818152602001828054611956906145be565b80156119a35780601f10611978576101008083540402835291602001916119a3565b820191906000526020600020905b81548152906001019060200180831161198657829003601f168201915b5050505050905090565b600c5481565b6119bb6123db565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090613f93565b60405180910390fd5b8060056000611a366123db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ae36123db565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b289190613e7b565b60405180910390a35050565b611b45611b3f6123db565b8361249c565b611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b906141d3565b60405180910390fd5b611b9084848484612820565b50505050565b6060611ba18261236f565b611be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd790614173565b60405180910390fd5b6000611bea61287c565b90506000815111611c0a5760405180602001604052806000815250611c35565b80611c148461290e565b604051602001611c25929190613dce565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f60009054906101000a900460ff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d126123db565b73ffffffffffffffffffffffffffffffffffffffff16611d30611851565b73ffffffffffffffffffffffffffffffffffffffff1614611d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7d90614113565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded90613f33565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481511115611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390614093565b60405180910390fd5b600f60019054906101000a900460ff1615611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613ed3565b60405180910390fd5b600f60009054906101000a900460ff1615611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9390614233565b60405180910390fd5b600e54611fba8251611fac610c20565b6127d690919063ffffffff16565b1115611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff290614013565b60405180910390fd5b346120128251600d546127ec90919063ffffffff16565b14612052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204990613fd3565b60405180910390fd5b60005b8151811015612289576010600083838151811061207557612074614757565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff16156120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d090614193565b60405180910390fd5b6120e16123db565b73ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e84848151811061214857612147614757565b5b60200260200101516040518263ffffffff1660e01b815260040161216c9190614273565b60206040518083038186803b15801561218457600080fd5b505afa158015612198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bc9190613597565b73ffffffffffffffffffffffffffffffffffffffff1614612212576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612209906140f3565b60405180910390fd5b60016010600084848151811061222b5761222a614757565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506000612262610c20565b905061227561226f6123db565b82612802565b50808061228190614621565b915050612055565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061235857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612368575061236782612a6f565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612456836110de565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006124a78261236f565b6124e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dd90613ff3565b60405180910390fd5b60006124f1836110de565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061256057508373ffffffffffffffffffffffffffffffffffffffff1661254884610992565b73ffffffffffffffffffffffffffffffffffffffff16145b8061257157506125708185611c3d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661259a826110de565b73ffffffffffffffffffffffffffffffffffffffff16146125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e790614133565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265790613f73565b60405180910390fd5b61266b838383612ad9565b6126766000826123e3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126c6919061449e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461271d91906143bd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836127e491906143bd565b905092915050565b600081836127fa9190614444565b905092915050565b61281c828260405180602001604052806000815250612bed565b5050565b61282b84848461257a565b61283784848484612c48565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286d90613f13565b60405180910390fd5b50505050565b60606013805461288b906145be565b80601f01602080910402602001604051908101604052809291908181526020018280546128b7906145be565b80156129045780601f106128d957610100808354040283529160200191612904565b820191906000526020600020905b8154815290600101906020018083116128e757829003601f168201915b5050505050905090565b60606000821415612956576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a6a565b600082905060005b6000821461298857808061297190614621565b915050600a826129819190614413565b915061295e565b60008167ffffffffffffffff8111156129a4576129a3614786565b5b6040519080825280601f01601f1916602001820160405280156129d65781602001600182028036833780820191505090505b5090505b60008514612a63576001826129ef919061449e565b9150600a856129fe919061466a565b6030612a0a91906143bd565b60f81b818381518110612a2057612a1f614757565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a5c9190614413565b94506129da565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ae4838383612ddf565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b2757612b2281612de4565b612b66565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b6557612b648382612e2d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ba957612ba481612f9a565b612be8565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612be757612be6828261306b565b5b5b505050565b612bf783836130ea565b612c046000848484612c48565b612c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3a90613f13565b60405180910390fd5b505050565b6000612c698473ffffffffffffffffffffffffffffffffffffffff166132b8565b15612dd2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c926123db565b8786866040518563ffffffff1660e01b8152600401612cb49493929190613e0d565b602060405180830381600087803b158015612cce57600080fd5b505af1925050508015612cff57506040513d601f19601f82011682018060405250810190612cfc91906137d0565b60015b612d82573d8060008114612d2f576040519150601f19603f3d011682016040523d82523d6000602084013e612d34565b606091505b50600081511415612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190613f13565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dd7565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e3a84611264565b612e44919061449e565b9050600060076000848152602001908152602001600020549050818114612f29576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612fae919061449e565b9050600060096000848152602001908152602001600020549050600060088381548110612fde57612fdd614757565b5b90600052602060002001549050806008838154811061300057612fff614757565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061304f5761304e614728565b5b6001900381819060005260206000200160009055905550505050565b600061307683611264565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561315a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613151906140b3565b60405180910390fd5b6131638161236f565b156131a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319a90613f53565b60405180910390fd5b6131af60008383612ad9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131ff91906143bd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546132d7906145be565b90600052602060002090601f0160209004810192826132f95760008555613340565b82601f1061331257805160ff1916838001178555613340565b82800160010185558215613340579182015b8281111561333f578251825591602001919060010190613324565b5b50905061334d9190613351565b5090565b5b8082111561336a576000816000905550600101613352565b5090565b600061338161337c846142b3565b61428e565b905080838252602082019050828560208602820111156133a4576133a36147ba565b5b60005b858110156133d457816133ba8882613555565b8452602084019350602083019250506001810190506133a7565b5050509392505050565b60006133f16133ec846142df565b61428e565b90508281526020810184848401111561340d5761340c6147bf565b5b61341884828561457c565b509392505050565b600061343361342e84614310565b61428e565b90508281526020810184848401111561344f5761344e6147bf565b5b61345a84828561457c565b509392505050565b60008135905061347181614ee4565b92915050565b60008151905061348681614ee4565b92915050565b600082601f8301126134a1576134a06147b5565b5b81356134b184826020860161336e565b91505092915050565b6000813590506134c981614efb565b92915050565b6000813590506134de81614f12565b92915050565b6000815190506134f381614f12565b92915050565b600082601f83011261350e5761350d6147b5565b5b813561351e8482602086016133de565b91505092915050565b600082601f83011261353c5761353b6147b5565b5b813561354c848260208601613420565b91505092915050565b60008135905061356481614f29565b92915050565b6000602082840312156135805761357f6147c9565b5b600061358e84828501613462565b91505092915050565b6000602082840312156135ad576135ac6147c9565b5b60006135bb84828501613477565b91505092915050565b600080604083850312156135db576135da6147c9565b5b60006135e985828601613462565b92505060206135fa85828601613462565b9150509250929050565b60008060006060848603121561361d5761361c6147c9565b5b600061362b86828701613462565b935050602061363c86828701613462565b925050604061364d86828701613555565b9150509250925092565b60008060008060808587031215613671576136706147c9565b5b600061367f87828801613462565b945050602061369087828801613462565b93505060406136a187828801613555565b925050606085013567ffffffffffffffff8111156136c2576136c16147c4565b5b6136ce878288016134f9565b91505092959194509250565b600080604083850312156136f1576136f06147c9565b5b60006136ff85828601613462565b9250506020613710858286016134ba565b9150509250929050565b60008060408385031215613731576137306147c9565b5b600061373f85828601613462565b925050602061375085828601613555565b9150509250929050565b6000602082840312156137705761376f6147c9565b5b600082013567ffffffffffffffff81111561378e5761378d6147c4565b5b61379a8482850161348c565b91505092915050565b6000602082840312156137b9576137b86147c9565b5b60006137c7848285016134cf565b91505092915050565b6000602082840312156137e6576137e56147c9565b5b60006137f4848285016134e4565b91505092915050565b600060208284031215613813576138126147c9565b5b600082013567ffffffffffffffff811115613831576138306147c4565b5b61383d84828501613527565b91505092915050565b60006020828403121561385c5761385b6147c9565b5b600061386a84828501613555565b91505092915050565b600061387f8383613db0565b60208301905092915050565b613894816144d2565b82525050565b60006138a582614351565b6138af818561437f565b93506138ba83614341565b8060005b838110156138eb5781516138d28882613873565b97506138dd83614372565b9250506001810190506138be565b5085935050505092915050565b613901816144e4565b82525050565b60006139128261435c565b61391c8185614390565b935061392c81856020860161458b565b613935816147ce565b840191505092915050565b61394981614546565b82525050565b600061395a82614367565b61396481856143a1565b935061397481856020860161458b565b61397d816147ce565b840191505092915050565b600061399382614367565b61399d81856143b2565b93506139ad81856020860161458b565b80840191505092915050565b60006139c6600a836143a1565b91506139d1826147df565b602082019050919050565b60006139e9602b836143a1565b91506139f482614808565b604082019050919050565b6000613a0c6032836143a1565b9150613a1782614857565b604082019050919050565b6000613a2f6026836143a1565b9150613a3a826148a6565b604082019050919050565b6000613a52601c836143a1565b9150613a5d826148f5565b602082019050919050565b6000613a756024836143a1565b9150613a808261491e565b604082019050919050565b6000613a986019836143a1565b9150613aa38261496d565b602082019050919050565b6000613abb6012836143a1565b9150613ac682614996565b602082019050919050565b6000613ade601f836143a1565b9150613ae9826149bf565b602082019050919050565b6000613b01602c836143a1565b9150613b0c826149e8565b604082019050919050565b6000613b24602b836143a1565b9150613b2f82614a37565b604082019050919050565b6000613b476038836143a1565b9150613b5282614a86565b604082019050919050565b6000613b6a602a836143a1565b9150613b7582614ad5565b604082019050919050565b6000613b8d6029836143a1565b9150613b9882614b24565b604082019050919050565b6000613bb06030836143a1565b9150613bbb82614b73565b604082019050919050565b6000613bd36020836143a1565b9150613bde82614bc2565b602082019050919050565b6000613bf6602c836143a1565b9150613c0182614beb565b604082019050919050565b6000613c19600d836143a1565b9150613c2482614c3a565b602082019050919050565b6000613c3c6020836143a1565b9150613c4782614c63565b602082019050919050565b6000613c5f6029836143a1565b9150613c6a82614c8c565b604082019050919050565b6000613c82600d836143a1565b9150613c8d82614cdb565b602082019050919050565b6000613ca5602f836143a1565b9150613cb082614d04565b604082019050919050565b6000613cc86018836143a1565b9150613cd382614d53565b602082019050919050565b6000613ceb6021836143a1565b9150613cf682614d7c565b604082019050919050565b6000613d0e6031836143a1565b9150613d1982614dcb565b604082019050919050565b6000613d31602c836143a1565b9150613d3c82614e1a565b604082019050919050565b6000613d54601a836143a1565b9150613d5f82614e69565b602082019050919050565b6000613d77600e836143a1565b9150613d8282614e92565b602082019050919050565b6000613d9a6009836143a1565b9150613da582614ebb565b602082019050919050565b613db98161453c565b82525050565b613dc88161453c565b82525050565b6000613dda8285613988565b9150613de68284613988565b91508190509392505050565b6000602082019050613e07600083018461388b565b92915050565b6000608082019050613e22600083018761388b565b613e2f602083018661388b565b613e3c6040830185613dbf565b8181036060830152613e4e8184613907565b905095945050505050565b60006020820190508181036000830152613e73818461389a565b905092915050565b6000602082019050613e9060008301846138f8565b92915050565b6000602082019050613eab6000830184613940565b92915050565b60006020820190508181036000830152613ecb818461394f565b905092915050565b60006020820190508181036000830152613eec816139b9565b9050919050565b60006020820190508181036000830152613f0c816139dc565b9050919050565b60006020820190508181036000830152613f2c816139ff565b9050919050565b60006020820190508181036000830152613f4c81613a22565b9050919050565b60006020820190508181036000830152613f6c81613a45565b9050919050565b60006020820190508181036000830152613f8c81613a68565b9050919050565b60006020820190508181036000830152613fac81613a8b565b9050919050565b60006020820190508181036000830152613fcc81613aae565b9050919050565b60006020820190508181036000830152613fec81613ad1565b9050919050565b6000602082019050818103600083015261400c81613af4565b9050919050565b6000602082019050818103600083015261402c81613b17565b9050919050565b6000602082019050818103600083015261404c81613b3a565b9050919050565b6000602082019050818103600083015261406c81613b5d565b9050919050565b6000602082019050818103600083015261408c81613b80565b9050919050565b600060208201905081810360008301526140ac81613ba3565b9050919050565b600060208201905081810360008301526140cc81613bc6565b9050919050565b600060208201905081810360008301526140ec81613be9565b9050919050565b6000602082019050818103600083015261410c81613c0c565b9050919050565b6000602082019050818103600083015261412c81613c2f565b9050919050565b6000602082019050818103600083015261414c81613c52565b9050919050565b6000602082019050818103600083015261416c81613c75565b9050919050565b6000602082019050818103600083015261418c81613c98565b9050919050565b600060208201905081810360008301526141ac81613cbb565b9050919050565b600060208201905081810360008301526141cc81613cde565b9050919050565b600060208201905081810360008301526141ec81613d01565b9050919050565b6000602082019050818103600083015261420c81613d24565b9050919050565b6000602082019050818103600083015261422c81613d47565b9050919050565b6000602082019050818103600083015261424c81613d6a565b9050919050565b6000602082019050818103600083015261426c81613d8d565b9050919050565b60006020820190506142886000830184613dbf565b92915050565b60006142986142a9565b90506142a482826145f0565b919050565b6000604051905090565b600067ffffffffffffffff8211156142ce576142cd614786565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156142fa576142f9614786565b5b614303826147ce565b9050602081019050919050565b600067ffffffffffffffff82111561432b5761432a614786565b5b614334826147ce565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143c88261453c565b91506143d38361453c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144085761440761469b565b5b828201905092915050565b600061441e8261453c565b91506144298361453c565b925082614439576144386146ca565b5b828204905092915050565b600061444f8261453c565b915061445a8361453c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144935761449261469b565b5b828202905092915050565b60006144a98261453c565b91506144b48361453c565b9250828210156144c7576144c661469b565b5b828203905092915050565b60006144dd8261451c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061455182614558565b9050919050565b60006145638261456a565b9050919050565b60006145758261451c565b9050919050565b82818337600083830152505050565b60005b838110156145a957808201518184015260208101905061458e565b838111156145b8576000848401525b50505050565b600060028204905060018216806145d657607f821691505b602082108114156145ea576145e96146f9565b5b50919050565b6145f9826147ce565b810181811067ffffffffffffffff8211171561461857614617614786565b5b80604052505050565b600061462c8261453c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561465f5761465e61469b565b5b600182019050919050565b60006146758261453c565b91506146808361453c565b9250826146905761468f6146ca565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757365206d696e7400000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f662054696765726f73000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178206e756d626572206f662054696765726f7320696e60008201527f206f6e65207472616e73616374696f6e00000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f207065726d697373696f6e00000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642076616c756500000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f5468697320746967657220686173206265656e20757365640000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f57726f6e672076616c756520666f72206d617820737570706c79000000000000600082015250565b7f53616c6520697320616374697665000000000000000000000000000000000000600082015250565b7f4e6f742061646d696e0000000000000000000000000000000000000000000000600082015250565b614eed816144d2565b8114614ef857600080fd5b50565b614f04816144e4565b8114614f0f57600080fd5b50565b614f1b816144f0565b8114614f2657600080fd5b50565b614f328161453c565b8114614f3d57600080fd5b5056fea264697066735822122072081741de31d7a2fa705de71e6e786f05d2b33e1b4ebffc71fe945832b57f9864736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000990ee1df4c3047a4c94aac91a86be3c6bf40097d000000000000000000000000000000000000000000000000000000000000000654696765726f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000654696765726f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061021a5760003560e01c8063711897421161012357806395d89b41116100ab578063e985e9c51161006f578063e985e9c5146107ae578063eb8d2444146107eb578063eef21f7514610816578063f2fde38b14610841578063fab624e01461086a5761021a565b806395d89b41146106c95780639a7bf9cd146106f4578063a22cb4651461071f578063b88d4fde14610748578063c87b56dd146107715761021a565b80638456cb59116100f25780638456cb59146105e25780638462151c1461060d5780638da5cb5b1461064a578063910103c71461067557806391b7f5ed146106a05761021a565b80637118974214610549578063715018a6146105725780637370b414146105895780637612fcb3146105c65761021a565b806334918dfd116101a65780634f6ccce7116101755780634f6ccce71461044057806355f804b31461047d5780636352211e146104a6578063704b6c02146104e357806370a082311461050c5761021a565b806334918dfd146103be57806335b01592146103d55780633ccfd60b1461040057806342842e0e146104175761021a565b806309acc2cb116101ed57806309acc2cb146102ed57806318160ddd146103165780631f227aca1461034157806323b872dd146103585780632f745c59146103815761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906137a3565b610886565b6040516102539190613e7b565b60405180910390f35b34801561026857600080fd5b50610271610900565b60405161027e9190613eb1565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613846565b610992565b6040516102bb9190613df2565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e6919061371a565b610a17565b005b3480156102f957600080fd5b50610314600480360381019061030f9190613846565b610b2f565b005b34801561032257600080fd5b5061032b610c20565b6040516103389190614273565b60405180910390f35b34801561034d57600080fd5b50610356610c2d565b005b34801561036457600080fd5b5061037f600480360381019061037a9190613604565b610ce9565b005b34801561038d57600080fd5b506103a860048036038101906103a3919061371a565b610d49565b6040516103b59190614273565b60405180910390f35b3480156103ca57600080fd5b506103d3610dee565b005b3480156103e157600080fd5b506103ea610eaa565b6040516103f79190614273565b60405180910390f35b34801561040c57600080fd5b50610415610eb0565b005b34801561042357600080fd5b5061043e60048036038101906104399190613604565b610fa3565b005b34801561044c57600080fd5b5061046760048036038101906104629190613846565b610fc3565b6040516104749190614273565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f91906137fd565b611034565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190613846565b6110de565b6040516104da9190613df2565b60405180910390f35b3480156104ef57600080fd5b5061050a6004803603810190610505919061356a565b611190565b005b34801561051857600080fd5b50610533600480360381019061052e919061356a565b611264565b6040516105409190614273565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b9190613846565b61131c565b005b34801561057e57600080fd5b506105876113f9565b005b34801561059557600080fd5b506105b060048036038101906105ab9190613846565b611536565b6040516105bd9190613e7b565b60405180910390f35b6105e060048036038101906105db9190613846565b611556565b005b3480156105ee57600080fd5b506105f761172e565b6040516106049190613e7b565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f919061356a565b611741565b6040516106419190613e59565b60405180910390f35b34801561065657600080fd5b5061065f611851565b60405161066c9190613df2565b60405180910390f35b34801561068157600080fd5b5061068a61187b565b6040516106979190614273565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190613846565b611881565b005b3480156106d557600080fd5b506106de61191b565b6040516106eb9190613eb1565b60405180910390f35b34801561070057600080fd5b506107096119ad565b6040516107169190614273565b60405180910390f35b34801561072b57600080fd5b50610746600480360381019061074191906136da565b6119b3565b005b34801561075457600080fd5b5061076f600480360381019061076a9190613657565b611b34565b005b34801561077d57600080fd5b5061079860048036038101906107939190613846565b611b96565b6040516107a59190613eb1565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d091906135c4565b611c3d565b6040516107e29190613e7b565b60405180910390f35b3480156107f757600080fd5b50610800611cd1565b60405161080d9190613e7b565b60405180910390f35b34801561082257600080fd5b5061082b611ce4565b6040516108389190613e96565b60405180910390f35b34801561084d57600080fd5b506108686004803603810190610863919061356a565b611d0a565b005b610884600480360381019061087f919061375a565b611eb6565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f957506108f88261228d565b5b9050919050565b60606000805461090f906145be565b80601f016020809104026020016040519081016040528092919081815260200182805461093b906145be565b80156109885780601f1061095d57610100808354040283529160200191610988565b820191906000526020600020905b81548152906001019060200180831161096b57829003601f168201915b5050505050905090565b600061099d8261236f565b6109dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d3906140d3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a22826110de565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a906141b3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ab26123db565b73ffffffffffffffffffffffffffffffffffffffff161480610ae15750610ae081610adb6123db565b611c3d565b5b610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1790614033565b60405180910390fd5b610b2a83836123e3565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690614253565b60405180910390fd5b610bc7610c20565b81118015610bd757506127108111155b610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d90614213565b60405180910390fd5b80600e8190555050565b6000600880549050905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb490614253565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b610cfa610cf46123db565b8261249c565b610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d30906141d3565b60405180910390fd5b610d4483838361257a565b505050565b6000610d5483611264565b8210610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90613ef3565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7590614253565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600d5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3790614253565b60405180910390fd5b600047905060008111610f5257600080fd5b610f5a6123db565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f9f573d6000803e3d6000fd5b5050565b610fbe83838360405180602001604052806000815250611b34565b505050565b6000610fcd610c20565b821061100e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611005906141f3565b60405180910390fd5b6008828154811061102257611021614757565b5b90600052602060002001549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb90614253565b60405180910390fd5b80601390805190602001906110da9291906132cb565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e90614073565b60405180910390fd5b80915050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790614253565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90614053565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614253565b60405180910390fd5b600081116113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690614153565b60405180910390fd5b80600c8190555050565b6114016123db565b73ffffffffffffffffffffffffffffffffffffffff1661141f611851565b73ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c90614113565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60106020528060005260406000206000915054906101000a900460ff1681565b600c5481111561159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290614093565b60405180910390fd5b600f60019054906101000a900460ff16156115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e290613ed3565b60405180910390fd5b600f60009054906101000a900460ff1661163a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163190613fb3565b60405180910390fd5b600e5461165782611649610c20565b6127d690919063ffffffff16565b1115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614013565b60405180910390fd5b346116ae82600d546127ec90919063ffffffff16565b146116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613fd3565b60405180910390fd5b60005b8181101561172a576000611703610c20565b90506117166117106123db565b82612802565b50808061172290614621565b9150506116f1565b5050565b600f60019054906101000a900460ff1681565b6060600061174e83611264565b905060008114156117ab57600067ffffffffffffffff81111561177457611773614786565b5b6040519080825280602002602001820160405280156117a25781602001602082028036833780820191505090505b5091505061184c565b60008167ffffffffffffffff8111156117c7576117c6614786565b5b6040519080825280602002602001820160405280156117f55781602001602082028036833780820191505090505b50905060005b8281101561184557600061180f8683610d49565b90508083838151811061182557611824614757565b5b60200260200101818152505050808061183d90614621565b9150506117fb565b5080925050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190890614253565b60405180910390fd5b80600d8190555050565b60606001805461192a906145be565b80601f0160208091040260200160405190810160405280929190818152602001828054611956906145be565b80156119a35780601f10611978576101008083540402835291602001916119a3565b820191906000526020600020905b81548152906001019060200180831161198657829003601f168201915b5050505050905090565b600c5481565b6119bb6123db565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090613f93565b60405180910390fd5b8060056000611a366123db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ae36123db565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b289190613e7b565b60405180910390a35050565b611b45611b3f6123db565b8361249c565b611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b906141d3565b60405180910390fd5b611b9084848484612820565b50505050565b6060611ba18261236f565b611be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd790614173565b60405180910390fd5b6000611bea61287c565b90506000815111611c0a5760405180602001604052806000815250611c35565b80611c148461290e565b604051602001611c25929190613dce565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f60009054906101000a900460ff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d126123db565b73ffffffffffffffffffffffffffffffffffffffff16611d30611851565b73ffffffffffffffffffffffffffffffffffffffff1614611d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7d90614113565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded90613f33565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481511115611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390614093565b60405180910390fd5b600f60019054906101000a900460ff1615611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613ed3565b60405180910390fd5b600f60009054906101000a900460ff1615611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9390614233565b60405180910390fd5b600e54611fba8251611fac610c20565b6127d690919063ffffffff16565b1115611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff290614013565b60405180910390fd5b346120128251600d546127ec90919063ffffffff16565b14612052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204990613fd3565b60405180910390fd5b60005b8151811015612289576010600083838151811061207557612074614757565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff16156120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d090614193565b60405180910390fd5b6120e16123db565b73ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e84848151811061214857612147614757565b5b60200260200101516040518263ffffffff1660e01b815260040161216c9190614273565b60206040518083038186803b15801561218457600080fd5b505afa158015612198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bc9190613597565b73ffffffffffffffffffffffffffffffffffffffff1614612212576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612209906140f3565b60405180910390fd5b60016010600084848151811061222b5761222a614757565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506000612262610c20565b905061227561226f6123db565b82612802565b50808061228190614621565b915050612055565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061235857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612368575061236782612a6f565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612456836110de565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006124a78261236f565b6124e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dd90613ff3565b60405180910390fd5b60006124f1836110de565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061256057508373ffffffffffffffffffffffffffffffffffffffff1661254884610992565b73ffffffffffffffffffffffffffffffffffffffff16145b8061257157506125708185611c3d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661259a826110de565b73ffffffffffffffffffffffffffffffffffffffff16146125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e790614133565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265790613f73565b60405180910390fd5b61266b838383612ad9565b6126766000826123e3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126c6919061449e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461271d91906143bd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836127e491906143bd565b905092915050565b600081836127fa9190614444565b905092915050565b61281c828260405180602001604052806000815250612bed565b5050565b61282b84848461257a565b61283784848484612c48565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286d90613f13565b60405180910390fd5b50505050565b60606013805461288b906145be565b80601f01602080910402602001604051908101604052809291908181526020018280546128b7906145be565b80156129045780601f106128d957610100808354040283529160200191612904565b820191906000526020600020905b8154815290600101906020018083116128e757829003601f168201915b5050505050905090565b60606000821415612956576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a6a565b600082905060005b6000821461298857808061297190614621565b915050600a826129819190614413565b915061295e565b60008167ffffffffffffffff8111156129a4576129a3614786565b5b6040519080825280601f01601f1916602001820160405280156129d65781602001600182028036833780820191505090505b5090505b60008514612a63576001826129ef919061449e565b9150600a856129fe919061466a565b6030612a0a91906143bd565b60f81b818381518110612a2057612a1f614757565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a5c9190614413565b94506129da565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ae4838383612ddf565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b2757612b2281612de4565b612b66565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b6557612b648382612e2d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ba957612ba481612f9a565b612be8565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612be757612be6828261306b565b5b5b505050565b612bf783836130ea565b612c046000848484612c48565b612c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3a90613f13565b60405180910390fd5b505050565b6000612c698473ffffffffffffffffffffffffffffffffffffffff166132b8565b15612dd2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c926123db565b8786866040518563ffffffff1660e01b8152600401612cb49493929190613e0d565b602060405180830381600087803b158015612cce57600080fd5b505af1925050508015612cff57506040513d601f19601f82011682018060405250810190612cfc91906137d0565b60015b612d82573d8060008114612d2f576040519150601f19603f3d011682016040523d82523d6000602084013e612d34565b606091505b50600081511415612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190613f13565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dd7565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e3a84611264565b612e44919061449e565b9050600060076000848152602001908152602001600020549050818114612f29576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612fae919061449e565b9050600060096000848152602001908152602001600020549050600060088381548110612fde57612fdd614757565b5b90600052602060002001549050806008838154811061300057612fff614757565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061304f5761304e614728565b5b6001900381819060005260206000200160009055905550505050565b600061307683611264565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561315a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613151906140b3565b60405180910390fd5b6131638161236f565b156131a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319a90613f53565b60405180910390fd5b6131af60008383612ad9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131ff91906143bd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546132d7906145be565b90600052602060002090601f0160209004810192826132f95760008555613340565b82601f1061331257805160ff1916838001178555613340565b82800160010185558215613340579182015b8281111561333f578251825591602001919060010190613324565b5b50905061334d9190613351565b5090565b5b8082111561336a576000816000905550600101613352565b5090565b600061338161337c846142b3565b61428e565b905080838252602082019050828560208602820111156133a4576133a36147ba565b5b60005b858110156133d457816133ba8882613555565b8452602084019350602083019250506001810190506133a7565b5050509392505050565b60006133f16133ec846142df565b61428e565b90508281526020810184848401111561340d5761340c6147bf565b5b61341884828561457c565b509392505050565b600061343361342e84614310565b61428e565b90508281526020810184848401111561344f5761344e6147bf565b5b61345a84828561457c565b509392505050565b60008135905061347181614ee4565b92915050565b60008151905061348681614ee4565b92915050565b600082601f8301126134a1576134a06147b5565b5b81356134b184826020860161336e565b91505092915050565b6000813590506134c981614efb565b92915050565b6000813590506134de81614f12565b92915050565b6000815190506134f381614f12565b92915050565b600082601f83011261350e5761350d6147b5565b5b813561351e8482602086016133de565b91505092915050565b600082601f83011261353c5761353b6147b5565b5b813561354c848260208601613420565b91505092915050565b60008135905061356481614f29565b92915050565b6000602082840312156135805761357f6147c9565b5b600061358e84828501613462565b91505092915050565b6000602082840312156135ad576135ac6147c9565b5b60006135bb84828501613477565b91505092915050565b600080604083850312156135db576135da6147c9565b5b60006135e985828601613462565b92505060206135fa85828601613462565b9150509250929050565b60008060006060848603121561361d5761361c6147c9565b5b600061362b86828701613462565b935050602061363c86828701613462565b925050604061364d86828701613555565b9150509250925092565b60008060008060808587031215613671576136706147c9565b5b600061367f87828801613462565b945050602061369087828801613462565b93505060406136a187828801613555565b925050606085013567ffffffffffffffff8111156136c2576136c16147c4565b5b6136ce878288016134f9565b91505092959194509250565b600080604083850312156136f1576136f06147c9565b5b60006136ff85828601613462565b9250506020613710858286016134ba565b9150509250929050565b60008060408385031215613731576137306147c9565b5b600061373f85828601613462565b925050602061375085828601613555565b9150509250929050565b6000602082840312156137705761376f6147c9565b5b600082013567ffffffffffffffff81111561378e5761378d6147c4565b5b61379a8482850161348c565b91505092915050565b6000602082840312156137b9576137b86147c9565b5b60006137c7848285016134cf565b91505092915050565b6000602082840312156137e6576137e56147c9565b5b60006137f4848285016134e4565b91505092915050565b600060208284031215613813576138126147c9565b5b600082013567ffffffffffffffff811115613831576138306147c4565b5b61383d84828501613527565b91505092915050565b60006020828403121561385c5761385b6147c9565b5b600061386a84828501613555565b91505092915050565b600061387f8383613db0565b60208301905092915050565b613894816144d2565b82525050565b60006138a582614351565b6138af818561437f565b93506138ba83614341565b8060005b838110156138eb5781516138d28882613873565b97506138dd83614372565b9250506001810190506138be565b5085935050505092915050565b613901816144e4565b82525050565b60006139128261435c565b61391c8185614390565b935061392c81856020860161458b565b613935816147ce565b840191505092915050565b61394981614546565b82525050565b600061395a82614367565b61396481856143a1565b935061397481856020860161458b565b61397d816147ce565b840191505092915050565b600061399382614367565b61399d81856143b2565b93506139ad81856020860161458b565b80840191505092915050565b60006139c6600a836143a1565b91506139d1826147df565b602082019050919050565b60006139e9602b836143a1565b91506139f482614808565b604082019050919050565b6000613a0c6032836143a1565b9150613a1782614857565b604082019050919050565b6000613a2f6026836143a1565b9150613a3a826148a6565b604082019050919050565b6000613a52601c836143a1565b9150613a5d826148f5565b602082019050919050565b6000613a756024836143a1565b9150613a808261491e565b604082019050919050565b6000613a986019836143a1565b9150613aa38261496d565b602082019050919050565b6000613abb6012836143a1565b9150613ac682614996565b602082019050919050565b6000613ade601f836143a1565b9150613ae9826149bf565b602082019050919050565b6000613b01602c836143a1565b9150613b0c826149e8565b604082019050919050565b6000613b24602b836143a1565b9150613b2f82614a37565b604082019050919050565b6000613b476038836143a1565b9150613b5282614a86565b604082019050919050565b6000613b6a602a836143a1565b9150613b7582614ad5565b604082019050919050565b6000613b8d6029836143a1565b9150613b9882614b24565b604082019050919050565b6000613bb06030836143a1565b9150613bbb82614b73565b604082019050919050565b6000613bd36020836143a1565b9150613bde82614bc2565b602082019050919050565b6000613bf6602c836143a1565b9150613c0182614beb565b604082019050919050565b6000613c19600d836143a1565b9150613c2482614c3a565b602082019050919050565b6000613c3c6020836143a1565b9150613c4782614c63565b602082019050919050565b6000613c5f6029836143a1565b9150613c6a82614c8c565b604082019050919050565b6000613c82600d836143a1565b9150613c8d82614cdb565b602082019050919050565b6000613ca5602f836143a1565b9150613cb082614d04565b604082019050919050565b6000613cc86018836143a1565b9150613cd382614d53565b602082019050919050565b6000613ceb6021836143a1565b9150613cf682614d7c565b604082019050919050565b6000613d0e6031836143a1565b9150613d1982614dcb565b604082019050919050565b6000613d31602c836143a1565b9150613d3c82614e1a565b604082019050919050565b6000613d54601a836143a1565b9150613d5f82614e69565b602082019050919050565b6000613d77600e836143a1565b9150613d8282614e92565b602082019050919050565b6000613d9a6009836143a1565b9150613da582614ebb565b602082019050919050565b613db98161453c565b82525050565b613dc88161453c565b82525050565b6000613dda8285613988565b9150613de68284613988565b91508190509392505050565b6000602082019050613e07600083018461388b565b92915050565b6000608082019050613e22600083018761388b565b613e2f602083018661388b565b613e3c6040830185613dbf565b8181036060830152613e4e8184613907565b905095945050505050565b60006020820190508181036000830152613e73818461389a565b905092915050565b6000602082019050613e9060008301846138f8565b92915050565b6000602082019050613eab6000830184613940565b92915050565b60006020820190508181036000830152613ecb818461394f565b905092915050565b60006020820190508181036000830152613eec816139b9565b9050919050565b60006020820190508181036000830152613f0c816139dc565b9050919050565b60006020820190508181036000830152613f2c816139ff565b9050919050565b60006020820190508181036000830152613f4c81613a22565b9050919050565b60006020820190508181036000830152613f6c81613a45565b9050919050565b60006020820190508181036000830152613f8c81613a68565b9050919050565b60006020820190508181036000830152613fac81613a8b565b9050919050565b60006020820190508181036000830152613fcc81613aae565b9050919050565b60006020820190508181036000830152613fec81613ad1565b9050919050565b6000602082019050818103600083015261400c81613af4565b9050919050565b6000602082019050818103600083015261402c81613b17565b9050919050565b6000602082019050818103600083015261404c81613b3a565b9050919050565b6000602082019050818103600083015261406c81613b5d565b9050919050565b6000602082019050818103600083015261408c81613b80565b9050919050565b600060208201905081810360008301526140ac81613ba3565b9050919050565b600060208201905081810360008301526140cc81613bc6565b9050919050565b600060208201905081810360008301526140ec81613be9565b9050919050565b6000602082019050818103600083015261410c81613c0c565b9050919050565b6000602082019050818103600083015261412c81613c2f565b9050919050565b6000602082019050818103600083015261414c81613c52565b9050919050565b6000602082019050818103600083015261416c81613c75565b9050919050565b6000602082019050818103600083015261418c81613c98565b9050919050565b600060208201905081810360008301526141ac81613cbb565b9050919050565b600060208201905081810360008301526141cc81613cde565b9050919050565b600060208201905081810360008301526141ec81613d01565b9050919050565b6000602082019050818103600083015261420c81613d24565b9050919050565b6000602082019050818103600083015261422c81613d47565b9050919050565b6000602082019050818103600083015261424c81613d6a565b9050919050565b6000602082019050818103600083015261426c81613d8d565b9050919050565b60006020820190506142886000830184613dbf565b92915050565b60006142986142a9565b90506142a482826145f0565b919050565b6000604051905090565b600067ffffffffffffffff8211156142ce576142cd614786565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156142fa576142f9614786565b5b614303826147ce565b9050602081019050919050565b600067ffffffffffffffff82111561432b5761432a614786565b5b614334826147ce565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143c88261453c565b91506143d38361453c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144085761440761469b565b5b828201905092915050565b600061441e8261453c565b91506144298361453c565b925082614439576144386146ca565b5b828204905092915050565b600061444f8261453c565b915061445a8361453c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144935761449261469b565b5b828202905092915050565b60006144a98261453c565b91506144b48361453c565b9250828210156144c7576144c661469b565b5b828203905092915050565b60006144dd8261451c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061455182614558565b9050919050565b60006145638261456a565b9050919050565b60006145758261451c565b9050919050565b82818337600083830152505050565b60005b838110156145a957808201518184015260208101905061458e565b838111156145b8576000848401525b50505050565b600060028204905060018216806145d657607f821691505b602082108114156145ea576145e96146f9565b5b50919050565b6145f9826147ce565b810181811067ffffffffffffffff8211171561461857614617614786565b5b80604052505050565b600061462c8261453c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561465f5761465e61469b565b5b600182019050919050565b60006146758261453c565b91506146808361453c565b9250826146905761468f6146ca565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757365206d696e7400000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f662054696765726f73000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178206e756d626572206f662054696765726f7320696e60008201527f206f6e65207472616e73616374696f6e00000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f207065726d697373696f6e00000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642076616c756500000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f5468697320746967657220686173206265656e20757365640000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f57726f6e672076616c756520666f72206d617820737570706c79000000000000600082015250565b7f53616c6520697320616374697665000000000000000000000000000000000000600082015250565b7f4e6f742061646d696e0000000000000000000000000000000000000000000000600082015250565b614eed816144d2565b8114614ef857600080fd5b50565b614f04816144e4565b8114614f0f57600080fd5b50565b614f1b816144f0565b8114614f2657600080fd5b50565b614f328161453c565b8114614f3d57600080fd5b5056fea264697066735822122072081741de31d7a2fa705de71e6e786f05d2b33e1b4ebffc71fe945832b57f9864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000990ee1df4c3047a4c94aac91a86be3c6bf40097d000000000000000000000000000000000000000000000000000000000000000654696765726f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000654696765726f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Tigero
Arg [1] : symbol (string): Tigero
Arg [2] : baseURI (string):
Arg [3] : _tigerAddress (address): 0x990EE1dF4c3047A4c94AAc91A86bE3C6BF40097d
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 000000000000000000000000990ee1df4c3047a4c94aac91a86be3c6bf40097d
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 54696765726f0000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 54696765726f0000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
49296:4603:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40741:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28026:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29478:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29015:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52524:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41390:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52340:76;;;;;;;;;;;;;:::i;:::-;;30368:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41058:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52220:89;;;;;;;;;;;;;:::i;:::-;;49455:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52012:176;;;;;;;;;;;;;:::i;:::-;;30744:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41580:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53071:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27720:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52428:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27450:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52861:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48578:148;;;;;;;;;;;;;:::i;:::-;;49610:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51304:630;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49579:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53349:547;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47927:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49500:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52761:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28195:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49411:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29771:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30966:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28370:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30137:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49540:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49682:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48881:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50266:989;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40741:233;40843:4;40882:35;40867:50;;;:11;:50;;;;:99;;;;40930:36;40954:11;40930:23;:36::i;:::-;40867:99;40860:106;;40741:233;;;:::o;28026:100::-;28080:13;28113:5;28106:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28026:100;:::o;29478:221::-;29554:7;29582:16;29590:7;29582;:16::i;:::-;29574:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29667:15;:24;29683:7;29667:24;;;;;;;;;;;;;;;;;;;;;29660:31;;29478:221;;;:::o;29015:397::-;29096:13;29112:23;29127:7;29112:14;:23::i;:::-;29096:39;;29160:5;29154:11;;:2;:11;;;;29146:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29240:5;29224:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29249:37;29266:5;29273:12;:10;:12::i;:::-;29249:16;:37::i;:::-;29224:62;29216:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29383:21;29392:2;29396:7;29383:8;:21::i;:::-;29085:327;29015:397;;:::o;52524:225::-;50182:5;;;;;;;;;;;50168:19;;:10;:19;;;50160:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;52622:13:::1;:11;:13::i;:::-;52613:6;:22;:42;;;;;52649:6;52639;:16;;52613:42;52591:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;52735:6;52722:10;:19;;;;52524:225:::0;:::o;41390:113::-;41451:7;41478:10;:17;;;;41471:24;;41390:113;:::o;52340:76::-;50182:5;;;;;;;;;;;50168:19;;:10;:19;;;50160:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;52403:5:::1;;;;;;;;;;;52402:6;52394:5;;:14;;;;;;;;;;;;;;;;;;52340:76::o:0;30368:305::-;30529:41;30548:12;:10;:12::i;:::-;30562:7;30529:18;:41::i;:::-;30521:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30637:28;30647:4;30653:2;30657:7;30637:9;:28::i;:::-;30368:305;;;:::o;41058:256::-;41155:7;41191:23;41208:5;41191:16;:23::i;:::-;41183:5;:31;41175:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41280:12;:19;41293:5;41280:19;;;;;;;;;;;;;;;:26;41300:5;41280:26;;;;;;;;;;;;41273:33;;41058:256;;;;:::o;52220:89::-;50182:5;;;;;;;;;;;50168:19;;:10;:19;;;50160:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;52289:12:::1;;;;;;;;;;;52288:13;52273:12;;:28;;;;;;;;;;;;;;;;;;52220:89::o:0;49455:30::-;;;;:::o;52012:176::-;50182:5;;;;;;;;;;;50168:19;;:10;:19;;;50160:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;52060:15:::1;52078:21;52060:39;;52128:1;52118:7;:11;52110:20;;;::::0;::::1;;52149:12;:10;:12::i;:::-;52141:30;;:39;52172:7;52141:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52049:139;52012:176::o:0;30744:151::-;30848:39;30865:4;30871:2;30875:7;30848:39;;;;;;;;;;;;:16;:39::i;:::-;30744:151;;;:::o;41580:233::-;41655:7;41691:30;:28;:30::i;:::-;41683:5;:38;41675:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41788:10;41799:5;41788:17;;;;;;;;:::i;:::-;;;;;;;;;;41781:24;;41580:233;;;:::o;53071:102::-;50182:5;;;;;;;;;;;50168:19;;:10;:19;;;50160:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;53158:7:::1;53146:9;:19;;;;;;;;;;;;:::i;:::-;;53071:102:::0;:::o;27720:239::-;27792:7;27812:13;27828:7;:16;27836:7;27828:16;;;;;;;;;;;;;;;;;;;;;27812:32;;27880:1;27863:19;;:5;:19;;;;27855:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27946:5;27939:12;;;27720:239;;;:::o;52428:84::-;50182:5;;;;;;;;;;;50168:19;;:10;:19;;;50160:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;52500:4:::1;52492:5;;:12;;;;;;;;;;;;;;;;;;52428:84:::0;:::o;27450:208::-;27522:7;27567:1;27550:19;;:5;:19;;;;27542:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27634:9;:16;27644:5;27634:16;;;;;;;;;;;;;;;;27627:23;;27450:208;;;:::o;52861:151::-;50182:5;;;;;;;;;;;50168:19;;:10;:19;;;50160:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;52948:1:::1;52939:6;:10;52931:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;52998:6;52978:17;:26;;;;52861:151:::0;:::o;48578:148::-;48158:12;:10;:12::i;:::-;48147:23;;:7;:5;:7::i;:::-;:23;;;48139:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48685:1:::1;48648:40;;48669:6;;;;;;;;;;;48648:40;;;;;;;;;;;;48716:1;48699:6;;:19;;;;;;;;;;;;;;;;;;48578:148::o:0;49610:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;51304:630::-;51392:17;;51374:14;:35;;51366:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;51476:5;;;;;;;;;;;51475:6;51467:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;51515:12;;;;;;;;;;;51507:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;51606:10;;51569:33;51587:14;51569:13;:11;:13::i;:::-;:17;;:33;;;;:::i;:::-;:47;;51561:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;51718:9;51683:31;51699:14;51683:11;;:15;;:31;;;;:::i;:::-;:44;51675:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;51788:6;51784:143;51804:14;51800:1;:18;51784:143;;;51840:12;51855:13;:11;:13::i;:::-;51840:28;;51883:32;51893:12;:10;:12::i;:::-;51907:7;51883:9;:32::i;:::-;51825:102;51820:3;;;;;:::i;:::-;;;;51784:143;;;;51304:630;:::o;49579:24::-;;;;;;;;;;;;;:::o;53349:547::-;53410:28;53451:18;53472:17;53482:6;53472:9;:17::i;:::-;53451:38;;53520:1;53506:10;:15;53502:387;;;53597:1;53583:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53576:23;;;;;53502:387;53632:23;53672:10;53658:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53632:51;;53702:9;53698:152;53717:10;53715:1;:12;53698:152;;;53753:13;53769:29;53789:6;53796:1;53769:19;:29::i;:::-;53753:45;;53829:5;53817:6;53824:1;53817:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;;53734:116;53729:3;;;;;:::i;:::-;;;;53698:152;;;;53871:6;53864:13;;;;53349:547;;;;:::o;47927:87::-;47973:7;48000:6;;;;;;;;;;;47993:13;;47927:87;:::o;49500:33::-;;;;:::o;52761:92::-;50182:5;;;;;;;;;;;50168:19;;:10;:19;;;50160:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;52839:6:::1;52825:11;:20;;;;52761:92:::0;:::o;28195:104::-;28251:13;28284:7;28277:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28195:104;:::o;49411:37::-;;;;:::o;29771:295::-;29886:12;:10;:12::i;:::-;29874:24;;:8;:24;;;;29866:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29986:8;29941:18;:32;29960:12;:10;:12::i;:::-;29941:32;;;;;;;;;;;;;;;:42;29974:8;29941:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;30039:8;30010:48;;30025:12;:10;:12::i;:::-;30010:48;;;30049:8;30010:48;;;;;;:::i;:::-;;;;;;;;29771:295;;:::o;30966:285::-;31098:41;31117:12;:10;:12::i;:::-;31131:7;31098:18;:41::i;:::-;31090:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31204:39;31218:4;31224:2;31228:7;31237:5;31204:13;:39::i;:::-;30966:285;;;;:::o;28370:352::-;28443:13;28477:16;28485:7;28477;:16::i;:::-;28469:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28558:21;28582:10;:8;:10::i;:::-;28558:34;;28634:1;28616:7;28610:21;:25;:104;;;;;;;;;;;;;;;;;28671:7;28680:18;:7;:16;:18::i;:::-;28654:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28610:104;28603:111;;;28370:352;;;:::o;30137:164::-;30234:4;30258:18;:25;30277:5;30258:25;;;;;;;;;;;;;;;:35;30284:8;30258:35;;;;;;;;;;;;;;;;;;;;;;;;;30251:42;;30137:164;;;;:::o;49540:32::-;;;;;;;;;;;;;:::o;49682:38::-;;;;;;;;;;;;;:::o;48881:244::-;48158:12;:10;:12::i;:::-;48147:23;;:7;:5;:7::i;:::-;:23;;;48139:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48990:1:::1;48970:22;;:8;:22;;;;48962:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;49080:8;49051:38;;49072:6;;;;;;;;;;;49051:38;;;;;;;;;;;;49109:8;49100:6;;:17;;;;;;;;;;;;;;;;;;48881:244:::0;:::o;50266:989::-;50370:17;;50353:6;:13;:34;;50345:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;50460:5;;;;;;;;;;;50459:6;50451:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;50500:12;;;;;;;;;;;50499:13;50491:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;50586:10;;50550:32;50568:6;:13;50550;:11;:13::i;:::-;:17;;:32;;;;:::i;:::-;:46;;50542:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;50697:9;50663:30;50679:6;:13;50663:11;;:15;;:30;;;;:::i;:::-;:43;50655:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;50768:6;50763:485;50784:6;:13;50780:1;:17;50763:485;;;50867:6;:17;50874:6;50881:1;50874:9;;;;;;;;:::i;:::-;;;;;;;;50867:17;;;;;;;;;;;;;;;;;;;;;50866:18;50858:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;51019:12;:10;:12::i;:::-;50981:50;;:15;;;;;;;;;;;:23;;;51005:6;51012:1;51005:9;;;;;;;;:::i;:::-;;;;;;;;50981:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;50973:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;51128:4;51108:6;:17;51115:6;51122:1;51115:9;;;;;;;;:::i;:::-;;;;;;;;51108:17;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;51161:12;51176:13;:11;:13::i;:::-;51161:28;;51204:32;51214:12;:10;:12::i;:::-;51228:7;51204:9;:32::i;:::-;50804:444;50799:3;;;;;:::i;:::-;;;;50763:485;;;;50266:989;:::o;27102:284::-;27204:4;27243:25;27228:40;;;:11;:40;;;;:101;;;;27296:33;27281:48;;;:11;:48;;;;27228:101;:150;;;;27342:36;27366:11;27342:23;:36::i;:::-;27228:150;27221:157;;27102:284;;;:::o;32718:127::-;32783:4;32835:1;32807:30;;:7;:16;32815:7;32807:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32800:37;;32718:127;;;:::o;22497:98::-;22550:7;22577:10;22570:17;;22497:98;:::o;36595:174::-;36697:2;36670:15;:24;36686:7;36670:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36753:7;36749:2;36715:46;;36724:23;36739:7;36724:14;:23::i;:::-;36715:46;;;;;;;;;;;;36595:174;;:::o;33012:348::-;33105:4;33130:16;33138:7;33130;:16::i;:::-;33122:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33206:13;33222:23;33237:7;33222:14;:23::i;:::-;33206:39;;33275:5;33264:16;;:7;:16;;;:51;;;;33308:7;33284:31;;:20;33296:7;33284:11;:20::i;:::-;:31;;;33264:51;:87;;;;33319:32;33336:5;33343:7;33319:16;:32::i;:::-;33264:87;33256:96;;;33012:348;;;;:::o;35933:544::-;36058:4;36031:31;;:23;36046:7;36031:14;:23::i;:::-;:31;;;36023:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36141:1;36127:16;;:2;:16;;;;36119:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36197:39;36218:4;36224:2;36228:7;36197:20;:39::i;:::-;36301:29;36318:1;36322:7;36301:8;:29::i;:::-;36362:1;36343:9;:15;36353:4;36343:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36391:1;36374:9;:13;36384:2;36374:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36422:2;36403:7;:16;36411:7;36403:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36461:7;36457:2;36442:27;;36451:4;36442:27;;;;;;;;;;;;35933:544;;;:::o;2657:98::-;2715:7;2746:1;2742;:5;;;;:::i;:::-;2735:12;;2657:98;;;;:::o;3395:::-;3453:7;3484:1;3480;:5;;;;:::i;:::-;3473:12;;3395:98;;;;:::o;33702:110::-;33778:26;33788:2;33792:7;33778:26;;;;;;;;;;;;:9;:26::i;:::-;33702:110;;:::o;32133:272::-;32247:28;32257:4;32263:2;32267:7;32247:9;:28::i;:::-;32294:48;32317:4;32323:2;32327:7;32336:5;32294:22;:48::i;:::-;32286:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32133:272;;;;:::o;53198:102::-;53250:13;53283:9;53276:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53198:102;:::o;23121:723::-;23177:13;23407:1;23398:5;:10;23394:53;;;23425:10;;;;;;;;;;;;;;;;;;;;;23394:53;23457:12;23472:5;23457:20;;23488:14;23513:78;23528:1;23520:4;:9;23513:78;;23546:8;;;;;:::i;:::-;;;;23577:2;23569:10;;;;;:::i;:::-;;;23513:78;;;23601:19;23633:6;23623:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23601:39;;23651:154;23667:1;23658:5;:10;23651:154;;23695:1;23685:11;;;;;:::i;:::-;;;23762:2;23754:5;:10;;;;:::i;:::-;23741:2;:24;;;;:::i;:::-;23728:39;;23711:6;23718;23711:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;23791:2;23782:11;;;;;:::i;:::-;;;23651:154;;;23829:6;23815:21;;;;;23121:723;;;;:::o;25645:157::-;25730:4;25769:25;25754:40;;;:11;:40;;;;25747:47;;25645:157;;;:::o;42426:555::-;42536:45;42563:4;42569:2;42573:7;42536:26;:45::i;:::-;42614:1;42598:18;;:4;:18;;;42594:187;;;42633:40;42665:7;42633:31;:40::i;:::-;42594:187;;;42703:2;42695:10;;:4;:10;;;42691:90;;42722:47;42755:4;42761:7;42722:32;:47::i;:::-;42691:90;42594:187;42809:1;42795:16;;:2;:16;;;42791:183;;;42828:45;42865:7;42828:36;:45::i;:::-;42791:183;;;42901:4;42895:10;;:2;:10;;;42891:83;;42922:40;42950:2;42954:7;42922:27;:40::i;:::-;42891:83;42791:183;42426:555;;;:::o;34039:250::-;34135:18;34141:2;34145:7;34135:5;:18::i;:::-;34172:54;34203:1;34207:2;34211:7;34220:5;34172:22;:54::i;:::-;34164:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;34039:250;;;:::o;37334:839::-;37451:4;37477:15;:2;:13;;;:15::i;:::-;37473:693;;;37529:2;37513:36;;;37550:12;:10;:12::i;:::-;37564:4;37570:7;37579:5;37513:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37509:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37776:1;37759:6;:13;:18;37755:341;;;37802:60;;;;;;;;;;:::i;:::-;;;;;;;;37755:341;38046:6;38040:13;38031:6;38027:2;38023:15;38016:38;37509:602;37646:45;;;37636:55;;;:6;:55;;;;37629:62;;;;;37473:693;38150:4;38143:11;;37334:839;;;;;;;:::o;38786:93::-;;;;:::o;43704:164::-;43808:10;:17;;;;43781:15;:24;43797:7;43781:24;;;;;;;;;;;:44;;;;43836:10;43852:7;43836:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43704:164;:::o;44495:988::-;44761:22;44811:1;44786:22;44803:4;44786:16;:22::i;:::-;:26;;;;:::i;:::-;44761:51;;44823:18;44844:17;:26;44862:7;44844:26;;;;;;;;;;;;44823:47;;44991:14;44977:10;:28;44973:328;;45022:19;45044:12;:18;45057:4;45044:18;;;;;;;;;;;;;;;:34;45063:14;45044:34;;;;;;;;;;;;45022:56;;45128:11;45095:12;:18;45108:4;45095:18;;;;;;;;;;;;;;;:30;45114:10;45095:30;;;;;;;;;;;:44;;;;45245:10;45212:17;:30;45230:11;45212:30;;;;;;;;;;;:43;;;;45007:294;44973:328;45397:17;:26;45415:7;45397:26;;;;;;;;;;;45390:33;;;45441:12;:18;45454:4;45441:18;;;;;;;;;;;;;;;:34;45460:14;45441:34;;;;;;;;;;;45434:41;;;44576:907;;44495:988;;:::o;45778:1079::-;46031:22;46076:1;46056:10;:17;;;;:21;;;;:::i;:::-;46031:46;;46088:18;46109:15;:24;46125:7;46109:24;;;;;;;;;;;;46088:45;;46460:19;46482:10;46493:14;46482:26;;;;;;;;:::i;:::-;;;;;;;;;;46460:48;;46546:11;46521:10;46532;46521:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;46657:10;46626:15;:28;46642:11;46626:28;;;;;;;;;;;:41;;;;46798:15;:24;46814:7;46798:24;;;;;;;;;;;46791:31;;;46833:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45849:1008;;;45778:1079;:::o;43282:221::-;43367:14;43384:20;43401:2;43384:16;:20::i;:::-;43367:37;;43442:7;43415:12;:16;43428:2;43415:16;;;;;;;;;;;;;;;:24;43432:6;43415:24;;;;;;;;;;;:34;;;;43489:6;43460:17;:26;43478:7;43460:26;;;;;;;;;;;:35;;;;43356:147;43282:221;;:::o;34625:382::-;34719:1;34705:16;;:2;:16;;;;34697:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34778:16;34786:7;34778;:16::i;:::-;34777:17;34769:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34840:45;34869:1;34873:2;34877:7;34840:20;:45::i;:::-;34915:1;34898:9;:13;34908:2;34898:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34946:2;34927:7;:16;34935:7;34927:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34991:7;34987:2;34966:33;;34983:1;34966:33;;;;;;;;;;;;34625:382;;:::o;14643:422::-;14703:4;14911:12;15022:7;15010:20;15002:28;;15056:1;15049:4;:8;15042:15;;;14643:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1731:143::-;1788:5;1819:6;1813:13;1804:22;;1835:33;1862:5;1835:33;:::i;:::-;1731:143;;;;:::o;1897:370::-;1968:5;2017:3;2010:4;2002:6;1998:17;1994:27;1984:122;;2025:79;;:::i;:::-;1984:122;2142:6;2129:20;2167:94;2257:3;2249:6;2242:4;2234:6;2230:17;2167:94;:::i;:::-;2158:103;;1974:293;1897:370;;;;:::o;2273:133::-;2316:5;2354:6;2341:20;2332:29;;2370:30;2394:5;2370:30;:::i;:::-;2273:133;;;;:::o;2412:137::-;2457:5;2495:6;2482:20;2473:29;;2511:32;2537:5;2511:32;:::i;:::-;2412:137;;;;:::o;2555:141::-;2611:5;2642:6;2636:13;2627:22;;2658:32;2684:5;2658:32;:::i;:::-;2555:141;;;;:::o;2715:338::-;2770:5;2819:3;2812:4;2804:6;2800:17;2796:27;2786:122;;2827:79;;:::i;:::-;2786:122;2944:6;2931:20;2969:78;3043:3;3035:6;3028:4;3020:6;3016:17;2969:78;:::i;:::-;2960:87;;2776:277;2715:338;;;;:::o;3073:340::-;3129:5;3178:3;3171:4;3163:6;3159:17;3155:27;3145:122;;3186:79;;:::i;:::-;3145:122;3303:6;3290:20;3328:79;3403:3;3395:6;3388:4;3380:6;3376:17;3328:79;:::i;:::-;3319:88;;3135:278;3073:340;;;;:::o;3419:139::-;3465:5;3503:6;3490:20;3481:29;;3519:33;3546:5;3519:33;:::i;:::-;3419:139;;;;:::o;3564:329::-;3623:6;3672:2;3660:9;3651:7;3647:23;3643:32;3640:119;;;3678:79;;:::i;:::-;3640:119;3798:1;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3769:117;3564:329;;;;:::o;3899:351::-;3969:6;4018:2;4006:9;3997:7;3993:23;3989:32;3986:119;;;4024:79;;:::i;:::-;3986:119;4144:1;4169:64;4225:7;4216:6;4205:9;4201:22;4169:64;:::i;:::-;4159:74;;4115:128;3899:351;;;;:::o;4256:474::-;4324:6;4332;4381:2;4369:9;4360:7;4356:23;4352:32;4349:119;;;4387:79;;:::i;:::-;4349:119;4507:1;4532:53;4577:7;4568:6;4557:9;4553:22;4532:53;:::i;:::-;4522:63;;4478:117;4634:2;4660:53;4705:7;4696:6;4685:9;4681:22;4660:53;:::i;:::-;4650:63;;4605:118;4256:474;;;;;:::o;4736:619::-;4813:6;4821;4829;4878:2;4866:9;4857:7;4853:23;4849:32;4846:119;;;4884:79;;:::i;:::-;4846:119;5004:1;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4975:117;5131:2;5157:53;5202:7;5193:6;5182:9;5178:22;5157:53;:::i;:::-;5147:63;;5102:118;5259:2;5285:53;5330:7;5321:6;5310:9;5306:22;5285:53;:::i;:::-;5275:63;;5230:118;4736:619;;;;;:::o;5361:943::-;5456:6;5464;5472;5480;5529:3;5517:9;5508:7;5504:23;5500:33;5497:120;;;5536:79;;:::i;:::-;5497:120;5656:1;5681:53;5726:7;5717:6;5706:9;5702:22;5681:53;:::i;:::-;5671:63;;5627:117;5783:2;5809:53;5854:7;5845:6;5834:9;5830:22;5809:53;:::i;:::-;5799:63;;5754:118;5911:2;5937:53;5982:7;5973:6;5962:9;5958:22;5937:53;:::i;:::-;5927:63;;5882:118;6067:2;6056:9;6052:18;6039:32;6098:18;6090:6;6087:30;6084:117;;;6120:79;;:::i;:::-;6084:117;6225:62;6279:7;6270:6;6259:9;6255:22;6225:62;:::i;:::-;6215:72;;6010:287;5361:943;;;;;;;:::o;6310:468::-;6375:6;6383;6432:2;6420:9;6411:7;6407:23;6403:32;6400:119;;;6438:79;;:::i;:::-;6400:119;6558:1;6583:53;6628:7;6619:6;6608:9;6604:22;6583:53;:::i;:::-;6573:63;;6529:117;6685:2;6711:50;6753:7;6744:6;6733:9;6729:22;6711:50;:::i;:::-;6701:60;;6656:115;6310:468;;;;;:::o;6784:474::-;6852:6;6860;6909:2;6897:9;6888:7;6884:23;6880:32;6877:119;;;6915:79;;:::i;:::-;6877:119;7035:1;7060:53;7105:7;7096:6;7085:9;7081:22;7060:53;:::i;:::-;7050:63;;7006:117;7162:2;7188:53;7233:7;7224:6;7213:9;7209:22;7188:53;:::i;:::-;7178:63;;7133:118;6784:474;;;;;:::o;7264:539::-;7348:6;7397:2;7385:9;7376:7;7372:23;7368:32;7365:119;;;7403:79;;:::i;:::-;7365:119;7551:1;7540:9;7536:17;7523:31;7581:18;7573:6;7570:30;7567:117;;;7603:79;;:::i;:::-;7567:117;7708:78;7778:7;7769:6;7758:9;7754:22;7708:78;:::i;:::-;7698:88;;7494:302;7264:539;;;;:::o;7809:327::-;7867:6;7916:2;7904:9;7895:7;7891:23;7887:32;7884:119;;;7922:79;;:::i;:::-;7884:119;8042:1;8067:52;8111:7;8102:6;8091:9;8087:22;8067:52;:::i;:::-;8057:62;;8013:116;7809:327;;;;:::o;8142:349::-;8211:6;8260:2;8248:9;8239:7;8235:23;8231:32;8228:119;;;8266:79;;:::i;:::-;8228:119;8386:1;8411:63;8466:7;8457:6;8446:9;8442:22;8411:63;:::i;:::-;8401:73;;8357:127;8142:349;;;;:::o;8497:509::-;8566:6;8615:2;8603:9;8594:7;8590:23;8586:32;8583:119;;;8621:79;;:::i;:::-;8583:119;8769:1;8758:9;8754:17;8741:31;8799:18;8791:6;8788:30;8785:117;;;8821:79;;:::i;:::-;8785:117;8926:63;8981:7;8972:6;8961:9;8957:22;8926:63;:::i;:::-;8916:73;;8712:287;8497:509;;;;:::o;9012:329::-;9071:6;9120:2;9108:9;9099:7;9095:23;9091:32;9088:119;;;9126:79;;:::i;:::-;9088:119;9246:1;9271:53;9316:7;9307:6;9296:9;9292:22;9271:53;:::i;:::-;9261:63;;9217:117;9012:329;;;;:::o;9347:179::-;9416:10;9437:46;9479:3;9471:6;9437:46;:::i;:::-;9515:4;9510:3;9506:14;9492:28;;9347:179;;;;:::o;9532:118::-;9619:24;9637:5;9619:24;:::i;:::-;9614:3;9607:37;9532:118;;:::o;9686:732::-;9805:3;9834:54;9882:5;9834:54;:::i;:::-;9904:86;9983:6;9978:3;9904:86;:::i;:::-;9897:93;;10014:56;10064:5;10014:56;:::i;:::-;10093:7;10124:1;10109:284;10134:6;10131:1;10128:13;10109:284;;;10210:6;10204:13;10237:63;10296:3;10281:13;10237:63;:::i;:::-;10230:70;;10323:60;10376:6;10323:60;:::i;:::-;10313:70;;10169:224;10156:1;10153;10149:9;10144:14;;10109:284;;;10113:14;10409:3;10402:10;;9810:608;;;9686:732;;;;:::o;10424:109::-;10505:21;10520:5;10505:21;:::i;:::-;10500:3;10493:34;10424:109;;:::o;10539:360::-;10625:3;10653:38;10685:5;10653:38;:::i;:::-;10707:70;10770:6;10765:3;10707:70;:::i;:::-;10700:77;;10786:52;10831:6;10826:3;10819:4;10812:5;10808:16;10786:52;:::i;:::-;10863:29;10885:6;10863:29;:::i;:::-;10858:3;10854:39;10847:46;;10629:270;10539:360;;;;:::o;10905:179::-;11016:61;11071:5;11016:61;:::i;:::-;11011:3;11004:74;10905:179;;:::o;11090:364::-;11178:3;11206:39;11239:5;11206:39;:::i;:::-;11261:71;11325:6;11320:3;11261:71;:::i;:::-;11254:78;;11341:52;11386:6;11381:3;11374:4;11367:5;11363:16;11341:52;:::i;:::-;11418:29;11440:6;11418:29;:::i;:::-;11413:3;11409:39;11402:46;;11182:272;11090:364;;;;:::o;11460:377::-;11566:3;11594:39;11627:5;11594:39;:::i;:::-;11649:89;11731:6;11726:3;11649:89;:::i;:::-;11642:96;;11747:52;11792:6;11787:3;11780:4;11773:5;11769:16;11747:52;:::i;:::-;11824:6;11819:3;11815:16;11808:23;;11570:267;11460:377;;;;:::o;11843:366::-;11985:3;12006:67;12070:2;12065:3;12006:67;:::i;:::-;11999:74;;12082:93;12171:3;12082:93;:::i;:::-;12200:2;12195:3;12191:12;12184:19;;11843:366;;;:::o;12215:::-;12357:3;12378:67;12442:2;12437:3;12378:67;:::i;:::-;12371:74;;12454:93;12543:3;12454:93;:::i;:::-;12572:2;12567:3;12563:12;12556:19;;12215:366;;;:::o;12587:::-;12729:3;12750:67;12814:2;12809:3;12750:67;:::i;:::-;12743:74;;12826:93;12915:3;12826:93;:::i;:::-;12944:2;12939:3;12935:12;12928:19;;12587:366;;;:::o;12959:::-;13101:3;13122:67;13186:2;13181:3;13122:67;:::i;:::-;13115:74;;13198:93;13287:3;13198:93;:::i;:::-;13316:2;13311:3;13307:12;13300:19;;12959:366;;;:::o;13331:::-;13473:3;13494:67;13558:2;13553:3;13494:67;:::i;:::-;13487:74;;13570:93;13659:3;13570:93;:::i;:::-;13688:2;13683:3;13679:12;13672:19;;13331:366;;;:::o;13703:::-;13845:3;13866:67;13930:2;13925:3;13866:67;:::i;:::-;13859:74;;13942:93;14031:3;13942:93;:::i;:::-;14060:2;14055:3;14051:12;14044:19;;13703:366;;;:::o;14075:::-;14217:3;14238:67;14302:2;14297:3;14238:67;:::i;:::-;14231:74;;14314:93;14403:3;14314:93;:::i;:::-;14432:2;14427:3;14423:12;14416:19;;14075:366;;;:::o;14447:::-;14589:3;14610:67;14674:2;14669:3;14610:67;:::i;:::-;14603:74;;14686:93;14775:3;14686:93;:::i;:::-;14804:2;14799:3;14795:12;14788:19;;14447:366;;;:::o;14819:::-;14961:3;14982:67;15046:2;15041:3;14982:67;:::i;:::-;14975:74;;15058:93;15147:3;15058:93;:::i;:::-;15176:2;15171:3;15167:12;15160:19;;14819:366;;;:::o;15191:::-;15333:3;15354:67;15418:2;15413:3;15354:67;:::i;:::-;15347:74;;15430:93;15519:3;15430:93;:::i;:::-;15548:2;15543:3;15539:12;15532:19;;15191:366;;;:::o;15563:::-;15705:3;15726:67;15790:2;15785:3;15726:67;:::i;:::-;15719:74;;15802:93;15891:3;15802:93;:::i;:::-;15920:2;15915:3;15911:12;15904:19;;15563:366;;;:::o;15935:::-;16077:3;16098:67;16162:2;16157:3;16098:67;:::i;:::-;16091:74;;16174:93;16263:3;16174:93;:::i;:::-;16292:2;16287:3;16283:12;16276:19;;15935:366;;;:::o;16307:::-;16449:3;16470:67;16534:2;16529:3;16470:67;:::i;:::-;16463:74;;16546:93;16635:3;16546:93;:::i;:::-;16664:2;16659:3;16655:12;16648:19;;16307:366;;;:::o;16679:::-;16821:3;16842:67;16906:2;16901:3;16842:67;:::i;:::-;16835:74;;16918:93;17007:3;16918:93;:::i;:::-;17036:2;17031:3;17027:12;17020:19;;16679:366;;;:::o;17051:::-;17193:3;17214:67;17278:2;17273:3;17214:67;:::i;:::-;17207:74;;17290:93;17379:3;17290:93;:::i;:::-;17408:2;17403:3;17399:12;17392:19;;17051:366;;;:::o;17423:::-;17565:3;17586:67;17650:2;17645:3;17586:67;:::i;:::-;17579:74;;17662:93;17751:3;17662:93;:::i;:::-;17780:2;17775:3;17771:12;17764:19;;17423:366;;;:::o;17795:::-;17937:3;17958:67;18022:2;18017:3;17958:67;:::i;:::-;17951:74;;18034:93;18123:3;18034:93;:::i;:::-;18152:2;18147:3;18143:12;18136:19;;17795:366;;;:::o;18167:::-;18309:3;18330:67;18394:2;18389:3;18330:67;:::i;:::-;18323:74;;18406:93;18495:3;18406:93;:::i;:::-;18524:2;18519:3;18515:12;18508:19;;18167:366;;;:::o;18539:::-;18681:3;18702:67;18766:2;18761:3;18702:67;:::i;:::-;18695:74;;18778:93;18867:3;18778:93;:::i;:::-;18896:2;18891:3;18887:12;18880:19;;18539:366;;;:::o;18911:::-;19053:3;19074:67;19138:2;19133:3;19074:67;:::i;:::-;19067:74;;19150:93;19239:3;19150:93;:::i;:::-;19268:2;19263:3;19259:12;19252:19;;18911:366;;;:::o;19283:::-;19425:3;19446:67;19510:2;19505:3;19446:67;:::i;:::-;19439:74;;19522:93;19611:3;19522:93;:::i;:::-;19640:2;19635:3;19631:12;19624:19;;19283:366;;;:::o;19655:::-;19797:3;19818:67;19882:2;19877:3;19818:67;:::i;:::-;19811:74;;19894:93;19983:3;19894:93;:::i;:::-;20012:2;20007:3;20003:12;19996:19;;19655:366;;;:::o;20027:::-;20169:3;20190:67;20254:2;20249:3;20190:67;:::i;:::-;20183:74;;20266:93;20355:3;20266:93;:::i;:::-;20384:2;20379:3;20375:12;20368:19;;20027:366;;;:::o;20399:::-;20541:3;20562:67;20626:2;20621:3;20562:67;:::i;:::-;20555:74;;20638:93;20727:3;20638:93;:::i;:::-;20756:2;20751:3;20747:12;20740:19;;20399:366;;;:::o;20771:::-;20913:3;20934:67;20998:2;20993:3;20934:67;:::i;:::-;20927:74;;21010:93;21099:3;21010:93;:::i;:::-;21128:2;21123:3;21119:12;21112:19;;20771:366;;;:::o;21143:::-;21285:3;21306:67;21370:2;21365:3;21306:67;:::i;:::-;21299:74;;21382:93;21471:3;21382:93;:::i;:::-;21500:2;21495:3;21491:12;21484:19;;21143:366;;;:::o;21515:::-;21657:3;21678:67;21742:2;21737:3;21678:67;:::i;:::-;21671:74;;21754:93;21843:3;21754:93;:::i;:::-;21872:2;21867:3;21863:12;21856:19;;21515:366;;;:::o;21887:::-;22029:3;22050:67;22114:2;22109:3;22050:67;:::i;:::-;22043:74;;22126:93;22215:3;22126:93;:::i;:::-;22244:2;22239:3;22235:12;22228:19;;21887:366;;;:::o;22259:365::-;22401:3;22422:66;22486:1;22481:3;22422:66;:::i;:::-;22415:73;;22497:93;22586:3;22497:93;:::i;:::-;22615:2;22610:3;22606:12;22599:19;;22259:365;;;:::o;22630:108::-;22707:24;22725:5;22707:24;:::i;:::-;22702:3;22695:37;22630:108;;:::o;22744:118::-;22831:24;22849:5;22831:24;:::i;:::-;22826:3;22819:37;22744:118;;:::o;22868:435::-;23048:3;23070:95;23161:3;23152:6;23070:95;:::i;:::-;23063:102;;23182:95;23273:3;23264:6;23182:95;:::i;:::-;23175:102;;23294:3;23287:10;;22868:435;;;;;:::o;23309:222::-;23402:4;23440:2;23429:9;23425:18;23417:26;;23453:71;23521:1;23510:9;23506:17;23497:6;23453:71;:::i;:::-;23309:222;;;;:::o;23537:640::-;23732:4;23770:3;23759:9;23755:19;23747:27;;23784:71;23852:1;23841:9;23837:17;23828:6;23784:71;:::i;:::-;23865:72;23933:2;23922:9;23918:18;23909:6;23865:72;:::i;:::-;23947;24015:2;24004:9;24000:18;23991:6;23947:72;:::i;:::-;24066:9;24060:4;24056:20;24051:2;24040:9;24036:18;24029:48;24094:76;24165:4;24156:6;24094:76;:::i;:::-;24086:84;;23537:640;;;;;;;:::o;24183:373::-;24326:4;24364:2;24353:9;24349:18;24341:26;;24413:9;24407:4;24403:20;24399:1;24388:9;24384:17;24377:47;24441:108;24544:4;24535:6;24441:108;:::i;:::-;24433:116;;24183:373;;;;:::o;24562:210::-;24649:4;24687:2;24676:9;24672:18;24664:26;;24700:65;24762:1;24751:9;24747:17;24738:6;24700:65;:::i;:::-;24562:210;;;;:::o;24778:270::-;24895:4;24933:2;24922:9;24918:18;24910:26;;24946:95;25038:1;25027:9;25023:17;25014:6;24946:95;:::i;:::-;24778:270;;;;:::o;25054:313::-;25167:4;25205:2;25194:9;25190:18;25182:26;;25254:9;25248:4;25244:20;25240:1;25229:9;25225:17;25218:47;25282:78;25355:4;25346:6;25282:78;:::i;:::-;25274:86;;25054:313;;;;:::o;25373:419::-;25539:4;25577:2;25566:9;25562:18;25554:26;;25626:9;25620:4;25616:20;25612:1;25601:9;25597:17;25590:47;25654:131;25780:4;25654:131;:::i;:::-;25646:139;;25373:419;;;:::o;25798:::-;25964:4;26002:2;25991:9;25987:18;25979:26;;26051:9;26045:4;26041:20;26037:1;26026:9;26022:17;26015:47;26079:131;26205:4;26079:131;:::i;:::-;26071:139;;25798:419;;;:::o;26223:::-;26389:4;26427:2;26416:9;26412:18;26404:26;;26476:9;26470:4;26466:20;26462:1;26451:9;26447:17;26440:47;26504:131;26630:4;26504:131;:::i;:::-;26496:139;;26223:419;;;:::o;26648:::-;26814:4;26852:2;26841:9;26837:18;26829:26;;26901:9;26895:4;26891:20;26887:1;26876:9;26872:17;26865:47;26929:131;27055:4;26929:131;:::i;:::-;26921:139;;26648:419;;;:::o;27073:::-;27239:4;27277:2;27266:9;27262:18;27254:26;;27326:9;27320:4;27316:20;27312:1;27301:9;27297:17;27290:47;27354:131;27480:4;27354:131;:::i;:::-;27346:139;;27073:419;;;:::o;27498:::-;27664:4;27702:2;27691:9;27687:18;27679:26;;27751:9;27745:4;27741:20;27737:1;27726:9;27722:17;27715:47;27779:131;27905:4;27779:131;:::i;:::-;27771:139;;27498:419;;;:::o;27923:::-;28089:4;28127:2;28116:9;28112:18;28104:26;;28176:9;28170:4;28166:20;28162:1;28151:9;28147:17;28140:47;28204:131;28330:4;28204:131;:::i;:::-;28196:139;;27923:419;;;:::o;28348:::-;28514:4;28552:2;28541:9;28537:18;28529:26;;28601:9;28595:4;28591:20;28587:1;28576:9;28572:17;28565:47;28629:131;28755:4;28629:131;:::i;:::-;28621:139;;28348:419;;;:::o;28773:::-;28939:4;28977:2;28966:9;28962:18;28954:26;;29026:9;29020:4;29016:20;29012:1;29001:9;28997:17;28990:47;29054:131;29180:4;29054:131;:::i;:::-;29046:139;;28773:419;;;:::o;29198:::-;29364:4;29402:2;29391:9;29387:18;29379:26;;29451:9;29445:4;29441:20;29437:1;29426:9;29422:17;29415:47;29479:131;29605:4;29479:131;:::i;:::-;29471:139;;29198:419;;;:::o;29623:::-;29789:4;29827:2;29816:9;29812:18;29804:26;;29876:9;29870:4;29866:20;29862:1;29851:9;29847:17;29840:47;29904:131;30030:4;29904:131;:::i;:::-;29896:139;;29623:419;;;:::o;30048:::-;30214:4;30252:2;30241:9;30237:18;30229:26;;30301:9;30295:4;30291:20;30287:1;30276:9;30272:17;30265:47;30329:131;30455:4;30329:131;:::i;:::-;30321:139;;30048:419;;;:::o;30473:::-;30639:4;30677:2;30666:9;30662:18;30654:26;;30726:9;30720:4;30716:20;30712:1;30701:9;30697:17;30690:47;30754:131;30880:4;30754:131;:::i;:::-;30746:139;;30473:419;;;:::o;30898:::-;31064:4;31102:2;31091:9;31087:18;31079:26;;31151:9;31145:4;31141:20;31137:1;31126:9;31122:17;31115:47;31179:131;31305:4;31179:131;:::i;:::-;31171:139;;30898:419;;;:::o;31323:::-;31489:4;31527:2;31516:9;31512:18;31504:26;;31576:9;31570:4;31566:20;31562:1;31551:9;31547:17;31540:47;31604:131;31730:4;31604:131;:::i;:::-;31596:139;;31323:419;;;:::o;31748:::-;31914:4;31952:2;31941:9;31937:18;31929:26;;32001:9;31995:4;31991:20;31987:1;31976:9;31972:17;31965:47;32029:131;32155:4;32029:131;:::i;:::-;32021:139;;31748:419;;;:::o;32173:::-;32339:4;32377:2;32366:9;32362:18;32354:26;;32426:9;32420:4;32416:20;32412:1;32401:9;32397:17;32390:47;32454:131;32580:4;32454:131;:::i;:::-;32446:139;;32173:419;;;:::o;32598:::-;32764:4;32802:2;32791:9;32787:18;32779:26;;32851:9;32845:4;32841:20;32837:1;32826:9;32822:17;32815:47;32879:131;33005:4;32879:131;:::i;:::-;32871:139;;32598:419;;;:::o;33023:::-;33189:4;33227:2;33216:9;33212:18;33204:26;;33276:9;33270:4;33266:20;33262:1;33251:9;33247:17;33240:47;33304:131;33430:4;33304:131;:::i;:::-;33296:139;;33023:419;;;:::o;33448:::-;33614:4;33652:2;33641:9;33637:18;33629:26;;33701:9;33695:4;33691:20;33687:1;33676:9;33672:17;33665:47;33729:131;33855:4;33729:131;:::i;:::-;33721:139;;33448:419;;;:::o;33873:::-;34039:4;34077:2;34066:9;34062:18;34054:26;;34126:9;34120:4;34116:20;34112:1;34101:9;34097:17;34090:47;34154:131;34280:4;34154:131;:::i;:::-;34146:139;;33873:419;;;:::o;34298:::-;34464:4;34502:2;34491:9;34487:18;34479:26;;34551:9;34545:4;34541:20;34537:1;34526:9;34522:17;34515:47;34579:131;34705:4;34579:131;:::i;:::-;34571:139;;34298:419;;;:::o;34723:::-;34889:4;34927:2;34916:9;34912:18;34904:26;;34976:9;34970:4;34966:20;34962:1;34951:9;34947:17;34940:47;35004:131;35130:4;35004:131;:::i;:::-;34996:139;;34723:419;;;:::o;35148:::-;35314:4;35352:2;35341:9;35337:18;35329:26;;35401:9;35395:4;35391:20;35387:1;35376:9;35372:17;35365:47;35429:131;35555:4;35429:131;:::i;:::-;35421:139;;35148:419;;;:::o;35573:::-;35739:4;35777:2;35766:9;35762:18;35754:26;;35826:9;35820:4;35816:20;35812:1;35801:9;35797:17;35790:47;35854:131;35980:4;35854:131;:::i;:::-;35846:139;;35573:419;;;:::o;35998:::-;36164:4;36202:2;36191:9;36187:18;36179:26;;36251:9;36245:4;36241:20;36237:1;36226:9;36222:17;36215:47;36279:131;36405:4;36279:131;:::i;:::-;36271:139;;35998:419;;;:::o;36423:::-;36589:4;36627:2;36616:9;36612:18;36604:26;;36676:9;36670:4;36666:20;36662:1;36651:9;36647:17;36640:47;36704:131;36830:4;36704:131;:::i;:::-;36696:139;;36423:419;;;:::o;36848:::-;37014:4;37052:2;37041:9;37037:18;37029:26;;37101:9;37095:4;37091:20;37087:1;37076:9;37072:17;37065:47;37129:131;37255:4;37129:131;:::i;:::-;37121:139;;36848:419;;;:::o;37273:::-;37439:4;37477:2;37466:9;37462:18;37454:26;;37526:9;37520:4;37516:20;37512:1;37501:9;37497:17;37490:47;37554:131;37680:4;37554:131;:::i;:::-;37546:139;;37273:419;;;:::o;37698:222::-;37791:4;37829:2;37818:9;37814:18;37806:26;;37842:71;37910:1;37899:9;37895:17;37886:6;37842:71;:::i;:::-;37698:222;;;;:::o;37926:129::-;37960:6;37987:20;;:::i;:::-;37977:30;;38016:33;38044:4;38036:6;38016:33;:::i;:::-;37926:129;;;:::o;38061:75::-;38094:6;38127:2;38121:9;38111:19;;38061:75;:::o;38142:311::-;38219:4;38309:18;38301:6;38298:30;38295:56;;;38331:18;;:::i;:::-;38295:56;38381:4;38373:6;38369:17;38361:25;;38441:4;38435;38431:15;38423:23;;38142:311;;;:::o;38459:307::-;38520:4;38610:18;38602:6;38599:30;38596:56;;;38632:18;;:::i;:::-;38596:56;38670:29;38692:6;38670:29;:::i;:::-;38662:37;;38754:4;38748;38744:15;38736:23;;38459:307;;;:::o;38772:308::-;38834:4;38924:18;38916:6;38913:30;38910:56;;;38946:18;;:::i;:::-;38910:56;38984:29;39006:6;38984:29;:::i;:::-;38976:37;;39068:4;39062;39058:15;39050:23;;38772:308;;;:::o;39086:132::-;39153:4;39176:3;39168:11;;39206:4;39201:3;39197:14;39189:22;;39086:132;;;:::o;39224:114::-;39291:6;39325:5;39319:12;39309:22;;39224:114;;;:::o;39344:98::-;39395:6;39429:5;39423:12;39413:22;;39344:98;;;:::o;39448:99::-;39500:6;39534:5;39528:12;39518:22;;39448:99;;;:::o;39553:113::-;39623:4;39655;39650:3;39646:14;39638:22;;39553:113;;;:::o;39672:184::-;39771:11;39805:6;39800:3;39793:19;39845:4;39840:3;39836:14;39821:29;;39672:184;;;;:::o;39862:168::-;39945:11;39979:6;39974:3;39967:19;40019:4;40014:3;40010:14;39995:29;;39862:168;;;;:::o;40036:169::-;40120:11;40154:6;40149:3;40142:19;40194:4;40189:3;40185:14;40170:29;;40036:169;;;;:::o;40211:148::-;40313:11;40350:3;40335:18;;40211:148;;;;:::o;40365:305::-;40405:3;40424:20;40442:1;40424:20;:::i;:::-;40419:25;;40458:20;40476:1;40458:20;:::i;:::-;40453:25;;40612:1;40544:66;40540:74;40537:1;40534:81;40531:107;;;40618:18;;:::i;:::-;40531:107;40662:1;40659;40655:9;40648:16;;40365:305;;;;:::o;40676:185::-;40716:1;40733:20;40751:1;40733:20;:::i;:::-;40728:25;;40767:20;40785:1;40767:20;:::i;:::-;40762:25;;40806:1;40796:35;;40811:18;;:::i;:::-;40796:35;40853:1;40850;40846:9;40841:14;;40676:185;;;;:::o;40867:348::-;40907:7;40930:20;40948:1;40930:20;:::i;:::-;40925:25;;40964:20;40982:1;40964:20;:::i;:::-;40959:25;;41152:1;41084:66;41080:74;41077:1;41074:81;41069:1;41062:9;41055:17;41051:105;41048:131;;;41159:18;;:::i;:::-;41048:131;41207:1;41204;41200:9;41189:20;;40867:348;;;;:::o;41221:191::-;41261:4;41281:20;41299:1;41281:20;:::i;:::-;41276:25;;41315:20;41333:1;41315:20;:::i;:::-;41310:25;;41354:1;41351;41348:8;41345:34;;;41359:18;;:::i;:::-;41345:34;41404:1;41401;41397:9;41389:17;;41221:191;;;;:::o;41418:96::-;41455:7;41484:24;41502:5;41484:24;:::i;:::-;41473:35;;41418:96;;;:::o;41520:90::-;41554:7;41597:5;41590:13;41583:21;41572:32;;41520:90;;;:::o;41616:149::-;41652:7;41692:66;41685:5;41681:78;41670:89;;41616:149;;;:::o;41771:126::-;41808:7;41848:42;41841:5;41837:54;41826:65;;41771:126;;;:::o;41903:77::-;41940:7;41969:5;41958:16;;41903:77;;;:::o;41986:150::-;42060:9;42093:37;42124:5;42093:37;:::i;:::-;42080:50;;41986:150;;;:::o;42142:126::-;42192:9;42225:37;42256:5;42225:37;:::i;:::-;42212:50;;42142:126;;;:::o;42274:113::-;42324:9;42357:24;42375:5;42357:24;:::i;:::-;42344:37;;42274:113;;;:::o;42393:154::-;42477:6;42472:3;42467;42454:30;42539:1;42530:6;42525:3;42521:16;42514:27;42393:154;;;:::o;42553:307::-;42621:1;42631:113;42645:6;42642:1;42639:13;42631:113;;;42730:1;42725:3;42721:11;42715:18;42711:1;42706:3;42702:11;42695:39;42667:2;42664:1;42660:10;42655:15;;42631:113;;;42762:6;42759:1;42756:13;42753:101;;;42842:1;42833:6;42828:3;42824:16;42817:27;42753:101;42602:258;42553:307;;;:::o;42866:320::-;42910:6;42947:1;42941:4;42937:12;42927:22;;42994:1;42988:4;42984:12;43015:18;43005:81;;43071:4;43063:6;43059:17;43049:27;;43005:81;43133:2;43125:6;43122:14;43102:18;43099:38;43096:84;;;43152:18;;:::i;:::-;43096:84;42917:269;42866:320;;;:::o;43192:281::-;43275:27;43297:4;43275:27;:::i;:::-;43267:6;43263:40;43405:6;43393:10;43390:22;43369:18;43357:10;43354:34;43351:62;43348:88;;;43416:18;;:::i;:::-;43348:88;43456:10;43452:2;43445:22;43235:238;43192:281;;:::o;43479:233::-;43518:3;43541:24;43559:5;43541:24;:::i;:::-;43532:33;;43587:66;43580:5;43577:77;43574:103;;;43657:18;;:::i;:::-;43574:103;43704:1;43697:5;43693:13;43686:20;;43479:233;;;:::o;43718:176::-;43750:1;43767:20;43785:1;43767:20;:::i;:::-;43762:25;;43801:20;43819:1;43801:20;:::i;:::-;43796:25;;43840:1;43830:35;;43845:18;;:::i;:::-;43830:35;43886:1;43883;43879:9;43874:14;;43718:176;;;;:::o;43900:180::-;43948:77;43945:1;43938:88;44045:4;44042:1;44035:15;44069:4;44066:1;44059:15;44086:180;44134:77;44131:1;44124:88;44231:4;44228:1;44221:15;44255:4;44252:1;44245:15;44272:180;44320:77;44317:1;44310:88;44417:4;44414:1;44407:15;44441:4;44438:1;44431:15;44458:180;44506:77;44503:1;44496:88;44603:4;44600:1;44593:15;44627:4;44624:1;44617:15;44644:180;44692:77;44689:1;44682:88;44789:4;44786:1;44779:15;44813:4;44810:1;44803:15;44830:180;44878:77;44875:1;44868:88;44975:4;44972:1;44965:15;44999:4;44996:1;44989:15;45016:117;45125:1;45122;45115:12;45139:117;45248:1;45245;45238:12;45262:117;45371:1;45368;45361:12;45385:117;45494:1;45491;45484:12;45508:117;45617:1;45614;45607:12;45631:102;45672:6;45723:2;45719:7;45714:2;45707:5;45703:14;45699:28;45689:38;;45631:102;;;:::o;45739:160::-;45879:12;45875:1;45867:6;45863:14;45856:36;45739:160;:::o;45905:230::-;46045:34;46041:1;46033:6;46029:14;46022:58;46114:13;46109:2;46101:6;46097:15;46090:38;45905:230;:::o;46141:237::-;46281:34;46277:1;46269:6;46265:14;46258:58;46350:20;46345:2;46337:6;46333:15;46326:45;46141:237;:::o;46384:225::-;46524:34;46520:1;46512:6;46508:14;46501:58;46593:8;46588:2;46580:6;46576:15;46569:33;46384:225;:::o;46615:178::-;46755:30;46751:1;46743:6;46739:14;46732:54;46615:178;:::o;46799:223::-;46939:34;46935:1;46927:6;46923:14;46916:58;47008:6;47003:2;46995:6;46991:15;46984:31;46799:223;:::o;47028:175::-;47168:27;47164:1;47156:6;47152:14;47145:51;47028:175;:::o;47209:168::-;47349:20;47345:1;47337:6;47333:14;47326:44;47209:168;:::o;47383:181::-;47523:33;47519:1;47511:6;47507:14;47500:57;47383:181;:::o;47570:231::-;47710:34;47706:1;47698:6;47694:14;47687:58;47779:14;47774:2;47766:6;47762:15;47755:39;47570:231;:::o;47807:230::-;47947:34;47943:1;47935:6;47931:14;47924:58;48016:13;48011:2;48003:6;47999:15;47992:38;47807:230;:::o;48043:243::-;48183:34;48179:1;48171:6;48167:14;48160:58;48252:26;48247:2;48239:6;48235:15;48228:51;48043:243;:::o;48292:229::-;48432:34;48428:1;48420:6;48416:14;48409:58;48501:12;48496:2;48488:6;48484:15;48477:37;48292:229;:::o;48527:228::-;48667:34;48663:1;48655:6;48651:14;48644:58;48736:11;48731:2;48723:6;48719:15;48712:36;48527:228;:::o;48761:235::-;48901:34;48897:1;48889:6;48885:14;48878:58;48970:18;48965:2;48957:6;48953:15;48946:43;48761:235;:::o;49002:182::-;49142:34;49138:1;49130:6;49126:14;49119:58;49002:182;:::o;49190:231::-;49330:34;49326:1;49318:6;49314:14;49307:58;49399:14;49394:2;49386:6;49382:15;49375:39;49190:231;:::o;49427:163::-;49567:15;49563:1;49555:6;49551:14;49544:39;49427:163;:::o;49596:182::-;49736:34;49732:1;49724:6;49720:14;49713:58;49596:182;:::o;49784:228::-;49924:34;49920:1;49912:6;49908:14;49901:58;49993:11;49988:2;49980:6;49976:15;49969:36;49784:228;:::o;50018:163::-;50158:15;50154:1;50146:6;50142:14;50135:39;50018:163;:::o;50187:234::-;50327:34;50323:1;50315:6;50311:14;50304:58;50396:17;50391:2;50383:6;50379:15;50372:42;50187:234;:::o;50427:174::-;50567:26;50563:1;50555:6;50551:14;50544:50;50427:174;:::o;50607:220::-;50747:34;50743:1;50735:6;50731:14;50724:58;50816:3;50811:2;50803:6;50799:15;50792:28;50607:220;:::o;50833:236::-;50973:34;50969:1;50961:6;50957:14;50950:58;51042:19;51037:2;51029:6;51025:15;51018:44;50833:236;:::o;51075:231::-;51215:34;51211:1;51203:6;51199:14;51192:58;51284:14;51279:2;51271:6;51267:15;51260:39;51075:231;:::o;51312:176::-;51452:28;51448:1;51440:6;51436:14;51429:52;51312:176;:::o;51494:164::-;51634:16;51630:1;51622:6;51618:14;51611:40;51494:164;:::o;51664:159::-;51804:11;51800:1;51792:6;51788:14;51781:35;51664:159;:::o;51829:122::-;51902:24;51920:5;51902:24;:::i;:::-;51895:5;51892:35;51882:63;;51941:1;51938;51931:12;51882:63;51829:122;:::o;51957:116::-;52027:21;52042:5;52027:21;:::i;:::-;52020:5;52017:32;52007:60;;52063:1;52060;52053:12;52007:60;51957:116;:::o;52079:120::-;52151:23;52168:5;52151:23;:::i;:::-;52144:5;52141:34;52131:62;;52189:1;52186;52179:12;52131:62;52079:120;:::o;52205:122::-;52278:24;52296:5;52278:24;:::i;:::-;52271:5;52268:35;52258:63;;52317:1;52314;52307:12;52258:63;52205:122;:::o
Swarm Source
ipfs://72081741de31d7a2fa705de71e6e786f05d2b33e1b4ebffc71fe945832b57f98
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.