Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
501 BRO
Holders
12
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 BROLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Bro
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-21 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: ERC721A.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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 * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: 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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (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() { _transferOwnership(_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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: BroDAO.sol pragma solidity ^0.8.0; contract Bro is Ownable, ERC721A, ReentrancyGuard { uint256 public immutable maxPerAddressDuringMint; uint256 public immutable amountForDevs; struct SaleConfig { uint32 publicSaleStartTime; uint64 publicPrice; uint32 publicSaleKey; } SaleConfig public saleConfig; constructor( uint256 maxBatchSize_, uint256 collectionSize_, uint256 amountForDevs_, uint32 publicSaleStartTime_, uint64 publicPriceWei_ ) ERC721A("BroDAO", "BRO", maxBatchSize_, collectionSize_) { maxPerAddressDuringMint = maxBatchSize_; amountForDevs = amountForDevs_; saleConfig = SaleConfig( publicSaleStartTime_, publicPriceWei_, 0 ); } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function publicSaleMint(uint256 quantity, uint256 callerPublicSaleKey) external payable callerIsUser { SaleConfig memory config = saleConfig; uint256 publicSaleKey = uint256(config.publicSaleKey); uint256 publicPrice = uint256(config.publicPrice); uint256 publicSaleStartTime = uint256(config.publicSaleStartTime); require( publicSaleKey == callerPublicSaleKey, "called with incorrect public sale key" ); require( isPublicSaleOn(publicPrice, publicSaleKey, publicSaleStartTime), "public sale has not begun yet" ); require(totalSupply() + quantity <= collectionSize, "reached max supply"); require( numberMinted(msg.sender) + quantity <= maxPerAddressDuringMint, "cannot mint this many" ); _safeMint(msg.sender, quantity); refundIfOver(publicPrice * quantity); } function refundIfOver(uint256 price) private { require(msg.value >= price, "Need to send more ETH."); if (msg.value > price) { payable(msg.sender).transfer(msg.value - price); } } function isPublicSaleOn( uint256 publicPriceWei, uint256 publicSaleKey, uint256 publicSaleStartTime ) public view returns (bool) { return publicPriceWei != 0 && publicSaleKey != 0 && block.timestamp >= publicSaleStartTime; } function setPublicSaleInfo( uint64 publicPriceWei, uint32 publicSaleStartTime ) external onlyOwner { saleConfig = SaleConfig( publicSaleStartTime, publicPriceWei, saleConfig.publicSaleKey ); } function setPublicSaleKey(uint32 key) external onlyOwner { saleConfig.publicSaleKey = key; } // For marketing etc. function devMint(uint256 quantity) external onlyOwner { require( totalSupply() + quantity <= amountForDevs, "too many already minted before dev mint" ); require( quantity % maxBatchSize == 0, "can only mint a multiple of the maxBatchSize" ); uint256 numChunks = quantity / maxBatchSize; for (uint256 i = 0; i < numChunks; i++) { _safeMint(msg.sender, maxBatchSize); } } // // metadata URI string private _baseTokenURI; function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant { _setOwnersExplicit(quantity); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"},{"internalType":"uint256","name":"amountForDevs_","type":"uint256"},{"internalType":"uint32","name":"publicSaleStartTime_","type":"uint32"},{"internalType":"uint64","name":"publicPriceWei_","type":"uint64"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"amountForDevs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"devMint","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":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"publicPriceWei","type":"uint256"},{"internalType":"uint256","name":"publicSaleKey","type":"uint256"},{"internalType":"uint256","name":"publicSaleStartTime","type":"uint256"}],"name":"isPublicSaleOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"callerPublicSaleKey","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleConfig","outputs":[{"internalType":"uint32","name":"publicSaleStartTime","type":"uint32"},{"internalType":"uint64","name":"publicPrice","type":"uint64"},{"internalType":"uint32","name":"publicSaleKey","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"publicPriceWei","type":"uint64"},{"internalType":"uint32","name":"publicSaleStartTime","type":"uint32"}],"name":"setPublicSaleInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"key","type":"uint32"}],"name":"setPublicSaleKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
610100604052600060015560006008553480156200001c57600080fd5b5060405162005bf438038062005bf483398181016040528101906200004291906200043a565b6040518060400160405280600681526020017f42726f44414f00000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f42524f00000000000000000000000000000000000000000000000000000000008152508686620000d0620000c46200027960201b60201c565b6200028160201b60201c565b6000811162000116576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010d906200052c565b60405180910390fd5b600082116200015c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000153906200050a565b60405180910390fd5b83600290805190602001906200017492919062000345565b5082600390805190602001906200018d92919062000345565b508160a0818152505080608081815250505050505060016009819055508460c081815250508260e0818152505060405180606001604052808363ffffffff1681526020018267ffffffffffffffff168152602001600063ffffffff16815250600a60008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550604082015181600001600c6101000a81548163ffffffff021916908363ffffffff1602179055509050505050505050620006de565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000353906200058d565b90600052602060002090601f016020900481019282620003775760008555620003c3565b82601f106200039257805160ff1916838001178555620003c3565b82800160010185558215620003c3579182015b82811115620003c2578251825591602001919060010190620003a5565b5b509050620003d29190620003d6565b5090565b5b80821115620003f1576000816000905550600101620003d7565b5090565b600081519050620004068162000690565b92915050565b6000815190506200041d81620006aa565b92915050565b6000815190506200043481620006c4565b92915050565b600080600080600060a086880312156200045357600080fd5b60006200046388828901620003f5565b95505060206200047688828901620003f5565b94505060406200048988828901620003f5565b93505060606200049c888289016200040c565b9250506080620004af8882890162000423565b9150509295509295909350565b6000620004cb6027836200054e565b9150620004d882620005f2565b604082019050919050565b6000620004f2602e836200054e565b9150620004ff8262000641565b604082019050919050565b600060208201905081810360008301526200052581620004bc565b9050919050565b600060208201905081810360008301526200054781620004e3565b9050919050565b600082825260208201905092915050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b60006002820490506001821680620005a657607f821691505b60208210811415620005bd57620005bc620005c3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b6200069b816200055f565b8114620006a757600080fd5b50565b620006b58162000569565b8114620006c157600080fd5b50565b620006cf8162000579565b8114620006db57600080fd5b50565b60805160a05160c05160e05161549d620007576000396000818161102f0152611e9d0152600081816114430152611c5d0152600081816110a60152818161111401528181611151015281816128aa015281816128d3015261314b015260008181611be8015281816126140152612648015261549d6000f3fe6080604052600436106101ee5760003560e01c8063715018a61161010d578063ac446002116100a0578063d7224ba01161006f578063d7224ba014610700578063dc33e6811461072b578063e985e9c514610768578063f2fde38b146107a5578063fbe1aa51146107ce576101ee565b8063ac44600214610667578063b88d4fde1461067e578063c87b56dd146106a7578063cb91d8b3146106e4576101ee565b806390aa0b0f116100dc57806390aa0b0f146105a95780639231ab2a146105d657806395d89b4114610613578063a22cb4651461063e576101ee565b8063715018a6146105135780638bc35c2f1461052a5780638da5cb5b146105555780639002808314610580576101ee565b80632f745c59116101855780634f6ccce7116101545780634f6ccce71461043357806355f804b3146104705780636352211e1461049957806370a08231146104d6576101ee565b80632f745c5914610367578063375a069a146103a4578063422030ba146103cd57806342842e0e1461040a576101ee565b806318160ddd116101c157806318160ddd146102c15780631b27a2ea146102ec57806323b872dd146103155780632d20fb601461033e576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613955565b6107f9565b6040516102279190614186565b60405180910390f35b34801561023c57600080fd5b50610245610943565b60405161025291906141a1565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d91906139ec565b6109d5565b60405161028f919061411f565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613919565b610a5a565b005b3480156102cd57600080fd5b506102d6610b73565b6040516102e391906145fe565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190613ac9565b610b7d565b005b34801561032157600080fd5b5061033c60048036038101906103379190613813565b610cc5565b005b34801561034a57600080fd5b50610365600480360381019061036091906139ec565b610cd5565b005b34801561037357600080fd5b5061038e60048036038101906103899190613919565b610db3565b60405161039b91906145fe565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c691906139ec565b610fb1565b005b3480156103d957600080fd5b506103f460048036038101906103ef9190613a51565b61118d565b6040516104019190614186565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c9190613813565b6111b5565b005b34801561043f57600080fd5b5061045a600480360381019061045591906139ec565b6111d5565b60405161046791906145fe565b60405180910390f35b34801561047c57600080fd5b50610497600480360381019061049291906139a7565b611228565b005b3480156104a557600080fd5b506104c060048036038101906104bb91906139ec565b6112ba565b6040516104cd919061411f565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f891906137ae565b6112d0565b60405161050a91906145fe565b60405180910390f35b34801561051f57600080fd5b506105286113b9565b005b34801561053657600080fd5b5061053f611441565b60405161054c91906145fe565b60405180910390f35b34801561056157600080fd5b5061056a611465565b604051610577919061411f565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190613aa0565b61148e565b005b3480156105b557600080fd5b506105be611531565b6040516105cd93929190614619565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f891906139ec565b61157d565b60405161060a91906145e3565b60405180910390f35b34801561061f57600080fd5b50610628611595565b60405161063591906141a1565b60405180910390f35b34801561064a57600080fd5b50610665600480360381019061066091906138dd565b611627565b005b34801561067357600080fd5b5061067c6117a8565b005b34801561068a57600080fd5b506106a560048036038101906106a09190613862565b611929565b005b3480156106b357600080fd5b506106ce60048036038101906106c991906139ec565b611985565b6040516106db91906141a1565b60405180910390f35b6106fe60048036038101906106f99190613a15565b611a2c565b005b34801561070c57600080fd5b50610715611cf7565b60405161072291906145fe565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d91906137ae565b611cfd565b60405161075f91906145fe565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a91906137d7565b611d0f565b60405161079c9190614186565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c791906137ae565b611da3565b005b3480156107da57600080fd5b506107e3611e9b565b6040516107f091906145fe565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061092c57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061093c575061093b82611ebf565b5b9050919050565b606060028054610952906149a3565b80601f016020809104026020016040519081016040528092919081815260200182805461097e906149a3565b80156109cb5780601f106109a0576101008083540402835291602001916109cb565b820191906000526020600020905b8154815290600101906020018083116109ae57829003601f168201915b5050505050905090565b60006109e082611f29565b610a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16906145a3565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a65826112ba565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd90614443565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610af5611f37565b73ffffffffffffffffffffffffffffffffffffffff161480610b245750610b2381610b1e611f37565b611d0f565b5b610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a906142e3565b60405180910390fd5b610b6e838383611f3f565b505050565b6000600154905090565b610b85611f37565b73ffffffffffffffffffffffffffffffffffffffff16610ba3611465565b73ffffffffffffffffffffffffffffffffffffffff1614610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf090614383565b60405180910390fd5b60405180606001604052808263ffffffff1681526020018367ffffffffffffffff168152602001600a600001600c9054906101000a900463ffffffff1663ffffffff16815250600a60008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550604082015181600001600c6101000a81548163ffffffff021916908363ffffffff1602179055509050505050565b610cd0838383611ff1565b505050565b610cdd611f37565b73ffffffffffffffffffffffffffffffffffffffff16610cfb611465565b73ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890614383565b60405180910390fd5b60026009541415610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90614563565b60405180910390fd5b6002600981905550610da8816125aa565b600160098190555050565b6000610dbe836112d0565b8210610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df6906141c3565b60405180910390fd5b6000610e09610b73565b905060008060005b83811015610f6f576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f0357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f5b5786841415610f4c578195505050505050610fab565b8380610f5790614a06565b9450505b508080610f6790614a06565b915050610e11565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa290614523565b60405180910390fd5b92915050565b610fb9611f37565b73ffffffffffffffffffffffffffffffffffffffff16610fd7611465565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490614383565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081611057610b73565b611061919061473a565b11156110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990614503565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000826110d09190614a4f565b14611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790614223565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008261113e9190614790565b905060005b8181101561118857611175337f0000000000000000000000000000000000000000000000000000000000000000612838565b808061118090614a06565b915050611143565b505050565b60008084141580156111a0575060008314155b80156111ac5750814210155b90509392505050565b6111d083838360405180602001604052806000815250611929565b505050565b60006111df610b73565b8210611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790614243565b60405180910390fd5b819050919050565b611230611f37565b73ffffffffffffffffffffffffffffffffffffffff1661124e611465565b73ffffffffffffffffffffffffffffffffffffffff16146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90614383565b60405180910390fd5b8181600b91906112b592919061358c565b505050565b60006112c582612856565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890614323565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6113c1611f37565b73ffffffffffffffffffffffffffffffffffffffff166113df611465565b73ffffffffffffffffffffffffffffffffffffffff1614611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c90614383565b60405180910390fd5b61143f6000612a59565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611496611f37565b73ffffffffffffffffffffffffffffffffffffffff166114b4611465565b73ffffffffffffffffffffffffffffffffffffffff161461150a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150190614383565b60405180910390fd5b80600a600001600c6101000a81548163ffffffff021916908363ffffffff16021790555050565b600a8060000160009054906101000a900463ffffffff16908060000160049054906101000a900467ffffffffffffffff169080600001600c9054906101000a900463ffffffff16905083565b611585613612565b61158e82612856565b9050919050565b6060600380546115a4906149a3565b80601f01602080910402602001604051908101604052809291908181526020018280546115d0906149a3565b801561161d5780601f106115f25761010080835404028352916020019161161d565b820191906000526020600020905b81548152906001019060200180831161160057829003601f168201915b5050505050905090565b61162f611f37565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561169d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611694906143c3565b60405180910390fd5b80600760006116aa611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611757611f37565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161179c9190614186565b60405180910390a35050565b6117b0611f37565b73ffffffffffffffffffffffffffffffffffffffff166117ce611465565b73ffffffffffffffffffffffffffffffffffffffff1614611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b90614383565b60405180910390fd5b6002600954141561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190614563565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516118989061410a565b60006040518083038185875af1925050503d80600081146118d5576040519150601f19603f3d011682016040523d82523d6000602084013e6118da565b606091505b505090508061191e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191590614463565b60405180910390fd5b506001600981905550565b611934848484611ff1565b61194084848484612b1d565b61197f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197690614483565b60405180910390fd5b50505050565b606061199082611f29565b6119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c6906143a3565b60405180910390fd5b60006119d9612cb4565b905060008151116119f95760405180602001604052806000815250611a24565b80611a0384612d46565b604051602001611a149291906140e6565b6040516020818303038152906040525b915050919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a91906142c3565b60405180910390fd5b6000600a6040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816040015163ffffffff1690506000826020015167ffffffffffffffff1690506000836000015163ffffffff169050848314611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b93906142a3565b60405180910390fd5b611ba782848361118d565b611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd90614423565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000086611c10610b73565b611c1a919061473a565b1115611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290614343565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000086611c8633611cfd565b611c90919061473a565b1115611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc890614403565b60405180910390fd5b611cdb3387612838565b611cef8683611cea91906147c1565b612ef3565b505050505050565b60085481565b6000611d0882612f94565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611dab611f37565b73ffffffffffffffffffffffffffffffffffffffff16611dc9611465565b73ffffffffffffffffffffffffffffffffffffffff1614611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e86906141e3565b60405180910390fd5b611e9881612a59565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ffc82612856565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612023611f37565b73ffffffffffffffffffffffffffffffffffffffff16148061207f5750612048611f37565b73ffffffffffffffffffffffffffffffffffffffff16612067846109d5565b73ffffffffffffffffffffffffffffffffffffffff16145b8061209b575061209a8260000151612095611f37565b611d0f565b5b9050806120dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d4906143e3565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690614363565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b690614263565b60405180910390fd5b6121cc858585600161307d565b6121dc6000848460000151611f3f565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661224a919061481b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166122ee91906146f4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846123f4919061473a565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561253a5761246a81611f29565b15612539576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125a28686866001613083565b505050505050565b60006008549050600082116125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb90614303565b60405180910390fd5b600060018383612604919061473a565b61260e919061484f565b905060017f000000000000000000000000000000000000000000000000000000000000000061263d919061484f565b8111156126745760017f0000000000000000000000000000000000000000000000000000000000000000612671919061484f565b90505b61267d81611f29565b6126bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b390614543565b60405180910390fd5b60008290505b81811161281f57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561280c57600061273f82612856565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061281790614a06565b9150506126c2565b5060018161282d919061473a565b600881905550505050565b612852828260405180602001604052806000815250613089565b5050565b61285e613612565b61286782611f29565b6128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d90614203565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000831061290a5760017f0000000000000000000000000000000000000000000000000000000000000000846128fd919061484f565b612907919061473a565b90505b60008390505b818110612a18576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a0457809350505050612a54565b508080612a1090614979565b915050612910565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b90614583565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612b3e8473ffffffffffffffffffffffffffffffffffffffff16613569565b15612ca7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b67611f37565b8786866040518563ffffffff1660e01b8152600401612b89949392919061413a565b602060405180830381600087803b158015612ba357600080fd5b505af1925050508015612bd457506040513d601f19601f82011682018060405250810190612bd1919061397e565b60015b612c57573d8060008114612c04576040519150601f19603f3d011682016040523d82523d6000602084013e612c09565b606091505b50600081511415612c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4690614483565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cac565b600190505b949350505050565b6060600b8054612cc3906149a3565b80601f0160208091040260200160405190810160405280929190818152602001828054612cef906149a3565b8015612d3c5780601f10612d1157610100808354040283529160200191612d3c565b820191906000526020600020905b815481529060010190602001808311612d1f57829003601f168201915b5050505050905090565b60606000821415612d8e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612eee565b600082905060005b60008214612dc0578080612da990614a06565b915050600a82612db99190614790565b9150612d96565b60008167ffffffffffffffff811115612e02577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612e345781602001600182028036833780820191505090505b5090505b60008514612ee757600182612e4d919061484f565b9150600a85612e5c9190614a4f565b6030612e68919061473a565b60f81b818381518110612ea4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ee09190614790565b9450612e38565b8093505050505b919050565b80341015612f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2d906144a3565b60405180910390fd5b80341115612f91573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612f64919061484f565b9081150290604051600060405180830381858888f19350505050158015612f8f573d6000803e3d6000fd5b505b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffc90614283565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f7906144e3565b60405180910390fd5b61310981611f29565b15613149576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613140906144c3565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156131ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a3906145c3565b60405180910390fd5b6131b9600085838661307d565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132b691906146f4565b6fffffffffffffffffffffffffffffffff1681526020018583602001516132dd91906146f4565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561354c57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134ec6000888488612b1d565b61352b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352290614483565b60405180910390fd5b818061353690614a06565b925050808061354490614a06565b91505061347b565b50806001819055506135616000878588613083565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613598906149a3565b90600052602060002090601f0160209004810192826135ba5760008555613601565b82601f106135d357803560ff1916838001178555613601565b82800160010185558215613601579182015b828111156136005782358255916020019190600101906135e5565b5b50905061360e919061364c565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561366557600081600090555060010161364d565b5090565b600061367c61367784614675565b614650565b90508281526020810184848401111561369457600080fd5b61369f848285614937565b509392505050565b6000813590506136b6816153dd565b92915050565b6000813590506136cb816153f4565b92915050565b6000813590506136e08161540b565b92915050565b6000815190506136f58161540b565b92915050565b600082601f83011261370c57600080fd5b813561371c848260208601613669565b91505092915050565b60008083601f84011261373757600080fd5b8235905067ffffffffffffffff81111561375057600080fd5b60208301915083600182028301111561376857600080fd5b9250929050565b60008135905061377e81615422565b92915050565b60008135905061379381615439565b92915050565b6000813590506137a881615450565b92915050565b6000602082840312156137c057600080fd5b60006137ce848285016136a7565b91505092915050565b600080604083850312156137ea57600080fd5b60006137f8858286016136a7565b9250506020613809858286016136a7565b9150509250929050565b60008060006060848603121561382857600080fd5b6000613836868287016136a7565b9350506020613847868287016136a7565b92505060406138588682870161376f565b9150509250925092565b6000806000806080858703121561387857600080fd5b6000613886878288016136a7565b9450506020613897878288016136a7565b93505060406138a88782880161376f565b925050606085013567ffffffffffffffff8111156138c557600080fd5b6138d1878288016136fb565b91505092959194509250565b600080604083850312156138f057600080fd5b60006138fe858286016136a7565b925050602061390f858286016136bc565b9150509250929050565b6000806040838503121561392c57600080fd5b600061393a858286016136a7565b925050602061394b8582860161376f565b9150509250929050565b60006020828403121561396757600080fd5b6000613975848285016136d1565b91505092915050565b60006020828403121561399057600080fd5b600061399e848285016136e6565b91505092915050565b600080602083850312156139ba57600080fd5b600083013567ffffffffffffffff8111156139d457600080fd5b6139e085828601613725565b92509250509250929050565b6000602082840312156139fe57600080fd5b6000613a0c8482850161376f565b91505092915050565b60008060408385031215613a2857600080fd5b6000613a368582860161376f565b9250506020613a478582860161376f565b9150509250929050565b600080600060608486031215613a6657600080fd5b6000613a748682870161376f565b9350506020613a858682870161376f565b9250506040613a968682870161376f565b9150509250925092565b600060208284031215613ab257600080fd5b6000613ac084828501613784565b91505092915050565b60008060408385031215613adc57600080fd5b6000613aea85828601613799565b9250506020613afb85828601613784565b9150509250929050565b613b0e81614883565b82525050565b613b1d81614883565b82525050565b613b2c81614895565b82525050565b6000613b3d826146a6565b613b4781856146bc565b9350613b57818560208601614946565b613b6081614b3c565b840191505092915050565b6000613b76826146b1565b613b8081856146d8565b9350613b90818560208601614946565b613b9981614b3c565b840191505092915050565b6000613baf826146b1565b613bb981856146e9565b9350613bc9818560208601614946565b80840191505092915050565b6000613be26022836146d8565b9150613bed82614b4d565b604082019050919050565b6000613c056026836146d8565b9150613c1082614b9c565b604082019050919050565b6000613c28602a836146d8565b9150613c3382614beb565b604082019050919050565b6000613c4b602c836146d8565b9150613c5682614c3a565b604082019050919050565b6000613c6e6023836146d8565b9150613c7982614c89565b604082019050919050565b6000613c916025836146d8565b9150613c9c82614cd8565b604082019050919050565b6000613cb46031836146d8565b9150613cbf82614d27565b604082019050919050565b6000613cd76025836146d8565b9150613ce282614d76565b604082019050919050565b6000613cfa601e836146d8565b9150613d0582614dc5565b602082019050919050565b6000613d1d6039836146d8565b9150613d2882614dee565b604082019050919050565b6000613d406018836146d8565b9150613d4b82614e3d565b602082019050919050565b6000613d63602b836146d8565b9150613d6e82614e66565b604082019050919050565b6000613d866012836146d8565b9150613d9182614eb5565b602082019050919050565b6000613da96026836146d8565b9150613db482614ede565b604082019050919050565b6000613dcc6020836146d8565b9150613dd782614f2d565b602082019050919050565b6000613def602f836146d8565b9150613dfa82614f56565b604082019050919050565b6000613e12601a836146d8565b9150613e1d82614fa5565b602082019050919050565b6000613e356032836146d8565b9150613e4082614fce565b604082019050919050565b6000613e586015836146d8565b9150613e638261501d565b602082019050919050565b6000613e7b601d836146d8565b9150613e8682615046565b602082019050919050565b6000613e9e6022836146d8565b9150613ea98261506f565b604082019050919050565b6000613ec16000836146cd565b9150613ecc826150be565b600082019050919050565b6000613ee46010836146d8565b9150613eef826150c1565b602082019050919050565b6000613f076033836146d8565b9150613f12826150ea565b604082019050919050565b6000613f2a6016836146d8565b9150613f3582615139565b602082019050919050565b6000613f4d601d836146d8565b9150613f5882615162565b602082019050919050565b6000613f706021836146d8565b9150613f7b8261518b565b604082019050919050565b6000613f936027836146d8565b9150613f9e826151da565b604082019050919050565b6000613fb6602e836146d8565b9150613fc182615229565b604082019050919050565b6000613fd96026836146d8565b9150613fe482615278565b604082019050919050565b6000613ffc601f836146d8565b9150614007826152c7565b602082019050919050565b600061401f602f836146d8565b915061402a826152f0565b604082019050919050565b6000614042602d836146d8565b915061404d8261533f565b604082019050919050565b60006140656022836146d8565b91506140708261538e565b604082019050919050565b6040820160008201516140916000850182613b05565b5060208201516140a460208501826140c8565b50505050565b6140b381614909565b82525050565b6140c281614913565b82525050565b6140d181614923565b82525050565b6140e081614923565b82525050565b60006140f28285613ba4565b91506140fe8284613ba4565b91508190509392505050565b600061411582613eb4565b9150819050919050565b60006020820190506141346000830184613b14565b92915050565b600060808201905061414f6000830187613b14565b61415c6020830186613b14565b61416960408301856140aa565b818103606083015261417b8184613b32565b905095945050505050565b600060208201905061419b6000830184613b23565b92915050565b600060208201905081810360008301526141bb8184613b6b565b905092915050565b600060208201905081810360008301526141dc81613bd5565b9050919050565b600060208201905081810360008301526141fc81613bf8565b9050919050565b6000602082019050818103600083015261421c81613c1b565b9050919050565b6000602082019050818103600083015261423c81613c3e565b9050919050565b6000602082019050818103600083015261425c81613c61565b9050919050565b6000602082019050818103600083015261427c81613c84565b9050919050565b6000602082019050818103600083015261429c81613ca7565b9050919050565b600060208201905081810360008301526142bc81613cca565b9050919050565b600060208201905081810360008301526142dc81613ced565b9050919050565b600060208201905081810360008301526142fc81613d10565b9050919050565b6000602082019050818103600083015261431c81613d33565b9050919050565b6000602082019050818103600083015261433c81613d56565b9050919050565b6000602082019050818103600083015261435c81613d79565b9050919050565b6000602082019050818103600083015261437c81613d9c565b9050919050565b6000602082019050818103600083015261439c81613dbf565b9050919050565b600060208201905081810360008301526143bc81613de2565b9050919050565b600060208201905081810360008301526143dc81613e05565b9050919050565b600060208201905081810360008301526143fc81613e28565b9050919050565b6000602082019050818103600083015261441c81613e4b565b9050919050565b6000602082019050818103600083015261443c81613e6e565b9050919050565b6000602082019050818103600083015261445c81613e91565b9050919050565b6000602082019050818103600083015261447c81613ed7565b9050919050565b6000602082019050818103600083015261449c81613efa565b9050919050565b600060208201905081810360008301526144bc81613f1d565b9050919050565b600060208201905081810360008301526144dc81613f40565b9050919050565b600060208201905081810360008301526144fc81613f63565b9050919050565b6000602082019050818103600083015261451c81613f86565b9050919050565b6000602082019050818103600083015261453c81613fa9565b9050919050565b6000602082019050818103600083015261455c81613fcc565b9050919050565b6000602082019050818103600083015261457c81613fef565b9050919050565b6000602082019050818103600083015261459c81614012565b9050919050565b600060208201905081810360008301526145bc81614035565b9050919050565b600060208201905081810360008301526145dc81614058565b9050919050565b60006040820190506145f8600083018461407b565b92915050565b600060208201905061461360008301846140aa565b92915050565b600060608201905061462e60008301866140b9565b61463b60208301856140d7565b61464860408301846140b9565b949350505050565b600061465a61466b565b905061466682826149d5565b919050565b6000604051905090565b600067ffffffffffffffff8211156146905761468f614b0d565b5b61469982614b3c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006146ff826148cd565b915061470a836148cd565b9250826fffffffffffffffffffffffffffffffff0382111561472f5761472e614a80565b5b828201905092915050565b600061474582614909565b915061475083614909565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561478557614784614a80565b5b828201905092915050565b600061479b82614909565b91506147a683614909565b9250826147b6576147b5614aaf565b5b828204905092915050565b60006147cc82614909565b91506147d783614909565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148105761480f614a80565b5b828202905092915050565b6000614826826148cd565b9150614831836148cd565b92508282101561484457614843614a80565b5b828203905092915050565b600061485a82614909565b915061486583614909565b92508282101561487857614877614a80565b5b828203905092915050565b600061488e826148e9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614964578082015181840152602081019050614949565b83811115614973576000848401525b50505050565b600061498482614909565b9150600082141561499857614997614a80565b5b600182039050919050565b600060028204905060018216806149bb57607f821691505b602082108114156149cf576149ce614ade565b5b50919050565b6149de82614b3c565b810181811067ffffffffffffffff821117156149fd576149fc614b0d565b5b80604052505050565b6000614a1182614909565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a4457614a43614a80565b5b600182019050919050565b6000614a5a82614909565b9150614a6583614909565b925082614a7557614a74614aaf565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f63616c6c6564207769746820696e636f7272656374207075626c69632073616c60008201527f65206b6579000000000000000000000000000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f63616e6e6f74206d696e742074686973206d616e790000000000000000000000600082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6153e681614883565b81146153f157600080fd5b50565b6153fd81614895565b811461540857600080fd5b50565b615414816148a1565b811461541f57600080fd5b50565b61542b81614909565b811461543657600080fd5b50565b61544281614913565b811461544d57600080fd5b50565b61545981614923565b811461546457600080fd5b5056fea2646970667358221220cea71a5dfae92261cc981f6364906b902fe56f1c009c5fcae44936ac29431a5664736f6c63430008040033000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000006210bfc60000000000000000000000000000000000000000000000000de0b6b3a7640000
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c8063715018a61161010d578063ac446002116100a0578063d7224ba01161006f578063d7224ba014610700578063dc33e6811461072b578063e985e9c514610768578063f2fde38b146107a5578063fbe1aa51146107ce576101ee565b8063ac44600214610667578063b88d4fde1461067e578063c87b56dd146106a7578063cb91d8b3146106e4576101ee565b806390aa0b0f116100dc57806390aa0b0f146105a95780639231ab2a146105d657806395d89b4114610613578063a22cb4651461063e576101ee565b8063715018a6146105135780638bc35c2f1461052a5780638da5cb5b146105555780639002808314610580576101ee565b80632f745c59116101855780634f6ccce7116101545780634f6ccce71461043357806355f804b3146104705780636352211e1461049957806370a08231146104d6576101ee565b80632f745c5914610367578063375a069a146103a4578063422030ba146103cd57806342842e0e1461040a576101ee565b806318160ddd116101c157806318160ddd146102c15780631b27a2ea146102ec57806323b872dd146103155780632d20fb601461033e576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613955565b6107f9565b6040516102279190614186565b60405180910390f35b34801561023c57600080fd5b50610245610943565b60405161025291906141a1565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d91906139ec565b6109d5565b60405161028f919061411f565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613919565b610a5a565b005b3480156102cd57600080fd5b506102d6610b73565b6040516102e391906145fe565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190613ac9565b610b7d565b005b34801561032157600080fd5b5061033c60048036038101906103379190613813565b610cc5565b005b34801561034a57600080fd5b50610365600480360381019061036091906139ec565b610cd5565b005b34801561037357600080fd5b5061038e60048036038101906103899190613919565b610db3565b60405161039b91906145fe565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c691906139ec565b610fb1565b005b3480156103d957600080fd5b506103f460048036038101906103ef9190613a51565b61118d565b6040516104019190614186565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c9190613813565b6111b5565b005b34801561043f57600080fd5b5061045a600480360381019061045591906139ec565b6111d5565b60405161046791906145fe565b60405180910390f35b34801561047c57600080fd5b50610497600480360381019061049291906139a7565b611228565b005b3480156104a557600080fd5b506104c060048036038101906104bb91906139ec565b6112ba565b6040516104cd919061411f565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f891906137ae565b6112d0565b60405161050a91906145fe565b60405180910390f35b34801561051f57600080fd5b506105286113b9565b005b34801561053657600080fd5b5061053f611441565b60405161054c91906145fe565b60405180910390f35b34801561056157600080fd5b5061056a611465565b604051610577919061411f565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190613aa0565b61148e565b005b3480156105b557600080fd5b506105be611531565b6040516105cd93929190614619565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f891906139ec565b61157d565b60405161060a91906145e3565b60405180910390f35b34801561061f57600080fd5b50610628611595565b60405161063591906141a1565b60405180910390f35b34801561064a57600080fd5b50610665600480360381019061066091906138dd565b611627565b005b34801561067357600080fd5b5061067c6117a8565b005b34801561068a57600080fd5b506106a560048036038101906106a09190613862565b611929565b005b3480156106b357600080fd5b506106ce60048036038101906106c991906139ec565b611985565b6040516106db91906141a1565b60405180910390f35b6106fe60048036038101906106f99190613a15565b611a2c565b005b34801561070c57600080fd5b50610715611cf7565b60405161072291906145fe565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d91906137ae565b611cfd565b60405161075f91906145fe565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a91906137d7565b611d0f565b60405161079c9190614186565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c791906137ae565b611da3565b005b3480156107da57600080fd5b506107e3611e9b565b6040516107f091906145fe565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061092c57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061093c575061093b82611ebf565b5b9050919050565b606060028054610952906149a3565b80601f016020809104026020016040519081016040528092919081815260200182805461097e906149a3565b80156109cb5780601f106109a0576101008083540402835291602001916109cb565b820191906000526020600020905b8154815290600101906020018083116109ae57829003601f168201915b5050505050905090565b60006109e082611f29565b610a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16906145a3565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a65826112ba565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd90614443565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610af5611f37565b73ffffffffffffffffffffffffffffffffffffffff161480610b245750610b2381610b1e611f37565b611d0f565b5b610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a906142e3565b60405180910390fd5b610b6e838383611f3f565b505050565b6000600154905090565b610b85611f37565b73ffffffffffffffffffffffffffffffffffffffff16610ba3611465565b73ffffffffffffffffffffffffffffffffffffffff1614610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf090614383565b60405180910390fd5b60405180606001604052808263ffffffff1681526020018367ffffffffffffffff168152602001600a600001600c9054906101000a900463ffffffff1663ffffffff16815250600a60008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550604082015181600001600c6101000a81548163ffffffff021916908363ffffffff1602179055509050505050565b610cd0838383611ff1565b505050565b610cdd611f37565b73ffffffffffffffffffffffffffffffffffffffff16610cfb611465565b73ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890614383565b60405180910390fd5b60026009541415610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90614563565b60405180910390fd5b6002600981905550610da8816125aa565b600160098190555050565b6000610dbe836112d0565b8210610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df6906141c3565b60405180910390fd5b6000610e09610b73565b905060008060005b83811015610f6f576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f0357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f5b5786841415610f4c578195505050505050610fab565b8380610f5790614a06565b9450505b508080610f6790614a06565b915050610e11565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa290614523565b60405180910390fd5b92915050565b610fb9611f37565b73ffffffffffffffffffffffffffffffffffffffff16610fd7611465565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490614383565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000001f481611057610b73565b611061919061473a565b11156110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990614503565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a826110d09190614a4f565b14611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790614223565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a8261113e9190614790565b905060005b8181101561118857611175337f000000000000000000000000000000000000000000000000000000000000000a612838565b808061118090614a06565b915050611143565b505050565b60008084141580156111a0575060008314155b80156111ac5750814210155b90509392505050565b6111d083838360405180602001604052806000815250611929565b505050565b60006111df610b73565b8210611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790614243565b60405180910390fd5b819050919050565b611230611f37565b73ffffffffffffffffffffffffffffffffffffffff1661124e611465565b73ffffffffffffffffffffffffffffffffffffffff16146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90614383565b60405180910390fd5b8181600b91906112b592919061358c565b505050565b60006112c582612856565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890614323565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6113c1611f37565b73ffffffffffffffffffffffffffffffffffffffff166113df611465565b73ffffffffffffffffffffffffffffffffffffffff1614611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c90614383565b60405180910390fd5b61143f6000612a59565b565b7f000000000000000000000000000000000000000000000000000000000000000a81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611496611f37565b73ffffffffffffffffffffffffffffffffffffffff166114b4611465565b73ffffffffffffffffffffffffffffffffffffffff161461150a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150190614383565b60405180910390fd5b80600a600001600c6101000a81548163ffffffff021916908363ffffffff16021790555050565b600a8060000160009054906101000a900463ffffffff16908060000160049054906101000a900467ffffffffffffffff169080600001600c9054906101000a900463ffffffff16905083565b611585613612565b61158e82612856565b9050919050565b6060600380546115a4906149a3565b80601f01602080910402602001604051908101604052809291908181526020018280546115d0906149a3565b801561161d5780601f106115f25761010080835404028352916020019161161d565b820191906000526020600020905b81548152906001019060200180831161160057829003601f168201915b5050505050905090565b61162f611f37565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561169d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611694906143c3565b60405180910390fd5b80600760006116aa611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611757611f37565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161179c9190614186565b60405180910390a35050565b6117b0611f37565b73ffffffffffffffffffffffffffffffffffffffff166117ce611465565b73ffffffffffffffffffffffffffffffffffffffff1614611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b90614383565b60405180910390fd5b6002600954141561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190614563565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516118989061410a565b60006040518083038185875af1925050503d80600081146118d5576040519150601f19603f3d011682016040523d82523d6000602084013e6118da565b606091505b505090508061191e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191590614463565b60405180910390fd5b506001600981905550565b611934848484611ff1565b61194084848484612b1d565b61197f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197690614483565b60405180910390fd5b50505050565b606061199082611f29565b6119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c6906143a3565b60405180910390fd5b60006119d9612cb4565b905060008151116119f95760405180602001604052806000815250611a24565b80611a0384612d46565b604051602001611a149291906140e6565b6040516020818303038152906040525b915050919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a91906142c3565b60405180910390fd5b6000600a6040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816040015163ffffffff1690506000826020015167ffffffffffffffff1690506000836000015163ffffffff169050848314611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b93906142a3565b60405180910390fd5b611ba782848361118d565b611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd90614423565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000003e886611c10610b73565b611c1a919061473a565b1115611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290614343565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a86611c8633611cfd565b611c90919061473a565b1115611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc890614403565b60405180910390fd5b611cdb3387612838565b611cef8683611cea91906147c1565b612ef3565b505050505050565b60085481565b6000611d0882612f94565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611dab611f37565b73ffffffffffffffffffffffffffffffffffffffff16611dc9611465565b73ffffffffffffffffffffffffffffffffffffffff1614611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e86906141e3565b60405180910390fd5b611e9881612a59565b50565b7f00000000000000000000000000000000000000000000000000000000000001f481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ffc82612856565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612023611f37565b73ffffffffffffffffffffffffffffffffffffffff16148061207f5750612048611f37565b73ffffffffffffffffffffffffffffffffffffffff16612067846109d5565b73ffffffffffffffffffffffffffffffffffffffff16145b8061209b575061209a8260000151612095611f37565b611d0f565b5b9050806120dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d4906143e3565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690614363565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b690614263565b60405180910390fd5b6121cc858585600161307d565b6121dc6000848460000151611f3f565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661224a919061481b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166122ee91906146f4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846123f4919061473a565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561253a5761246a81611f29565b15612539576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125a28686866001613083565b505050505050565b60006008549050600082116125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb90614303565b60405180910390fd5b600060018383612604919061473a565b61260e919061484f565b905060017f00000000000000000000000000000000000000000000000000000000000003e861263d919061484f565b8111156126745760017f00000000000000000000000000000000000000000000000000000000000003e8612671919061484f565b90505b61267d81611f29565b6126bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b390614543565b60405180910390fd5b60008290505b81811161281f57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561280c57600061273f82612856565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061281790614a06565b9150506126c2565b5060018161282d919061473a565b600881905550505050565b612852828260405180602001604052806000815250613089565b5050565b61285e613612565b61286782611f29565b6128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d90614203565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a831061290a5760017f000000000000000000000000000000000000000000000000000000000000000a846128fd919061484f565b612907919061473a565b90505b60008390505b818110612a18576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a0457809350505050612a54565b508080612a1090614979565b915050612910565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b90614583565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612b3e8473ffffffffffffffffffffffffffffffffffffffff16613569565b15612ca7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b67611f37565b8786866040518563ffffffff1660e01b8152600401612b89949392919061413a565b602060405180830381600087803b158015612ba357600080fd5b505af1925050508015612bd457506040513d601f19601f82011682018060405250810190612bd1919061397e565b60015b612c57573d8060008114612c04576040519150601f19603f3d011682016040523d82523d6000602084013e612c09565b606091505b50600081511415612c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4690614483565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cac565b600190505b949350505050565b6060600b8054612cc3906149a3565b80601f0160208091040260200160405190810160405280929190818152602001828054612cef906149a3565b8015612d3c5780601f10612d1157610100808354040283529160200191612d3c565b820191906000526020600020905b815481529060010190602001808311612d1f57829003601f168201915b5050505050905090565b60606000821415612d8e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612eee565b600082905060005b60008214612dc0578080612da990614a06565b915050600a82612db99190614790565b9150612d96565b60008167ffffffffffffffff811115612e02577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612e345781602001600182028036833780820191505090505b5090505b60008514612ee757600182612e4d919061484f565b9150600a85612e5c9190614a4f565b6030612e68919061473a565b60f81b818381518110612ea4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ee09190614790565b9450612e38565b8093505050505b919050565b80341015612f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2d906144a3565b60405180910390fd5b80341115612f91573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612f64919061484f565b9081150290604051600060405180830381858888f19350505050158015612f8f573d6000803e3d6000fd5b505b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffc90614283565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f7906144e3565b60405180910390fd5b61310981611f29565b15613149576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613140906144c3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a8311156131ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a3906145c3565b60405180910390fd5b6131b9600085838661307d565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132b691906146f4565b6fffffffffffffffffffffffffffffffff1681526020018583602001516132dd91906146f4565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561354c57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134ec6000888488612b1d565b61352b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352290614483565b60405180910390fd5b818061353690614a06565b925050808061354490614a06565b91505061347b565b50806001819055506135616000878588613083565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613598906149a3565b90600052602060002090601f0160209004810192826135ba5760008555613601565b82601f106135d357803560ff1916838001178555613601565b82800160010185558215613601579182015b828111156136005782358255916020019190600101906135e5565b5b50905061360e919061364c565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561366557600081600090555060010161364d565b5090565b600061367c61367784614675565b614650565b90508281526020810184848401111561369457600080fd5b61369f848285614937565b509392505050565b6000813590506136b6816153dd565b92915050565b6000813590506136cb816153f4565b92915050565b6000813590506136e08161540b565b92915050565b6000815190506136f58161540b565b92915050565b600082601f83011261370c57600080fd5b813561371c848260208601613669565b91505092915050565b60008083601f84011261373757600080fd5b8235905067ffffffffffffffff81111561375057600080fd5b60208301915083600182028301111561376857600080fd5b9250929050565b60008135905061377e81615422565b92915050565b60008135905061379381615439565b92915050565b6000813590506137a881615450565b92915050565b6000602082840312156137c057600080fd5b60006137ce848285016136a7565b91505092915050565b600080604083850312156137ea57600080fd5b60006137f8858286016136a7565b9250506020613809858286016136a7565b9150509250929050565b60008060006060848603121561382857600080fd5b6000613836868287016136a7565b9350506020613847868287016136a7565b92505060406138588682870161376f565b9150509250925092565b6000806000806080858703121561387857600080fd5b6000613886878288016136a7565b9450506020613897878288016136a7565b93505060406138a88782880161376f565b925050606085013567ffffffffffffffff8111156138c557600080fd5b6138d1878288016136fb565b91505092959194509250565b600080604083850312156138f057600080fd5b60006138fe858286016136a7565b925050602061390f858286016136bc565b9150509250929050565b6000806040838503121561392c57600080fd5b600061393a858286016136a7565b925050602061394b8582860161376f565b9150509250929050565b60006020828403121561396757600080fd5b6000613975848285016136d1565b91505092915050565b60006020828403121561399057600080fd5b600061399e848285016136e6565b91505092915050565b600080602083850312156139ba57600080fd5b600083013567ffffffffffffffff8111156139d457600080fd5b6139e085828601613725565b92509250509250929050565b6000602082840312156139fe57600080fd5b6000613a0c8482850161376f565b91505092915050565b60008060408385031215613a2857600080fd5b6000613a368582860161376f565b9250506020613a478582860161376f565b9150509250929050565b600080600060608486031215613a6657600080fd5b6000613a748682870161376f565b9350506020613a858682870161376f565b9250506040613a968682870161376f565b9150509250925092565b600060208284031215613ab257600080fd5b6000613ac084828501613784565b91505092915050565b60008060408385031215613adc57600080fd5b6000613aea85828601613799565b9250506020613afb85828601613784565b9150509250929050565b613b0e81614883565b82525050565b613b1d81614883565b82525050565b613b2c81614895565b82525050565b6000613b3d826146a6565b613b4781856146bc565b9350613b57818560208601614946565b613b6081614b3c565b840191505092915050565b6000613b76826146b1565b613b8081856146d8565b9350613b90818560208601614946565b613b9981614b3c565b840191505092915050565b6000613baf826146b1565b613bb981856146e9565b9350613bc9818560208601614946565b80840191505092915050565b6000613be26022836146d8565b9150613bed82614b4d565b604082019050919050565b6000613c056026836146d8565b9150613c1082614b9c565b604082019050919050565b6000613c28602a836146d8565b9150613c3382614beb565b604082019050919050565b6000613c4b602c836146d8565b9150613c5682614c3a565b604082019050919050565b6000613c6e6023836146d8565b9150613c7982614c89565b604082019050919050565b6000613c916025836146d8565b9150613c9c82614cd8565b604082019050919050565b6000613cb46031836146d8565b9150613cbf82614d27565b604082019050919050565b6000613cd76025836146d8565b9150613ce282614d76565b604082019050919050565b6000613cfa601e836146d8565b9150613d0582614dc5565b602082019050919050565b6000613d1d6039836146d8565b9150613d2882614dee565b604082019050919050565b6000613d406018836146d8565b9150613d4b82614e3d565b602082019050919050565b6000613d63602b836146d8565b9150613d6e82614e66565b604082019050919050565b6000613d866012836146d8565b9150613d9182614eb5565b602082019050919050565b6000613da96026836146d8565b9150613db482614ede565b604082019050919050565b6000613dcc6020836146d8565b9150613dd782614f2d565b602082019050919050565b6000613def602f836146d8565b9150613dfa82614f56565b604082019050919050565b6000613e12601a836146d8565b9150613e1d82614fa5565b602082019050919050565b6000613e356032836146d8565b9150613e4082614fce565b604082019050919050565b6000613e586015836146d8565b9150613e638261501d565b602082019050919050565b6000613e7b601d836146d8565b9150613e8682615046565b602082019050919050565b6000613e9e6022836146d8565b9150613ea98261506f565b604082019050919050565b6000613ec16000836146cd565b9150613ecc826150be565b600082019050919050565b6000613ee46010836146d8565b9150613eef826150c1565b602082019050919050565b6000613f076033836146d8565b9150613f12826150ea565b604082019050919050565b6000613f2a6016836146d8565b9150613f3582615139565b602082019050919050565b6000613f4d601d836146d8565b9150613f5882615162565b602082019050919050565b6000613f706021836146d8565b9150613f7b8261518b565b604082019050919050565b6000613f936027836146d8565b9150613f9e826151da565b604082019050919050565b6000613fb6602e836146d8565b9150613fc182615229565b604082019050919050565b6000613fd96026836146d8565b9150613fe482615278565b604082019050919050565b6000613ffc601f836146d8565b9150614007826152c7565b602082019050919050565b600061401f602f836146d8565b915061402a826152f0565b604082019050919050565b6000614042602d836146d8565b915061404d8261533f565b604082019050919050565b60006140656022836146d8565b91506140708261538e565b604082019050919050565b6040820160008201516140916000850182613b05565b5060208201516140a460208501826140c8565b50505050565b6140b381614909565b82525050565b6140c281614913565b82525050565b6140d181614923565b82525050565b6140e081614923565b82525050565b60006140f28285613ba4565b91506140fe8284613ba4565b91508190509392505050565b600061411582613eb4565b9150819050919050565b60006020820190506141346000830184613b14565b92915050565b600060808201905061414f6000830187613b14565b61415c6020830186613b14565b61416960408301856140aa565b818103606083015261417b8184613b32565b905095945050505050565b600060208201905061419b6000830184613b23565b92915050565b600060208201905081810360008301526141bb8184613b6b565b905092915050565b600060208201905081810360008301526141dc81613bd5565b9050919050565b600060208201905081810360008301526141fc81613bf8565b9050919050565b6000602082019050818103600083015261421c81613c1b565b9050919050565b6000602082019050818103600083015261423c81613c3e565b9050919050565b6000602082019050818103600083015261425c81613c61565b9050919050565b6000602082019050818103600083015261427c81613c84565b9050919050565b6000602082019050818103600083015261429c81613ca7565b9050919050565b600060208201905081810360008301526142bc81613cca565b9050919050565b600060208201905081810360008301526142dc81613ced565b9050919050565b600060208201905081810360008301526142fc81613d10565b9050919050565b6000602082019050818103600083015261431c81613d33565b9050919050565b6000602082019050818103600083015261433c81613d56565b9050919050565b6000602082019050818103600083015261435c81613d79565b9050919050565b6000602082019050818103600083015261437c81613d9c565b9050919050565b6000602082019050818103600083015261439c81613dbf565b9050919050565b600060208201905081810360008301526143bc81613de2565b9050919050565b600060208201905081810360008301526143dc81613e05565b9050919050565b600060208201905081810360008301526143fc81613e28565b9050919050565b6000602082019050818103600083015261441c81613e4b565b9050919050565b6000602082019050818103600083015261443c81613e6e565b9050919050565b6000602082019050818103600083015261445c81613e91565b9050919050565b6000602082019050818103600083015261447c81613ed7565b9050919050565b6000602082019050818103600083015261449c81613efa565b9050919050565b600060208201905081810360008301526144bc81613f1d565b9050919050565b600060208201905081810360008301526144dc81613f40565b9050919050565b600060208201905081810360008301526144fc81613f63565b9050919050565b6000602082019050818103600083015261451c81613f86565b9050919050565b6000602082019050818103600083015261453c81613fa9565b9050919050565b6000602082019050818103600083015261455c81613fcc565b9050919050565b6000602082019050818103600083015261457c81613fef565b9050919050565b6000602082019050818103600083015261459c81614012565b9050919050565b600060208201905081810360008301526145bc81614035565b9050919050565b600060208201905081810360008301526145dc81614058565b9050919050565b60006040820190506145f8600083018461407b565b92915050565b600060208201905061461360008301846140aa565b92915050565b600060608201905061462e60008301866140b9565b61463b60208301856140d7565b61464860408301846140b9565b949350505050565b600061465a61466b565b905061466682826149d5565b919050565b6000604051905090565b600067ffffffffffffffff8211156146905761468f614b0d565b5b61469982614b3c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006146ff826148cd565b915061470a836148cd565b9250826fffffffffffffffffffffffffffffffff0382111561472f5761472e614a80565b5b828201905092915050565b600061474582614909565b915061475083614909565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561478557614784614a80565b5b828201905092915050565b600061479b82614909565b91506147a683614909565b9250826147b6576147b5614aaf565b5b828204905092915050565b60006147cc82614909565b91506147d783614909565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148105761480f614a80565b5b828202905092915050565b6000614826826148cd565b9150614831836148cd565b92508282101561484457614843614a80565b5b828203905092915050565b600061485a82614909565b915061486583614909565b92508282101561487857614877614a80565b5b828203905092915050565b600061488e826148e9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614964578082015181840152602081019050614949565b83811115614973576000848401525b50505050565b600061498482614909565b9150600082141561499857614997614a80565b5b600182039050919050565b600060028204905060018216806149bb57607f821691505b602082108114156149cf576149ce614ade565b5b50919050565b6149de82614b3c565b810181811067ffffffffffffffff821117156149fd576149fc614b0d565b5b80604052505050565b6000614a1182614909565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a4457614a43614a80565b5b600182019050919050565b6000614a5a82614909565b9150614a6583614909565b925082614a7557614a74614aaf565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f63616c6c6564207769746820696e636f7272656374207075626c69632073616c60008201527f65206b6579000000000000000000000000000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f63616e6e6f74206d696e742074686973206d616e790000000000000000000000600082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6153e681614883565b81146153f157600080fd5b50565b6153fd81614895565b811461540857600080fd5b50565b615414816148a1565b811461541f57600080fd5b50565b61542b81614909565b811461543657600080fd5b50565b61544281614913565b811461544d57600080fd5b50565b61545981614923565b811461546457600080fd5b5056fea2646970667358221220cea71a5dfae92261cc981f6364906b902fe56f1c009c5fcae44936ac29431a5664736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000006210bfc60000000000000000000000000000000000000000000000000de0b6b3a7640000
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 10
Arg [1] : collectionSize_ (uint256): 1000
Arg [2] : amountForDevs_ (uint256): 500
Arg [3] : publicSaleStartTime_ (uint32): 1645264838
Arg [4] : publicPriceWei_ (uint64): 1000000000000000000
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [1] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [3] : 000000000000000000000000000000000000000000000000000000006210bfc6
Arg [4] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Deployed Bytecode Sourcemap
42650:3904:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27756:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29482:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31007:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30570:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26317:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44879:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31857:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46167:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26948:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45255:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44602:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32062:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26480:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45874:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29305:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28182:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41771:103;;;;;;;;;;;;;:::i;:::-;;42705:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41120:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45124:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42918:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;46404:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29637:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31275:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45980:181;;;;;;;;;;;;;:::i;:::-;;32282:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29798:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43495:891;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36697:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46291:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31612:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42029:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42758:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27756:370;27883:4;27928:25;27913:40;;;:11;:40;;;;:99;;;;27979:33;27964:48;;;:11;:48;;;;27913:99;:160;;;;28038:35;28023:50;;;:11;:50;;;;27913:160;:207;;;;28084:36;28108:11;28084:23;:36::i;:::-;27913:207;27899:221;;27756:370;;;:::o;29482:94::-;29536:13;29565:5;29558:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29482:94;:::o;31007:204::-;31075:7;31099:16;31107:7;31099;:16::i;:::-;31091:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31181:15;:24;31197:7;31181:24;;;;;;;;;;;;;;;;;;;;;31174:31;;31007:204;;;:::o;30570:379::-;30639:13;30655:24;30671:7;30655:15;:24::i;:::-;30639:40;;30700:5;30694:11;;:2;:11;;;;30686:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30785:5;30769:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30794:37;30811:5;30818:12;:10;:12::i;:::-;30794:16;:37::i;:::-;30769:62;30753:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;30915:28;30924:2;30928:7;30937:5;30915:8;:28::i;:::-;30570:379;;;:::o;26317:94::-;26370:7;26393:12;;26386:19;;26317:94;:::o;44879:239::-;41351:12;:10;:12::i;:::-;41340:23;;:7;:5;:7::i;:::-;:23;;;41332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45011:101:::1;;;;;;;;45030:19;45011:101;;;;;;45058:14;45011:101;;;;;;45081:10;:24;;;;;;;;;;;;45011:101;;;;::::0;44998:10:::1;:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44879:239:::0;;:::o;31857:142::-;31965:28;31975:4;31981:2;31985:7;31965:9;:28::i;:::-;31857:142;;;:::o;46167:118::-;41351:12;:10;:12::i;:::-;41340:23;;:7;:5;:7::i;:::-;:23;;;41332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1:::1;22769:7;;:19;;22761:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1;22902:7;:18;;;;46251:28:::2;46270:8;46251:18;:28::i;:::-;22127:1:::1;23081:7;:22;;;;46167:118:::0;:::o;26948:744::-;27057:7;27092:16;27102:5;27092:9;:16::i;:::-;27084:5;:24;27076:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27154:22;27179:13;:11;:13::i;:::-;27154:38;;27199:19;27229:25;27279:9;27274:350;27298:14;27294:1;:18;27274:350;;;27328:31;27362:11;:14;27374:1;27362:14;;;;;;;;;;;27328:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27415:1;27389:28;;:9;:14;;;:28;;;27385:89;;27450:9;:14;;;27430:34;;27385:89;27507:5;27486:26;;:17;:26;;;27482:135;;;27544:5;27529:11;:20;27525:59;;;27571:1;27564:8;;;;;;;;;27525:59;27594:13;;;;;:::i;:::-;;;;27482:135;27274:350;27314:3;;;;;:::i;:::-;;;;27274:350;;;;27630:56;;;;;;;;;;:::i;:::-;;;;;;;;26948:744;;;;;:::o;45255:442::-;41351:12;:10;:12::i;:::-;41340:23;;:7;:5;:7::i;:::-;:23;;;41332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45360:13:::1;45348:8;45332:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:41;;45316:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;45480:1;45464:12;45453:8;:23;;;;:::i;:::-;:28;45437:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;45550:17;45581:12;45570:8;:23;;;;:::i;:::-;45550:43;;45605:9;45600:92;45624:9;45620:1;:13;45600:92;;;45649:35;45659:10;45671:12;45649:9;:35::i;:::-;45635:3;;;;;:::i;:::-;;;;45600:92;;;;41411:1;45255:442:::0;:::o;44602:271::-;44743:4;44788:1;44770:14;:19;;:48;;;;;44817:1;44800:13;:18;;44770:48;:97;;;;;44848:19;44829:15;:38;;44770:97;44756:111;;44602:271;;;;;:::o;32062:157::-;32174:39;32191:4;32197:2;32201:7;32174:39;;;;;;;;;;;;:16;:39::i;:::-;32062:157;;;:::o;26480:177::-;26547:7;26579:13;:11;:13::i;:::-;26571:5;:21;26563:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26646:5;26639:12;;26480:177;;;:::o;45874:100::-;41351:12;:10;:12::i;:::-;41340:23;;:7;:5;:7::i;:::-;:23;;;41332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45961:7:::1;;45945:13;:23;;;;;;;:::i;:::-;;45874:100:::0;;:::o;29305:118::-;29369:7;29392:20;29404:7;29392:11;:20::i;:::-;:25;;;29385:32;;29305:118;;;:::o;28182:211::-;28246:7;28287:1;28270:19;;:5;:19;;;;28262:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28359:12;:19;28372:5;28359:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28351:36;;28344:43;;28182:211;;;:::o;41771:103::-;41351:12;:10;:12::i;:::-;41340:23;;:7;:5;:7::i;:::-;:23;;;41332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41836:30:::1;41863:1;41836:18;:30::i;:::-;41771:103::o:0;42705:48::-;;;:::o;41120:87::-;41166:7;41193:6;;;;;;;;;;;41186:13;;41120:87;:::o;45124:100::-;41351:12;:10;:12::i;:::-;41340:23;;:7;:5;:7::i;:::-;:23;;;41332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45215:3:::1;45188:10;:24;;;:30;;;;;;;;;;;;;;;;;;45124:100:::0;:::o;42918:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46404:147::-;46485:21;;:::i;:::-;46525:20;46537:7;46525:11;:20::i;:::-;46518:27;;46404:147;;;:::o;29637:98::-;29693:13;29722:7;29715:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29637:98;:::o;31275:274::-;31378:12;:10;:12::i;:::-;31366:24;;:8;:24;;;;31358:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31475:8;31430:18;:32;31449:12;:10;:12::i;:::-;31430:32;;;;;;;;;;;;;;;:42;31463:8;31430:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31524:8;31495:48;;31510:12;:10;:12::i;:::-;31495:48;;;31534:8;31495:48;;;;;;:::i;:::-;;;;;;;;31275:274;;:::o;45980:181::-;41351:12;:10;:12::i;:::-;41340:23;;:7;:5;:7::i;:::-;:23;;;41332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1:::1;22769:7;;:19;;22761:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1;22902:7;:18;;;;46045:12:::2;46063:10;:15;;46086:21;46063:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46044:68;;;46127:7;46119:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;22933:1;22127::::1;23081:7;:22;;;;45980:181::o:0;32282:311::-;32419:28;32429:4;32435:2;32439:7;32419:9;:28::i;:::-;32470:48;32493:4;32499:2;32503:7;32512:5;32470:22;:48::i;:::-;32454:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;32282:311;;;;:::o;29798:394::-;29896:13;29937:16;29945:7;29937;:16::i;:::-;29921:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;30027:21;30051:10;:8;:10::i;:::-;30027:34;;30106:1;30088:7;30082:21;:25;:104;;;;;;;;;;;;;;;;;30143:7;30152:18;:7;:16;:18::i;:::-;30126:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30082:104;30068:118;;;29798:394;;;:::o;43495:891::-;43430:10;43417:23;;:9;:23;;;43409:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43621:24:::1;43648:10;43621:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;43665:21;43697:6;:20;;;43689:29;;43665:53;;43725:19;43755:6;:18;;;43747:27;;43725:49;;43781:27;43819:6;:26;;;43811:35;;43781:65;;43886:19;43869:13;:36;43853:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;43985:63;44000:11;44013:13;44028:19;43985:14;:63::i;:::-;43969:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;44138:14;44126:8;44110:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;44102:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44237:23;44225:8;44198:24;44211:10;44198:12;:24::i;:::-;:35;;;;:::i;:::-;:62;;44182:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;44306:31;44316:10;44328:8;44306:9;:31::i;:::-;44344:36;44371:8;44357:11;:22;;;;:::i;:::-;44344:12;:36::i;:::-;43482:1;;;;43495:891:::0;;:::o;36697:43::-;;;;:::o;46291:107::-;46349:7;46372:20;46386:5;46372:13;:20::i;:::-;46365:27;;46291:107;;;:::o;31612:186::-;31734:4;31757:18;:25;31776:5;31757:25;;;;;;;;;;;;;;;:35;31783:8;31757:35;;;;;;;;;;;;;;;;;;;;;;;;;31750:42;;31612:186;;;;:::o;42029:201::-;41351:12;:10;:12::i;:::-;41340:23;;:7;:5;:7::i;:::-;:23;;;41332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42138:1:::1;42118:22;;:8;:22;;;;42110:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42194:28;42213:8;42194:18;:28::i;:::-;42029:201:::0;:::o;42758:38::-;;;:::o;13440:157::-;13525:4;13564:25;13549:40;;;:11;:40;;;;13542:47;;13440:157;;;:::o;32832:105::-;32889:4;32919:12;;32909:7;:22;32902:29;;32832:105;;;:::o;23797:98::-;23850:7;23877:10;23870:17;;23797:98;:::o;36519:172::-;36643:2;36616:15;:24;36632:7;36616:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36677:7;36673:2;36657:28;;36666:5;36657:28;;;;;;;;;;;;36519:172;;;:::o;34884:1529::-;34981:35;35019:20;35031:7;35019:11;:20::i;:::-;34981:58;;35048:22;35090:13;:18;;;35074:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;35143:12;:10;:12::i;:::-;35119:36;;:20;35131:7;35119:11;:20::i;:::-;:36;;;35074:81;:142;;;;35166:50;35183:13;:18;;;35203:12;:10;:12::i;:::-;35166:16;:50::i;:::-;35074:142;35048:169;;35242:17;35226:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35374:4;35352:26;;:13;:18;;;:26;;;35336:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35463:1;35449:16;;:2;:16;;;;35441:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35516:43;35538:4;35544:2;35548:7;35557:1;35516:21;:43::i;:::-;35616:49;35633:1;35637:7;35646:13;:18;;;35616:8;:49::i;:::-;35704:1;35674:12;:18;35687:4;35674:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35740:1;35712:12;:16;35725:2;35712:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35771:43;;;;;;;;35786:2;35771:43;;;;;;35797:15;35771:43;;;;;35748:11;:20;35760:7;35748:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36042:19;36074:1;36064:7;:11;;;;:::i;:::-;36042:33;;36127:1;36086:43;;:11;:24;36098:11;36086:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;36082:236;;;36144:20;36152:11;36144:7;:20::i;:::-;36140:171;;;36204:97;;;;;;;;36231:13;:18;;;36204:97;;;;;;36262:13;:28;;;36204:97;;;;;36177:11;:24;36189:11;36177:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36140:171;36082:236;36350:7;36346:2;36331:27;;36340:4;36331:27;;;;;;;;;;;;36365:42;36386:4;36392:2;36396:7;36405:1;36365:20;:42::i;:::-;34884:1529;;;;;;:::o;36845:846::-;36907:25;36935:24;;36907:52;;36985:1;36974:8;:12;36966:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;37022:16;37072:1;37061:8;37041:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;37022:51;;37112:1;37095:14;:18;;;;:::i;:::-;37084:8;:29;37080:81;;;37152:1;37135:14;:18;;;;:::i;:::-;37124:29;;37080:81;37276:17;37284:8;37276:7;:17::i;:::-;37268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37348:9;37360:17;37348:29;;37343:297;37384:8;37379:1;:13;37343:297;;37443:1;37412:33;;:11;:14;37424:1;37412:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;37408:225;;;37458:31;37492:14;37504:1;37492:11;:14::i;:::-;37458:48;;37534:89;;;;;;;;37561:9;:14;;;37534:89;;;;;;37588:9;:24;;;37534:89;;;;;37517:11;:14;37529:1;37517:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37408:225;;37394:3;;;;;:::i;:::-;;;;37343:297;;;;37684:1;37673:8;:12;;;;:::i;:::-;37646:24;:39;;;;36845:846;;;:::o;32943:98::-;33008:27;33018:2;33022:8;33008:27;;;;;;;;;;;;:9;:27::i;:::-;32943:98;;:::o;28645:606::-;28721:21;;:::i;:::-;28762:16;28770:7;28762;:16::i;:::-;28754:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28834:26;28882:12;28871:7;:23;28867:93;;28951:1;28936:12;28926:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;28905:47;;28867:93;28973:12;28988:7;28973:22;;28968:212;29005:18;28997:4;:26;28968:212;;29042:31;29076:11;:17;29088:4;29076:17;;;;;;;;;;;29042:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29132:1;29106:28;;:9;:14;;;:28;;;29102:71;;29154:9;29147:16;;;;;;;29102:71;28968:212;29025:6;;;;;:::i;:::-;;;;28968:212;;;;29188:57;;;;;;;;;;:::i;:::-;;;;;;;;28645:606;;;;:::o;42390:191::-;42464:16;42483:6;;;;;;;;;;;42464:25;;42509:8;42500:6;;:17;;;;;;;;;;;;;;;;;;42564:8;42533:40;;42554:8;42533:40;;;;;;;;;;;;42390:191;;:::o;38234:690::-;38371:4;38388:15;:2;:13;;;:15::i;:::-;38384:535;;;38443:2;38427:36;;;38464:12;:10;:12::i;:::-;38478:4;38484:7;38493:5;38427:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38414:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38675:1;38658:6;:13;:18;38654:215;;;38691:61;;;;;;;;;;:::i;:::-;;;;;;;;38654:215;38837:6;38831:13;38822:6;38818:2;38814:15;38807:38;38414:464;38559:45;;;38549:55;;;:6;:55;;;;38542:62;;;;;38384:535;38907:4;38900:11;;38234:690;;;;;;;:::o;45760:108::-;45820:13;45849;45842:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45760:108;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;44392:204::-;44465:5;44452:9;:18;;44444:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44520:5;44508:9;:17;44504:87;;;44544:10;44536:28;;:47;44577:5;44565:9;:17;;;;:::i;:::-;44536:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44504:87;44392:204;:::o;28399:240::-;28460:7;28509:1;28492:19;;:5;:19;;;;28476:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;28600:12;:19;28613:5;28600:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;28592:41;;28585:48;;28399:240;;;:::o;39386:141::-;;;;;:::o;39913:140::-;;;;;:::o;33380:1272::-;33485:20;33508:12;;33485:35;;33549:1;33535:16;;:2;:16;;;;33527:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33726:21;33734:12;33726:7;:21::i;:::-;33725:22;33717:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33808:12;33796:8;:24;;33788:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33868:61;33898:1;33902:2;33906:12;33920:8;33868:21;:61::i;:::-;33938:30;33971:12;:16;33984:2;33971:16;;;;;;;;;;;;;;;33938:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34013:119;;;;;;;;34063:8;34033:11;:19;;;:39;;;;:::i;:::-;34013:119;;;;;;34116:8;34081:11;:24;;;:44;;;;:::i;:::-;34013:119;;;;;33994:12;:16;34007:2;33994:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34167:43;;;;;;;;34182:2;34167:43;;;;;;34193:15;34167:43;;;;;34139:11;:25;34151:12;34139:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34219:20;34242:12;34219:35;;34268:9;34263:281;34287:8;34283:1;:12;34263:281;;;34341:12;34337:2;34316:38;;34333:1;34316:38;;;;;;;;;;;;34381:59;34412:1;34416:2;34420:12;34434:5;34381:22;:59::i;:::-;34363:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;34522:14;;;;;:::i;:::-;;;;34297:3;;;;;:::i;:::-;;;;34263:281;;;;34567:12;34552;:27;;;;34586:60;34615:1;34619:2;34623:12;34637:8;34586:20;:60::i;:::-;33380:1272;;;;;;:::o;3357:326::-;3417:4;3674:1;3652:7;:19;;;:23;3645:30;;3357:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:133::-;544:5;582:6;569:20;560:29;;598:30;622:5;598:30;:::i;:::-;550:84;;;;:::o;640:137::-;685:5;723:6;710:20;701:29;;739:32;765:5;739:32;:::i;:::-;691:86;;;;:::o;783:141::-;839:5;870:6;864:13;855:22;;886:32;912:5;886:32;:::i;:::-;845:79;;;;:::o;943:271::-;998:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1065:1;1062;1055:12;1014:2;1105:6;1092:20;1130:78;1204:3;1196:6;1189:4;1181:6;1177:17;1130:78;:::i;:::-;1121:87;;1004:210;;;;;:::o;1234:352::-;1292:8;1302:6;1352:3;1345:4;1337:6;1333:17;1329:27;1319:2;;1370:1;1367;1360:12;1319:2;1406:6;1393:20;1383:30;;1436:18;1428:6;1425:30;1422:2;;;1468:1;1465;1458:12;1422:2;1505:4;1497:6;1493:17;1481:29;;1559:3;1551:4;1543:6;1539:17;1529:8;1525:32;1522:41;1519:2;;;1576:1;1573;1566:12;1519:2;1309:277;;;;;:::o;1592:139::-;1638:5;1676:6;1663:20;1654:29;;1692:33;1719:5;1692:33;:::i;:::-;1644:87;;;;:::o;1737:137::-;1782:5;1820:6;1807:20;1798:29;;1836:32;1862:5;1836:32;:::i;:::-;1788:86;;;;:::o;1880:137::-;1925:5;1963:6;1950:20;1941:29;;1979:32;2005:5;1979:32;:::i;:::-;1931:86;;;;:::o;2023:262::-;2082:6;2131:2;2119:9;2110:7;2106:23;2102:32;2099:2;;;2147:1;2144;2137:12;2099:2;2190:1;2215:53;2260:7;2251:6;2240:9;2236:22;2215:53;:::i;:::-;2205:63;;2161:117;2089:196;;;;:::o;2291:407::-;2359:6;2367;2416:2;2404:9;2395:7;2391:23;2387:32;2384:2;;;2432:1;2429;2422:12;2384:2;2475:1;2500:53;2545:7;2536:6;2525:9;2521:22;2500:53;:::i;:::-;2490:63;;2446:117;2602:2;2628:53;2673:7;2664:6;2653:9;2649:22;2628:53;:::i;:::-;2618:63;;2573:118;2374:324;;;;;:::o;2704:552::-;2781:6;2789;2797;2846:2;2834:9;2825:7;2821:23;2817:32;2814:2;;;2862:1;2859;2852:12;2814:2;2905:1;2930:53;2975:7;2966:6;2955:9;2951:22;2930:53;:::i;:::-;2920:63;;2876:117;3032:2;3058:53;3103:7;3094:6;3083:9;3079:22;3058:53;:::i;:::-;3048:63;;3003:118;3160:2;3186:53;3231:7;3222:6;3211:9;3207:22;3186:53;:::i;:::-;3176:63;;3131:118;2804:452;;;;;:::o;3262:809::-;3357:6;3365;3373;3381;3430:3;3418:9;3409:7;3405:23;3401:33;3398:2;;;3447:1;3444;3437:12;3398:2;3490:1;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3461:117;3617:2;3643:53;3688:7;3679:6;3668:9;3664:22;3643:53;:::i;:::-;3633:63;;3588:118;3745:2;3771:53;3816:7;3807:6;3796:9;3792:22;3771:53;:::i;:::-;3761:63;;3716:118;3901:2;3890:9;3886:18;3873:32;3932:18;3924:6;3921:30;3918:2;;;3964:1;3961;3954:12;3918:2;3992:62;4046:7;4037:6;4026:9;4022:22;3992:62;:::i;:::-;3982:72;;3844:220;3388:683;;;;;;;:::o;4077:401::-;4142:6;4150;4199:2;4187:9;4178:7;4174:23;4170:32;4167:2;;;4215:1;4212;4205:12;4167:2;4258:1;4283:53;4328:7;4319:6;4308:9;4304:22;4283:53;:::i;:::-;4273:63;;4229:117;4385:2;4411:50;4453:7;4444:6;4433:9;4429:22;4411:50;:::i;:::-;4401:60;;4356:115;4157:321;;;;;:::o;4484:407::-;4552:6;4560;4609:2;4597:9;4588:7;4584:23;4580:32;4577:2;;;4625:1;4622;4615:12;4577:2;4668:1;4693:53;4738:7;4729:6;4718:9;4714:22;4693:53;:::i;:::-;4683:63;;4639:117;4795:2;4821:53;4866:7;4857:6;4846:9;4842:22;4821:53;:::i;:::-;4811:63;;4766:118;4567:324;;;;;:::o;4897:260::-;4955:6;5004:2;4992:9;4983:7;4979:23;4975:32;4972:2;;;5020:1;5017;5010:12;4972:2;5063:1;5088:52;5132:7;5123:6;5112:9;5108:22;5088:52;:::i;:::-;5078:62;;5034:116;4962:195;;;;:::o;5163:282::-;5232:6;5281:2;5269:9;5260:7;5256:23;5252:32;5249:2;;;5297:1;5294;5287:12;5249:2;5340:1;5365:63;5420:7;5411:6;5400:9;5396:22;5365:63;:::i;:::-;5355:73;;5311:127;5239:206;;;;:::o;5451:395::-;5522:6;5530;5579:2;5567:9;5558:7;5554:23;5550:32;5547:2;;;5595:1;5592;5585:12;5547:2;5666:1;5655:9;5651:17;5638:31;5696:18;5688:6;5685:30;5682:2;;;5728:1;5725;5718:12;5682:2;5764:65;5821:7;5812:6;5801:9;5797:22;5764:65;:::i;:::-;5746:83;;;;5609:230;5537:309;;;;;:::o;5852:262::-;5911:6;5960:2;5948:9;5939:7;5935:23;5931:32;5928:2;;;5976:1;5973;5966:12;5928:2;6019:1;6044:53;6089:7;6080:6;6069:9;6065:22;6044:53;:::i;:::-;6034:63;;5990:117;5918:196;;;;:::o;6120:407::-;6188:6;6196;6245:2;6233:9;6224:7;6220:23;6216:32;6213:2;;;6261:1;6258;6251:12;6213:2;6304:1;6329:53;6374:7;6365:6;6354:9;6350:22;6329:53;:::i;:::-;6319:63;;6275:117;6431:2;6457:53;6502:7;6493:6;6482:9;6478:22;6457:53;:::i;:::-;6447:63;;6402:118;6203:324;;;;;:::o;6533:552::-;6610:6;6618;6626;6675:2;6663:9;6654:7;6650:23;6646:32;6643:2;;;6691:1;6688;6681:12;6643:2;6734:1;6759:53;6804:7;6795:6;6784:9;6780:22;6759:53;:::i;:::-;6749:63;;6705:117;6861:2;6887:53;6932:7;6923:6;6912:9;6908:22;6887:53;:::i;:::-;6877:63;;6832:118;6989:2;7015:53;7060:7;7051:6;7040:9;7036:22;7015:53;:::i;:::-;7005:63;;6960:118;6633:452;;;;;:::o;7091:260::-;7149:6;7198:2;7186:9;7177:7;7173:23;7169:32;7166:2;;;7214:1;7211;7204:12;7166:2;7257:1;7282:52;7326:7;7317:6;7306:9;7302:22;7282:52;:::i;:::-;7272:62;;7228:116;7156:195;;;;:::o;7357:403::-;7423:6;7431;7480:2;7468:9;7459:7;7455:23;7451:32;7448:2;;;7496:1;7493;7486:12;7448:2;7539:1;7564:52;7608:7;7599:6;7588:9;7584:22;7564:52;:::i;:::-;7554:62;;7510:116;7665:2;7691:52;7735:7;7726:6;7715:9;7711:22;7691:52;:::i;:::-;7681:62;;7636:117;7438:322;;;;;:::o;7766:108::-;7843:24;7861:5;7843:24;:::i;:::-;7838:3;7831:37;7821:53;;:::o;7880:118::-;7967:24;7985:5;7967:24;:::i;:::-;7962:3;7955:37;7945:53;;:::o;8004:109::-;8085:21;8100:5;8085:21;:::i;:::-;8080:3;8073:34;8063:50;;:::o;8119:360::-;8205:3;8233:38;8265:5;8233:38;:::i;:::-;8287:70;8350:6;8345:3;8287:70;:::i;:::-;8280:77;;8366:52;8411:6;8406:3;8399:4;8392:5;8388:16;8366:52;:::i;:::-;8443:29;8465:6;8443:29;:::i;:::-;8438:3;8434:39;8427:46;;8209:270;;;;;:::o;8485:364::-;8573:3;8601:39;8634:5;8601:39;:::i;:::-;8656:71;8720:6;8715:3;8656:71;:::i;:::-;8649:78;;8736:52;8781:6;8776:3;8769:4;8762:5;8758:16;8736:52;:::i;:::-;8813:29;8835:6;8813:29;:::i;:::-;8808:3;8804:39;8797:46;;8577:272;;;;;:::o;8855:377::-;8961:3;8989:39;9022:5;8989:39;:::i;:::-;9044:89;9126:6;9121:3;9044:89;:::i;:::-;9037:96;;9142:52;9187:6;9182:3;9175:4;9168:5;9164:16;9142:52;:::i;:::-;9219:6;9214:3;9210:16;9203:23;;8965:267;;;;;:::o;9238:366::-;9380:3;9401:67;9465:2;9460:3;9401:67;:::i;:::-;9394:74;;9477:93;9566:3;9477:93;:::i;:::-;9595:2;9590:3;9586:12;9579:19;;9384:220;;;:::o;9610:366::-;9752:3;9773:67;9837:2;9832:3;9773:67;:::i;:::-;9766:74;;9849:93;9938:3;9849:93;:::i;:::-;9967:2;9962:3;9958:12;9951:19;;9756:220;;;:::o;9982:366::-;10124:3;10145:67;10209:2;10204:3;10145:67;:::i;:::-;10138:74;;10221:93;10310:3;10221:93;:::i;:::-;10339:2;10334:3;10330:12;10323:19;;10128:220;;;:::o;10354:366::-;10496:3;10517:67;10581:2;10576:3;10517:67;:::i;:::-;10510:74;;10593:93;10682:3;10593:93;:::i;:::-;10711:2;10706:3;10702:12;10695:19;;10500:220;;;:::o;10726:366::-;10868:3;10889:67;10953:2;10948:3;10889:67;:::i;:::-;10882:74;;10965:93;11054:3;10965:93;:::i;:::-;11083:2;11078:3;11074:12;11067:19;;10872:220;;;:::o;11098:366::-;11240:3;11261:67;11325:2;11320:3;11261:67;:::i;:::-;11254:74;;11337:93;11426:3;11337:93;:::i;:::-;11455:2;11450:3;11446:12;11439:19;;11244:220;;;:::o;11470:366::-;11612:3;11633:67;11697:2;11692:3;11633:67;:::i;:::-;11626:74;;11709:93;11798:3;11709:93;:::i;:::-;11827:2;11822:3;11818:12;11811:19;;11616:220;;;:::o;11842:366::-;11984:3;12005:67;12069:2;12064:3;12005:67;:::i;:::-;11998:74;;12081:93;12170:3;12081:93;:::i;:::-;12199:2;12194:3;12190:12;12183:19;;11988:220;;;:::o;12214:366::-;12356:3;12377:67;12441:2;12436:3;12377:67;:::i;:::-;12370:74;;12453:93;12542:3;12453:93;:::i;:::-;12571:2;12566:3;12562:12;12555:19;;12360:220;;;:::o;12586:366::-;12728:3;12749:67;12813:2;12808:3;12749:67;:::i;:::-;12742:74;;12825:93;12914:3;12825:93;:::i;:::-;12943:2;12938:3;12934:12;12927:19;;12732:220;;;:::o;12958:366::-;13100:3;13121:67;13185:2;13180:3;13121:67;:::i;:::-;13114:74;;13197:93;13286:3;13197:93;:::i;:::-;13315:2;13310:3;13306:12;13299:19;;13104:220;;;:::o;13330:366::-;13472:3;13493:67;13557:2;13552:3;13493:67;:::i;:::-;13486:74;;13569:93;13658:3;13569:93;:::i;:::-;13687:2;13682:3;13678:12;13671:19;;13476:220;;;:::o;13702:366::-;13844:3;13865:67;13929:2;13924:3;13865:67;:::i;:::-;13858:74;;13941:93;14030:3;13941:93;:::i;:::-;14059:2;14054:3;14050:12;14043:19;;13848:220;;;:::o;14074:366::-;14216:3;14237:67;14301:2;14296:3;14237:67;:::i;:::-;14230:74;;14313:93;14402:3;14313:93;:::i;:::-;14431:2;14426:3;14422:12;14415:19;;14220:220;;;:::o;14446:366::-;14588:3;14609:67;14673:2;14668:3;14609:67;:::i;:::-;14602:74;;14685:93;14774:3;14685:93;:::i;:::-;14803:2;14798:3;14794:12;14787:19;;14592:220;;;:::o;14818:366::-;14960:3;14981:67;15045:2;15040:3;14981:67;:::i;:::-;14974:74;;15057:93;15146:3;15057:93;:::i;:::-;15175:2;15170:3;15166:12;15159:19;;14964:220;;;:::o;15190:366::-;15332:3;15353:67;15417:2;15412:3;15353:67;:::i;:::-;15346:74;;15429:93;15518:3;15429:93;:::i;:::-;15547:2;15542:3;15538:12;15531:19;;15336:220;;;:::o;15562:366::-;15704:3;15725:67;15789:2;15784:3;15725:67;:::i;:::-;15718:74;;15801:93;15890:3;15801:93;:::i;:::-;15919:2;15914:3;15910:12;15903:19;;15708:220;;;:::o;15934:366::-;16076:3;16097:67;16161:2;16156:3;16097:67;:::i;:::-;16090:74;;16173:93;16262:3;16173:93;:::i;:::-;16291:2;16286:3;16282:12;16275:19;;16080:220;;;:::o;16306:366::-;16448:3;16469:67;16533:2;16528:3;16469:67;:::i;:::-;16462:74;;16545:93;16634:3;16545:93;:::i;:::-;16663:2;16658:3;16654:12;16647:19;;16452:220;;;:::o;16678:366::-;16820:3;16841:67;16905:2;16900:3;16841:67;:::i;:::-;16834:74;;16917:93;17006:3;16917:93;:::i;:::-;17035:2;17030:3;17026:12;17019:19;;16824:220;;;:::o;17050:398::-;17209:3;17230:83;17311:1;17306:3;17230:83;:::i;:::-;17223:90;;17322:93;17411:3;17322:93;:::i;:::-;17440:1;17435:3;17431:11;17424:18;;17213:235;;;:::o;17454:366::-;17596:3;17617:67;17681:2;17676:3;17617:67;:::i;:::-;17610:74;;17693:93;17782:3;17693:93;:::i;:::-;17811:2;17806:3;17802:12;17795:19;;17600:220;;;:::o;17826:366::-;17968:3;17989:67;18053:2;18048:3;17989:67;:::i;:::-;17982:74;;18065:93;18154:3;18065:93;:::i;:::-;18183:2;18178:3;18174:12;18167:19;;17972:220;;;:::o;18198:366::-;18340:3;18361:67;18425:2;18420:3;18361:67;:::i;:::-;18354:74;;18437:93;18526:3;18437:93;:::i;:::-;18555:2;18550:3;18546:12;18539:19;;18344:220;;;:::o;18570:366::-;18712:3;18733:67;18797:2;18792:3;18733:67;:::i;:::-;18726:74;;18809:93;18898:3;18809:93;:::i;:::-;18927:2;18922:3;18918:12;18911:19;;18716:220;;;:::o;18942:366::-;19084:3;19105:67;19169:2;19164:3;19105:67;:::i;:::-;19098:74;;19181:93;19270:3;19181:93;:::i;:::-;19299:2;19294:3;19290:12;19283:19;;19088:220;;;:::o;19314:366::-;19456:3;19477:67;19541:2;19536:3;19477:67;:::i;:::-;19470:74;;19553:93;19642:3;19553:93;:::i;:::-;19671:2;19666:3;19662:12;19655:19;;19460:220;;;:::o;19686:366::-;19828:3;19849:67;19913:2;19908:3;19849:67;:::i;:::-;19842:74;;19925:93;20014:3;19925:93;:::i;:::-;20043:2;20038:3;20034:12;20027:19;;19832:220;;;:::o;20058:366::-;20200:3;20221:67;20285:2;20280:3;20221:67;:::i;:::-;20214:74;;20297:93;20386:3;20297:93;:::i;:::-;20415:2;20410:3;20406:12;20399:19;;20204:220;;;:::o;20430:366::-;20572:3;20593:67;20657:2;20652:3;20593:67;:::i;:::-;20586:74;;20669:93;20758:3;20669:93;:::i;:::-;20787:2;20782:3;20778:12;20771:19;;20576:220;;;:::o;20802:366::-;20944:3;20965:67;21029:2;21024:3;20965:67;:::i;:::-;20958:74;;21041:93;21130:3;21041:93;:::i;:::-;21159:2;21154:3;21150:12;21143:19;;20948:220;;;:::o;21174:366::-;21316:3;21337:67;21401:2;21396:3;21337:67;:::i;:::-;21330:74;;21413:93;21502:3;21413:93;:::i;:::-;21531:2;21526:3;21522:12;21515:19;;21320:220;;;:::o;21546:366::-;21688:3;21709:67;21773:2;21768:3;21709:67;:::i;:::-;21702:74;;21785:93;21874:3;21785:93;:::i;:::-;21903:2;21898:3;21894:12;21887:19;;21692:220;;;:::o;21988:527::-;22147:4;22142:3;22138:14;22234:4;22227:5;22223:16;22217:23;22253:63;22310:4;22305:3;22301:14;22287:12;22253:63;:::i;:::-;22162:164;22418:4;22411:5;22407:16;22401:23;22437:61;22492:4;22487:3;22483:14;22469:12;22437:61;:::i;:::-;22336:172;22116:399;;;:::o;22521:118::-;22608:24;22626:5;22608:24;:::i;:::-;22603:3;22596:37;22586:53;;:::o;22645:115::-;22730:23;22747:5;22730:23;:::i;:::-;22725:3;22718:36;22708:52;;:::o;22766:105::-;22841:23;22858:5;22841:23;:::i;:::-;22836:3;22829:36;22819:52;;:::o;22877:115::-;22962:23;22979:5;22962:23;:::i;:::-;22957:3;22950:36;22940:52;;:::o;22998:435::-;23178:3;23200:95;23291:3;23282:6;23200:95;:::i;:::-;23193:102;;23312:95;23403:3;23394:6;23312:95;:::i;:::-;23305:102;;23424:3;23417:10;;23182:251;;;;;:::o;23439:379::-;23623:3;23645:147;23788:3;23645:147;:::i;:::-;23638:154;;23809:3;23802:10;;23627:191;;;:::o;23824:222::-;23917:4;23955:2;23944:9;23940:18;23932:26;;23968:71;24036:1;24025:9;24021:17;24012:6;23968:71;:::i;:::-;23922:124;;;;:::o;24052:640::-;24247:4;24285:3;24274:9;24270:19;24262:27;;24299:71;24367:1;24356:9;24352:17;24343:6;24299:71;:::i;:::-;24380:72;24448:2;24437:9;24433:18;24424:6;24380:72;:::i;:::-;24462;24530:2;24519:9;24515:18;24506:6;24462:72;:::i;:::-;24581:9;24575:4;24571:20;24566:2;24555:9;24551:18;24544:48;24609:76;24680:4;24671:6;24609:76;:::i;:::-;24601:84;;24252:440;;;;;;;:::o;24698:210::-;24785:4;24823:2;24812:9;24808:18;24800:26;;24836:65;24898:1;24887:9;24883:17;24874:6;24836:65;:::i;:::-;24790:118;;;;:::o;24914:313::-;25027:4;25065:2;25054:9;25050:18;25042:26;;25114:9;25108:4;25104:20;25100:1;25089:9;25085:17;25078:47;25142:78;25215:4;25206:6;25142:78;:::i;:::-;25134:86;;25032:195;;;;:::o;25233:419::-;25399:4;25437:2;25426:9;25422:18;25414:26;;25486:9;25480:4;25476:20;25472:1;25461:9;25457:17;25450:47;25514:131;25640:4;25514:131;:::i;:::-;25506:139;;25404:248;;;:::o;25658:419::-;25824:4;25862:2;25851:9;25847:18;25839:26;;25911:9;25905:4;25901:20;25897:1;25886:9;25882:17;25875:47;25939:131;26065:4;25939:131;:::i;:::-;25931:139;;25829:248;;;:::o;26083:419::-;26249:4;26287:2;26276:9;26272:18;26264:26;;26336:9;26330:4;26326:20;26322:1;26311:9;26307:17;26300:47;26364:131;26490:4;26364:131;:::i;:::-;26356:139;;26254:248;;;:::o;26508:419::-;26674:4;26712:2;26701:9;26697:18;26689:26;;26761:9;26755:4;26751:20;26747:1;26736:9;26732:17;26725:47;26789:131;26915:4;26789:131;:::i;:::-;26781:139;;26679:248;;;:::o;26933:419::-;27099:4;27137:2;27126:9;27122:18;27114:26;;27186:9;27180:4;27176:20;27172:1;27161:9;27157:17;27150:47;27214:131;27340:4;27214:131;:::i;:::-;27206:139;;27104:248;;;:::o;27358:419::-;27524:4;27562:2;27551:9;27547:18;27539:26;;27611:9;27605:4;27601:20;27597:1;27586:9;27582:17;27575:47;27639:131;27765:4;27639:131;:::i;:::-;27631:139;;27529:248;;;:::o;27783:419::-;27949:4;27987:2;27976:9;27972:18;27964:26;;28036:9;28030:4;28026:20;28022:1;28011:9;28007:17;28000:47;28064:131;28190:4;28064:131;:::i;:::-;28056:139;;27954:248;;;:::o;28208:419::-;28374:4;28412:2;28401:9;28397:18;28389:26;;28461:9;28455:4;28451:20;28447:1;28436:9;28432:17;28425:47;28489:131;28615:4;28489:131;:::i;:::-;28481:139;;28379:248;;;:::o;28633:419::-;28799:4;28837:2;28826:9;28822:18;28814:26;;28886:9;28880:4;28876:20;28872:1;28861:9;28857:17;28850:47;28914:131;29040:4;28914:131;:::i;:::-;28906:139;;28804:248;;;:::o;29058:419::-;29224:4;29262:2;29251:9;29247:18;29239:26;;29311:9;29305:4;29301:20;29297:1;29286:9;29282:17;29275:47;29339:131;29465:4;29339:131;:::i;:::-;29331:139;;29229:248;;;:::o;29483:419::-;29649:4;29687:2;29676:9;29672:18;29664:26;;29736:9;29730:4;29726:20;29722:1;29711:9;29707:17;29700:47;29764:131;29890:4;29764:131;:::i;:::-;29756:139;;29654:248;;;:::o;29908:419::-;30074:4;30112:2;30101:9;30097:18;30089:26;;30161:9;30155:4;30151:20;30147:1;30136:9;30132:17;30125:47;30189:131;30315:4;30189:131;:::i;:::-;30181:139;;30079:248;;;:::o;30333:419::-;30499:4;30537:2;30526:9;30522:18;30514:26;;30586:9;30580:4;30576:20;30572:1;30561:9;30557:17;30550:47;30614:131;30740:4;30614:131;:::i;:::-;30606:139;;30504:248;;;:::o;30758:419::-;30924:4;30962:2;30951:9;30947:18;30939:26;;31011:9;31005:4;31001:20;30997:1;30986:9;30982:17;30975:47;31039:131;31165:4;31039:131;:::i;:::-;31031:139;;30929:248;;;:::o;31183:419::-;31349:4;31387:2;31376:9;31372:18;31364:26;;31436:9;31430:4;31426:20;31422:1;31411:9;31407:17;31400:47;31464:131;31590:4;31464:131;:::i;:::-;31456:139;;31354:248;;;:::o;31608:419::-;31774:4;31812:2;31801:9;31797:18;31789:26;;31861:9;31855:4;31851:20;31847:1;31836:9;31832:17;31825:47;31889:131;32015:4;31889:131;:::i;:::-;31881:139;;31779:248;;;:::o;32033:419::-;32199:4;32237:2;32226:9;32222:18;32214:26;;32286:9;32280:4;32276:20;32272:1;32261:9;32257:17;32250:47;32314:131;32440:4;32314:131;:::i;:::-;32306:139;;32204:248;;;:::o;32458:419::-;32624:4;32662:2;32651:9;32647:18;32639:26;;32711:9;32705:4;32701:20;32697:1;32686:9;32682:17;32675:47;32739:131;32865:4;32739:131;:::i;:::-;32731:139;;32629:248;;;:::o;32883:419::-;33049:4;33087:2;33076:9;33072:18;33064:26;;33136:9;33130:4;33126:20;33122:1;33111:9;33107:17;33100:47;33164:131;33290:4;33164:131;:::i;:::-;33156:139;;33054:248;;;:::o;33308:419::-;33474:4;33512:2;33501:9;33497:18;33489:26;;33561:9;33555:4;33551:20;33547:1;33536:9;33532:17;33525:47;33589:131;33715:4;33589:131;:::i;:::-;33581:139;;33479:248;;;:::o;33733:419::-;33899:4;33937:2;33926:9;33922:18;33914:26;;33986:9;33980:4;33976:20;33972:1;33961:9;33957:17;33950:47;34014:131;34140:4;34014:131;:::i;:::-;34006:139;;33904:248;;;:::o;34158:419::-;34324:4;34362:2;34351:9;34347:18;34339:26;;34411:9;34405:4;34401:20;34397:1;34386:9;34382:17;34375:47;34439:131;34565:4;34439:131;:::i;:::-;34431:139;;34329:248;;;:::o;34583:419::-;34749:4;34787:2;34776:9;34772:18;34764:26;;34836:9;34830:4;34826:20;34822:1;34811:9;34807:17;34800:47;34864:131;34990:4;34864:131;:::i;:::-;34856:139;;34754:248;;;:::o;35008:419::-;35174:4;35212:2;35201:9;35197:18;35189:26;;35261:9;35255:4;35251:20;35247:1;35236:9;35232:17;35225:47;35289:131;35415:4;35289:131;:::i;:::-;35281:139;;35179:248;;;:::o;35433:419::-;35599:4;35637:2;35626:9;35622:18;35614:26;;35686:9;35680:4;35676:20;35672:1;35661:9;35657:17;35650:47;35714:131;35840:4;35714:131;:::i;:::-;35706:139;;35604:248;;;:::o;35858:419::-;36024:4;36062:2;36051:9;36047:18;36039:26;;36111:9;36105:4;36101:20;36097:1;36086:9;36082:17;36075:47;36139:131;36265:4;36139:131;:::i;:::-;36131:139;;36029:248;;;:::o;36283:419::-;36449:4;36487:2;36476:9;36472:18;36464:26;;36536:9;36530:4;36526:20;36522:1;36511:9;36507:17;36500:47;36564:131;36690:4;36564:131;:::i;:::-;36556:139;;36454:248;;;:::o;36708:419::-;36874:4;36912:2;36901:9;36897:18;36889:26;;36961:9;36955:4;36951:20;36947:1;36936:9;36932:17;36925:47;36989:131;37115:4;36989:131;:::i;:::-;36981:139;;36879:248;;;:::o;37133:419::-;37299:4;37337:2;37326:9;37322:18;37314:26;;37386:9;37380:4;37376:20;37372:1;37361:9;37357:17;37350:47;37414:131;37540:4;37414:131;:::i;:::-;37406:139;;37304:248;;;:::o;37558:419::-;37724:4;37762:2;37751:9;37747:18;37739:26;;37811:9;37805:4;37801:20;37797:1;37786:9;37782:17;37775:47;37839:131;37965:4;37839:131;:::i;:::-;37831:139;;37729:248;;;:::o;37983:419::-;38149:4;38187:2;38176:9;38172:18;38164:26;;38236:9;38230:4;38226:20;38222:1;38211:9;38207:17;38200:47;38264:131;38390:4;38264:131;:::i;:::-;38256:139;;38154:248;;;:::o;38408:419::-;38574:4;38612:2;38601:9;38597:18;38589:26;;38661:9;38655:4;38651:20;38647:1;38636:9;38632:17;38625:47;38689:131;38815:4;38689:131;:::i;:::-;38681:139;;38579:248;;;:::o;38833:419::-;38999:4;39037:2;39026:9;39022:18;39014:26;;39086:9;39080:4;39076:20;39072:1;39061:9;39057:17;39050:47;39114:131;39240:4;39114:131;:::i;:::-;39106:139;;39004:248;;;:::o;39258:346::-;39413:4;39451:2;39440:9;39436:18;39428:26;;39464:133;39594:1;39583:9;39579:17;39570:6;39464:133;:::i;:::-;39418:186;;;;:::o;39610:222::-;39703:4;39741:2;39730:9;39726:18;39718:26;;39754:71;39822:1;39811:9;39807:17;39798:6;39754:71;:::i;:::-;39708:124;;;;:::o;39838:430::-;39981:4;40019:2;40008:9;40004:18;39996:26;;40032:69;40098:1;40087:9;40083:17;40074:6;40032:69;:::i;:::-;40111:70;40177:2;40166:9;40162:18;40153:6;40111:70;:::i;:::-;40191;40257:2;40246:9;40242:18;40233:6;40191:70;:::i;:::-;39986:282;;;;;;:::o;40274:129::-;40308:6;40335:20;;:::i;:::-;40325:30;;40364:33;40392:4;40384:6;40364:33;:::i;:::-;40315:88;;;:::o;40409:75::-;40442:6;40475:2;40469:9;40459:19;;40449:35;:::o;40490:307::-;40551:4;40641:18;40633:6;40630:30;40627:2;;;40663:18;;:::i;:::-;40627:2;40701:29;40723:6;40701:29;:::i;:::-;40693:37;;40785:4;40779;40775:15;40767:23;;40556:241;;;:::o;40803:98::-;40854:6;40888:5;40882:12;40872:22;;40861:40;;;:::o;40907:99::-;40959:6;40993:5;40987:12;40977:22;;40966:40;;;:::o;41012:168::-;41095:11;41129:6;41124:3;41117:19;41169:4;41164:3;41160:14;41145:29;;41107:73;;;;:::o;41186:147::-;41287:11;41324:3;41309:18;;41299:34;;;;:::o;41339:169::-;41423:11;41457:6;41452:3;41445:19;41497:4;41492:3;41488:14;41473:29;;41435:73;;;;:::o;41514:148::-;41616:11;41653:3;41638:18;;41628:34;;;;:::o;41668:273::-;41708:3;41727:20;41745:1;41727:20;:::i;:::-;41722:25;;41761:20;41779:1;41761:20;:::i;:::-;41756:25;;41883:1;41847:34;41843:42;41840:1;41837:49;41834:2;;;41889:18;;:::i;:::-;41834:2;41933:1;41930;41926:9;41919:16;;41712:229;;;;:::o;41947:305::-;41987:3;42006:20;42024:1;42006:20;:::i;:::-;42001:25;;42040:20;42058:1;42040:20;:::i;:::-;42035:25;;42194:1;42126:66;42122:74;42119:1;42116:81;42113:2;;;42200:18;;:::i;:::-;42113:2;42244:1;42241;42237:9;42230:16;;41991:261;;;;:::o;42258:185::-;42298:1;42315:20;42333:1;42315:20;:::i;:::-;42310:25;;42349:20;42367:1;42349:20;:::i;:::-;42344:25;;42388:1;42378:2;;42393:18;;:::i;:::-;42378:2;42435:1;42432;42428:9;42423:14;;42300:143;;;;:::o;42449:348::-;42489:7;42512:20;42530:1;42512:20;:::i;:::-;42507:25;;42546:20;42564:1;42546:20;:::i;:::-;42541:25;;42734:1;42666:66;42662:74;42659:1;42656:81;42651:1;42644:9;42637:17;42633:105;42630:2;;;42741:18;;:::i;:::-;42630:2;42789:1;42786;42782:9;42771:20;;42497:300;;;;:::o;42803:191::-;42843:4;42863:20;42881:1;42863:20;:::i;:::-;42858:25;;42897:20;42915:1;42897:20;:::i;:::-;42892:25;;42936:1;42933;42930:8;42927:2;;;42941:18;;:::i;:::-;42927:2;42986:1;42983;42979:9;42971:17;;42848:146;;;;:::o;43000:191::-;43040:4;43060:20;43078:1;43060:20;:::i;:::-;43055:25;;43094:20;43112:1;43094:20;:::i;:::-;43089:25;;43133:1;43130;43127:8;43124:2;;;43138:18;;:::i;:::-;43124:2;43183:1;43180;43176:9;43168:17;;43045:146;;;;:::o;43197:96::-;43234:7;43263:24;43281:5;43263:24;:::i;:::-;43252:35;;43242:51;;;:::o;43299:90::-;43333:7;43376:5;43369:13;43362:21;43351:32;;43341:48;;;:::o;43395:149::-;43431:7;43471:66;43464:5;43460:78;43449:89;;43439:105;;;:::o;43550:118::-;43587:7;43627:34;43620:5;43616:46;43605:57;;43595:73;;;:::o;43674:126::-;43711:7;43751:42;43744:5;43740:54;43729:65;;43719:81;;;:::o;43806:77::-;43843:7;43872:5;43861:16;;43851:32;;;:::o;43889:93::-;43925:7;43965:10;43958:5;43954:22;43943:33;;43933:49;;;:::o;43988:101::-;44024:7;44064:18;44057:5;44053:30;44042:41;;44032:57;;;:::o;44095:154::-;44179:6;44174:3;44169;44156:30;44241:1;44232:6;44227:3;44223:16;44216:27;44146:103;;;:::o;44255:307::-;44323:1;44333:113;44347:6;44344:1;44341:13;44333:113;;;44432:1;44427:3;44423:11;44417:18;44413:1;44408:3;44404:11;44397:39;44369:2;44366:1;44362:10;44357:15;;44333:113;;;44464:6;44461:1;44458:13;44455:2;;;44544:1;44535:6;44530:3;44526:16;44519:27;44455:2;44304:258;;;;:::o;44568:171::-;44607:3;44630:24;44648:5;44630:24;:::i;:::-;44621:33;;44676:4;44669:5;44666:15;44663:2;;;44684:18;;:::i;:::-;44663:2;44731:1;44724:5;44720:13;44713:20;;44611:128;;;:::o;44745:320::-;44789:6;44826:1;44820:4;44816:12;44806:22;;44873:1;44867:4;44863:12;44894:18;44884:2;;44950:4;44942:6;44938:17;44928:27;;44884:2;45012;45004:6;45001:14;44981:18;44978:38;44975:2;;;45031:18;;:::i;:::-;44975:2;44796:269;;;;:::o;45071:281::-;45154:27;45176:4;45154:27;:::i;:::-;45146:6;45142:40;45284:6;45272:10;45269:22;45248:18;45236:10;45233:34;45230:62;45227:2;;;45295:18;;:::i;:::-;45227:2;45335:10;45331:2;45324:22;45114:238;;;:::o;45358:233::-;45397:3;45420:24;45438:5;45420:24;:::i;:::-;45411:33;;45466:66;45459:5;45456:77;45453:2;;;45536:18;;:::i;:::-;45453:2;45583:1;45576:5;45572:13;45565:20;;45401:190;;;:::o;45597:176::-;45629:1;45646:20;45664:1;45646:20;:::i;:::-;45641:25;;45680:20;45698:1;45680:20;:::i;:::-;45675:25;;45719:1;45709:2;;45724:18;;:::i;:::-;45709:2;45765:1;45762;45758:9;45753:14;;45631:142;;;;:::o;45779:180::-;45827:77;45824:1;45817:88;45924:4;45921:1;45914:15;45948:4;45945:1;45938:15;45965:180;46013:77;46010:1;46003:88;46110:4;46107:1;46100:15;46134:4;46131:1;46124:15;46151:180;46199:77;46196:1;46189:88;46296:4;46293:1;46286:15;46320:4;46317:1;46310:15;46337:180;46385:77;46382:1;46375:88;46482:4;46479:1;46472:15;46506:4;46503:1;46496:15;46523:102;46564:6;46615:2;46611:7;46606:2;46599:5;46595:14;46591:28;46581:38;;46571:54;;;:::o;46631:221::-;46771:34;46767:1;46759:6;46755:14;46748:58;46840:4;46835:2;46827:6;46823:15;46816:29;46737:115;:::o;46858:225::-;46998:34;46994:1;46986:6;46982:14;46975:58;47067:8;47062:2;47054:6;47050:15;47043:33;46964:119;:::o;47089:229::-;47229:34;47225:1;47217:6;47213:14;47206:58;47298:12;47293:2;47285:6;47281:15;47274:37;47195:123;:::o;47324:231::-;47464:34;47460:1;47452:6;47448:14;47441:58;47533:14;47528:2;47520:6;47516:15;47509:39;47430:125;:::o;47561:222::-;47701:34;47697:1;47689:6;47685:14;47678:58;47770:5;47765:2;47757:6;47753:15;47746:30;47667:116;:::o;47789:224::-;47929:34;47925:1;47917:6;47913:14;47906:58;47998:7;47993:2;47985:6;47981:15;47974:32;47895:118;:::o;48019:236::-;48159:34;48155:1;48147:6;48143:14;48136:58;48228:19;48223:2;48215:6;48211:15;48204:44;48125:130;:::o;48261:224::-;48401:34;48397:1;48389:6;48385:14;48378:58;48470:7;48465:2;48457:6;48453:15;48446:32;48367:118;:::o;48491:180::-;48631:32;48627:1;48619:6;48615:14;48608:56;48597:74;:::o;48677:244::-;48817:34;48813:1;48805:6;48801:14;48794:58;48886:27;48881:2;48873:6;48869:15;48862:52;48783:138;:::o;48927:174::-;49067:26;49063:1;49055:6;49051:14;49044:50;49033:68;:::o;49107:230::-;49247:34;49243:1;49235:6;49231:14;49224:58;49316:13;49311:2;49303:6;49299:15;49292:38;49213:124;:::o;49343:168::-;49483:20;49479:1;49471:6;49467:14;49460:44;49449:62;:::o;49517:225::-;49657:34;49653:1;49645:6;49641:14;49634:58;49726:8;49721:2;49713:6;49709:15;49702:33;49623:119;:::o;49748:182::-;49888:34;49884:1;49876:6;49872:14;49865:58;49854:76;:::o;49936:234::-;50076:34;50072:1;50064:6;50060:14;50053:58;50145:17;50140:2;50132:6;50128:15;50121:42;50042:128;:::o;50176:176::-;50316:28;50312:1;50304:6;50300:14;50293:52;50282:70;:::o;50358:237::-;50498:34;50494:1;50486:6;50482:14;50475:58;50567:20;50562:2;50554:6;50550:15;50543:45;50464:131;:::o;50601:171::-;50741:23;50737:1;50729:6;50725:14;50718:47;50707:65;:::o;50778:179::-;50918:31;50914:1;50906:6;50902:14;50895:55;50884:73;:::o;50963:221::-;51103:34;51099:1;51091:6;51087:14;51080:58;51172:4;51167:2;51159:6;51155:15;51148:29;51069:115;:::o;51190:114::-;51296:8;:::o;51310:166::-;51450:18;51446:1;51438:6;51434:14;51427:42;51416:60;:::o;51482:238::-;51622:34;51618:1;51610:6;51606:14;51599:58;51691:21;51686:2;51678:6;51674:15;51667:46;51588:132;:::o;51726:172::-;51866:24;51862:1;51854:6;51850:14;51843:48;51832:66;:::o;51904:179::-;52044:31;52040:1;52032:6;52028:14;52021:55;52010:73;:::o;52089:220::-;52229:34;52225:1;52217:6;52213:14;52206:58;52298:3;52293:2;52285:6;52281:15;52274:28;52195:114;:::o;52315:226::-;52455:34;52451:1;52443:6;52439:14;52432:58;52524:9;52519:2;52511:6;52507:15;52500:34;52421:120;:::o;52547:233::-;52687:34;52683:1;52675:6;52671:14;52664:58;52756:16;52751:2;52743:6;52739:15;52732:41;52653:127;:::o;52786:225::-;52926:34;52922:1;52914:6;52910:14;52903:58;52995:8;52990:2;52982:6;52978:15;52971:33;52892:119;:::o;53017:181::-;53157:33;53153:1;53145:6;53141:14;53134:57;53123:75;:::o;53204:234::-;53344:34;53340:1;53332:6;53328:14;53321:58;53413:17;53408:2;53400:6;53396:15;53389:42;53310:128;:::o;53444:232::-;53584:34;53580:1;53572:6;53568:14;53561:58;53653:15;53648:2;53640:6;53636:15;53629:40;53550:126;:::o;53682:221::-;53822:34;53818:1;53810:6;53806:14;53799:58;53891:4;53886:2;53878:6;53874:15;53867:29;53788:115;:::o;53909:122::-;53982:24;54000:5;53982:24;:::i;:::-;53975:5;53972:35;53962:2;;54021:1;54018;54011:12;53962:2;53952:79;:::o;54037:116::-;54107:21;54122:5;54107:21;:::i;:::-;54100:5;54097:32;54087:2;;54143:1;54140;54133:12;54087:2;54077:76;:::o;54159:120::-;54231:23;54248:5;54231:23;:::i;:::-;54224:5;54221:34;54211:2;;54269:1;54266;54259:12;54211:2;54201:78;:::o;54285:122::-;54358:24;54376:5;54358:24;:::i;:::-;54351:5;54348:35;54338:2;;54397:1;54394;54387:12;54338:2;54328:79;:::o;54413:120::-;54485:23;54502:5;54485:23;:::i;:::-;54478:5;54475:34;54465:2;;54523:1;54520;54513:12;54465:2;54455:78;:::o;54539:120::-;54611:23;54628:5;54611:23;:::i;:::-;54604:5;54601:34;54591:2;;54649:1;54646;54639:12;54591:2;54581:78;:::o
Swarm Source
ipfs://cea71a5dfae92261cc981f6364906b902fe56f1c009c5fcae44936ac29431a56
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.