Contract 0x364C828eE171616a39897688A831c2499aD972ec 7

 

Contract Overview

Sappy Seals: SAPS Token
Balance:
0 Ether

EtherValue:
$0.00

Token:
 
Txn Hash
Method
Block
From
To
Value
0xeb9b3588477076cb235e7954e0b75bf37cd629123d88ff0946bfe9997ff50b4fSafe Transfer Fr...156399072022-09-29 15:31:1114 mins agoENS Name mekanik.eth IN  Sappy Seals: SAPS Token0 Ether0.00098778 16.03886043
0xf172bb678c021eed55dc8331bfda4e5e5dbd5c4d2bb36d3f437e23abe6db3593Set Approval For...156398482022-09-29 15:19:1126 mins ago0xb82a879f5d928fdaef8fd128f6c1b7ccfe92dbe1 IN  Sappy Seals: SAPS Token0 Ether0.00091383 19.59297181
0xa7ca5cde08e8bb36d21c430c41518313d6e2b56f23c46c64558e2c4156db0deaSet Approval For...156398262022-09-29 15:14:4730 mins agoENS Name nftzyboi.eth IN  Sappy Seals: SAPS Token0 Ether0.00101755 21.81679191
0x4d9970dddc22a91738407b0c8a2ec1f01e3b12857f32bb63b13646ba985bf662Set Approval For...156398072022-09-29 15:10:5934 mins ago0xb82a879f5d928fdaef8fd128f6c1b7ccfe92dbe1 IN  Sappy Seals: SAPS Token0 Ether0.00108094 23.13414637
0x7eab2f67b290f7033da7291578dbd198d5f44ec15bf0a12c03576aa07fcd879bSet Approval For...156395692022-09-29 14:23:111 hr 22 mins agoENS Name nftzyboi.eth IN  Sappy Seals: SAPS Token0 Ether0.00094031 20.12445997
0xa328d746b27865634d0f14a03b9bcef4a452ac64427c5948e9404de50d3c98ffSet Approval For...156390692022-09-29 12:41:473 hrs 3 mins ago0x7df3bfe4996cadcf706c35387593690495ef8442 IN  Sappy Seals: SAPS Token0 Ether0.00074039 15.87427118
0x5b908c7849e13e9bd842248100a64e6bf856feea92d56141e569a3807d315dcbSet Approval For...156387692022-09-29 11:41:234 hrs 4 mins agoENS Name stoufline.eth IN  Sappy Seals: SAPS Token0 Ether0.00047704 10.22811014
0x93a7b0212825768f79618f64d6ce968cf6ac800b4fdd2db4ba23cd48cc09392dSafe Transfer Fr...156387142022-09-29 11:30:234 hrs 15 mins ago0x36fbbfed6ba631f5411f33f638e28449a6a60352 IN  Sappy Seals: SAPS Token0 Ether0.00054362 8.82516752
0x1edffe55e9e153f4897b3f57a7444fae57c19b12fd85941c8113702e6652ed89Set Approval For...156384442022-09-29 10:35:475 hrs 9 mins ago0x69156d1e8fb607f955bca85ac1a37e10e13542dc IN  Sappy Seals: SAPS Token0 Ether0.00034072 7.30535675
0x01bd411fa1124e5c78120a476841031215ccc684132c1498b17faf00fd666f61Safe Transfer Fr...156381132022-09-29 9:29:116 hrs 16 mins ago0xf7698ce63b003191866bfa6c3580e2f1e06df2a9 IN  Sappy Seals: SAPS Token0 Ether0.00064275 10.4364812
0x03f79fcd05147a2a617f459f084c721939aa0c22e74f0108f2d395ad0fcd67ebSet Approval For...156377932022-09-29 8:24:597 hrs 20 mins ago0xced0a035a25f87bd13b924dcb547231cd6faa447 IN  Sappy Seals: SAPS Token0 Ether0.00044931 9.61621454
0x9af75a5f89dbb7f5126ad3757d791d6ac5fcefa260381e490dd13a80e79ac8b8Set Approval For...156373672022-09-29 6:59:358 hrs 46 mins agoENS Name fakehomelander.eth IN  Sappy Seals: SAPS Token0 Ether0.00044968 9.64148476
0xedbbf8ce0fd9ca7bc2aa64ba4a91a3b2e5f5bdcae452766745d9281a04e2c3ddSet Approval For...156369972022-09-29 5:44:4710 hrs ago0x3cb0b5e99d2543260915e7b11e753002330f7888 IN  Sappy Seals: SAPS Token0 Ether0.00041766 8.93869257
0xa7da028363b6aa50caeeee9ba367ecdfc6dad2ce1a4577630c2b1c9d89659917Safe Transfer Fr...156369632022-09-29 5:37:5910 hrs 7 mins ago0x1df9255bf06f747ff2e4e63b3185fc0472fb1eaf IN  Sappy Seals: SAPS Token0 Ether0.00050952 10.33534318
0xdb45990642aaaac6e64f6edf6ba12614203f0cca9e9c6d05f84793698cc48661Safe Transfer Fr...156369582022-09-29 5:36:5910 hrs 8 mins ago0x1df9255bf06f747ff2e4e63b3185fc0472fb1eaf IN  Sappy Seals: SAPS Token0 Ether0.00069585 10.47988975
0x6dde9278cb913bba9f1d1c5ed6d7464c97e6e0dd975201a662d3ead2ea6c1732Set Approval For...156369512022-09-29 5:35:3510 hrs 10 mins ago0x1df9255bf06f747ff2e4e63b3185fc0472fb1eaf IN  Sappy Seals: SAPS Token0 Ether0.00048808 10.46461757
0x8b67e86b41066150d0cd6425b3ce0414ff4d8fc9bc98fa338f28c045ddbd2c0bSafe Transfer Fr...156368492022-09-29 5:14:5910 hrs 30 mins agoENS Name hewie.eth IN  Sappy Seals: SAPS Token0 Ether0.00065302 9.83481881
0xe119550faee41d927353a39cb272bcdff18ed0029880c912d9f977a2852c1157Safe Transfer Fr...156368132022-09-29 5:07:4710 hrs 37 mins ago0x1df9255bf06f747ff2e4e63b3185fc0472fb1eaf IN  Sappy Seals: SAPS Token0 Ether0.00065015 9.7916887
0x10b2368597b94cdff39d3205784a8d71a52ed4068c0fc3808478a387db112ad4Set Approval For...156367612022-09-29 4:57:2310 hrs 48 mins ago0x4649263ab94102c8dfa001d8b68112340a23e7d4 IN  Sappy Seals: SAPS Token0 Ether0.0004145 8.8712599
0xb2591c84840f8cec09d75d3f3d158f4f46623643b45809fcad3258d1e17658cdSafe Transfer Fr...156364832022-09-29 4:01:3511 hrs 44 mins ago0x4649263ab94102c8dfa001d8b68112340a23e7d4 IN  Sappy Seals: SAPS Token0 Ether0.00084753 13.75883828
0xaa6426296aa1b2013f739e69d695fb30f69324afc0e2b526bedcb282225d9c93Set Approval For...156361332022-09-29 2:51:1112 hrs 54 mins ago0x0dd43c4672ed77d54a6a2fa4f0878164bfb0980a IN  Sappy Seals: SAPS Token0 Ether0.00040989 8.77244147
0x6bcfaede18ef1b3b9241882ac2458c224a5133846850014ba86d46ff515250faSet Approval For...156360682022-09-29 2:38:1113 hrs 7 mins ago0x3400f5982e121736bd715e51bfaa6f9c3ac8a66a IN  Sappy Seals: SAPS Token0 Ether0.00042924 9.18670449
0xefbeaa1c7511dbe798c6ee30dc4c328ad73c369b7385226addb15a7803171eebSet Approval For...156353742022-09-29 0:19:1115 hrs 26 mins agoENS Name ryxalexander.eth IN  Sappy Seals: SAPS Token0 Ether0.000441 9.4552685
0x2f7f4d44273656306b79f9291de82e26d07ab7e3e9d7bfbd51ff49b7b4fc204dSet Approval For...156348832022-09-28 22:40:2317 hrs 5 mins ago0xc1a0c3980e9df32ea752ab673351008287b7f6a5 IN  Sappy Seals: SAPS Token0 Ether0.00053816 11.51763184
0x2c0e24835b19de2969519d421e2a52f62c643818236f5808a8a4a08ff533823aSet Approval For...156344892022-09-28 21:21:2318 hrs 24 mins agoENS Name ens-bazaar.eth IN  Sappy Seals: SAPS Token0 Ether0.00049387 10.56992087
[ Download CSV Export 

OVERVIEW

Sappy Seals is community-led project focused on metaverse expansion and a growing ecosystem. Holder count is not accurate due to our staking contract - roughly 4400 holders.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x190fe067a389ac322d6c120b0d371485dd55d90065797915587de23f53910a2f131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.12 Ether
0x5d3bfc5dc7ca4f2d3c8ba557574f12deb437eda9a049159b47707f3f5c195b9a131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.12 Ether
0xdd9bc6f399f3017210fa23db624c8b577c272b7b3065f3772b2fedf6cab58d84131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.12 Ether
0x7796aa44ac0674819a4ee86e96964dda73c7dc221eddc30d51365d1309a7f5b7131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.06 Ether
0x85138e61ef513ba503a53db965bf752f6688e664fcff4c09ee91ed6fdc573cc0131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.06 Ether
0x374fa21ce7b0e8a71b8f28e72f16174f8dd5af83241d9bc32fd4ffdf34ab4743131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.06 Ether
0xe2240ae41257edd85dbffff500112f427478ab0eaac12545783b6a9ce0fa72d1131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.6 Ether
0xcae4bd8966efed01d8be4ad373df86bf6070a68c683e73d776eb541b21d8f3f8131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.18 Ether
0x1b766db715dec9860f196cc5b64fd1568e5dab81340bdc3007eb2c16e4a28155131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.18 Ether
0xa88a6c892a0898ddf7d544e6cc0b785cd8c171f01dd1d783c9c25ee1a5902401131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.06 Ether
0xa94be0e3cd6c27647f4769c7ced54ae95a9a43cc3425cf2fbeafba80e15f5c77131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.06 Ether
0xc786b831ddbaaf7cb986193354eff265d7072bfc7e8b3e064028249c376153e9131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.12 Ether
0xe0394db29e7445508dede5cea21f751a321726fc9e8de2a2bee8a4ebe487b416131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.18 Ether
0x09cd30f363d234b25ef6314b61a73e42a960b56a70f78e5d056260fb8a990dcb131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.6 Ether
0x6cad04fc390b991a43461660d9f98de3aa65d046f2aa12564c8d678d42b5e599131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.06 Ether
0x1cce8d2d952f4b4c76f59b134778d5e1beb2735b5523f14ed90d523f652e801c131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.12 Ether
0xd86e7783f1fe21148a888eab9a45ff7ecbb4554799a4252ba72d36c4ddcd73ae131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.06 Ether
0x939cca376ef6d86e9bbf2915d217b5f78bc1bb5ad224b4032425bda08bb02ed6131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.06 Ether
0x6da49d76e97ba9b0006f56372f59ad24e44a61ffbb4f9379cb9c505c775bc47f131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.3 Ether
0x5abce63e438fb55cbc803effdc9283b61a3281365d47dbbd940b97a604139162131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.18 Ether
0xe769f572cacad2575fdd81ffc8fd895c7947ef7b267630f04ae7e6070860803b131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.18 Ether
0xc32190819408eae742d86cac8ed2ac0c1496805d1e432c0d1ec4f11450cee162131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.18 Ether
0xbefd0793cab8ece042bde81890eca49afdbc2c329d7a3e4b26077a6a55ccab84131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.12 Ether
0x681957c9c54a11fe23539d2c89620135bcb30295ef342959eaad99f6e3952ba5131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.06 Ether
0x4ab5af14dc84054435d21283a1284f8b530f5763567b8cc7b61f78a45181037f131362272021-08-31 23:15:06393 days 16 hrs ago Sappy Seals: SAPS TokenSappy Seals: Deployer0.18 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SappySeals

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-31
*/

// Sources flattened with hardhat v2.5.0 https://hardhat.org
 
// File contracts/utils/introspection/IERC165.sol
 
// SPDX-License-Identifier: MIT
 
pragma solidity ^0.8.0;
 
/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
 
// File 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 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 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 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 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 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 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 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/token/ERC721/extensions/ERC721URIStorage.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;
 
    // Optional mapping for token URIs
    mapping (uint256 => string) private _tokenURIs;
 
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
 
        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();
 
        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
 
        return super.tokenURI(tokenId);
    }
 
    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }
 
    /**
     * @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 override {
        super._burn(tokenId);
 
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}
 
 
// File 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;
    }
}
 
 
 
pragma solidity ^0.8.0;
 
 
 
contract SappySeals is ERC721URIStorage, Ownable{
 
    event MintSeals (address indexed minter, uint256 startWith, uint256 times);
    
    
    uint256 public totalSeals;
    uint256 public totalCount = 10000; //bruhTotal
    uint256 public maxBatch = 20; // bruhBatch
    uint256 public price = 60000000000000000; // 0.06 eth
    uint256 public releaseUnix = 1630447200; // works KEKW
    uint256 public presaleRelease = 1630445400; // presale time (please work)
    string public baseURI;
    bool public started;
    bool public whiteListStart;
    mapping(address => bool) whiteList;
    mapping(address => uint256) whiteListMintCount;
    uint addressRegistryCount;
    
    constructor(string memory name_, string memory symbol_, string memory baseURI_) ERC721(name_, symbol_) {
        baseURI = baseURI_;
    }
    
    modifier canWhitelistMint() {
        require(block.timestamp >= presaleRelease, "Wait buddy");
        require(whiteListStart, "Hang on boys, youll get in soon");
        require(whiteList[msg.sender] == true, "Not whitelisted.");
        _; 
    }

    modifier mintEnabled() {
        require(block.timestamp >= releaseUnix, "Wait buddy");
        require(started, "not started");
        _;
    }
 
    function totalSupply() public view virtual returns (uint256) {
        return totalSeals;
    }
 
    function _baseURI() internal view virtual override returns (string memory){
        return baseURI;
    }
 
    function setBaseURI(string memory _newURI) public onlyOwner {
        baseURI = _newURI;
    }
 
    function changePrice(uint256 _newPrice) public onlyOwner {
        price = _newPrice;
    }
    
    function changeStartDate(uint256 newDate) public onlyOwner {
        releaseUnix = newDate;
    }
    
    function changePresaleStartDate(uint256 newDate) public onlyOwner {
        presaleRelease = newDate;
    }
 
    function setTokenURI(uint256 _tokenId, string memory _tokenURI) public onlyOwner {
        _setTokenURI(_tokenId, _tokenURI);
    }
 
    function setNormalStart(bool _start) public onlyOwner {
        started = _start;
    }
    
    function setWhiteListStart(bool _start) public onlyOwner {
        whiteListStart = _start;
    }
    
    function getWhitelistMintAmount(address _addr) public view virtual returns (uint256) {
        return whiteListMintCount[_addr];
    }
 
    function mintSeal(uint256 _times) payable public mintEnabled {
        require(_times >0 && _times <= maxBatch, "mint wrong number");
        require(totalSeals + _times <= totalCount, "too much");
        require(msg.value == _times * price, "value error");
        payable(owner()).transfer(msg.value);
        emit MintSeals(_msgSender(), totalSeals+1, _times);
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalSeals++);
        }
    } 
    
    function adminMint(uint256 _times) payable public onlyOwner {
        require(_times >0 && _times <= maxBatch, "mint wrong number");
        require(totalSeals + _times <= totalCount, "too much");
        require(msg.value == _times * price, "value error");
        payable(owner()).transfer(msg.value);
        emit MintSeals(_msgSender(), totalSeals+1, _times);
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalSeals++);
        }
    }
    
    
    function whitelistMint(uint _times) payable public canWhitelistMint {
        require(whiteListMintCount[msg.sender] - _times >= 0, "Over mint limit for address.");
        require(totalSeals + _times <= totalCount, "Mint amount will exceed total collection amount.");
        require(msg.value == _times * price, "Incorrect transaction value.");
        payable(owner()).transfer(msg.value);
        whiteListMintCount[_msgSender()] -= _times;
        emit MintSeals(_msgSender(), totalSeals+1, _times);
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalSeals++);
        }
    }
    
    
    function adminMintGiveaways(address _addr) public onlyOwner {
        require(totalSeals + 1 <= totalCount, "Mint amount will exceed total collection amount.");
        emit MintSeals(_addr, totalSeals+1, 1);
        _mint(_addr, 1 + totalSeals++);
    } 
    
    
    function addToWhitelist(address _addr, uint numberOfMints) public onlyOwner {
        whiteList[_addr] = true;
        whiteListMintCount[_addr] = numberOfMints;
        addressRegistryCount++;
    }
    
    function addToWhitelistBulk(address[] memory _addr,uint[] memory _numberOfMints) public onlyOwner {
        for(uint256 i = 0; i < _addr.length; i++){
            whiteList[_addr[i]] = true;
            whiteListMintCount[_addr[i]] = _numberOfMints[i];
        }
    }
    
    //Check address is in whiteList 
    function isAddressInWhitelist(address _addr) public view virtual returns(bool) {
            return whiteList[_addr] == true;
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"startWith","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"times","type":"uint256"}],"name":"MintSeals","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addr","type":"address[]"},{"internalType":"uint256[]","name":"_numberOfMints","type":"uint256[]"}],"name":"addToWhitelistBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"adminMintGiveaways","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDate","type":"uint256"}],"name":"changePresaleStartDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDate","type":"uint256"}],"name":"changeStartDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getWhitelistMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isAddressInWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"mintSeal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleRelease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releaseUnix","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setNormalStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setWhiteListStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSeals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526127106009556014600a5566d529ae9e860000600b5563612ea660600c5563612e9f58600d553480156200003757600080fd5b50604051620054df380380620054df83398181016040528101906200005d919062000290565b82828160009080519060200190620000779291906200016e565b508060019080519060200190620000909291906200016e565b5050506000620000a56200016660201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e90805190602001906200015c9291906200016e565b50505050620004a1565b600033905090565b8280546200017c90620003c6565b90600052602060002090601f016020900481019282620001a05760008555620001ec565b82601f10620001bb57805160ff1916838001178555620001ec565b82800160010185558215620001ec579182015b82811115620001eb578251825591602001919060010190620001ce565b5b509050620001fb9190620001ff565b5090565b5b808211156200021a57600081600090555060010162000200565b5090565b6000620002356200022f846200035a565b62000331565b9050828152602081018484840111156200024e57600080fd5b6200025b84828562000390565b509392505050565b600082601f8301126200027557600080fd5b8151620002878482602086016200021e565b91505092915050565b600080600060608486031215620002a657600080fd5b600084015167ffffffffffffffff811115620002c157600080fd5b620002cf8682870162000263565b935050602084015167ffffffffffffffff811115620002ed57600080fd5b620002fb8682870162000263565b925050604084015167ffffffffffffffff8111156200031957600080fd5b620003278682870162000263565b9150509250925092565b60006200033d62000350565b90506200034b8282620003fc565b919050565b6000604051905090565b600067ffffffffffffffff82111562000378576200037762000461565b5b620003838262000490565b9050602081019050919050565b60005b83811015620003b057808201518184015260208101905062000393565b83811115620003c0576000848401525b50505050565b60006002820490506001821680620003df57607f821691505b60208210811415620003f657620003f562000432565b5b50919050565b620004078262000490565b810181811067ffffffffffffffff8211171562000429576200042862000461565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61502e80620004b16000396000f3fe6080604052600436106102455760003560e01c8063715018a611610139578063a035b1fe116100b6578063c1f261231161007a578063c1f2612314610856578063c87b56dd14610872578063d0f2a114146108af578063d9ff054e146108cb578063e985e9c5146108f6578063f2fde38b1461093357610245565b8063a035b1fe14610787578063a22cb465146107b2578063a2b40d19146107db578063b88d4fde14610804578063bffb26ce1461082d57610245565b8063917bb57f116100fd578063917bb57f1461069057806395d89b41146106b95780639955fc45146106e45780639a3132991461070d5780639afdf2f31461074a57610245565b8063715018a6146105dc57806383ebc808146105f3578063868ff4a21461061e57806388eae7051461063a5780638da5cb5b1461066557610245565b806334eafb11116101c75780635f4f603d1161018b5780635f4f603d146104e35780636352211e1461050c57806367765b87146105495780636c0360eb1461057457806370a082311461059f57610245565b806334eafb11146104125780633c49a8a91461043d57806342842e0e146104665780635082aed51461048f57806355f804b3146104ba57610245565b8063162094c41161020e578063162094c41461034157806318160ddd1461036a5780631f2698ab14610395578063214405fc146103c057806323b872dd146103e957610245565b8062739f2a1461024a57806301ffc9a71461027357806306fdde03146102b0578063081812fc146102db578063095ea7b314610318575b600080fd5b34801561025657600080fd5b50610271600480360381019061026c9190613a58565b61095c565b005b34801561027f57600080fd5b5061029a600480360381019061029591906139c5565b6109e2565b6040516102a79190614013565b60405180910390f35b3480156102bc57600080fd5b506102c5610ac4565b6040516102d2919061402e565b60405180910390f35b3480156102e757600080fd5b5061030260048036038101906102fd9190613a58565b610b56565b60405161030f9190613fac565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a91906138f4565b610bdb565b005b34801561034d57600080fd5b5061036860048036038101906103639190613a81565b610cf3565b005b34801561037657600080fd5b5061037f610d7d565b60405161038c91906143d0565b60405180910390f35b3480156103a157600080fd5b506103aa610d87565b6040516103b79190614013565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906138f4565b610d9a565b005b3480156103f557600080fd5b50610410600480360381019061040b91906137ee565b610ece565b005b34801561041e57600080fd5b50610427610f2e565b60405161043491906143d0565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190613789565b610f34565b005b34801561047257600080fd5b5061048d600480360381019061048891906137ee565b611091565b005b34801561049b57600080fd5b506104a46110b1565b6040516104b191906143d0565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190613a17565b6110b7565b005b3480156104ef57600080fd5b5061050a6004803603810190610505919061399c565b61114d565b005b34801561051857600080fd5b50610533600480360381019061052e9190613a58565b6111e6565b6040516105409190613fac565b60405180910390f35b34801561055557600080fd5b5061055e611298565b60405161056b91906143d0565b60405180910390f35b34801561058057600080fd5b5061058961129e565b604051610596919061402e565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190613789565b61132c565b6040516105d391906143d0565b60405180910390f35b3480156105e857600080fd5b506105f16113e4565b005b3480156105ff57600080fd5b50610608611521565b60405161061591906143d0565b60405180910390f35b61063860048036038101906106339190613a58565b611527565b005b34801561064657600080fd5b5061064f6118e2565b60405161065c9190614013565b60405180910390f35b34801561067157600080fd5b5061067a6118f5565b6040516106879190613fac565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b2919061399c565b61191f565b005b3480156106c557600080fd5b506106ce6119b8565b6040516106db919061402e565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190613a58565b611a4a565b005b34801561071957600080fd5b50610734600480360381019061072f9190613789565b611ad0565b6040516107419190614013565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c9190613789565b611b2d565b60405161077e91906143d0565b60405180910390f35b34801561079357600080fd5b5061079c611b76565b6040516107a991906143d0565b60405180910390f35b3480156107be57600080fd5b506107d960048036038101906107d491906138b8565b611b7c565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613a58565b611cfd565b005b34801561081057600080fd5b5061082b6004803603810190610826919061383d565b611d83565b005b34801561083957600080fd5b50610854600480360381019061084f9190613930565b611de5565b005b610870600480360381019061086b9190613a58565b611fe1565b005b34801561087e57600080fd5b5061089960048036038101906108949190613a58565b612257565b6040516108a6919061402e565b60405180910390f35b6108c960048036038101906108c49190613a58565b6123a9565b005b3480156108d757600080fd5b506108e0612637565b6040516108ed91906143d0565b60405180910390f35b34801561090257600080fd5b5061091d600480360381019061091891906137b2565b61263d565b60405161092a9190614013565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613789565b6126d1565b005b61096461287d565b73ffffffffffffffffffffffffffffffffffffffff166109826118f5565b73ffffffffffffffffffffffffffffffffffffffff16146109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf90614270565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aad57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610abd5750610abc82612885565b5b9050919050565b606060008054610ad39061473c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aff9061473c565b8015610b4c5780601f10610b2157610100808354040283529160200191610b4c565b820191906000526020600020905b815481529060010190602001808311610b2f57829003601f168201915b5050505050905090565b6000610b61826128ef565b610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9790614250565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610be6826111e6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e906142f0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c7661287d565b73ffffffffffffffffffffffffffffffffffffffff161480610ca55750610ca481610c9f61287d565b61263d565b5b610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb90614170565b60405180910390fd5b610cee838361295b565b505050565b610cfb61287d565b73ffffffffffffffffffffffffffffffffffffffff16610d196118f5565b73ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6690614270565b60405180910390fd5b610d798282612a14565b5050565b6000600854905090565b600f60009054906101000a900460ff1681565b610da261287d565b73ffffffffffffffffffffffffffffffffffffffff16610dc06118f5565b73ffffffffffffffffffffffffffffffffffffffff1614610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d90614270565b60405180910390fd5b6001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060126000815480929190610ec59061479f565b91905055505050565b610edf610ed961287d565b82612a88565b610f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1590614310565b60405180910390fd5b610f29838383612b66565b505050565b60095481565b610f3c61287d565b73ffffffffffffffffffffffffffffffffffffffff16610f5a6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790614270565b60405180910390fd5b6009546001600854610fc2919061455f565b1115611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa90614350565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167fc1c66401eeae5b2a4ff23f6d7784eefe229334268d00c4b0e5e2c44c4ae4fda5600160085461104a919061455f565b600160405161105a9291906143eb565b60405180910390a261108e81600860008154809291906110799061479f565b919050556001611089919061455f565b612dc2565b50565b6110ac83838360405180602001604052806000815250611d83565b505050565b600d5481565b6110bf61287d565b73ffffffffffffffffffffffffffffffffffffffff166110dd6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90614270565b60405180910390fd5b80600e9080519060200190611149929190613481565b5050565b61115561287d565b73ffffffffffffffffffffffffffffffffffffffff166111736118f5565b73ffffffffffffffffffffffffffffffffffffffff16146111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090614270565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561128f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611286906141b0565b60405180910390fd5b80915050919050565b600a5481565b600e80546112ab9061473c565b80601f01602080910402602001604051908101604052809291908181526020018280546112d79061473c565b80156113245780601f106112f957610100808354040283529160200191611324565b820191906000526020600020905b81548152906001019060200180831161130757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490614190565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ec61287d565b73ffffffffffffffffffffffffffffffffffffffff1661140a6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790614270565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5481565b600d5442101561156c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611563906142b0565b60405180910390fd5b600f60019054906101000a900460ff166115bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b290614390565b60405180910390fd5b60011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590614330565b60405180910390fd5b600081601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461169b9190614640565b10156116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d390614130565b60405180910390fd5b600954816008546116ed919061455f565b111561172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590614350565b60405180910390fd5b600b548161173c91906145e6565b341461177d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611774906141f0565b60405180910390fd5b6117856118f5565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156117ca573d6000803e3d6000fd5b5080601160006117d861287d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118219190614640565b9250508190555061183061287d565b73ffffffffffffffffffffffffffffffffffffffff167fc1c66401eeae5b2a4ff23f6d7784eefe229334268d00c4b0e5e2c44c4ae4fda56001600854611876919061455f565b83604051611885929190614414565b60405180910390a260005b818110156118de576118cb6118a361287d565b600860008154809291906118b69061479f565b9190505560016118c6919061455f565b612dc2565b80806118d69061479f565b915050611890565b5050565b600f60019054906101000a900460ff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61192761287d565b73ffffffffffffffffffffffffffffffffffffffff166119456118f5565b73ffffffffffffffffffffffffffffffffffffffff161461199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290614270565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6060600180546119c79061473c565b80601f01602080910402602001604051908101604052809291908181526020018280546119f39061473c565b8015611a405780601f10611a1557610100808354040283529160200191611a40565b820191906000526020600020905b815481529060010190602001808311611a2357829003601f168201915b5050505050905090565b611a5261287d565b73ffffffffffffffffffffffffffffffffffffffff16611a706118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90614270565b60405180910390fd5b80600d8190555050565b600060011515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515149050919050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b611b8461287d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be990614110565b60405180910390fd5b8060056000611bff61287d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611cac61287d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cf19190614013565b60405180910390a35050565b611d0561287d565b73ffffffffffffffffffffffffffffffffffffffff16611d236118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7090614270565b60405180910390fd5b80600b8190555050565b611d94611d8e61287d565b83612a88565b611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca90614310565b60405180910390fd5b611ddf84848484612f90565b50505050565b611ded61287d565b73ffffffffffffffffffffffffffffffffffffffff16611e0b6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5890614270565b60405180910390fd5b60005b8251811015611fdc57600160106000858481518110611eac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550818181518110611f3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160116000858481518110611f83577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611fd49061479f565b915050611e64565b505050565b611fe961287d565b73ffffffffffffffffffffffffffffffffffffffff166120076118f5565b73ffffffffffffffffffffffffffffffffffffffff161461205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490614270565b60405180910390fd5b60008111801561206f5750600a548111155b6120ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a5906140d0565b60405180910390fd5b600954816008546120bf919061455f565b1115612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f790614050565b60405180910390fd5b600b548161210e91906145e6565b341461214f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612146906143b0565b60405180910390fd5b6121576118f5565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561219c573d6000803e3d6000fd5b506121a561287d565b73ffffffffffffffffffffffffffffffffffffffff167fc1c66401eeae5b2a4ff23f6d7784eefe229334268d00c4b0e5e2c44c4ae4fda560016008546121eb919061455f565b836040516121fa929190614414565b60405180910390a260005b818110156122535761224061221861287d565b6008600081548092919061222b9061479f565b91905055600161223b919061455f565b612dc2565b808061224b9061479f565b915050612205565b5050565b6060612262826128ef565b6122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890614230565b60405180910390fd5b60006006600084815260200190815260200160002080546122c19061473c565b80601f01602080910402602001604051908101604052809291908181526020018280546122ed9061473c565b801561233a5780601f1061230f5761010080835404028352916020019161233a565b820191906000526020600020905b81548152906001019060200180831161231d57829003601f168201915b50505050509050600061234b612fec565b90506000815114156123615781925050506123a4565b60008251111561239657808260405160200161237e929190613f88565b604051602081830303815290604052925050506123a4565b61239f8461307e565b925050505b919050565b600c544210156123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e5906142b0565b60405180910390fd5b600f60009054906101000a900460ff1661243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614370565b60405180910390fd5b60008111801561244f5750600a548111155b61248e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612485906140d0565b60405180910390fd5b6009548160085461249f919061455f565b11156124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d790614050565b60405180910390fd5b600b54816124ee91906145e6565b341461252f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612526906143b0565b60405180910390fd5b6125376118f5565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561257c573d6000803e3d6000fd5b5061258561287d565b73ffffffffffffffffffffffffffffffffffffffff167fc1c66401eeae5b2a4ff23f6d7784eefe229334268d00c4b0e5e2c44c4ae4fda560016008546125cb919061455f565b836040516125da929190614414565b60405180910390a260005b81811015612633576126206125f861287d565b6008600081548092919061260b9061479f565b91905055600161261b919061455f565b612dc2565b808061262b9061479f565b9150506125e5565b5050565b60085481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126d961287d565b73ffffffffffffffffffffffffffffffffffffffff166126f76118f5565b73ffffffffffffffffffffffffffffffffffffffff161461274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614270565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b490614090565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129ce836111e6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612a1d826128ef565b612a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a53906141d0565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190612a83929190613481565b505050565b6000612a93826128ef565b612ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac990614150565b60405180910390fd5b6000612add836111e6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b4c57508373ffffffffffffffffffffffffffffffffffffffff16612b3484610b56565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b5d5750612b5c818561263d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b86826111e6565b73ffffffffffffffffffffffffffffffffffffffff1614612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd390614290565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c43906140f0565b60405180910390fd5b612c57838383613125565b612c6260008261295b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cb29190614640565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d09919061455f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990614210565b60405180910390fd5b612e3b816128ef565b15612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e72906140b0565b60405180910390fd5b612e8760008383613125565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ed7919061455f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612f9b848484612b66565b612fa78484848461312a565b612fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fdd90614070565b60405180910390fd5b50505050565b6060600e8054612ffb9061473c565b80601f01602080910402602001604051908101604052809291908181526020018280546130279061473c565b80156130745780601f1061304957610100808354040283529160200191613074565b820191906000526020600020905b81548152906001019060200180831161305757829003601f168201915b5050505050905090565b6060613089826128ef565b6130c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bf906142d0565b60405180910390fd5b60006130d2612fec565b905060008151116130f2576040518060200160405280600081525061311d565b806130fc846132c1565b60405160200161310d929190613f88565b6040516020818303038152906040525b915050919050565b505050565b600061314b8473ffffffffffffffffffffffffffffffffffffffff1661346e565b156132b4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261317461287d565b8786866040518563ffffffff1660e01b81526004016131969493929190613fc7565b602060405180830381600087803b1580156131b057600080fd5b505af19250505080156131e157506040513d601f19601f820116820180604052508101906131de91906139ee565b60015b613264573d8060008114613211576040519150601f19603f3d011682016040523d82523d6000602084013e613216565b606091505b5060008151141561325c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325390614070565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132b9565b600190505b949350505050565b60606000821415613309576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613469565b600082905060005b6000821461333b5780806133249061479f565b915050600a8261333491906145b5565b9150613311565b60008167ffffffffffffffff81111561337d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133af5781602001600182028036833780820191505090505b5090505b60008514613462576001826133c89190614640565b9150600a856133d791906147e8565b60306133e3919061455f565b60f81b81838151811061341f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561345b91906145b5565b94506133b3565b8093505050505b919050565b600080823b905060008111915050919050565b82805461348d9061473c565b90600052602060002090601f0160209004810192826134af57600085556134f6565b82601f106134c857805160ff19168380011785556134f6565b828001600101855582156134f6579182015b828111156134f55782518255916020019190600101906134da565b5b5090506135039190613507565b5090565b5b80821115613520576000816000905550600101613508565b5090565b600061353761353284614462565b61443d565b9050808382526020820190508285602086028201111561355657600080fd5b60005b85811015613586578161356c8882613678565b845260208401935060208301925050600181019050613559565b5050509392505050565b60006135a361359e8461448e565b61443d565b905080838252602082019050828560208602820111156135c257600080fd5b60005b858110156135f257816135d88882613774565b8452602084019350602083019250506001810190506135c5565b5050509392505050565b600061360f61360a846144ba565b61443d565b90508281526020810184848401111561362757600080fd5b6136328482856146fa565b509392505050565b600061364d613648846144eb565b61443d565b90508281526020810184848401111561366557600080fd5b6136708482856146fa565b509392505050565b60008135905061368781614f9c565b92915050565b600082601f83011261369e57600080fd5b81356136ae848260208601613524565b91505092915050565b600082601f8301126136c857600080fd5b81356136d8848260208601613590565b91505092915050565b6000813590506136f081614fb3565b92915050565b60008135905061370581614fca565b92915050565b60008151905061371a81614fca565b92915050565b600082601f83011261373157600080fd5b81356137418482602086016135fc565b91505092915050565b600082601f83011261375b57600080fd5b813561376b84826020860161363a565b91505092915050565b60008135905061378381614fe1565b92915050565b60006020828403121561379b57600080fd5b60006137a984828501613678565b91505092915050565b600080604083850312156137c557600080fd5b60006137d385828601613678565b92505060206137e485828601613678565b9150509250929050565b60008060006060848603121561380357600080fd5b600061381186828701613678565b935050602061382286828701613678565b925050604061383386828701613774565b9150509250925092565b6000806000806080858703121561385357600080fd5b600061386187828801613678565b945050602061387287828801613678565b935050604061388387828801613774565b925050606085013567ffffffffffffffff8111156138a057600080fd5b6138ac87828801613720565b91505092959194509250565b600080604083850312156138cb57600080fd5b60006138d985828601613678565b92505060206138ea858286016136e1565b9150509250929050565b6000806040838503121561390757600080fd5b600061391585828601613678565b925050602061392685828601613774565b9150509250929050565b6000806040838503121561394357600080fd5b600083013567ffffffffffffffff81111561395d57600080fd5b6139698582860161368d565b925050602083013567ffffffffffffffff81111561398657600080fd5b613992858286016136b7565b9150509250929050565b6000602082840312156139ae57600080fd5b60006139bc848285016136e1565b91505092915050565b6000602082840312156139d757600080fd5b60006139e5848285016136f6565b91505092915050565b600060208284031215613a0057600080fd5b6000613a0e8482850161370b565b91505092915050565b600060208284031215613a2957600080fd5b600082013567ffffffffffffffff811115613a4357600080fd5b613a4f8482850161374a565b91505092915050565b600060208284031215613a6a57600080fd5b6000613a7884828501613774565b91505092915050565b60008060408385031215613a9457600080fd5b6000613aa285828601613774565b925050602083013567ffffffffffffffff811115613abf57600080fd5b613acb8582860161374a565b9150509250929050565b613ade81614674565b82525050565b613aed81614686565b82525050565b6000613afe8261451c565b613b088185614532565b9350613b18818560208601614709565b613b21816148d5565b840191505092915050565b613b35816146e8565b82525050565b6000613b4682614527565b613b508185614543565b9350613b60818560208601614709565b613b69816148d5565b840191505092915050565b6000613b7f82614527565b613b898185614554565b9350613b99818560208601614709565b80840191505092915050565b6000613bb2600883614543565b9150613bbd826148e6565b602082019050919050565b6000613bd5603283614543565b9150613be08261490f565b604082019050919050565b6000613bf8602683614543565b9150613c038261495e565b604082019050919050565b6000613c1b601c83614543565b9150613c26826149ad565b602082019050919050565b6000613c3e601183614543565b9150613c49826149d6565b602082019050919050565b6000613c61602483614543565b9150613c6c826149ff565b604082019050919050565b6000613c84601983614543565b9150613c8f82614a4e565b602082019050919050565b6000613ca7601c83614543565b9150613cb282614a77565b602082019050919050565b6000613cca602c83614543565b9150613cd582614aa0565b604082019050919050565b6000613ced603883614543565b9150613cf882614aef565b604082019050919050565b6000613d10602a83614543565b9150613d1b82614b3e565b604082019050919050565b6000613d33602983614543565b9150613d3e82614b8d565b604082019050919050565b6000613d56602e83614543565b9150613d6182614bdc565b604082019050919050565b6000613d79601c83614543565b9150613d8482614c2b565b602082019050919050565b6000613d9c602083614543565b9150613da782614c54565b602082019050919050565b6000613dbf603183614543565b9150613dca82614c7d565b604082019050919050565b6000613de2602c83614543565b9150613ded82614ccc565b604082019050919050565b6000613e05602083614543565b9150613e1082614d1b565b602082019050919050565b6000613e28602983614543565b9150613e3382614d44565b604082019050919050565b6000613e4b600a83614543565b9150613e5682614d93565b602082019050919050565b6000613e6e602f83614543565b9150613e7982614dbc565b604082019050919050565b6000613e91602183614543565b9150613e9c82614e0b565b604082019050919050565b6000613eb4603183614543565b9150613ebf82614e5a565b604082019050919050565b6000613ed7601083614543565b9150613ee282614ea9565b602082019050919050565b6000613efa603083614543565b9150613f0582614ed2565b604082019050919050565b6000613f1d600b83614543565b9150613f2882614f21565b602082019050919050565b6000613f40601f83614543565b9150613f4b82614f4a565b602082019050919050565b6000613f63600b83614543565b9150613f6e82614f73565b602082019050919050565b613f82816146de565b82525050565b6000613f948285613b74565b9150613fa08284613b74565b91508190509392505050565b6000602082019050613fc16000830184613ad5565b92915050565b6000608082019050613fdc6000830187613ad5565b613fe96020830186613ad5565b613ff66040830185613f79565b81810360608301526140088184613af3565b905095945050505050565b60006020820190506140286000830184613ae4565b92915050565b600060208201905081810360008301526140488184613b3b565b905092915050565b6000602082019050818103600083015261406981613ba5565b9050919050565b6000602082019050818103600083015261408981613bc8565b9050919050565b600060208201905081810360008301526140a981613beb565b9050919050565b600060208201905081810360008301526140c981613c0e565b9050919050565b600060208201905081810360008301526140e981613c31565b9050919050565b6000602082019050818103600083015261410981613c54565b9050919050565b6000602082019050818103600083015261412981613c77565b9050919050565b6000602082019050818103600083015261414981613c9a565b9050919050565b6000602082019050818103600083015261416981613cbd565b9050919050565b6000602082019050818103600083015261418981613ce0565b9050919050565b600060208201905081810360008301526141a981613d03565b9050919050565b600060208201905081810360008301526141c981613d26565b9050919050565b600060208201905081810360008301526141e981613d49565b9050919050565b6000602082019050818103600083015261420981613d6c565b9050919050565b6000602082019050818103600083015261422981613d8f565b9050919050565b6000602082019050818103600083015261424981613db2565b9050919050565b6000602082019050818103600083015261426981613dd5565b9050919050565b6000602082019050818103600083015261428981613df8565b9050919050565b600060208201905081810360008301526142a981613e1b565b9050919050565b600060208201905081810360008301526142c981613e3e565b9050919050565b600060208201905081810360008301526142e981613e61565b9050919050565b6000602082019050818103600083015261430981613e84565b9050919050565b6000602082019050818103600083015261432981613ea7565b9050919050565b6000602082019050818103600083015261434981613eca565b9050919050565b6000602082019050818103600083015261436981613eed565b9050919050565b6000602082019050818103600083015261438981613f10565b9050919050565b600060208201905081810360008301526143a981613f33565b9050919050565b600060208201905081810360008301526143c981613f56565b9050919050565b60006020820190506143e56000830184613f79565b92915050565b60006040820190506144006000830185613f79565b61440d6020830184613b2c565b9392505050565b60006040820190506144296000830185613f79565b6144366020830184613f79565b9392505050565b6000614447614458565b9050614453828261476e565b919050565b6000604051905090565b600067ffffffffffffffff82111561447d5761447c6148a6565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144a9576144a86148a6565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144d5576144d46148a6565b5b6144de826148d5565b9050602081019050919050565b600067ffffffffffffffff821115614506576145056148a6565b5b61450f826148d5565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061456a826146de565b9150614575836146de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145aa576145a9614819565b5b828201905092915050565b60006145c0826146de565b91506145cb836146de565b9250826145db576145da614848565b5b828204905092915050565b60006145f1826146de565b91506145fc836146de565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561463557614634614819565b5b828202905092915050565b600061464b826146de565b9150614656836146de565b92508282101561466957614668614819565b5b828203905092915050565b600061467f826146be565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006146f3826146de565b9050919050565b82818337600083830152505050565b60005b8381101561472757808201518184015260208101905061470c565b83811115614736576000848401525b50505050565b6000600282049050600182168061475457607f821691505b6020821081141561476857614767614877565b5b50919050565b614777826148d5565b810181811067ffffffffffffffff82111715614796576147956148a6565b5b80604052505050565b60006147aa826146de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147dd576147dc614819565b5b600182019050919050565b60006147f3826146de565b91506147fe836146de565b92508261480e5761480d614848565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f746f6f206d756368000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d696e742077726f6e67206e756d626572000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4f766572206d696e74206c696d697420666f7220616464726573732e00000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f496e636f7272656374207472616e73616374696f6e2076616c75652e00000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5761697420627564647900000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b7f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20636f60008201527f6c6c656374696f6e20616d6f756e742e00000000000000000000000000000000602082015250565b7f6e6f742073746172746564000000000000000000000000000000000000000000600082015250565b7f48616e67206f6e20626f79732c20796f756c6c2067657420696e20736f6f6e00600082015250565b7f76616c7565206572726f72000000000000000000000000000000000000000000600082015250565b614fa581614674565b8114614fb057600080fd5b50565b614fbc81614686565b8114614fc757600080fd5b50565b614fd381614692565b8114614fde57600080fd5b50565b614fea816146de565b8114614ff557600080fd5b5056fea264697066735822122050c3cb52042f65bfe263e2ec9f58bd94b1f7253da530003723db24e02929240164736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b5361707079205365616c73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000453415053000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b5361707079205365616c73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000453415053000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Sappy Seals
Arg [1] : symbol_ (string): SAPS
Arg [2] : baseURI_ (string):

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [4] : 5361707079205365616c73000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 5341505300000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

36744:5024:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38448:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20636:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21571:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23039:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22573:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38677:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38016:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37253:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41088:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23934:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36927:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40811:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24312:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37146:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38238:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38920:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21264:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36979:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37225:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20993:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36148:148;;;;;;;;;;;;;:::i;:::-;;37086:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40170:623;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37279:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35495:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38819:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21741:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38559:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41626:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39031:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37027:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23334:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38343:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24535:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41303:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39671:481;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32905:682;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39176:482;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36895:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23702:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36452:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38448:99;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38532:7:::1;38518:11;:21;;;;38448:99:::0;:::o;20636:292::-;20738:4;20777:25;20762:40;;;:11;:40;;;;:105;;;;20834:33;20819:48;;;:11;:48;;;;20762:105;:158;;;;20884:36;20908:11;20884:23;:36::i;:::-;20762:158;20755:165;;20636:292;;;:::o;21571:100::-;21625:13;21658:5;21651:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21571:100;:::o;23039:222::-;23115:7;23143:16;23151:7;23143;:16::i;:::-;23135:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23229:15;:24;23245:7;23229:24;;;;;;;;;;;;;;;;;;;;;23222:31;;23039:222;;;:::o;22573:399::-;22654:13;22670:23;22685:7;22670:14;:23::i;:::-;22654:39;;22718:5;22712:11;;:2;:11;;;;22704:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22799:5;22783:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22808:37;22825:5;22832:12;:10;:12::i;:::-;22808:16;:37::i;:::-;22783:62;22775:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22943:21;22952:2;22956:7;22943:8;:21::i;:::-;22573:399;;;:::o;38677:133::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38769:33:::1;38782:8;38792:9;38769:12;:33::i;:::-;38677:133:::0;;:::o;38016:97::-;38068:7;38095:10;;38088:17;;38016:97;:::o;37253:19::-;;;;;;;;;;;;;:::o;41088:203::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41194:4:::1;41175:9;:16;41185:5;41175:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;41237:13;41209:18;:25;41228:5;41209:25;;;;;;;;;;;;;;;:41;;;;41261:20;;:22;;;;;;;;;:::i;:::-;;;;;;41088:203:::0;;:::o;23934:306::-;24095:41;24114:12;:10;:12::i;:::-;24128:7;24095:18;:41::i;:::-;24087:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24204:28;24214:4;24220:2;24224:7;24204:9;:28::i;:::-;23934:306;;;:::o;36927:33::-;;;;:::o;40811:258::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40908:10:::1;;40903:1;40890:10;;:14;;;;:::i;:::-;:28;;40882:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40997:5;40987:33;;;41015:1;41004:10;;:12;;;;:::i;:::-;41018:1;40987:33;;;;;;;:::i;:::-;;;;;;;;41031:30;41037:5;41048:10;;:12;;;;;;;;;:::i;:::-;;;;;41044:1;:16;;;;:::i;:::-;41031:5;:30::i;:::-;40811:258:::0;:::o;24312:151::-;24416:39;24433:4;24439:2;24443:7;24416:39;;;;;;;;;;;;:16;:39::i;:::-;24312:151;;;:::o;37146:42::-;;;;:::o;38238:96::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38319:7:::1;38309;:17;;;;;;;;;;;;:::i;:::-;;38238:96:::0;:::o;38920:99::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39005:6:::1;38988:14;;:23;;;;;;;;;;;;;;;;;;38920:99:::0;:::o;21264:239::-;21336:7;21356:13;21372:7;:16;21380:7;21372:16;;;;;;;;;;;;;;;;;;;;;21356:32;;21424:1;21407:19;;:5;:19;;;;21399:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21490:5;21483:12;;;21264:239;;;:::o;36979:28::-;;;;:::o;37225:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20993:208::-;21065:7;21110:1;21093:19;;:5;:19;;;;21085:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21177:9;:16;21187:5;21177:16;;;;;;;;;;;;;;;;21170:23;;20993:208;;;:::o;36148:148::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36255:1:::1;36218:40;;36239:6;;;;;;;;;;;36218:40;;;;;;;;;;;;36286:1;36269:6;;:19;;;;;;;;;;;;;;;;;;36148:148::o:0;37086:39::-;;;;:::o;40170:623::-;37662:14;;37643:15;:33;;37635:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;37710:14;;;;;;;;;;;37702:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37804:4;37779:29;;:9;:21;37789:10;37779:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;37771:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40300:1:::1;40290:6;40257:18;:30;40276:10;40257:30;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:44;;40249:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40376:10;;40366:6;40353:10;;:19;;;;:::i;:::-;:33;;40345:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;40480:5;;40471:6;:14;;;;:::i;:::-;40458:9;:27;40450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40537:7;:5;:7::i;:::-;40529:25;;:36;40555:9;40529:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40612:6;40576:18;:32;40595:12;:10;:12::i;:::-;40576:32;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;40644:12;:10;:12::i;:::-;40634:45;;;40669:1;40658:10;;:12;;;;:::i;:::-;40672:6;40634:45;;;;;;;:::i;:::-;;;;;;;;40694:9;40690:96;40710:6;40707:1;:9;40690:96;;;40737:37;40743:12;:10;:12::i;:::-;40761:10;;:12;;;;;;;;;:::i;:::-;;;;;40757:1;:16;;;;:::i;:::-;40737:5;:37::i;:::-;40718:3;;;;;:::i;:::-;;;;40690:96;;;;40170:623:::0;:::o;37279:26::-;;;;;;;;;;;;;:::o;35495:87::-;35541:7;35568:6;;;;;;;;;;;35561:13;;35495:87;:::o;38819:89::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38894:6:::1;38884:7;;:16;;;;;;;;;;;;;;;;;;38819:89:::0;:::o;21741:104::-;21797:13;21830:7;21823:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21741:104;:::o;38559:109::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38653:7:::1;38636:14;:24;;;;38559:109:::0;:::o;41626:133::-;41699:4;41747;41727:24;;:9;:16;41737:5;41727:16;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;41720:31;;41626:133;;;:::o;39031:136::-;39107:7;39134:18;:25;39153:5;39134:25;;;;;;;;;;;;;;;;39127:32;;39031:136;;;:::o;37027:40::-;;;;:::o;23334:296::-;23449:12;:10;:12::i;:::-;23437:24;;:8;:24;;;;23429:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23550:8;23505:18;:32;23524:12;:10;:12::i;:::-;23505:32;;;;;;;;;;;;;;;:42;23538:8;23505:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23603:8;23574:48;;23589:12;:10;:12::i;:::-;23574:48;;;23613:8;23574:48;;;;;;:::i;:::-;;;;;;;;23334:296;;:::o;38343:93::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38419:9:::1;38411:5;:17;;;;38343:93:::0;:::o;24535:285::-;24667:41;24686:12;:10;:12::i;:::-;24700:7;24667:18;:41::i;:::-;24659:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24773:39;24787:4;24793:2;24797:7;24806:5;24773:13;:39::i;:::-;24535:285;;;;:::o;41303:273::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41416:9:::1;41412:157;41435:5;:12;41431:1;:16;41412:157;;;41490:4;41468:9;:19;41478:5;41484:1;41478:8;;;;;;;;;;;;;;;;;;;;;;41468:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;41540:14;41555:1;41540:17;;;;;;;;;;;;;;;;;;;;;;41509:18;:28;41528:5;41534:1;41528:8;;;;;;;;;;;;;;;;;;;;;;41509:28;;;;;;;;;;;;;;;:48;;;;41449:3;;;;;:::i;:::-;;;;41412:157;;;;41303:273:::0;;:::o;39671:481::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39758:1:::1;39750:6;:9;:31;;;;;39773:8;;39763:6;:18;;39750:31;39742:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39845:10;;39835:6;39822:10;;:19;;;;:::i;:::-;:33;;39814:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;39909:5;;39900:6;:14;;;;:::i;:::-;39887:9;:27;39879:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;39949:7;:5;:7::i;:::-;39941:25;;:36;39967:9;39941:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40003:12;:10;:12::i;:::-;39993:45;;;40028:1;40017:10;;:12;;;;:::i;:::-;40031:6;39993:45;;;;;;;:::i;:::-;;;;;;;;40053:9;40049:96;40069:6;40066:1;:9;40049:96;;;40096:37;40102:12;:10;:12::i;:::-;40120:10;;:12;;;;;;;;;:::i;:::-;;;;;40116:1;:16;;;;:::i;:::-;40096:5;:37::i;:::-;40077:3;;;;;:::i;:::-;;;;40049:96;;;;39671:481:::0;:::o;32905:682::-;32978:13;33012:16;33020:7;33012;:16::i;:::-;33004:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33096:23;33122:10;:19;33133:7;33122:19;;;;;;;;;;;33096:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33152:18;33173:10;:8;:10::i;:::-;33152:31;;33282:1;33266:4;33260:18;:23;33256:72;;;33307:9;33300:16;;;;;;33256:72;33458:1;33438:9;33432:23;:27;33428:108;;;33507:4;33513:9;33490:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33476:48;;;;;;33428:108;33556:23;33571:7;33556:14;:23::i;:::-;33549:30;;;;32905:682;;;;:::o;39176:482::-;37919:11;;37900:15;:30;;37892:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37964:7;;;;;;;;;;;37956:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;39264:1:::1;39256:6;:9;:31;;;;;39279:8;;39269:6;:18;;39256:31;39248:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39351:10;;39341:6;39328:10;;:19;;;;:::i;:::-;:33;;39320:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;39415:5;;39406:6;:14;;;;:::i;:::-;39393:9;:27;39385:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;39455:7;:5;:7::i;:::-;39447:25;;:36;39473:9;39447:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39509:12;:10;:12::i;:::-;39499:45;;;39534:1;39523:10;;:12;;;;:::i;:::-;39537:6;39499:45;;;;;;;:::i;:::-;;;;;;;;39559:9;39555:96;39575:6;39572:1;:9;39555:96;;;39602:37;39608:12;:10;:12::i;:::-;39626:10;;:12;;;;;;;;;:::i;:::-;;;;;39622:1;:16;;;;:::i;:::-;39602:5;:37::i;:::-;39583:3;;;;;:::i;:::-;;;;39555:96;;;;39176:482:::0;:::o;36895:25::-;;;;:::o;23702:164::-;23799:4;23823:18;:25;23842:5;23823:25;;;;;;;;;;;;;;;:35;23849:8;23823:35;;;;;;;;;;;;;;;;;;;;;;;;;23816:42;;23702:164;;;;:::o;36452:244::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36561:1:::1;36541:22;;:8;:22;;;;36533:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36651:8;36622:38;;36643:6;;;;;;;;;;;36622:38;;;;;;;;;;;;36680:8;36671:6;;:17;;;;;;;;;;;;;;;;;;36452:244:::0;:::o;15929:98::-;15982:7;16009:10;16002:17;;15929:98;:::o;19129:157::-;19214:4;19253:25;19238:40;;;:11;:40;;;;19231:47;;19129:157;;;:::o;26289:127::-;26354:4;26406:1;26378:30;;:7;:16;26386:7;26378:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26371:37;;26289:127;;;:::o;30184:174::-;30286:2;30259:15;:24;30275:7;30259:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30342:7;30338:2;30304:46;;30313:23;30328:7;30313:14;:23::i;:::-;30304:46;;;;;;;;;;;;30184:174;;:::o;33744:217::-;33844:16;33852:7;33844;:16::i;:::-;33836:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;33944:9;33922:10;:19;33933:7;33922:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;33744:217;;:::o;26584:348::-;26677:4;26702:16;26710:7;26702;:16::i;:::-;26694:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26778:13;26794:23;26809:7;26794:14;:23::i;:::-;26778:39;;26847:5;26836:16;;:7;:16;;;:51;;;;26880:7;26856:31;;:20;26868:7;26856:11;:20::i;:::-;:31;;;26836:51;:87;;;;26891:32;26908:5;26915:7;26891:16;:32::i;:::-;26836:87;26828:96;;;26584:348;;;;:::o;29517:548::-;29642:4;29615:31;;:23;29630:7;29615:14;:23::i;:::-;:31;;;29607:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29725:1;29711:16;;:2;:16;;;;29703:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29782:39;29803:4;29809:2;29813:7;29782:20;:39::i;:::-;29887:29;29904:1;29908:7;29887:8;:29::i;:::-;29949:1;29930:9;:15;29940:4;29930:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29978:1;29961:9;:13;29971:2;29961:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30009:2;29990:7;:16;29998:7;29990:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30049:7;30045:2;30030:27;;30039:4;30030:27;;;;;;;;;;;;29517:548;;;:::o;28200:385::-;28294:1;28280:16;;:2;:16;;;;28272:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28353:16;28361:7;28353;:16::i;:::-;28352:17;28344:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28416:45;28445:1;28449:2;28453:7;28416:20;:45::i;:::-;28492:1;28475:9;:13;28485:2;28475:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28523:2;28504:7;:16;28512:7;28504:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28569:7;28565:2;28544:33;;28561:1;28544:33;;;;;;;;;;;;28200:385;;:::o;25703:272::-;25817:28;25827:4;25833:2;25837:7;25817:9;:28::i;:::-;25864:48;25887:4;25893:2;25897:7;25906:5;25864:22;:48::i;:::-;25856:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25703:272;;;;:::o;38122:107::-;38182:13;38214:7;38207:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38122:107;:::o;21917:361::-;21990:13;22024:16;22032:7;22024;:16::i;:::-;22016:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22106:21;22130:10;:8;:10::i;:::-;22106:34;;22182:1;22164:7;22158:21;:25;:112;;;;;;;;;;;;;;;;;22223:7;22232:18;:7;:16;:18::i;:::-;22206:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22158:112;22151:119;;;21917:361;;;:::o;32381:93::-;;;;:::o;30924:843::-;31045:4;31071:15;:2;:13;;;:15::i;:::-;31067:693;;;31123:2;31107:36;;;31144:12;:10;:12::i;:::-;31158:4;31164:7;31173:5;31107:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31103:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31370:1;31353:6;:13;:18;31349:341;;;31396:60;;;;;;;;;;:::i;:::-;;;;;;;;31349:341;31640:6;31634:13;31625:6;31621:2;31617:15;31610:38;31103:602;31240:45;;;31230:55;;;:6;:55;;;;31223:62;;;;;31067:693;31744:4;31737:11;;30924:843;;;;;;;:::o;16579:724::-;16635:13;16866:1;16857:5;:10;16853:53;;;16884:10;;;;;;;;;;;;;;;;;;;;;16853:53;16916:12;16931:5;16916:20;;16947:14;16972:78;16987:1;16979:4;:9;16972:78;;17005:8;;;;;:::i;:::-;;;;17036:2;17028:10;;;;;:::i;:::-;;;16972:78;;;17060:19;17092:6;17082:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17060:39;;17110:154;17126:1;17117:5;:10;17110:154;;17154:1;17144:11;;;;;:::i;:::-;;;17221:2;17213:5;:10;;;;:::i;:::-;17200:2;:24;;;;:::i;:::-;17187:39;;17170:6;17177;17170:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17250:2;17241:11;;;;;:::i;:::-;;;17110:154;;;17288:6;17274:21;;;;;16579:724;;;;:::o;8037:423::-;8097:4;8306:12;8417:7;8405:20;8397:28;;8451:1;8444:4;:8;8437:15;;;8037:423;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2225:303::-;2296:5;2345:3;2338:4;2330:6;2326:17;2322:27;2312:2;;2363:1;2360;2353:12;2312:2;2403:6;2390:20;2428:94;2518:3;2510:6;2503:4;2495:6;2491:17;2428:94;:::i;:::-;2419:103;;2302:226;;;;;:::o;2551:303::-;2622:5;2671:3;2664:4;2656:6;2652:17;2648:27;2638:2;;2689:1;2686;2679:12;2638:2;2729:6;2716:20;2754:94;2844:3;2836:6;2829:4;2821:6;2817:17;2754:94;:::i;:::-;2745:103;;2628:226;;;;;:::o;2860:133::-;2903:5;2941:6;2928:20;2919:29;;2957:30;2981:5;2957:30;:::i;:::-;2909:84;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;3050:86;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3204:79;;;;:::o;3302:271::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:2;;3424:1;3421;3414:12;3373:2;3464:6;3451:20;3489:78;3563:3;3555:6;3548:4;3540:6;3536:17;3489:78;:::i;:::-;3480:87;;3363:210;;;;;:::o;3593:273::-;3649:5;3698:3;3691:4;3683:6;3679:17;3675:27;3665:2;;3716:1;3713;3706:12;3665:2;3756:6;3743:20;3781:79;3856:3;3848:6;3841:4;3833:6;3829:17;3781:79;:::i;:::-;3772:88;;3655:211;;;;;:::o;3872:139::-;3918:5;3956:6;3943:20;3934:29;;3972:33;3999:5;3972:33;:::i;:::-;3924:87;;;;:::o;4017:262::-;4076:6;4125:2;4113:9;4104:7;4100:23;4096:32;4093:2;;;4141:1;4138;4131:12;4093:2;4184:1;4209:53;4254:7;4245:6;4234:9;4230:22;4209:53;:::i;:::-;4199:63;;4155:117;4083:196;;;;:::o;4285:407::-;4353:6;4361;4410:2;4398:9;4389:7;4385:23;4381:32;4378:2;;;4426:1;4423;4416:12;4378:2;4469:1;4494:53;4539:7;4530:6;4519:9;4515:22;4494:53;:::i;:::-;4484:63;;4440:117;4596:2;4622:53;4667:7;4658:6;4647:9;4643:22;4622:53;:::i;:::-;4612:63;;4567:118;4368:324;;;;;:::o;4698:552::-;4775:6;4783;4791;4840:2;4828:9;4819:7;4815:23;4811:32;4808:2;;;4856:1;4853;4846:12;4808:2;4899:1;4924:53;4969:7;4960:6;4949:9;4945:22;4924:53;:::i;:::-;4914:63;;4870:117;5026:2;5052:53;5097:7;5088:6;5077:9;5073:22;5052:53;:::i;:::-;5042:63;;4997:118;5154:2;5180:53;5225:7;5216:6;5205:9;5201:22;5180:53;:::i;:::-;5170:63;;5125:118;4798:452;;;;;:::o;5256:809::-;5351:6;5359;5367;5375;5424:3;5412:9;5403:7;5399:23;5395:33;5392:2;;;5441:1;5438;5431:12;5392:2;5484:1;5509:53;5554:7;5545:6;5534:9;5530:22;5509:53;:::i;:::-;5499:63;;5455:117;5611:2;5637:53;5682:7;5673:6;5662:9;5658:22;5637:53;:::i;:::-;5627:63;;5582:118;5739:2;5765:53;5810:7;5801:6;5790:9;5786:22;5765:53;:::i;:::-;5755:63;;5710:118;5895:2;5884:9;5880:18;5867:32;5926:18;5918:6;5915:30;5912:2;;;5958:1;5955;5948:12;5912:2;5986:62;6040:7;6031:6;6020:9;6016:22;5986:62;:::i;:::-;5976:72;;5838:220;5382:683;;;;;;;:::o;6071:401::-;6136:6;6144;6193:2;6181:9;6172:7;6168:23;6164:32;6161:2;;;6209:1;6206;6199:12;6161:2;6252:1;6277:53;6322:7;6313:6;6302:9;6298:22;6277:53;:::i;:::-;6267:63;;6223:117;6379:2;6405:50;6447:7;6438:6;6427:9;6423:22;6405:50;:::i;:::-;6395:60;;6350:115;6151:321;;;;;:::o;6478:407::-;6546:6;6554;6603:2;6591:9;6582:7;6578:23;6574:32;6571:2;;;6619:1;6616;6609:12;6571:2;6662:1;6687:53;6732:7;6723:6;6712:9;6708:22;6687:53;:::i;:::-;6677:63;;6633:117;6789:2;6815:53;6860:7;6851:6;6840:9;6836:22;6815:53;:::i;:::-;6805:63;;6760:118;6561:324;;;;;:::o;6891:693::-;7009:6;7017;7066:2;7054:9;7045:7;7041:23;7037:32;7034:2;;;7082:1;7079;7072:12;7034:2;7153:1;7142:9;7138:17;7125:31;7183:18;7175:6;7172:30;7169:2;;;7215:1;7212;7205:12;7169:2;7243:78;7313:7;7304:6;7293:9;7289:22;7243:78;:::i;:::-;7233:88;;7096:235;7398:2;7387:9;7383:18;7370:32;7429:18;7421:6;7418:30;7415:2;;;7461:1;7458;7451:12;7415:2;7489:78;7559:7;7550:6;7539:9;7535:22;7489:78;:::i;:::-;7479:88;;7341:236;7024:560;;;;;:::o;7590:256::-;7646:6;7695:2;7683:9;7674:7;7670:23;7666:32;7663:2;;;7711:1;7708;7701:12;7663:2;7754:1;7779:50;7821:7;7812:6;7801:9;7797:22;7779:50;:::i;:::-;7769:60;;7725:114;7653:193;;;;:::o;7852:260::-;7910:6;7959:2;7947:9;7938:7;7934:23;7930:32;7927:2;;;7975:1;7972;7965:12;7927:2;8018:1;8043:52;8087:7;8078:6;8067:9;8063:22;8043:52;:::i;:::-;8033:62;;7989:116;7917:195;;;;:::o;8118:282::-;8187:6;8236:2;8224:9;8215:7;8211:23;8207:32;8204:2;;;8252:1;8249;8242:12;8204:2;8295:1;8320:63;8375:7;8366:6;8355:9;8351:22;8320:63;:::i;:::-;8310:73;;8266:127;8194:206;;;;:::o;8406:375::-;8475:6;8524:2;8512:9;8503:7;8499:23;8495:32;8492:2;;;8540:1;8537;8530:12;8492:2;8611:1;8600:9;8596:17;8583:31;8641:18;8633:6;8630:30;8627:2;;;8673:1;8670;8663:12;8627:2;8701:63;8756:7;8747:6;8736:9;8732:22;8701:63;:::i;:::-;8691:73;;8554:220;8482:299;;;;:::o;8787:262::-;8846:6;8895:2;8883:9;8874:7;8870:23;8866:32;8863:2;;;8911:1;8908;8901:12;8863:2;8954:1;8979:53;9024:7;9015:6;9004:9;9000:22;8979:53;:::i;:::-;8969:63;;8925:117;8853:196;;;;:::o;9055:520::-;9133:6;9141;9190:2;9178:9;9169:7;9165:23;9161:32;9158:2;;;9206:1;9203;9196:12;9158:2;9249:1;9274:53;9319:7;9310:6;9299:9;9295:22;9274:53;:::i;:::-;9264:63;;9220:117;9404:2;9393:9;9389:18;9376:32;9435:18;9427:6;9424:30;9421:2;;;9467:1;9464;9457:12;9421:2;9495:63;9550:7;9541:6;9530:9;9526:22;9495:63;:::i;:::-;9485:73;;9347:221;9148:427;;;;;:::o;9581:118::-;9668:24;9686:5;9668:24;:::i;:::-;9663:3;9656:37;9646:53;;:::o;9705:109::-;9786:21;9801:5;9786:21;:::i;:::-;9781:3;9774:34;9764:50;;:::o;9820:360::-;9906:3;9934:38;9966:5;9934:38;:::i;:::-;9988:70;10051:6;10046:3;9988:70;:::i;:::-;9981:77;;10067:52;10112:6;10107:3;10100:4;10093:5;10089:16;10067:52;:::i;:::-;10144:29;10166:6;10144:29;:::i;:::-;10139:3;10135:39;10128:46;;9910:270;;;;;:::o;10186:147::-;10281:45;10320:5;10281:45;:::i;:::-;10276:3;10269:58;10259:74;;:::o;10339:364::-;10427:3;10455:39;10488:5;10455:39;:::i;:::-;10510:71;10574:6;10569:3;10510:71;:::i;:::-;10503:78;;10590:52;10635:6;10630:3;10623:4;10616:5;10612:16;10590:52;:::i;:::-;10667:29;10689:6;10667:29;:::i;:::-;10662:3;10658:39;10651:46;;10431:272;;;;;:::o;10709:377::-;10815:3;10843:39;10876:5;10843:39;:::i;:::-;10898:89;10980:6;10975:3;10898:89;:::i;:::-;10891:96;;10996:52;11041:6;11036:3;11029:4;11022:5;11018:16;10996:52;:::i;:::-;11073:6;11068:3;11064:16;11057:23;;10819:267;;;;;:::o;11092:365::-;11234:3;11255:66;11319:1;11314:3;11255:66;:::i;:::-;11248:73;;11330:93;11419:3;11330:93;:::i;:::-;11448:2;11443:3;11439:12;11432:19;;11238:219;;;:::o;11463:366::-;11605:3;11626:67;11690:2;11685:3;11626:67;:::i;:::-;11619:74;;11702:93;11791:3;11702:93;:::i;:::-;11820:2;11815:3;11811:12;11804:19;;11609:220;;;:::o;11835:366::-;11977:3;11998:67;12062:2;12057:3;11998:67;:::i;:::-;11991:74;;12074:93;12163:3;12074:93;:::i;:::-;12192:2;12187:3;12183:12;12176:19;;11981:220;;;:::o;12207:366::-;12349:3;12370:67;12434:2;12429:3;12370:67;:::i;:::-;12363:74;;12446:93;12535:3;12446:93;:::i;:::-;12564:2;12559:3;12555:12;12548:19;;12353:220;;;:::o;12579:366::-;12721:3;12742:67;12806:2;12801:3;12742:67;:::i;:::-;12735:74;;12818:93;12907:3;12818:93;:::i;:::-;12936:2;12931:3;12927:12;12920:19;;12725:220;;;:::o;12951:366::-;13093:3;13114:67;13178:2;13173:3;13114:67;:::i;:::-;13107:74;;13190:93;13279:3;13190:93;:::i;:::-;13308:2;13303:3;13299:12;13292:19;;13097:220;;;:::o;13323:366::-;13465:3;13486:67;13550:2;13545:3;13486:67;:::i;:::-;13479:74;;13562:93;13651:3;13562:93;:::i;:::-;13680:2;13675:3;13671:12;13664:19;;13469:220;;;:::o;13695:366::-;13837:3;13858:67;13922:2;13917:3;13858:67;:::i;:::-;13851:74;;13934:93;14023:3;13934:93;:::i;:::-;14052:2;14047:3;14043:12;14036:19;;13841:220;;;:::o;14067:366::-;14209:3;14230:67;14294:2;14289:3;14230:67;:::i;:::-;14223:74;;14306:93;14395:3;14306:93;:::i;:::-;14424:2;14419:3;14415:12;14408:19;;14213:220;;;:::o;14439:366::-;14581:3;14602:67;14666:2;14661:3;14602:67;:::i;:::-;14595:74;;14678:93;14767:3;14678:93;:::i;:::-;14796:2;14791:3;14787:12;14780:19;;14585:220;;;:::o;14811:366::-;14953:3;14974:67;15038:2;15033:3;14974:67;:::i;:::-;14967:74;;15050:93;15139:3;15050:93;:::i;:::-;15168:2;15163:3;15159:12;15152:19;;14957:220;;;:::o;15183:366::-;15325:3;15346:67;15410:2;15405:3;15346:67;:::i;:::-;15339:74;;15422:93;15511:3;15422:93;:::i;:::-;15540:2;15535:3;15531:12;15524:19;;15329:220;;;:::o;15555:366::-;15697:3;15718:67;15782:2;15777:3;15718:67;:::i;:::-;15711:74;;15794:93;15883:3;15794:93;:::i;:::-;15912:2;15907:3;15903:12;15896:19;;15701:220;;;:::o;15927:366::-;16069:3;16090:67;16154:2;16149:3;16090:67;:::i;:::-;16083:74;;16166:93;16255:3;16166:93;:::i;:::-;16284:2;16279:3;16275:12;16268:19;;16073:220;;;:::o;16299:366::-;16441:3;16462:67;16526:2;16521:3;16462:67;:::i;:::-;16455:74;;16538:93;16627:3;16538:93;:::i;:::-;16656:2;16651:3;16647:12;16640:19;;16445:220;;;:::o;16671:366::-;16813:3;16834:67;16898:2;16893:3;16834:67;:::i;:::-;16827:74;;16910:93;16999:3;16910:93;:::i;:::-;17028:2;17023:3;17019:12;17012:19;;16817:220;;;:::o;17043:366::-;17185:3;17206:67;17270:2;17265:3;17206:67;:::i;:::-;17199:74;;17282:93;17371:3;17282:93;:::i;:::-;17400:2;17395:3;17391:12;17384:19;;17189:220;;;:::o;17415:366::-;17557:3;17578:67;17642:2;17637:3;17578:67;:::i;:::-;17571:74;;17654:93;17743:3;17654:93;:::i;:::-;17772:2;17767:3;17763:12;17756:19;;17561:220;;;:::o;17787:366::-;17929:3;17950:67;18014:2;18009:3;17950:67;:::i;:::-;17943:74;;18026:93;18115:3;18026:93;:::i;:::-;18144:2;18139:3;18135:12;18128:19;;17933:220;;;:::o;18159:366::-;18301:3;18322:67;18386:2;18381:3;18322:67;:::i;:::-;18315:74;;18398:93;18487:3;18398:93;:::i;:::-;18516:2;18511:3;18507:12;18500:19;;18305:220;;;:::o;18531:366::-;18673:3;18694:67;18758:2;18753:3;18694:67;:::i;:::-;18687:74;;18770:93;18859:3;18770:93;:::i;:::-;18888:2;18883:3;18879:12;18872:19;;18677:220;;;:::o;18903:366::-;19045:3;19066:67;19130:2;19125:3;19066:67;:::i;:::-;19059:74;;19142:93;19231:3;19142:93;:::i;:::-;19260:2;19255:3;19251:12;19244:19;;19049:220;;;:::o;19275:366::-;19417:3;19438:67;19502:2;19497:3;19438:67;:::i;:::-;19431:74;;19514:93;19603:3;19514:93;:::i;:::-;19632:2;19627:3;19623:12;19616:19;;19421:220;;;:::o;19647:366::-;19789:3;19810:67;19874:2;19869:3;19810:67;:::i;:::-;19803:74;;19886:93;19975:3;19886:93;:::i;:::-;20004:2;19999:3;19995:12;19988:19;;19793:220;;;:::o;20019:366::-;20161:3;20182:67;20246:2;20241:3;20182:67;:::i;:::-;20175:74;;20258:93;20347:3;20258:93;:::i;:::-;20376:2;20371:3;20367:12;20360:19;;20165:220;;;:::o;20391:366::-;20533:3;20554:67;20618:2;20613:3;20554:67;:::i;:::-;20547:74;;20630:93;20719:3;20630:93;:::i;:::-;20748:2;20743:3;20739:12;20732:19;;20537:220;;;:::o;20763:366::-;20905:3;20926:67;20990:2;20985:3;20926:67;:::i;:::-;20919:74;;21002:93;21091:3;21002:93;:::i;:::-;21120:2;21115:3;21111:12;21104:19;;20909:220;;;:::o;21135:366::-;21277:3;21298:67;21362:2;21357:3;21298:67;:::i;:::-;21291:74;;21374:93;21463:3;21374:93;:::i;:::-;21492:2;21487:3;21483:12;21476:19;;21281:220;;;:::o;21507:118::-;21594:24;21612:5;21594:24;:::i;:::-;21589:3;21582:37;21572:53;;:::o;21631:435::-;21811:3;21833:95;21924:3;21915:6;21833:95;:::i;:::-;21826:102;;21945:95;22036:3;22027:6;21945:95;:::i;:::-;21938:102;;22057:3;22050:10;;21815:251;;;;;:::o;22072:222::-;22165:4;22203:2;22192:9;22188:18;22180:26;;22216:71;22284:1;22273:9;22269:17;22260:6;22216:71;:::i;:::-;22170:124;;;;:::o;22300:640::-;22495:4;22533:3;22522:9;22518:19;22510:27;;22547:71;22615:1;22604:9;22600:17;22591:6;22547:71;:::i;:::-;22628:72;22696:2;22685:9;22681:18;22672:6;22628:72;:::i;:::-;22710;22778:2;22767:9;22763:18;22754:6;22710:72;:::i;:::-;22829:9;22823:4;22819:20;22814:2;22803:9;22799:18;22792:48;22857:76;22928:4;22919:6;22857:76;:::i;:::-;22849:84;;22500:440;;;;;;;:::o;22946:210::-;23033:4;23071:2;23060:9;23056:18;23048:26;;23084:65;23146:1;23135:9;23131:17;23122:6;23084:65;:::i;:::-;23038:118;;;;:::o;23162:313::-;23275:4;23313:2;23302:9;23298:18;23290:26;;23362:9;23356:4;23352:20;23348:1;23337:9;23333:17;23326:47;23390:78;23463:4;23454:6;23390:78;:::i;:::-;23382:86;;23280:195;;;;:::o;23481:419::-;23647:4;23685:2;23674:9;23670:18;23662:26;;23734:9;23728:4;23724:20;23720:1;23709:9;23705:17;23698:47;23762:131;23888:4;23762:131;:::i;:::-;23754:139;;23652:248;;;:::o;23906:419::-;24072:4;24110:2;24099:9;24095:18;24087:26;;24159:9;24153:4;24149:20;24145:1;24134:9;24130:17;24123:47;24187:131;24313:4;24187:131;:::i;:::-;24179:139;;24077:248;;;:::o;24331:419::-;24497:4;24535:2;24524:9;24520:18;24512:26;;24584:9;24578:4;24574:20;24570:1;24559:9;24555:17;24548:47;24612:131;24738:4;24612:131;:::i;:::-;24604:139;;24502:248;;;:::o;24756:419::-;24922:4;24960:2;24949:9;24945:18;24937:26;;25009:9;25003:4;24999:20;24995:1;24984:9;24980:17;24973:47;25037:131;25163:4;25037:131;:::i;:::-;25029:139;;24927:248;;;:::o;25181:419::-;25347:4;25385:2;25374:9;25370:18;25362:26;;25434:9;25428:4;25424:20;25420:1;25409:9;25405:17;25398:47;25462:131;25588:4;25462:131;:::i;:::-;25454:139;;25352:248;;;:::o;25606:419::-;25772:4;25810:2;25799:9;25795:18;25787:26;;25859:9;25853:4;25849:20;25845:1;25834:9;25830:17;25823:47;25887:131;26013:4;25887:131;:::i;:::-;25879:139;;25777:248;;;:::o;26031:419::-;26197:4;26235:2;26224:9;26220:18;26212:26;;26284:9;26278:4;26274:20;26270:1;26259:9;26255:17;26248:47;26312:131;26438:4;26312:131;:::i;:::-;26304:139;;26202:248;;;:::o;26456:419::-;26622:4;26660:2;26649:9;26645:18;26637:26;;26709:9;26703:4;26699:20;26695:1;26684:9;26680:17;26673:47;26737:131;26863:4;26737:131;:::i;:::-;26729:139;;26627:248;;;:::o;26881:419::-;27047:4;27085:2;27074:9;27070:18;27062:26;;27134:9;27128:4;27124:20;27120:1;27109:9;27105:17;27098:47;27162:131;27288:4;27162:131;:::i;:::-;27154:139;;27052:248;;;:::o;27306:419::-;27472:4;27510:2;27499:9;27495:18;27487:26;;27559:9;27553:4;27549:20;27545:1;27534:9;27530:17;27523:47;27587:131;27713:4;27587:131;:::i;:::-;27579:139;;27477:248;;;:::o;27731:419::-;27897:4;27935:2;27924:9;27920:18;27912:26;;27984:9;27978:4;27974:20;27970:1;27959:9;27955:17;27948:47;28012:131;28138:4;28012:131;:::i;:::-;28004:139;;27902:248;;;:::o;28156:419::-;28322:4;28360:2;28349:9;28345:18;28337:26;;28409:9;28403:4;28399:20;28395:1;28384:9;28380:17;28373:47;28437:131;28563:4;28437:131;:::i;:::-;28429:139;;28327:248;;;:::o;28581:419::-;28747:4;28785:2;28774:9;28770:18;28762:26;;28834:9;28828:4;28824:20;28820:1;28809:9;28805:17;28798:47;28862:131;28988:4;28862:131;:::i;:::-;28854:139;;28752:248;;;:::o;29006:419::-;29172:4;29210:2;29199:9;29195:18;29187:26;;29259:9;29253:4;29249:20;29245:1;29234:9;29230:17;29223:47;29287:131;29413:4;29287:131;:::i;:::-;29279:139;;29177:248;;;:::o;29431:419::-;29597:4;29635:2;29624:9;29620:18;29612:26;;29684:9;29678:4;29674:20;29670:1;29659:9;29655:17;29648:47;29712:131;29838:4;29712:131;:::i;:::-;29704:139;;29602:248;;;:::o;29856:419::-;30022:4;30060:2;30049:9;30045:18;30037:26;;30109:9;30103:4;30099:20;30095:1;30084:9;30080:17;30073:47;30137:131;30263:4;30137:131;:::i;:::-;30129:139;;30027:248;;;:::o;30281:419::-;30447:4;30485:2;30474:9;30470:18;30462:26;;30534:9;30528:4;30524:20;30520:1;30509:9;30505:17;30498:47;30562:131;30688:4;30562:131;:::i;:::-;30554:139;;30452:248;;;:::o;30706:419::-;30872:4;30910:2;30899:9;30895:18;30887:26;;30959:9;30953:4;30949:20;30945:1;30934:9;30930:17;30923:47;30987:131;31113:4;30987:131;:::i;:::-;30979:139;;30877:248;;;:::o;31131:419::-;31297:4;31335:2;31324:9;31320:18;31312:26;;31384:9;31378:4;31374:20;31370:1;31359:9;31355:17;31348:47;31412:131;31538:4;31412:131;:::i;:::-;31404:139;;31302:248;;;:::o;31556:419::-;31722:4;31760:2;31749:9;31745:18;31737:26;;31809:9;31803:4;31799:20;31795:1;31784:9;31780:17;31773:47;31837:131;31963:4;31837:131;:::i;:::-;31829:139;;31727:248;;;:::o;31981:419::-;32147:4;32185:2;32174:9;32170:18;32162:26;;32234:9;32228:4;32224:20;32220:1;32209:9;32205:17;32198:47;32262:131;32388:4;32262:131;:::i;:::-;32254:139;;32152:248;;;:::o;32406:419::-;32572:4;32610:2;32599:9;32595:18;32587:26;;32659:9;32653:4;32649:20;32645:1;32634:9;32630:17;32623:47;32687:131;32813:4;32687:131;:::i;:::-;32679:139;;32577:248;;;:::o;32831:419::-;32997:4;33035:2;33024:9;33020:18;33012:26;;33084:9;33078:4;33074:20;33070:1;33059:9;33055:17;33048:47;33112:131;33238:4;33112:131;:::i;:::-;33104:139;;33002:248;;;:::o;33256:419::-;33422:4;33460:2;33449:9;33445:18;33437:26;;33509:9;33503:4;33499:20;33495:1;33484:9;33480:17;33473:47;33537:131;33663:4;33537:131;:::i;:::-;33529:139;;33427:248;;;:::o;33681:419::-;33847:4;33885:2;33874:9;33870:18;33862:26;;33934:9;33928:4;33924:20;33920:1;33909:9;33905:17;33898:47;33962:131;34088:4;33962:131;:::i;:::-;33954:139;;33852:248;;;:::o;34106:419::-;34272:4;34310:2;34299:9;34295:18;34287:26;;34359:9;34353:4;34349:20;34345:1;34334:9;34330:17;34323:47;34387:131;34513:4;34387:131;:::i;:::-;34379:139;;34277:248;;;:::o;34531:419::-;34697:4;34735:2;34724:9;34720:18;34712:26;;34784:9;34778:4;34774:20;34770:1;34759:9;34755:17;34748:47;34812:131;34938:4;34812:131;:::i;:::-;34804:139;;34702:248;;;:::o;34956:419::-;35122:4;35160:2;35149:9;35145:18;35137:26;;35209:9;35203:4;35199:20;35195:1;35184:9;35180:17;35173:47;35237:131;35363:4;35237:131;:::i;:::-;35229:139;;35127:248;;;:::o;35381:222::-;35474:4;35512:2;35501:9;35497:18;35489:26;;35525:71;35593:1;35582:9;35578:17;35569:6;35525:71;:::i;:::-;35479:124;;;;:::o;35609:348::-;35738:4;35776:2;35765:9;35761:18;35753:26;;35789:71;35857:1;35846:9;35842:17;35833:6;35789:71;:::i;:::-;35870:80;35946:2;35935:9;35931:18;35922:6;35870:80;:::i;:::-;35743:214;;;;;:::o;35963:332::-;36084:4;36122:2;36111:9;36107:18;36099:26;;36135:71;36203:1;36192:9;36188:17;36179:6;36135:71;:::i;:::-;36216:72;36284:2;36273:9;36269:18;36260:6;36216:72;:::i;:::-;36089:206;;;;;:::o;36301:129::-;36335:6;36362:20;;:::i;:::-;36352:30;;36391:33;36419:4;36411:6;36391:33;:::i;:::-;36342:88;;;:::o;36436:75::-;36469:6;36502:2;36496:9;36486:19;;36476:35;:::o;36517:311::-;36594:4;36684:18;36676:6;36673:30;36670:2;;;36706:18;;:::i;:::-;36670:2;36756:4;36748:6;36744:17;36736:25;;36816:4;36810;36806:15;36798:23;;36599:229;;;:::o;36834:311::-;36911:4;37001:18;36993:6;36990:30;36987:2;;;37023:18;;:::i;:::-;36987:2;37073:4;37065:6;37061:17;37053:25;;37133:4;37127;37123:15;37115:23;;36916:229;;;:::o;37151:307::-;37212:4;37302:18;37294:6;37291:30;37288:2;;;37324:18;;:::i;:::-;37288:2;37362:29;37384:6;37362:29;:::i;:::-;37354:37;;37446:4;37440;37436:15;37428:23;;37217:241;;;:::o;37464:308::-;37526:4;37616:18;37608:6;37605:30;37602:2;;;37638:18;;:::i;:::-;37602:2;37676:29;37698:6;37676:29;:::i;:::-;37668:37;;37760:4;37754;37750:15;37742:23;;37531:241;;;:::o;37778:98::-;37829:6;37863:5;37857:12;37847:22;;37836:40;;;:::o;37882:99::-;37934:6;37968:5;37962:12;37952:22;;37941:40;;;:::o;37987:168::-;38070:11;38104:6;38099:3;38092:19;38144:4;38139:3;38135:14;38120:29;;38082:73;;;;:::o;38161:169::-;38245:11;38279:6;38274:3;38267:19;38319:4;38314:3;38310:14;38295:29;;38257:73;;;;:::o;38336:148::-;38438:11;38475:3;38460:18;;38450:34;;;;:::o;38490:305::-;38530:3;38549:20;38567:1;38549:20;:::i;:::-;38544:25;;38583:20;38601:1;38583:20;:::i;:::-;38578:25;;38737:1;38669:66;38665:74;38662:1;38659:81;38656:2;;;38743:18;;:::i;:::-;38656:2;38787:1;38784;38780:9;38773:16;;38534:261;;;;:::o;38801:185::-;38841:1;38858:20;38876:1;38858:20;:::i;:::-;38853:25;;38892:20;38910:1;38892:20;:::i;:::-;38887:25;;38931:1;38921:2;;38936:18;;:::i;:::-;38921:2;38978:1;38975;38971:9;38966:14;;38843:143;;;;:::o;38992:348::-;39032:7;39055:20;39073:1;39055:20;:::i;:::-;39050:25;;39089:20;39107:1;39089:20;:::i;:::-;39084:25;;39277:1;39209:66;39205:74;39202:1;39199:81;39194:1;39187:9;39180:17;39176:105;39173:2;;;39284:18;;:::i;:::-;39173:2;39332:1;39329;39325:9;39314:20;;39040:300;;;;:::o;39346:191::-;39386:4;39406:20;39424:1;39406:20;:::i;:::-;39401:25;;39440:20;39458:1;39440:20;:::i;:::-;39435:25;;39479:1;39476;39473:8;39470:2;;;39484:18;;:::i;:::-;39470:2;39529:1;39526;39522:9;39514:17;;39391:146;;;;:::o;39543:96::-;39580:7;39609:24;39627:5;39609:24;:::i;:::-;39598:35;;39588:51;;;:::o;39645:90::-;39679:7;39722:5;39715:13;39708:21;39697:32;;39687:48;;;:::o;39741:149::-;39777:7;39817:66;39810:5;39806:78;39795:89;;39785:105;;;:::o;39896:126::-;39933:7;39973:42;39966:5;39962:54;39951:65;;39941:81;;;:::o;40028:77::-;40065:7;40094:5;40083:16;;40073:32;;;:::o;40111:121::-;40169:9;40202:24;40220:5;40202:24;:::i;:::-;40189:37;;40179:53;;;:::o;40238:154::-;40322:6;40317:3;40312;40299:30;40384:1;40375:6;40370:3;40366:16;40359:27;40289:103;;;:::o;40398:307::-;40466:1;40476:113;40490:6;40487:1;40484:13;40476:113;;;40575:1;40570:3;40566:11;40560:18;40556:1;40551:3;40547:11;40540:39;40512:2;40509:1;40505:10;40500:15;;40476:113;;;40607:6;40604:1;40601:13;40598:2;;;40687:1;40678:6;40673:3;40669:16;40662:27;40598:2;40447:258;;;;:::o;40711:320::-;40755:6;40792:1;40786:4;40782:12;40772:22;;40839:1;40833:4;40829:12;40860:18;40850:2;;40916:4;40908:6;40904:17;40894:27;;40850:2;40978;40970:6;40967:14;40947:18;40944:38;40941:2;;;40997:18;;:::i;:::-;40941:2;40762:269;;;;:::o;41037:281::-;41120:27;41142:4;41120:27;:::i;:::-;41112:6;41108:40;41250:6;41238:10;41235:22;41214:18;41202:10;41199:34;41196:62;41193:2;;;41261:18;;:::i;:::-;41193:2;41301:10;41297:2;41290:22;41080:238;;;:::o;41324:233::-;41363:3;41386:24;41404:5;41386:24;:::i;:::-;41377:33;;41432:66;41425:5;41422:77;41419:2;;;41502:18;;:::i;:::-;41419:2;41549:1;41542:5;41538:13;41531:20;;41367:190;;;:::o;41563:176::-;41595:1;41612:20;41630:1;41612:20;:::i;:::-;41607:25;;41646:20;41664:1;41646:20;:::i;:::-;41641:25;;41685:1;41675:2;;41690:18;;:::i;:::-;41675:2;41731:1;41728;41724:9;41719:14;;41597:142;;;;:::o;41745:180::-;41793:77;41790:1;41783:88;41890:4;41887:1;41880:15;41914:4;41911:1;41904:15;41931:180;41979:77;41976:1;41969:88;42076:4;42073:1;42066:15;42100:4;42097:1;42090:15;42117:180;42165:77;42162:1;42155:88;42262:4;42259:1;42252:15;42286:4;42283:1;42276:15;42303:180;42351:77;42348:1;42341:88;42448:4;42445:1;42438:15;42472:4;42469:1;42462:15;42489:102;42530:6;42581:2;42577:7;42572:2;42565:5;42561:14;42557:28;42547:38;;42537:54;;;:::o;42597:158::-;42737:10;42733:1;42725:6;42721:14;42714:34;42703:52;:::o;42761:237::-;42901:34;42897:1;42889:6;42885:14;42878:58;42970:20;42965:2;42957:6;42953:15;42946:45;42867:131;:::o;43004:225::-;43144:34;43140:1;43132:6;43128:14;43121:58;43213:8;43208:2;43200:6;43196:15;43189:33;43110:119;:::o;43235:178::-;43375:30;43371:1;43363:6;43359:14;43352:54;43341:72;:::o;43419:167::-;43559:19;43555:1;43547:6;43543:14;43536:43;43525:61;:::o;43592:223::-;43732:34;43728:1;43720:6;43716:14;43709:58;43801:6;43796:2;43788:6;43784:15;43777:31;43698:117;:::o;43821:175::-;43961:27;43957:1;43949:6;43945:14;43938:51;43927:69;:::o;44002:178::-;44142:30;44138:1;44130:6;44126:14;44119:54;44108:72;:::o;44186:231::-;44326:34;44322:1;44314:6;44310:14;44303:58;44395:14;44390:2;44382:6;44378:15;44371:39;44292:125;:::o;44423:243::-;44563:34;44559:1;44551:6;44547:14;44540:58;44632:26;44627:2;44619:6;44615:15;44608:51;44529:137;:::o;44672:229::-;44812:34;44808:1;44800:6;44796:14;44789:58;44881:12;44876:2;44868:6;44864:15;44857:37;44778:123;:::o;44907:228::-;45047:34;45043:1;45035:6;45031:14;45024:58;45116:11;45111:2;45103:6;45099:15;45092:36;45013:122;:::o;45141:233::-;45281:34;45277:1;45269:6;45265:14;45258:58;45350:16;45345:2;45337:6;45333:15;45326:41;45247:127;:::o;45380:178::-;45520:30;45516:1;45508:6;45504:14;45497:54;45486:72;:::o;45564:182::-;45704:34;45700:1;45692:6;45688:14;45681:58;45670:76;:::o;45752:236::-;45892:34;45888:1;45880:6;45876:14;45869:58;45961:19;45956:2;45948:6;45944:15;45937:44;45858:130;:::o;45994:231::-;46134:34;46130:1;46122:6;46118:14;46111:58;46203:14;46198:2;46190:6;46186:15;46179:39;46100:125;:::o;46231:182::-;46371:34;46367:1;46359:6;46355:14;46348:58;46337:76;:::o;46419:228::-;46559:34;46555:1;46547:6;46543:14;46536:58;46628:11;46623:2;46615:6;46611:15;46604:36;46525:122;:::o;46653:160::-;46793:12;46789:1;46781:6;46777:14;46770:36;46759:54;:::o;46819:234::-;46959:34;46955:1;46947:6;46943:14;46936:58;47028:17;47023:2;47015:6;47011:15;47004:42;46925:128;:::o;47059:220::-;47199:34;47195:1;47187:6;47183:14;47176:58;47268:3;47263:2;47255:6;47251:15;47244:28;47165:114;:::o;47285:236::-;47425:34;47421:1;47413:6;47409:14;47402:58;47494:19;47489:2;47481:6;47477:15;47470:44;47391:130;:::o;47527:166::-;47667:18;47663:1;47655:6;47651:14;47644:42;47633:60;:::o;47699:235::-;47839:34;47835:1;47827:6;47823:14;47816:58;47908:18;47903:2;47895:6;47891:15;47884:43;47805:129;:::o;47940:161::-;48080:13;48076:1;48068:6;48064:14;48057:37;48046:55;:::o;48107:181::-;48247:33;48243:1;48235:6;48231:14;48224:57;48213:75;:::o;48294:161::-;48434:13;48430:1;48422:6;48418:14;48411:37;48400:55;:::o;48461:122::-;48534:24;48552:5;48534:24;:::i;:::-;48527:5;48524:35;48514:2;;48573:1;48570;48563:12;48514:2;48504:79;:::o;48589:116::-;48659:21;48674:5;48659:21;:::i;:::-;48652:5;48649:32;48639:2;;48695:1;48692;48685:12;48639:2;48629:76;:::o;48711:120::-;48783:23;48800:5;48783:23;:::i;:::-;48776:5;48773:34;48763:2;;48821:1;48818;48811:12;48763:2;48753:78;:::o;48837:122::-;48910:24;48928:5;48910:24;:::i;:::-;48903:5;48900:35;48890:2;;48949:1;48946;48939:12;48890:2;48880:79;:::o

Swarm Source

ipfs://50c3cb52042f65bfe263e2ec9f58bd94b1f7253da530003723db24e029292401
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.