ERC-721
NFT
Overview
Max Total Supply
6,942 JENKINS
Holders
2,703
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 JENKINSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
JenkinsTheValet
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-04 */ /** Contract by 0xfoobar in collab with Tally Labs # # # # ###### # # # # # # # #### ##### # # ###### # # ## # ###### ##### # # ## # # # # ## # # # # # # # # # # # # # # ##### # # # #### # # # # #### # ###### ##### # # # # # ##### # # # # # # # # # # # # # # # # # # # # ###### # # # # # # # ## # # # # ## # # # # # # # # # # # # # ##### ###### # # # # # # # #### # # # ###### # # # ###### ###### # */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { 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; } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // 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/Strings.sol pragma solidity ^0.8.0; /** * @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 pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping (uint256 => address) private _owners; // Mapping owner address to token count mapping (address => uint256) private _balances; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. 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: contracts/JenkinsTheValet.sol pragma solidity ^0.8.4; contract JenkinsTheValet is Ownable, ERC721 { event Mint(uint indexed _tokenId); uint public maxSupply = 6942; // Maximum tokens that can be minted uint public limitPerAccount = 69; // Maximum mints per wallet uint public mintFee = 0.069420 ether; // Price per mint uint public totalSupply = 0; // This is our mint counter as well mapping(uint => string) public tokenURIs; // Metadata location, updatable by owner mapping(address => uint) public mintCounts; // Amount minted per user string public _baseTokenURI; // Same for all tokens mapping(address => bool) public canWithdraw; bool public paused = true; constructor() payable ERC721("Jenkins the Valet", "JENKINS") { } function mint(address to, uint quantity) external payable { require(totalSupply + quantity <= maxSupply, "maxSupply of mints already reached"); if(msg.sender != owner()) { require(!paused, "Paused"); require(mintCounts[to] + quantity <= limitPerAccount, "max 69 mints per account"); require(quantity * mintFee == msg.value, "Pay 0.69420 eth per mint"); } mintCounts[to] += quantity; for (uint i = 0; i < quantity; i++) { totalSupply += 1; // 1-indexed instead of 0 _mint(to, totalSupply); emit Mint(totalSupply); } } /** * @dev Returns a URI for a given token ID's metadata */ function tokenURI(uint256 _tokenId) public view override returns (string memory) { return string(abi.encodePacked(_baseTokenURI, Strings.toString(_tokenId))); } // ADMIN FUNCTIONALITY /** * @dev Withdraw ETH */ function withdraw() public { require(msg.sender == owner() || canWithdraw[msg.sender], "Nice try!"); uint amount = address(this).balance; (bool success,) = msg.sender.call{value: amount}(""); require(success, "Failed to send ether"); } /** * @dev Pauses or unpauses the contract */ function setPaused(bool _paused) public onlyOwner { paused = _paused; } /** * @dev Adds an address to the withdraw whitelist */ function setWhitelist(address addr, bool val) public onlyOwner { canWithdraw[addr] = val; } /** * @dev Updates the base token URI for the metadata */ function setBaseTokenURI(string memory __baseTokenURI) public onlyOwner { _baseTokenURI = __baseTokenURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"canWithdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitPerAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"__baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"val","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURIs","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052611b1e600755604560085566f6a11f484ec0006009556000600a556001600f60006101000a81548160ff0219169083151502179055506040518060400160405280601181526020017f4a656e6b696e73207468652056616c65740000000000000000000000000000008152506040518060400160405280600781526020017f4a454e4b494e53000000000000000000000000000000000000000000000000008152506000620000b86200019060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600190805190602001906200016e92919062000198565b5080600290805190602001906200018792919062000198565b505050620002ad565b600033905090565b828054620001a69062000248565b90600052602060002090601f016020900481019282620001ca576000855562000216565b82601f10620001e557805160ff191683800117855562000216565b8280016001018555821562000216579182015b8281111562000215578251825591602001919060010190620001f8565b5b50905062000225919062000229565b5090565b5b80821115620002445760008160009055506001016200022a565b5090565b600060028204905060018216806200026157607f821691505b602082108114156200027857620002776200027e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613ad880620002bd6000396000f3fe6080604052600436106101cd5760003560e01c806353d6fd59116100f757806395d89b4111610095578063cfc86f7b11610064578063cfc86f7b14610679578063d5abeb01146106a4578063e985e9c5146106cf578063f2fde38b1461070c576101cd565b806395d89b41146105bf578063a22cb465146105ea578063b88d4fde14610613578063c87b56dd1461063c576101cd565b80636c8b703f116100d15780636c8b703f1461050357806370a0823114610540578063715018a61461057d5780638da5cb5b14610594576101cd565b806353d6fd59146104725780635c975abb1461049b5780636352211e146104c6576101cd565b806318160ddd1161016f5780633ccfd60b1161013e5780633ccfd60b146103d957806340c10f19146103f057806342842e0e1461040c5780635327787914610435576101cd565b806318160ddd1461031f57806319262d301461034a57806323b872dd1461038757806330176e13146103b0576101cd565b8063095ea7b3116101ab578063095ea7b3146102775780631167e427146102a057806313966db5146102cb57806316c38b3c146102f6576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f4919061281a565b610735565b6040516102069190612dc7565b60405180910390f35b34801561021b57600080fd5b50610224610817565b6040516102319190612de2565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c91906128ad565b6108a9565b60405161026e9190612d60565b60405180910390f35b34801561028357600080fd5b5061029e600480360381019061029991906127b5565b61092e565b005b3480156102ac57600080fd5b506102b5610a46565b6040516102c291906130a4565b60405180910390f35b3480156102d757600080fd5b506102e0610a4c565b6040516102ed91906130a4565b60405180910390f35b34801561030257600080fd5b5061031d600480360381019061031891906127f1565b610a52565b005b34801561032b57600080fd5b50610334610aeb565b60405161034191906130a4565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c919061264a565b610af1565b60405161037e9190612dc7565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a991906126af565b610b11565b005b3480156103bc57600080fd5b506103d760048036038101906103d2919061286c565b610b71565b005b3480156103e557600080fd5b506103ee610c07565b005b61040a600480360381019061040591906127b5565b610d85565b005b34801561041857600080fd5b50610433600480360381019061042e91906126af565b61100e565b005b34801561044157600080fd5b5061045c6004803603810190610457919061264a565b61102e565b60405161046991906130a4565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190612779565b611046565b005b3480156104a757600080fd5b506104b061111d565b6040516104bd9190612dc7565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e891906128ad565b611130565b6040516104fa9190612d60565b60405180910390f35b34801561050f57600080fd5b5061052a600480360381019061052591906128ad565b6111e2565b6040516105379190612de2565b60405180910390f35b34801561054c57600080fd5b506105676004803603810190610562919061264a565b611282565b60405161057491906130a4565b60405180910390f35b34801561058957600080fd5b5061059261133a565b005b3480156105a057600080fd5b506105a9611474565b6040516105b69190612d60565b60405180910390f35b3480156105cb57600080fd5b506105d461149d565b6040516105e19190612de2565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c9190612779565b61152f565b005b34801561061f57600080fd5b5061063a600480360381019061063591906126fe565b6116b0565b005b34801561064857600080fd5b50610663600480360381019061065e91906128ad565b611712565b6040516106709190612de2565b60405180910390f35b34801561068557600080fd5b5061068e611746565b60405161069b9190612de2565b60405180910390f35b3480156106b057600080fd5b506106b96117d4565b6040516106c691906130a4565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f19190612673565b6117da565b6040516107039190612dc7565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e919061264a565b61186e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610810575061080f82611a17565b5b9050919050565b60606001805461082690613374565b80601f016020809104026020016040519081016040528092919081815260200182805461085290613374565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b5050505050905090565b60006108b482611a81565b6108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea90612fa4565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061093982611130565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a190613024565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109c9611aed565b73ffffffffffffffffffffffffffffffffffffffff1614806109f857506109f7816109f2611aed565b6117da565b5b610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90612f24565b60405180910390fd5b610a418383611af5565b505050565b60085481565b60095481565b610a5a611aed565b73ffffffffffffffffffffffffffffffffffffffff16610a78611474565b73ffffffffffffffffffffffffffffffffffffffff1614610ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac590612fc4565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600a5481565b600e6020528060005260406000206000915054906101000a900460ff1681565b610b22610b1c611aed565b82611bae565b610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890613044565b60405180910390fd5b610b6c838383611c8c565b505050565b610b79611aed565b73ffffffffffffffffffffffffffffffffffffffff16610b97611474565b73ffffffffffffffffffffffffffffffffffffffff1614610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be490612fc4565b60405180910390fd5b80600d9080519060200190610c0392919061246e565b5050565b610c0f611474565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c915750600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc790612ec4565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610cfb90612d4b565b60006040518083038185875af1925050503d8060008114610d38576040519150601f19603f3d011682016040523d82523d6000602084013e610d3d565b606091505b5050905080610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7890612fe4565b60405180910390fd5b5050565b60075481600a54610d9691906131a9565b1115610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90613084565b60405180910390fd5b610ddf611474565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f4057600f60009054906101000a900460ff1615610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5890612e04565b60405180910390fd5b60085481600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610eaf91906131a9565b1115610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790612f04565b60405180910390fd5b3460095482610eff9190613230565b14610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690613064565b60405180910390fd5b5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f8f91906131a9565b9250508190555060005b81811015611009576001600a6000828254610fb491906131a9565b92505081905550610fc783600a54611ee8565b600a547f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a8466560405160405180910390a28080611001906133d7565b915050610f99565b505050565b611029838383604051806020016040528060008152506116b0565b505050565b600c6020528060005260406000206000915090505481565b61104e611aed565b73ffffffffffffffffffffffffffffffffffffffff1661106c611474565b73ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990612fc4565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f60009054906101000a900460ff1681565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d090612f64565b60405180910390fd5b80915050919050565b600b602052806000526040600020600091509050805461120190613374565b80601f016020809104026020016040519081016040528092919081815260200182805461122d90613374565b801561127a5780601f1061124f5761010080835404028352916020019161127a565b820191906000526020600020905b81548152906001019060200180831161125d57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea90612f44565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611342611aed565b73ffffffffffffffffffffffffffffffffffffffff16611360611474565b73ffffffffffffffffffffffffffffffffffffffff16146113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad90612fc4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114ac90613374565b80601f01602080910402602001604051908101604052809291908181526020018280546114d890613374565b80156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b5050505050905090565b611537611aed565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90612ea4565b60405180910390fd5b80600660006115b2611aed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661165f611aed565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116a49190612dc7565b60405180910390a35050565b6116c16116bb611aed565b83611bae565b611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790613044565b60405180910390fd5b61170c848484846120b6565b50505050565b6060600d61171f83612112565b604051602001611730929190612d27565b6040516020818303038152906040529050919050565b600d805461175390613374565b80601f016020809104026020016040519081016040528092919081815260200182805461177f90613374565b80156117cc5780601f106117a1576101008083540402835291602001916117cc565b820191906000526020600020905b8154815290600101906020018083116117af57829003601f168201915b505050505081565b60075481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611876611aed565b73ffffffffffffffffffffffffffffffffffffffff16611894611474565b73ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190612fc4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190612e44565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b6883611130565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bb982611a81565b611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef90612ee4565b60405180910390fd5b6000611c0383611130565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c7257508373ffffffffffffffffffffffffffffffffffffffff16611c5a846108a9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c835750611c8281856117da565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cac82611130565b73ffffffffffffffffffffffffffffffffffffffff1614611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf990613004565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990612e84565b60405180910390fd5b611d7d8383836122bf565b611d88600082611af5565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd8919061328a565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2f91906131a9565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f90612f84565b60405180910390fd5b611f6181611a81565b15611fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9890612e64565b60405180910390fd5b611fad600083836122bf565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ffd91906131a9565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6120c1848484611c8c565b6120cd848484846122c4565b61210c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210390612e24565b60405180910390fd5b50505050565b6060600082141561215a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122ba565b600082905060005b6000821461218c578080612175906133d7565b915050600a8261218591906131ff565b9150612162565b60008167ffffffffffffffff8111156121ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156122005781602001600182028036833780820191505090505b5090505b600085146122b357600182612219919061328a565b9150600a856122289190613420565b603061223491906131a9565b60f81b818381518110612270577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122ac91906131ff565b9450612204565b8093505050505b919050565b505050565b60006122e58473ffffffffffffffffffffffffffffffffffffffff1661245b565b1561244e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261230e611aed565b8786866040518563ffffffff1660e01b81526004016123309493929190612d7b565b602060405180830381600087803b15801561234a57600080fd5b505af192505050801561237b57506040513d601f19601f820116820180604052508101906123789190612843565b60015b6123fe573d80600081146123ab576040519150601f19603f3d011682016040523d82523d6000602084013e6123b0565b606091505b506000815114156123f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ed90612e24565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612453565b600190505b949350505050565b600080823b905060008111915050919050565b82805461247a90613374565b90600052602060002090601f01602090048101928261249c57600085556124e3565b82601f106124b557805160ff19168380011785556124e3565b828001600101855582156124e3579182015b828111156124e25782518255916020019190600101906124c7565b5b5090506124f091906124f4565b5090565b5b8082111561250d5760008160009055506001016124f5565b5090565b600061252461251f846130e4565b6130bf565b90508281526020810184848401111561253c57600080fd5b612547848285613332565b509392505050565b600061256261255d84613115565b6130bf565b90508281526020810184848401111561257a57600080fd5b612585848285613332565b509392505050565b60008135905061259c81613a46565b92915050565b6000813590506125b181613a5d565b92915050565b6000813590506125c681613a74565b92915050565b6000815190506125db81613a74565b92915050565b600082601f8301126125f257600080fd5b8135612602848260208601612511565b91505092915050565b600082601f83011261261c57600080fd5b813561262c84826020860161254f565b91505092915050565b60008135905061264481613a8b565b92915050565b60006020828403121561265c57600080fd5b600061266a8482850161258d565b91505092915050565b6000806040838503121561268657600080fd5b60006126948582860161258d565b92505060206126a58582860161258d565b9150509250929050565b6000806000606084860312156126c457600080fd5b60006126d28682870161258d565b93505060206126e38682870161258d565b92505060406126f486828701612635565b9150509250925092565b6000806000806080858703121561271457600080fd5b60006127228782880161258d565b94505060206127338782880161258d565b935050604061274487828801612635565b925050606085013567ffffffffffffffff81111561276157600080fd5b61276d878288016125e1565b91505092959194509250565b6000806040838503121561278c57600080fd5b600061279a8582860161258d565b92505060206127ab858286016125a2565b9150509250929050565b600080604083850312156127c857600080fd5b60006127d68582860161258d565b92505060206127e785828601612635565b9150509250929050565b60006020828403121561280357600080fd5b6000612811848285016125a2565b91505092915050565b60006020828403121561282c57600080fd5b600061283a848285016125b7565b91505092915050565b60006020828403121561285557600080fd5b6000612863848285016125cc565b91505092915050565b60006020828403121561287e57600080fd5b600082013567ffffffffffffffff81111561289857600080fd5b6128a48482850161260b565b91505092915050565b6000602082840312156128bf57600080fd5b60006128cd84828501612635565b91505092915050565b6128df816132be565b82525050565b6128ee816132d0565b82525050565b60006128ff8261315b565b6129098185613171565b9350612919818560208601613341565b6129228161350d565b840191505092915050565b600061293882613166565b612942818561318d565b9350612952818560208601613341565b61295b8161350d565b840191505092915050565b600061297182613166565b61297b818561319e565b935061298b818560208601613341565b80840191505092915050565b600081546129a481613374565b6129ae818661319e565b945060018216600081146129c957600181146129da57612a0d565b60ff19831686528186019350612a0d565b6129e385613146565b60005b83811015612a05578154818901526001820191506020810190506129e6565b838801955050505b50505092915050565b6000612a2360068361318d565b9150612a2e8261351e565b602082019050919050565b6000612a4660328361318d565b9150612a5182613547565b604082019050919050565b6000612a6960268361318d565b9150612a7482613596565b604082019050919050565b6000612a8c601c8361318d565b9150612a97826135e5565b602082019050919050565b6000612aaf60248361318d565b9150612aba8261360e565b604082019050919050565b6000612ad260198361318d565b9150612add8261365d565b602082019050919050565b6000612af560098361318d565b9150612b0082613686565b602082019050919050565b6000612b18602c8361318d565b9150612b23826136af565b604082019050919050565b6000612b3b60188361318d565b9150612b46826136fe565b602082019050919050565b6000612b5e60388361318d565b9150612b6982613727565b604082019050919050565b6000612b81602a8361318d565b9150612b8c82613776565b604082019050919050565b6000612ba460298361318d565b9150612baf826137c5565b604082019050919050565b6000612bc760208361318d565b9150612bd282613814565b602082019050919050565b6000612bea602c8361318d565b9150612bf58261383d565b604082019050919050565b6000612c0d60208361318d565b9150612c188261388c565b602082019050919050565b6000612c3060148361318d565b9150612c3b826138b5565b602082019050919050565b6000612c5360298361318d565b9150612c5e826138de565b604082019050919050565b6000612c7660218361318d565b9150612c818261392d565b604082019050919050565b6000612c99600083613182565b9150612ca48261397c565b600082019050919050565b6000612cbc60318361318d565b9150612cc78261397f565b604082019050919050565b6000612cdf60188361318d565b9150612cea826139ce565b602082019050919050565b6000612d0260228361318d565b9150612d0d826139f7565b604082019050919050565b612d2181613328565b82525050565b6000612d338285612997565b9150612d3f8284612966565b91508190509392505050565b6000612d5682612c8c565b9150819050919050565b6000602082019050612d7560008301846128d6565b92915050565b6000608082019050612d9060008301876128d6565b612d9d60208301866128d6565b612daa6040830185612d18565b8181036060830152612dbc81846128f4565b905095945050505050565b6000602082019050612ddc60008301846128e5565b92915050565b60006020820190508181036000830152612dfc818461292d565b905092915050565b60006020820190508181036000830152612e1d81612a16565b9050919050565b60006020820190508181036000830152612e3d81612a39565b9050919050565b60006020820190508181036000830152612e5d81612a5c565b9050919050565b60006020820190508181036000830152612e7d81612a7f565b9050919050565b60006020820190508181036000830152612e9d81612aa2565b9050919050565b60006020820190508181036000830152612ebd81612ac5565b9050919050565b60006020820190508181036000830152612edd81612ae8565b9050919050565b60006020820190508181036000830152612efd81612b0b565b9050919050565b60006020820190508181036000830152612f1d81612b2e565b9050919050565b60006020820190508181036000830152612f3d81612b51565b9050919050565b60006020820190508181036000830152612f5d81612b74565b9050919050565b60006020820190508181036000830152612f7d81612b97565b9050919050565b60006020820190508181036000830152612f9d81612bba565b9050919050565b60006020820190508181036000830152612fbd81612bdd565b9050919050565b60006020820190508181036000830152612fdd81612c00565b9050919050565b60006020820190508181036000830152612ffd81612c23565b9050919050565b6000602082019050818103600083015261301d81612c46565b9050919050565b6000602082019050818103600083015261303d81612c69565b9050919050565b6000602082019050818103600083015261305d81612caf565b9050919050565b6000602082019050818103600083015261307d81612cd2565b9050919050565b6000602082019050818103600083015261309d81612cf5565b9050919050565b60006020820190506130b96000830184612d18565b92915050565b60006130c96130da565b90506130d582826133a6565b919050565b6000604051905090565b600067ffffffffffffffff8211156130ff576130fe6134de565b5b6131088261350d565b9050602081019050919050565b600067ffffffffffffffff8211156131305761312f6134de565b5b6131398261350d565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006131b482613328565b91506131bf83613328565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131f4576131f3613451565b5b828201905092915050565b600061320a82613328565b915061321583613328565b92508261322557613224613480565b5b828204905092915050565b600061323b82613328565b915061324683613328565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561327f5761327e613451565b5b828202905092915050565b600061329582613328565b91506132a083613328565b9250828210156132b3576132b2613451565b5b828203905092915050565b60006132c982613308565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561335f578082015181840152602081019050613344565b8381111561336e576000848401525b50505050565b6000600282049050600182168061338c57607f821691505b602082108114156133a05761339f6134af565b5b50919050565b6133af8261350d565b810181811067ffffffffffffffff821117156133ce576133cd6134de565b5b80604052505050565b60006133e282613328565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561341557613414613451565b5b600182019050919050565b600061342b82613328565b915061343683613328565b92508261344657613445613480565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e69636520747279210000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f6d6178203639206d696e747320706572206163636f756e740000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f50617920302e36393432302065746820706572206d696e740000000000000000600082015250565b7f6d6178537570706c79206f66206d696e747320616c726561647920726561636860008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b613a4f816132be565b8114613a5a57600080fd5b50565b613a66816132d0565b8114613a7157600080fd5b50565b613a7d816132dc565b8114613a8857600080fd5b50565b613a9481613328565b8114613a9f57600080fd5b5056fea2646970667358221220a78b4f10b00df0cb60e4cd88bfd6d2d091d7875f07f242cf395caddca459bbbb64736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c806353d6fd59116100f757806395d89b4111610095578063cfc86f7b11610064578063cfc86f7b14610679578063d5abeb01146106a4578063e985e9c5146106cf578063f2fde38b1461070c576101cd565b806395d89b41146105bf578063a22cb465146105ea578063b88d4fde14610613578063c87b56dd1461063c576101cd565b80636c8b703f116100d15780636c8b703f1461050357806370a0823114610540578063715018a61461057d5780638da5cb5b14610594576101cd565b806353d6fd59146104725780635c975abb1461049b5780636352211e146104c6576101cd565b806318160ddd1161016f5780633ccfd60b1161013e5780633ccfd60b146103d957806340c10f19146103f057806342842e0e1461040c5780635327787914610435576101cd565b806318160ddd1461031f57806319262d301461034a57806323b872dd1461038757806330176e13146103b0576101cd565b8063095ea7b3116101ab578063095ea7b3146102775780631167e427146102a057806313966db5146102cb57806316c38b3c146102f6576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f4919061281a565b610735565b6040516102069190612dc7565b60405180910390f35b34801561021b57600080fd5b50610224610817565b6040516102319190612de2565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c91906128ad565b6108a9565b60405161026e9190612d60565b60405180910390f35b34801561028357600080fd5b5061029e600480360381019061029991906127b5565b61092e565b005b3480156102ac57600080fd5b506102b5610a46565b6040516102c291906130a4565b60405180910390f35b3480156102d757600080fd5b506102e0610a4c565b6040516102ed91906130a4565b60405180910390f35b34801561030257600080fd5b5061031d600480360381019061031891906127f1565b610a52565b005b34801561032b57600080fd5b50610334610aeb565b60405161034191906130a4565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c919061264a565b610af1565b60405161037e9190612dc7565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a991906126af565b610b11565b005b3480156103bc57600080fd5b506103d760048036038101906103d2919061286c565b610b71565b005b3480156103e557600080fd5b506103ee610c07565b005b61040a600480360381019061040591906127b5565b610d85565b005b34801561041857600080fd5b50610433600480360381019061042e91906126af565b61100e565b005b34801561044157600080fd5b5061045c6004803603810190610457919061264a565b61102e565b60405161046991906130a4565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190612779565b611046565b005b3480156104a757600080fd5b506104b061111d565b6040516104bd9190612dc7565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e891906128ad565b611130565b6040516104fa9190612d60565b60405180910390f35b34801561050f57600080fd5b5061052a600480360381019061052591906128ad565b6111e2565b6040516105379190612de2565b60405180910390f35b34801561054c57600080fd5b506105676004803603810190610562919061264a565b611282565b60405161057491906130a4565b60405180910390f35b34801561058957600080fd5b5061059261133a565b005b3480156105a057600080fd5b506105a9611474565b6040516105b69190612d60565b60405180910390f35b3480156105cb57600080fd5b506105d461149d565b6040516105e19190612de2565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c9190612779565b61152f565b005b34801561061f57600080fd5b5061063a600480360381019061063591906126fe565b6116b0565b005b34801561064857600080fd5b50610663600480360381019061065e91906128ad565b611712565b6040516106709190612de2565b60405180910390f35b34801561068557600080fd5b5061068e611746565b60405161069b9190612de2565b60405180910390f35b3480156106b057600080fd5b506106b96117d4565b6040516106c691906130a4565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f19190612673565b6117da565b6040516107039190612dc7565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e919061264a565b61186e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610810575061080f82611a17565b5b9050919050565b60606001805461082690613374565b80601f016020809104026020016040519081016040528092919081815260200182805461085290613374565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b5050505050905090565b60006108b482611a81565b6108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea90612fa4565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061093982611130565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a190613024565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109c9611aed565b73ffffffffffffffffffffffffffffffffffffffff1614806109f857506109f7816109f2611aed565b6117da565b5b610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90612f24565b60405180910390fd5b610a418383611af5565b505050565b60085481565b60095481565b610a5a611aed565b73ffffffffffffffffffffffffffffffffffffffff16610a78611474565b73ffffffffffffffffffffffffffffffffffffffff1614610ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac590612fc4565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600a5481565b600e6020528060005260406000206000915054906101000a900460ff1681565b610b22610b1c611aed565b82611bae565b610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890613044565b60405180910390fd5b610b6c838383611c8c565b505050565b610b79611aed565b73ffffffffffffffffffffffffffffffffffffffff16610b97611474565b73ffffffffffffffffffffffffffffffffffffffff1614610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be490612fc4565b60405180910390fd5b80600d9080519060200190610c0392919061246e565b5050565b610c0f611474565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c915750600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc790612ec4565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610cfb90612d4b565b60006040518083038185875af1925050503d8060008114610d38576040519150601f19603f3d011682016040523d82523d6000602084013e610d3d565b606091505b5050905080610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7890612fe4565b60405180910390fd5b5050565b60075481600a54610d9691906131a9565b1115610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90613084565b60405180910390fd5b610ddf611474565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f4057600f60009054906101000a900460ff1615610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5890612e04565b60405180910390fd5b60085481600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610eaf91906131a9565b1115610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790612f04565b60405180910390fd5b3460095482610eff9190613230565b14610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690613064565b60405180910390fd5b5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f8f91906131a9565b9250508190555060005b81811015611009576001600a6000828254610fb491906131a9565b92505081905550610fc783600a54611ee8565b600a547f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a8466560405160405180910390a28080611001906133d7565b915050610f99565b505050565b611029838383604051806020016040528060008152506116b0565b505050565b600c6020528060005260406000206000915090505481565b61104e611aed565b73ffffffffffffffffffffffffffffffffffffffff1661106c611474565b73ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990612fc4565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f60009054906101000a900460ff1681565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d090612f64565b60405180910390fd5b80915050919050565b600b602052806000526040600020600091509050805461120190613374565b80601f016020809104026020016040519081016040528092919081815260200182805461122d90613374565b801561127a5780601f1061124f5761010080835404028352916020019161127a565b820191906000526020600020905b81548152906001019060200180831161125d57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea90612f44565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611342611aed565b73ffffffffffffffffffffffffffffffffffffffff16611360611474565b73ffffffffffffffffffffffffffffffffffffffff16146113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad90612fc4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114ac90613374565b80601f01602080910402602001604051908101604052809291908181526020018280546114d890613374565b80156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b5050505050905090565b611537611aed565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90612ea4565b60405180910390fd5b80600660006115b2611aed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661165f611aed565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116a49190612dc7565b60405180910390a35050565b6116c16116bb611aed565b83611bae565b611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790613044565b60405180910390fd5b61170c848484846120b6565b50505050565b6060600d61171f83612112565b604051602001611730929190612d27565b6040516020818303038152906040529050919050565b600d805461175390613374565b80601f016020809104026020016040519081016040528092919081815260200182805461177f90613374565b80156117cc5780601f106117a1576101008083540402835291602001916117cc565b820191906000526020600020905b8154815290600101906020018083116117af57829003601f168201915b505050505081565b60075481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611876611aed565b73ffffffffffffffffffffffffffffffffffffffff16611894611474565b73ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190612fc4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190612e44565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b6883611130565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bb982611a81565b611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef90612ee4565b60405180910390fd5b6000611c0383611130565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c7257508373ffffffffffffffffffffffffffffffffffffffff16611c5a846108a9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c835750611c8281856117da565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cac82611130565b73ffffffffffffffffffffffffffffffffffffffff1614611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf990613004565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990612e84565b60405180910390fd5b611d7d8383836122bf565b611d88600082611af5565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd8919061328a565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2f91906131a9565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f90612f84565b60405180910390fd5b611f6181611a81565b15611fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9890612e64565b60405180910390fd5b611fad600083836122bf565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ffd91906131a9565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6120c1848484611c8c565b6120cd848484846122c4565b61210c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210390612e24565b60405180910390fd5b50505050565b6060600082141561215a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122ba565b600082905060005b6000821461218c578080612175906133d7565b915050600a8261218591906131ff565b9150612162565b60008167ffffffffffffffff8111156121ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156122005781602001600182028036833780820191505090505b5090505b600085146122b357600182612219919061328a565b9150600a856122289190613420565b603061223491906131a9565b60f81b818381518110612270577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122ac91906131ff565b9450612204565b8093505050505b919050565b505050565b60006122e58473ffffffffffffffffffffffffffffffffffffffff1661245b565b1561244e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261230e611aed565b8786866040518563ffffffff1660e01b81526004016123309493929190612d7b565b602060405180830381600087803b15801561234a57600080fd5b505af192505050801561237b57506040513d601f19601f820116820180604052508101906123789190612843565b60015b6123fe573d80600081146123ab576040519150601f19603f3d011682016040523d82523d6000602084013e6123b0565b606091505b506000815114156123f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ed90612e24565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612453565b600190505b949350505050565b600080823b905060008111915050919050565b82805461247a90613374565b90600052602060002090601f01602090048101928261249c57600085556124e3565b82601f106124b557805160ff19168380011785556124e3565b828001600101855582156124e3579182015b828111156124e25782518255916020019190600101906124c7565b5b5090506124f091906124f4565b5090565b5b8082111561250d5760008160009055506001016124f5565b5090565b600061252461251f846130e4565b6130bf565b90508281526020810184848401111561253c57600080fd5b612547848285613332565b509392505050565b600061256261255d84613115565b6130bf565b90508281526020810184848401111561257a57600080fd5b612585848285613332565b509392505050565b60008135905061259c81613a46565b92915050565b6000813590506125b181613a5d565b92915050565b6000813590506125c681613a74565b92915050565b6000815190506125db81613a74565b92915050565b600082601f8301126125f257600080fd5b8135612602848260208601612511565b91505092915050565b600082601f83011261261c57600080fd5b813561262c84826020860161254f565b91505092915050565b60008135905061264481613a8b565b92915050565b60006020828403121561265c57600080fd5b600061266a8482850161258d565b91505092915050565b6000806040838503121561268657600080fd5b60006126948582860161258d565b92505060206126a58582860161258d565b9150509250929050565b6000806000606084860312156126c457600080fd5b60006126d28682870161258d565b93505060206126e38682870161258d565b92505060406126f486828701612635565b9150509250925092565b6000806000806080858703121561271457600080fd5b60006127228782880161258d565b94505060206127338782880161258d565b935050604061274487828801612635565b925050606085013567ffffffffffffffff81111561276157600080fd5b61276d878288016125e1565b91505092959194509250565b6000806040838503121561278c57600080fd5b600061279a8582860161258d565b92505060206127ab858286016125a2565b9150509250929050565b600080604083850312156127c857600080fd5b60006127d68582860161258d565b92505060206127e785828601612635565b9150509250929050565b60006020828403121561280357600080fd5b6000612811848285016125a2565b91505092915050565b60006020828403121561282c57600080fd5b600061283a848285016125b7565b91505092915050565b60006020828403121561285557600080fd5b6000612863848285016125cc565b91505092915050565b60006020828403121561287e57600080fd5b600082013567ffffffffffffffff81111561289857600080fd5b6128a48482850161260b565b91505092915050565b6000602082840312156128bf57600080fd5b60006128cd84828501612635565b91505092915050565b6128df816132be565b82525050565b6128ee816132d0565b82525050565b60006128ff8261315b565b6129098185613171565b9350612919818560208601613341565b6129228161350d565b840191505092915050565b600061293882613166565b612942818561318d565b9350612952818560208601613341565b61295b8161350d565b840191505092915050565b600061297182613166565b61297b818561319e565b935061298b818560208601613341565b80840191505092915050565b600081546129a481613374565b6129ae818661319e565b945060018216600081146129c957600181146129da57612a0d565b60ff19831686528186019350612a0d565b6129e385613146565b60005b83811015612a05578154818901526001820191506020810190506129e6565b838801955050505b50505092915050565b6000612a2360068361318d565b9150612a2e8261351e565b602082019050919050565b6000612a4660328361318d565b9150612a5182613547565b604082019050919050565b6000612a6960268361318d565b9150612a7482613596565b604082019050919050565b6000612a8c601c8361318d565b9150612a97826135e5565b602082019050919050565b6000612aaf60248361318d565b9150612aba8261360e565b604082019050919050565b6000612ad260198361318d565b9150612add8261365d565b602082019050919050565b6000612af560098361318d565b9150612b0082613686565b602082019050919050565b6000612b18602c8361318d565b9150612b23826136af565b604082019050919050565b6000612b3b60188361318d565b9150612b46826136fe565b602082019050919050565b6000612b5e60388361318d565b9150612b6982613727565b604082019050919050565b6000612b81602a8361318d565b9150612b8c82613776565b604082019050919050565b6000612ba460298361318d565b9150612baf826137c5565b604082019050919050565b6000612bc760208361318d565b9150612bd282613814565b602082019050919050565b6000612bea602c8361318d565b9150612bf58261383d565b604082019050919050565b6000612c0d60208361318d565b9150612c188261388c565b602082019050919050565b6000612c3060148361318d565b9150612c3b826138b5565b602082019050919050565b6000612c5360298361318d565b9150612c5e826138de565b604082019050919050565b6000612c7660218361318d565b9150612c818261392d565b604082019050919050565b6000612c99600083613182565b9150612ca48261397c565b600082019050919050565b6000612cbc60318361318d565b9150612cc78261397f565b604082019050919050565b6000612cdf60188361318d565b9150612cea826139ce565b602082019050919050565b6000612d0260228361318d565b9150612d0d826139f7565b604082019050919050565b612d2181613328565b82525050565b6000612d338285612997565b9150612d3f8284612966565b91508190509392505050565b6000612d5682612c8c565b9150819050919050565b6000602082019050612d7560008301846128d6565b92915050565b6000608082019050612d9060008301876128d6565b612d9d60208301866128d6565b612daa6040830185612d18565b8181036060830152612dbc81846128f4565b905095945050505050565b6000602082019050612ddc60008301846128e5565b92915050565b60006020820190508181036000830152612dfc818461292d565b905092915050565b60006020820190508181036000830152612e1d81612a16565b9050919050565b60006020820190508181036000830152612e3d81612a39565b9050919050565b60006020820190508181036000830152612e5d81612a5c565b9050919050565b60006020820190508181036000830152612e7d81612a7f565b9050919050565b60006020820190508181036000830152612e9d81612aa2565b9050919050565b60006020820190508181036000830152612ebd81612ac5565b9050919050565b60006020820190508181036000830152612edd81612ae8565b9050919050565b60006020820190508181036000830152612efd81612b0b565b9050919050565b60006020820190508181036000830152612f1d81612b2e565b9050919050565b60006020820190508181036000830152612f3d81612b51565b9050919050565b60006020820190508181036000830152612f5d81612b74565b9050919050565b60006020820190508181036000830152612f7d81612b97565b9050919050565b60006020820190508181036000830152612f9d81612bba565b9050919050565b60006020820190508181036000830152612fbd81612bdd565b9050919050565b60006020820190508181036000830152612fdd81612c00565b9050919050565b60006020820190508181036000830152612ffd81612c23565b9050919050565b6000602082019050818103600083015261301d81612c46565b9050919050565b6000602082019050818103600083015261303d81612c69565b9050919050565b6000602082019050818103600083015261305d81612caf565b9050919050565b6000602082019050818103600083015261307d81612cd2565b9050919050565b6000602082019050818103600083015261309d81612cf5565b9050919050565b60006020820190506130b96000830184612d18565b92915050565b60006130c96130da565b90506130d582826133a6565b919050565b6000604051905090565b600067ffffffffffffffff8211156130ff576130fe6134de565b5b6131088261350d565b9050602081019050919050565b600067ffffffffffffffff8211156131305761312f6134de565b5b6131398261350d565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006131b482613328565b91506131bf83613328565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131f4576131f3613451565b5b828201905092915050565b600061320a82613328565b915061321583613328565b92508261322557613224613480565b5b828204905092915050565b600061323b82613328565b915061324683613328565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561327f5761327e613451565b5b828202905092915050565b600061329582613328565b91506132a083613328565b9250828210156132b3576132b2613451565b5b828203905092915050565b60006132c982613308565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561335f578082015181840152602081019050613344565b8381111561336e576000848401525b50505050565b6000600282049050600182168061338c57607f821691505b602082108114156133a05761339f6134af565b5b50919050565b6133af8261350d565b810181811067ffffffffffffffff821117156133ce576133cd6134de565b5b80604052505050565b60006133e282613328565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561341557613414613451565b5b600182019050919050565b600061342b82613328565b915061343683613328565b92508261344657613445613480565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e69636520747279210000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f6d6178203639206d696e747320706572206163636f756e740000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f50617920302e36393432302065746820706572206d696e740000000000000000600082015250565b7f6d6178537570706c79206f66206d696e747320616c726561647920726561636860008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b613a4f816132be565b8114613a5a57600080fd5b50565b613a66816132d0565b8114613a7157600080fd5b50565b613a7d816132dc565b8114613a8857600080fd5b50565b613a9481613328565b8114613a9f57600080fd5b5056fea2646970667358221220a78b4f10b00df0cb60e4cd88bfd6d2d091d7875f07f242cf395caddca459bbbb64736f6c63430008040033
Deployed Bytecode Sourcemap
35550:2565:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23673:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24605:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26065:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25602:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35717:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35784:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37637:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35845:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36135:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26955:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37991:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37290:276;;;;;;;;;;;;;:::i;:::-;;36296:653;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27331:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36003:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37803:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36185:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24299:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35915:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24029:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3525:148;;;;;;;;;;;;;:::i;:::-;;2874:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24774:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26358:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27553:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37034:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36078:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35645:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26724:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3828:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23673:292;23775:4;23814:25;23799:40;;;:11;:40;;;;:105;;;;23871:33;23856:48;;;:11;:48;;;;23799:105;:158;;;;23921:36;23945:11;23921:23;:36::i;:::-;23799:158;23792:165;;23673:292;;;:::o;24605:100::-;24659:13;24692:5;24685:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24605:100;:::o;26065:221::-;26141:7;26169:16;26177:7;26169;:16::i;:::-;26161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26254:15;:24;26270:7;26254:24;;;;;;;;;;;;;;;;;;;;;26247:31;;26065:221;;;:::o;25602:397::-;25683:13;25699:23;25714:7;25699:14;:23::i;:::-;25683:39;;25747:5;25741:11;;:2;:11;;;;25733:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25827:5;25811:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25836:37;25853:5;25860:12;:10;:12::i;:::-;25836:16;:37::i;:::-;25811:62;25803:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;25970:21;25979:2;25983:7;25970:8;:21::i;:::-;25602:397;;;:::o;35717:32::-;;;;:::o;35784:36::-;;;;:::o;37637:85::-;3105:12;:10;:12::i;:::-;3094:23;;:7;:5;:7::i;:::-;:23;;;3086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37707:7:::1;37698:6;;:16;;;;;;;;;;;;;;;;;;37637:85:::0;:::o;35845:27::-;;;;:::o;36135:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;26955:305::-;27116:41;27135:12;:10;:12::i;:::-;27149:7;27116:18;:41::i;:::-;27108:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27224:28;27234:4;27240:2;27244:7;27224:9;:28::i;:::-;26955:305;;;:::o;37991:121::-;3105:12;:10;:12::i;:::-;3094:23;;:7;:5;:7::i;:::-;:23;;;3086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38090:14:::1;38074:13;:30;;;;;;;;;;;;:::i;:::-;;37991:121:::0;:::o;37290:276::-;37350:7;:5;:7::i;:::-;37336:21;;:10;:21;;;:48;;;;37361:11;:23;37373:10;37361:23;;;;;;;;;;;;;;;;;;;;;;;;;37336:48;37328:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37409:11;37423:21;37409:35;;37456:12;37473:10;:15;;37496:6;37473:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37455:52;;;37526:7;37518:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;37290:276;;:::o;36296:653::-;36399:9;;36387:8;36373:11;;:22;;;;:::i;:::-;:35;;36365:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;36475:7;:5;:7::i;:::-;36461:21;;:10;:21;;;36458:258;;36508:6;;;;;;;;;;;36507:7;36499:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;36577:15;;36565:8;36548:10;:14;36559:2;36548:14;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;:44;;36540:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36666:9;36655:7;;36644:8;:18;;;;:::i;:::-;:31;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36458:258;36744:8;36726:10;:14;36737:2;36726:14;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;36768:6;36763:179;36784:8;36780:1;:12;36763:179;;;36829:1;36814:11;;:16;;;;;;;:::i;:::-;;;;;;;;36871:22;36877:2;36881:11;;36871:5;:22::i;:::-;36918:11;;36913:17;;;;;;;;;;36794:3;;;;;:::i;:::-;;;;36763:179;;;;36296:653;;:::o;27331:151::-;27435:39;27452:4;27458:2;27462:7;27435:39;;;;;;;;;;;;:16;:39::i;:::-;27331:151;;;:::o;36003:42::-;;;;;;;;;;;;;;;;;:::o;37803:105::-;3105:12;:10;:12::i;:::-;3094:23;;:7;:5;:7::i;:::-;:23;;;3086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37897:3:::1;37877:11;:17;37889:4;37877:17;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;37803:105:::0;;:::o;36185:25::-;;;;;;;;;;;;;:::o;24299:239::-;24371:7;24391:13;24407:7;:16;24415:7;24407:16;;;;;;;;;;;;;;;;;;;;;24391:32;;24459:1;24442:19;;:5;:19;;;;24434:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24525:5;24518:12;;;24299:239;;;:::o;35915:40::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24029:208::-;24101:7;24146:1;24129:19;;:5;:19;;;;24121:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24213:9;:16;24223:5;24213:16;;;;;;;;;;;;;;;;24206:23;;24029:208;;;:::o;3525:148::-;3105:12;:10;:12::i;:::-;3094:23;;:7;:5;:7::i;:::-;:23;;;3086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3632:1:::1;3595:40;;3616:6;::::0;::::1;;;;;;;;3595:40;;;;;;;;;;;;3663:1;3646:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3525:148::o:0;2874:87::-;2920:7;2947:6;;;;;;;;;;;2940:13;;2874:87;:::o;24774:104::-;24830:13;24863:7;24856:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24774:104;:::o;26358:295::-;26473:12;:10;:12::i;:::-;26461:24;;:8;:24;;;;26453:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26573:8;26528:18;:32;26547:12;:10;:12::i;:::-;26528:32;;;;;;;;;;;;;;;:42;26561:8;26528:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26626:8;26597:48;;26612:12;:10;:12::i;:::-;26597:48;;;26636:8;26597:48;;;;;;:::i;:::-;;;;;;;;26358:295;;:::o;27553:285::-;27685:41;27704:12;:10;:12::i;:::-;27718:7;27685:18;:41::i;:::-;27677:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27791:39;27805:4;27811:2;27815:7;27824:5;27791:13;:39::i;:::-;27553:285;;;;:::o;37034:174::-;37100:13;37157;37172:26;37189:8;37172:16;:26::i;:::-;37140:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37126:74;;37034:174;;;:::o;36078:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35645:28::-;;;;:::o;26724:164::-;26821:4;26845:18;:25;26864:5;26845:25;;;;;;;;;;;;;;;:35;26871:8;26845:35;;;;;;;;;;;;;;;;;;;;;;;;;26838:42;;26724:164;;;;:::o;3828:244::-;3105:12;:10;:12::i;:::-;3094:23;;:7;:5;:7::i;:::-;:23;;;3086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3937:1:::1;3917:22;;:8;:22;;;;3909:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4027:8;3998:38;;4019:6;::::0;::::1;;;;;;;;3998:38;;;;;;;;;;;;4056:8;4047:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3828:244:::0;:::o;22171:157::-;22256:4;22295:25;22280:40;;;:11;:40;;;;22273:47;;22171:157;;;:::o;29305:127::-;29370:4;29422:1;29394:30;;:7;:16;29402:7;29394:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29387:37;;29305:127;;;:::o;1432:98::-;1485:7;1512:10;1505:17;;1432:98;:::o;33182:174::-;33284:2;33257:15;:24;33273:7;33257:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33340:7;33336:2;33302:46;;33311:23;33326:7;33311:14;:23::i;:::-;33302:46;;;;;;;;;;;;33182:174;;:::o;29599:348::-;29692:4;29717:16;29725:7;29717;:16::i;:::-;29709:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29793:13;29809:23;29824:7;29809:14;:23::i;:::-;29793:39;;29862:5;29851:16;;:7;:16;;;:51;;;;29895:7;29871:31;;:20;29883:7;29871:11;:20::i;:::-;:31;;;29851:51;:87;;;;29906:32;29923:5;29930:7;29906:16;:32::i;:::-;29851:87;29843:96;;;29599:348;;;;:::o;32520:544::-;32645:4;32618:31;;:23;32633:7;32618:14;:23::i;:::-;:31;;;32610:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32728:1;32714:16;;:2;:16;;;;32706:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32784:39;32805:4;32811:2;32815:7;32784:20;:39::i;:::-;32888:29;32905:1;32909:7;32888:8;:29::i;:::-;32949:1;32930:9;:15;32940:4;32930:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32978:1;32961:9;:13;32971:2;32961:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33009:2;32990:7;:16;32998:7;32990:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33048:7;33044:2;33029:27;;33038:4;33029:27;;;;;;;;;;;;32520:544;;;:::o;31212:382::-;31306:1;31292:16;;:2;:16;;;;31284:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31365:16;31373:7;31365;:16::i;:::-;31364:17;31356:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31427:45;31456:1;31460:2;31464:7;31427:20;:45::i;:::-;31502:1;31485:9;:13;31495:2;31485:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31533:2;31514:7;:16;31522:7;31514:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31578:7;31574:2;31553:33;;31570:1;31553:33;;;;;;;;;;;;31212:382;;:::o;28720:272::-;28834:28;28844:4;28850:2;28854:7;28834:9;:28::i;:::-;28881:48;28904:4;28910:2;28914:7;28923:5;28881:22;:48::i;:::-;28873:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28720:272;;;;:::o;19616:723::-;19672:13;19902:1;19893:5;:10;19889:53;;;19920:10;;;;;;;;;;;;;;;;;;;;;19889:53;19952:12;19967:5;19952:20;;19983:14;20008:78;20023:1;20015:4;:9;20008:78;;20041:8;;;;;:::i;:::-;;;;20072:2;20064:10;;;;;:::i;:::-;;;20008:78;;;20096:19;20128:6;20118:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20096:39;;20146:154;20162:1;20153:5;:10;20146:154;;20190:1;20180:11;;;;;:::i;:::-;;;20257:2;20249:5;:10;;;;:::i;:::-;20236:2;:24;;;;:::i;:::-;20223:39;;20206:6;20213;20206:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;20286:2;20277:11;;;;;:::i;:::-;;;20146:154;;;20324:6;20310:21;;;;;19616:723;;;;:::o;35377:93::-;;;;:::o;33921:843::-;34042:4;34068:15;:2;:13;;;:15::i;:::-;34064:693;;;34120:2;34104:36;;;34141:12;:10;:12::i;:::-;34155:4;34161:7;34170:5;34104:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34100:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34367:1;34350:6;:13;:18;34346:341;;;34393:60;;;;;;;;;;:::i;:::-;;;;;;;;34346:341;34637:6;34631:13;34622:6;34618:2;34614:15;34607:38;34100:602;34237:45;;;34227:55;;;:6;:55;;;;34220:62;;;;;34064:693;34741:4;34734:11;;33921:843;;;;;;;:::o;12050:422::-;12110:4;12318:12;12429:7;12417:20;12409:28;;12463:1;12456:4;:8;12449:15;;;12050:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:256::-;4939:6;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:50;5114:7;5105:6;5094:9;5090:22;5072:50;:::i;:::-;5062:60;;5018:114;4946:193;;;;:::o;5145:260::-;5203:6;5252:2;5240:9;5231:7;5227:23;5223:32;5220:2;;;5268:1;5265;5258:12;5220:2;5311:1;5336:52;5380:7;5371:6;5360:9;5356:22;5336:52;:::i;:::-;5326:62;;5282:116;5210:195;;;;:::o;5411:282::-;5480:6;5529:2;5517:9;5508:7;5504:23;5500:32;5497:2;;;5545:1;5542;5535:12;5497:2;5588:1;5613:63;5668:7;5659:6;5648:9;5644:22;5613:63;:::i;:::-;5603:73;;5559:127;5487:206;;;;:::o;5699:375::-;5768:6;5817:2;5805:9;5796:7;5792:23;5788:32;5785:2;;;5833:1;5830;5823:12;5785:2;5904:1;5893:9;5889:17;5876:31;5934:18;5926:6;5923:30;5920:2;;;5966:1;5963;5956:12;5920:2;5994:63;6049:7;6040:6;6029:9;6025:22;5994:63;:::i;:::-;5984:73;;5847:220;5775:299;;;;:::o;6080:262::-;6139:6;6188:2;6176:9;6167:7;6163:23;6159:32;6156:2;;;6204:1;6201;6194:12;6156:2;6247:1;6272:53;6317:7;6308:6;6297:9;6293:22;6272:53;:::i;:::-;6262:63;;6218:117;6146:196;;;;:::o;6348:118::-;6435:24;6453:5;6435:24;:::i;:::-;6430:3;6423:37;6413:53;;:::o;6472:109::-;6553:21;6568:5;6553:21;:::i;:::-;6548:3;6541:34;6531:50;;:::o;6587:360::-;6673:3;6701:38;6733:5;6701:38;:::i;:::-;6755:70;6818:6;6813:3;6755:70;:::i;:::-;6748:77;;6834:52;6879:6;6874:3;6867:4;6860:5;6856:16;6834:52;:::i;:::-;6911:29;6933:6;6911:29;:::i;:::-;6906:3;6902:39;6895:46;;6677:270;;;;;:::o;6953:364::-;7041:3;7069:39;7102:5;7069:39;:::i;:::-;7124:71;7188:6;7183:3;7124:71;:::i;:::-;7117:78;;7204:52;7249:6;7244:3;7237:4;7230:5;7226:16;7204:52;:::i;:::-;7281:29;7303:6;7281:29;:::i;:::-;7276:3;7272:39;7265:46;;7045:272;;;;;:::o;7323:377::-;7429:3;7457:39;7490:5;7457:39;:::i;:::-;7512:89;7594:6;7589:3;7512:89;:::i;:::-;7505:96;;7610:52;7655:6;7650:3;7643:4;7636:5;7632:16;7610:52;:::i;:::-;7687:6;7682:3;7678:16;7671:23;;7433:267;;;;;:::o;7730:845::-;7833:3;7870:5;7864:12;7899:36;7925:9;7899:36;:::i;:::-;7951:89;8033:6;8028:3;7951:89;:::i;:::-;7944:96;;8071:1;8060:9;8056:17;8087:1;8082:137;;;;8233:1;8228:341;;;;8049:520;;8082:137;8166:4;8162:9;8151;8147:25;8142:3;8135:38;8202:6;8197:3;8193:16;8186:23;;8082:137;;8228:341;8295:38;8327:5;8295:38;:::i;:::-;8355:1;8369:154;8383:6;8380:1;8377:13;8369:154;;;8457:7;8451:14;8447:1;8442:3;8438:11;8431:35;8507:1;8498:7;8494:15;8483:26;;8405:4;8402:1;8398:12;8393:17;;8369:154;;;8552:6;8547:3;8543:16;8536:23;;8235:334;;8049:520;;7837:738;;;;;;:::o;8581:365::-;8723:3;8744:66;8808:1;8803:3;8744:66;:::i;:::-;8737:73;;8819:93;8908:3;8819:93;:::i;:::-;8937:2;8932:3;8928:12;8921:19;;8727:219;;;:::o;8952:366::-;9094:3;9115:67;9179:2;9174:3;9115:67;:::i;:::-;9108:74;;9191:93;9280:3;9191:93;:::i;:::-;9309:2;9304:3;9300:12;9293:19;;9098:220;;;:::o;9324:366::-;9466:3;9487:67;9551:2;9546:3;9487:67;:::i;:::-;9480:74;;9563:93;9652:3;9563:93;:::i;:::-;9681:2;9676:3;9672:12;9665:19;;9470:220;;;:::o;9696:366::-;9838:3;9859:67;9923:2;9918:3;9859:67;:::i;:::-;9852:74;;9935:93;10024:3;9935:93;:::i;:::-;10053:2;10048:3;10044:12;10037:19;;9842:220;;;:::o;10068:366::-;10210:3;10231:67;10295:2;10290:3;10231:67;:::i;:::-;10224:74;;10307:93;10396:3;10307:93;:::i;:::-;10425:2;10420:3;10416:12;10409:19;;10214:220;;;:::o;10440:366::-;10582:3;10603:67;10667:2;10662:3;10603:67;:::i;:::-;10596:74;;10679:93;10768:3;10679:93;:::i;:::-;10797:2;10792:3;10788:12;10781:19;;10586:220;;;:::o;10812:365::-;10954:3;10975:66;11039:1;11034:3;10975:66;:::i;:::-;10968:73;;11050:93;11139:3;11050:93;:::i;:::-;11168:2;11163:3;11159:12;11152:19;;10958:219;;;:::o;11183:366::-;11325:3;11346:67;11410:2;11405:3;11346:67;:::i;:::-;11339:74;;11422:93;11511:3;11422:93;:::i;:::-;11540:2;11535:3;11531:12;11524:19;;11329:220;;;:::o;11555:366::-;11697:3;11718:67;11782:2;11777:3;11718:67;:::i;:::-;11711:74;;11794:93;11883:3;11794:93;:::i;:::-;11912:2;11907:3;11903:12;11896:19;;11701:220;;;:::o;11927:366::-;12069:3;12090:67;12154:2;12149:3;12090:67;:::i;:::-;12083:74;;12166:93;12255:3;12166:93;:::i;:::-;12284:2;12279:3;12275:12;12268:19;;12073:220;;;:::o;12299:366::-;12441:3;12462:67;12526:2;12521:3;12462:67;:::i;:::-;12455:74;;12538:93;12627:3;12538:93;:::i;:::-;12656:2;12651:3;12647:12;12640:19;;12445:220;;;:::o;12671:366::-;12813:3;12834:67;12898:2;12893:3;12834:67;:::i;:::-;12827:74;;12910:93;12999:3;12910:93;:::i;:::-;13028:2;13023:3;13019:12;13012:19;;12817:220;;;:::o;13043:366::-;13185:3;13206:67;13270:2;13265:3;13206:67;:::i;:::-;13199:74;;13282:93;13371:3;13282:93;:::i;:::-;13400:2;13395:3;13391:12;13384:19;;13189:220;;;:::o;13415:366::-;13557:3;13578:67;13642:2;13637:3;13578:67;:::i;:::-;13571:74;;13654:93;13743:3;13654:93;:::i;:::-;13772:2;13767:3;13763:12;13756:19;;13561:220;;;:::o;13787:366::-;13929:3;13950:67;14014:2;14009:3;13950:67;:::i;:::-;13943:74;;14026:93;14115:3;14026:93;:::i;:::-;14144:2;14139:3;14135:12;14128:19;;13933:220;;;:::o;14159:366::-;14301:3;14322:67;14386:2;14381:3;14322:67;:::i;:::-;14315:74;;14398:93;14487:3;14398:93;:::i;:::-;14516:2;14511:3;14507:12;14500:19;;14305:220;;;:::o;14531:366::-;14673:3;14694:67;14758:2;14753:3;14694:67;:::i;:::-;14687:74;;14770:93;14859:3;14770:93;:::i;:::-;14888:2;14883:3;14879:12;14872:19;;14677:220;;;:::o;14903:366::-;15045:3;15066:67;15130:2;15125:3;15066:67;:::i;:::-;15059:74;;15142:93;15231:3;15142:93;:::i;:::-;15260:2;15255:3;15251:12;15244:19;;15049:220;;;:::o;15275:398::-;15434:3;15455:83;15536:1;15531:3;15455:83;:::i;:::-;15448:90;;15547:93;15636:3;15547:93;:::i;:::-;15665:1;15660:3;15656:11;15649:18;;15438:235;;;:::o;15679:366::-;15821:3;15842:67;15906:2;15901:3;15842:67;:::i;:::-;15835:74;;15918:93;16007:3;15918:93;:::i;:::-;16036:2;16031:3;16027:12;16020:19;;15825:220;;;:::o;16051:366::-;16193:3;16214:67;16278:2;16273:3;16214:67;:::i;:::-;16207:74;;16290:93;16379:3;16290:93;:::i;:::-;16408:2;16403:3;16399:12;16392:19;;16197:220;;;:::o;16423:366::-;16565:3;16586:67;16650:2;16645:3;16586:67;:::i;:::-;16579:74;;16662:93;16751:3;16662:93;:::i;:::-;16780:2;16775:3;16771:12;16764:19;;16569:220;;;:::o;16795:118::-;16882:24;16900:5;16882:24;:::i;:::-;16877:3;16870:37;16860:53;;:::o;16919:429::-;17096:3;17118:92;17206:3;17197:6;17118:92;:::i;:::-;17111:99;;17227:95;17318:3;17309:6;17227:95;:::i;:::-;17220:102;;17339:3;17332:10;;17100:248;;;;;:::o;17354:379::-;17538:3;17560:147;17703:3;17560:147;:::i;:::-;17553:154;;17724:3;17717:10;;17542:191;;;:::o;17739:222::-;17832:4;17870:2;17859:9;17855:18;17847:26;;17883:71;17951:1;17940:9;17936:17;17927:6;17883:71;:::i;:::-;17837:124;;;;:::o;17967:640::-;18162:4;18200:3;18189:9;18185:19;18177:27;;18214:71;18282:1;18271:9;18267:17;18258:6;18214:71;:::i;:::-;18295:72;18363:2;18352:9;18348:18;18339:6;18295:72;:::i;:::-;18377;18445:2;18434:9;18430:18;18421:6;18377:72;:::i;:::-;18496:9;18490:4;18486:20;18481:2;18470:9;18466:18;18459:48;18524:76;18595:4;18586:6;18524:76;:::i;:::-;18516:84;;18167:440;;;;;;;:::o;18613:210::-;18700:4;18738:2;18727:9;18723:18;18715:26;;18751:65;18813:1;18802:9;18798:17;18789:6;18751:65;:::i;:::-;18705:118;;;;:::o;18829:313::-;18942:4;18980:2;18969:9;18965:18;18957:26;;19029:9;19023:4;19019:20;19015:1;19004:9;19000:17;18993:47;19057:78;19130:4;19121:6;19057:78;:::i;:::-;19049:86;;18947:195;;;;:::o;19148:419::-;19314:4;19352:2;19341:9;19337:18;19329:26;;19401:9;19395:4;19391:20;19387:1;19376:9;19372:17;19365:47;19429:131;19555:4;19429:131;:::i;:::-;19421:139;;19319:248;;;:::o;19573:419::-;19739:4;19777:2;19766:9;19762:18;19754:26;;19826:9;19820:4;19816:20;19812:1;19801:9;19797:17;19790:47;19854:131;19980:4;19854:131;:::i;:::-;19846:139;;19744:248;;;:::o;19998:419::-;20164:4;20202:2;20191:9;20187:18;20179:26;;20251:9;20245:4;20241:20;20237:1;20226:9;20222:17;20215:47;20279:131;20405:4;20279:131;:::i;:::-;20271:139;;20169:248;;;:::o;20423:419::-;20589:4;20627:2;20616:9;20612:18;20604:26;;20676:9;20670:4;20666:20;20662:1;20651:9;20647:17;20640:47;20704:131;20830:4;20704:131;:::i;:::-;20696:139;;20594:248;;;:::o;20848:419::-;21014:4;21052:2;21041:9;21037:18;21029:26;;21101:9;21095:4;21091:20;21087:1;21076:9;21072:17;21065:47;21129:131;21255:4;21129:131;:::i;:::-;21121:139;;21019:248;;;:::o;21273:419::-;21439:4;21477:2;21466:9;21462:18;21454:26;;21526:9;21520:4;21516:20;21512:1;21501:9;21497:17;21490:47;21554:131;21680:4;21554:131;:::i;:::-;21546:139;;21444:248;;;:::o;21698:419::-;21864:4;21902:2;21891:9;21887:18;21879:26;;21951:9;21945:4;21941:20;21937:1;21926:9;21922:17;21915:47;21979:131;22105:4;21979:131;:::i;:::-;21971:139;;21869:248;;;:::o;22123:419::-;22289:4;22327:2;22316:9;22312:18;22304:26;;22376:9;22370:4;22366:20;22362:1;22351:9;22347:17;22340:47;22404:131;22530:4;22404:131;:::i;:::-;22396:139;;22294:248;;;:::o;22548:419::-;22714:4;22752:2;22741:9;22737:18;22729:26;;22801:9;22795:4;22791:20;22787:1;22776:9;22772:17;22765:47;22829:131;22955:4;22829:131;:::i;:::-;22821:139;;22719:248;;;:::o;22973:419::-;23139:4;23177:2;23166:9;23162:18;23154:26;;23226:9;23220:4;23216:20;23212:1;23201:9;23197:17;23190:47;23254:131;23380:4;23254:131;:::i;:::-;23246:139;;23144:248;;;:::o;23398:419::-;23564:4;23602:2;23591:9;23587:18;23579:26;;23651:9;23645:4;23641:20;23637:1;23626:9;23622:17;23615:47;23679:131;23805:4;23679:131;:::i;:::-;23671:139;;23569:248;;;:::o;23823:419::-;23989:4;24027:2;24016:9;24012:18;24004:26;;24076:9;24070:4;24066:20;24062:1;24051:9;24047:17;24040:47;24104:131;24230:4;24104:131;:::i;:::-;24096:139;;23994:248;;;:::o;24248:419::-;24414:4;24452:2;24441:9;24437:18;24429:26;;24501:9;24495:4;24491:20;24487:1;24476:9;24472:17;24465:47;24529:131;24655:4;24529:131;:::i;:::-;24521:139;;24419:248;;;:::o;24673:419::-;24839:4;24877:2;24866:9;24862:18;24854:26;;24926:9;24920:4;24916:20;24912:1;24901:9;24897:17;24890:47;24954:131;25080:4;24954:131;:::i;:::-;24946:139;;24844:248;;;:::o;25098:419::-;25264:4;25302:2;25291:9;25287:18;25279:26;;25351:9;25345:4;25341:20;25337:1;25326:9;25322:17;25315:47;25379:131;25505:4;25379:131;:::i;:::-;25371:139;;25269:248;;;:::o;25523:419::-;25689:4;25727:2;25716:9;25712:18;25704:26;;25776:9;25770:4;25766:20;25762:1;25751:9;25747:17;25740:47;25804:131;25930:4;25804:131;:::i;:::-;25796:139;;25694:248;;;:::o;25948:419::-;26114:4;26152:2;26141:9;26137:18;26129:26;;26201:9;26195:4;26191:20;26187:1;26176:9;26172:17;26165:47;26229:131;26355:4;26229:131;:::i;:::-;26221:139;;26119:248;;;:::o;26373:419::-;26539:4;26577:2;26566:9;26562:18;26554:26;;26626:9;26620:4;26616:20;26612:1;26601:9;26597:17;26590:47;26654:131;26780:4;26654:131;:::i;:::-;26646:139;;26544:248;;;:::o;26798:419::-;26964:4;27002:2;26991:9;26987:18;26979:26;;27051:9;27045:4;27041:20;27037:1;27026:9;27022:17;27015:47;27079:131;27205:4;27079:131;:::i;:::-;27071:139;;26969:248;;;:::o;27223:419::-;27389:4;27427:2;27416:9;27412:18;27404:26;;27476:9;27470:4;27466:20;27462:1;27451:9;27447:17;27440:47;27504:131;27630:4;27504:131;:::i;:::-;27496:139;;27394:248;;;:::o;27648:419::-;27814:4;27852:2;27841:9;27837:18;27829:26;;27901:9;27895:4;27891:20;27887:1;27876:9;27872:17;27865:47;27929:131;28055:4;27929:131;:::i;:::-;27921:139;;27819:248;;;:::o;28073:222::-;28166:4;28204:2;28193:9;28189:18;28181:26;;28217:71;28285:1;28274:9;28270:17;28261:6;28217:71;:::i;:::-;28171:124;;;;:::o;28301:129::-;28335:6;28362:20;;:::i;:::-;28352:30;;28391:33;28419:4;28411:6;28391:33;:::i;:::-;28342:88;;;:::o;28436:75::-;28469:6;28502:2;28496:9;28486:19;;28476:35;:::o;28517:307::-;28578:4;28668:18;28660:6;28657:30;28654:2;;;28690:18;;:::i;:::-;28654:2;28728:29;28750:6;28728:29;:::i;:::-;28720:37;;28812:4;28806;28802:15;28794:23;;28583:241;;;:::o;28830:308::-;28892:4;28982:18;28974:6;28971:30;28968:2;;;29004:18;;:::i;:::-;28968:2;29042:29;29064:6;29042:29;:::i;:::-;29034:37;;29126:4;29120;29116:15;29108:23;;28897:241;;;:::o;29144:141::-;29193:4;29216:3;29208:11;;29239:3;29236:1;29229:14;29273:4;29270:1;29260:18;29252:26;;29198:87;;;:::o;29291:98::-;29342:6;29376:5;29370:12;29360:22;;29349:40;;;:::o;29395:99::-;29447:6;29481:5;29475:12;29465:22;;29454:40;;;:::o;29500:168::-;29583:11;29617:6;29612:3;29605:19;29657:4;29652:3;29648:14;29633:29;;29595:73;;;;:::o;29674:147::-;29775:11;29812:3;29797:18;;29787:34;;;;:::o;29827:169::-;29911:11;29945:6;29940:3;29933:19;29985:4;29980:3;29976:14;29961:29;;29923:73;;;;:::o;30002:148::-;30104:11;30141:3;30126:18;;30116:34;;;;:::o;30156:305::-;30196:3;30215:20;30233:1;30215:20;:::i;:::-;30210:25;;30249:20;30267:1;30249:20;:::i;:::-;30244:25;;30403:1;30335:66;30331:74;30328:1;30325:81;30322:2;;;30409:18;;:::i;:::-;30322:2;30453:1;30450;30446:9;30439:16;;30200:261;;;;:::o;30467:185::-;30507:1;30524:20;30542:1;30524:20;:::i;:::-;30519:25;;30558:20;30576:1;30558:20;:::i;:::-;30553:25;;30597:1;30587:2;;30602:18;;:::i;:::-;30587:2;30644:1;30641;30637:9;30632:14;;30509:143;;;;:::o;30658:348::-;30698:7;30721:20;30739:1;30721:20;:::i;:::-;30716:25;;30755:20;30773:1;30755:20;:::i;:::-;30750:25;;30943:1;30875:66;30871:74;30868:1;30865:81;30860:1;30853:9;30846:17;30842:105;30839:2;;;30950:18;;:::i;:::-;30839:2;30998:1;30995;30991:9;30980:20;;30706:300;;;;:::o;31012:191::-;31052:4;31072:20;31090:1;31072:20;:::i;:::-;31067:25;;31106:20;31124:1;31106:20;:::i;:::-;31101:25;;31145:1;31142;31139:8;31136:2;;;31150:18;;:::i;:::-;31136:2;31195:1;31192;31188:9;31180:17;;31057:146;;;;:::o;31209:96::-;31246:7;31275:24;31293:5;31275:24;:::i;:::-;31264:35;;31254:51;;;:::o;31311:90::-;31345:7;31388:5;31381:13;31374:21;31363:32;;31353:48;;;:::o;31407:149::-;31443:7;31483:66;31476:5;31472:78;31461:89;;31451:105;;;:::o;31562:126::-;31599:7;31639:42;31632:5;31628:54;31617:65;;31607:81;;;:::o;31694:77::-;31731:7;31760:5;31749:16;;31739:32;;;:::o;31777:154::-;31861:6;31856:3;31851;31838:30;31923:1;31914:6;31909:3;31905:16;31898:27;31828:103;;;:::o;31937:307::-;32005:1;32015:113;32029:6;32026:1;32023:13;32015:113;;;32114:1;32109:3;32105:11;32099:18;32095:1;32090:3;32086:11;32079:39;32051:2;32048:1;32044:10;32039:15;;32015:113;;;32146:6;32143:1;32140:13;32137:2;;;32226:1;32217:6;32212:3;32208:16;32201:27;32137:2;31986:258;;;;:::o;32250:320::-;32294:6;32331:1;32325:4;32321:12;32311:22;;32378:1;32372:4;32368:12;32399:18;32389:2;;32455:4;32447:6;32443:17;32433:27;;32389:2;32517;32509:6;32506:14;32486:18;32483:38;32480:2;;;32536:18;;:::i;:::-;32480:2;32301:269;;;;:::o;32576:281::-;32659:27;32681:4;32659:27;:::i;:::-;32651:6;32647:40;32789:6;32777:10;32774:22;32753:18;32741:10;32738:34;32735:62;32732:2;;;32800:18;;:::i;:::-;32732:2;32840:10;32836:2;32829:22;32619:238;;;:::o;32863:233::-;32902:3;32925:24;32943:5;32925:24;:::i;:::-;32916:33;;32971:66;32964:5;32961:77;32958:2;;;33041:18;;:::i;:::-;32958:2;33088:1;33081:5;33077:13;33070:20;;32906:190;;;:::o;33102:176::-;33134:1;33151:20;33169:1;33151:20;:::i;:::-;33146:25;;33185:20;33203:1;33185:20;:::i;:::-;33180:25;;33224:1;33214:2;;33229:18;;:::i;:::-;33214:2;33270:1;33267;33263:9;33258:14;;33136:142;;;;:::o;33284:180::-;33332:77;33329:1;33322:88;33429:4;33426:1;33419:15;33453:4;33450:1;33443:15;33470:180;33518:77;33515:1;33508:88;33615:4;33612:1;33605:15;33639:4;33636:1;33629:15;33656:180;33704:77;33701:1;33694:88;33801:4;33798:1;33791:15;33825:4;33822:1;33815:15;33842:180;33890:77;33887:1;33880:88;33987:4;33984:1;33977:15;34011:4;34008:1;34001:15;34028:102;34069:6;34120:2;34116:7;34111:2;34104:5;34100:14;34096:28;34086:38;;34076:54;;;:::o;34136:156::-;34276:8;34272:1;34264:6;34260:14;34253:32;34242:50;:::o;34298:237::-;34438:34;34434:1;34426:6;34422:14;34415:58;34507:20;34502:2;34494:6;34490:15;34483:45;34404:131;:::o;34541:225::-;34681:34;34677:1;34669:6;34665:14;34658:58;34750:8;34745:2;34737:6;34733:15;34726:33;34647:119;:::o;34772:178::-;34912:30;34908:1;34900:6;34896:14;34889:54;34878:72;:::o;34956:223::-;35096:34;35092:1;35084:6;35080:14;35073:58;35165:6;35160:2;35152:6;35148:15;35141:31;35062:117;:::o;35185:175::-;35325:27;35321:1;35313:6;35309:14;35302:51;35291:69;:::o;35366:159::-;35506:11;35502:1;35494:6;35490:14;35483:35;35472:53;:::o;35531:231::-;35671:34;35667:1;35659:6;35655:14;35648:58;35740:14;35735:2;35727:6;35723:15;35716:39;35637:125;:::o;35768:174::-;35908:26;35904:1;35896:6;35892:14;35885:50;35874:68;:::o;35948:243::-;36088:34;36084:1;36076:6;36072:14;36065:58;36157:26;36152:2;36144:6;36140:15;36133:51;36054:137;:::o;36197:229::-;36337:34;36333:1;36325:6;36321:14;36314:58;36406:12;36401:2;36393:6;36389:15;36382:37;36303:123;:::o;36432:228::-;36572:34;36568:1;36560:6;36556:14;36549:58;36641:11;36636:2;36628:6;36624:15;36617:36;36538:122;:::o;36666:182::-;36806:34;36802:1;36794:6;36790:14;36783:58;36772:76;:::o;36854:231::-;36994:34;36990:1;36982:6;36978:14;36971:58;37063:14;37058:2;37050:6;37046:15;37039:39;36960:125;:::o;37091:182::-;37231:34;37227:1;37219:6;37215:14;37208:58;37197:76;:::o;37279:170::-;37419:22;37415:1;37407:6;37403:14;37396:46;37385:64;:::o;37455:228::-;37595:34;37591:1;37583:6;37579:14;37572:58;37664:11;37659:2;37651:6;37647:15;37640:36;37561:122;:::o;37689:220::-;37829:34;37825:1;37817:6;37813:14;37806:58;37898:3;37893:2;37885:6;37881:15;37874:28;37795:114;:::o;37915:::-;38021:8;:::o;38035:236::-;38175:34;38171:1;38163:6;38159:14;38152:58;38244:19;38239:2;38231:6;38227:15;38220:44;38141:130;:::o;38277:174::-;38417:26;38413:1;38405:6;38401:14;38394:50;38383:68;:::o;38457:221::-;38597:34;38593:1;38585:6;38581:14;38574:58;38666:4;38661:2;38653:6;38649:15;38642:29;38563:115;:::o;38684:122::-;38757:24;38775:5;38757:24;:::i;:::-;38750:5;38747:35;38737:2;;38796:1;38793;38786:12;38737:2;38727:79;:::o;38812:116::-;38882:21;38897:5;38882:21;:::i;:::-;38875:5;38872:32;38862:2;;38918:1;38915;38908:12;38862:2;38852:76;:::o;38934:120::-;39006:23;39023:5;39006:23;:::i;:::-;38999:5;38996:34;38986:2;;39044:1;39041;39034:12;38986:2;38976:78;:::o;39060:122::-;39133:24;39151:5;39133:24;:::i;:::-;39126:5;39123:35;39113:2;;39172:1;39169;39162:12;39113:2;39103:79;:::o
Swarm Source
ipfs://a78b4f10b00df0cb60e4cd88bfd6d2d091d7875f07f242cf395caddca459bbbb
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.