Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
42 MJ
Holders
39
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 MJLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
JPEGminer
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity Multiple files format)
//SPDX-License-Identifier: MIT /// @title JPEG Mining /// @author Xatarrer /// @notice Unaudited pragma solidity ^0.8.4; import "./ERC721Enumerable.sol"; import "./SSTORE2.sol"; import "./Ownable.sol"; import "./IERC20.sol"; import "./Strings.sol"; import "./SafeMath.sol"; /** @dev Return data URL: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs https://en.wikipedia.org/wiki/Data_URI_scheme @dev Base64 encoding/decoding available at https://github.com/Brechtpd/base64/blob/main/base64.sol @dev Large efficient immutable storage: https://github.com/0xsequence/sstore2/blob/master/contracts/SSTORE2.sol */ contract JPEGminer is ERC721Enumerable, Ownable { using SafeMath for uint256; event Mined(address minerAddress, string indexed phase); uint256 public constant NSCANS = 100; string private constant _NAME = "Mined JPEG"; string private constant _SYMBOL = "MJ"; string private constant _DESCRIPTION = "JPEG Mining is a collaborative effort to store %2a%2athe largest on-chain image%2a%2a %281.5MB in Base64 format %26 1.1MB in binary%29. " "The image is split into 100 pieces which are uploaded by every wallet that calls the function mine%28%29. " "Thanks to the %2a%2aprogressive JPEG%2a%2a technology the image is viewable since its first piece is mined, " "and its quality gradually improves until the last piece is mined. %5Cr %5Cr" "As the image's quality improves over each successive mining, it goes through 3 different clear phases%3A %5Cr" "1. image is %2a%2black & white%2a%2 only, %5Cr2. %2a%2color%2a%2 is added, and %5Cr3. %2a%2resolution%2a%2 improves until the final version. %5Cr" "The B&W phase is the shortest and only lasts 11 uploads, " "the color phase last 22 uploads, and the resolution phase is the longest with 67 uploads. %5Cr %5Cr" "Every JPEG miner gets an NFT of the image with the quality at the time of minting. %5Cr %5Cr" "Art by Logan Turner. Idea and code by Xatarrer."; // Replace the hashes before deployment address private immutable _mintingGasFeesPointer; address private immutable _imageHashesPointer; address private immutable _imageHeaderPointer; address[] private _imageScansPointers; string private constant _imageFooterB64 = "/9k="; constructor( string memory imageHeaderB64, bytes32[] memory imageHashes, uint256[] memory mintingGasFees ) ERC721(_NAME, _SYMBOL) { require(imageHashes.length == NSCANS); // Store minting gas fees _mintingGasFeesPointer = SSTORE2.write(abi.encodePacked(mintingGasFees)); // Store header _imageHeaderPointer = SSTORE2.write(bytes(imageHeaderB64)); // Store hashes _imageHashesPointer = SSTORE2.write(abi.encodePacked(imageHashes)); // Initialize array of pointers to scans _imageScansPointers = new address[](NSCANS); } /// @return JSON with properties function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "Token does not exist"); return mergeScans( tokenId, string( abi.encodePacked( "data:application/json;charset=UTF-8,%7B%22name%22%3A %22", _NAME, "%3A ", Strings.toString(tokenId + 1), " of ", Strings.toString(NSCANS), "%22, %22description%22%3A %22", _DESCRIPTION, "%22, %22image%22%3A %22data%3Aimage/jpeg;base64,", string(SSTORE2.read(_imageHeaderPointer)) ) ), string( abi.encodePacked( _imageFooterB64, "%22,%22attributes%22%3A %5B%7B%22trait_type%22%3A %22kilobytes%22, %22value%22%3A " ) ), string( abi.encodePacked( "%7D, %7B%22trait_type%22%3A %22phase%22, %22value%22%3A %22", getPhase(tokenId), "%22%7D%5D%7D" ) ) ); } function mergeScans( uint256 tokenId, string memory preImage, string memory posImage, string memory lastText ) private view returns (string memory) { // Get scans uint256 KB = 0; string[] memory data = new string[](9); for (uint256 i = 0; i < 9; i++) { if (tokenId < 12 * i) break; string[] memory scans = new string[](12); for (uint256 j = 0; j < 12; j++) { if (tokenId < 12 * i + j) break; bytes memory scan = SSTORE2.read(_imageScansPointers[12 * i + j]); scans[j] = string(scan); KB += scan.length; } data[i] = string( abi.encodePacked( scans[0], scans[1], scans[2], scans[3], scans[4], scans[5], scans[6], scans[7], scans[8], scans[9], scans[10], scans[11] ) ); } return ( string( abi.encodePacked( preImage, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], posImage, string(abi.encodePacked(Strings.toString(KB / 1024), lastText)) ) ) ); } function getPhase(uint256 tokenId) public pure returns (string memory) { require(tokenId < NSCANS); if (tokenId <= 10) return "Black & White"; else if (tokenId <= 32) return "Color"; else return "Resolution"; } function getMintingGasFee(uint256 tokenId) public view returns (uint256) { require(tokenId < NSCANS); bytes memory hashBytes = SSTORE2.read(_mintingGasFeesPointer, tokenId * 32, (tokenId + 1) * 32); bytes32 out; for (uint256 i = 0; i < 32; i++) { out |= bytes32(hashBytes[i] & 0xFF) >> (i * 8); } return uint256(out); } function getHash(uint256 tokenId) public view returns (bytes32) { require(tokenId < NSCANS); bytes memory hashBytes = SSTORE2.read(_imageHashesPointer, tokenId * 32, (tokenId + 1) * 32); bytes32 out; for (uint256 i = 0; i < 32; i++) { out |= bytes32(hashBytes[i] & 0xFF) >> (i * 8); } return out; } /// @param imageScanB64 Piece of image data in base64 function mine(string calldata imageScanB64) external payable { // Checks require(msg.sender == tx.origin, "Only EA's can mine"); require(balanceOf(msg.sender) == 0, "Cannot mine more than once"); require(totalSupply() < NSCANS, "Mining is over"); // Check gas minting fee uint256 mintingFee = tx.gasprice.mul(getMintingGasFee(totalSupply())); require(msg.value >= mintingFee, "ETH fee insufficient"); // Check hash matches require(keccak256(bytes(imageScanB64)) == getHash(totalSupply()), "Wrong data"); // SSTORE2 scan _imageScansPointers[totalSupply()] = SSTORE2.write(bytes(imageScanB64)); // Return change payable(msg.sender).transfer(msg.value - mintingFee); // Mint scan uint256 tokenId = totalSupply(); _mint(msg.sender, tokenId); emit Mined(msg.sender, getPhase(tokenId)); } function withdrawEth() external onlyOwner { payable(owner()).transfer(address(this).balance); } function withdrawToken(address addrERC20) external onlyOwner { uint256 balance = IERC20(addrERC20).balanceOf(address(this)); IERC20(addrERC20).transfer(owner(), balance); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT 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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./IERC721Enumerable.sol"; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.7.0; /// @notice Read and write to persistent storage at a fraction of the cost. /// @author Modified from 0xSequence (https://github.com/0xsequence/sstore2/blob/master/contracts/SSTORE2.sol) library SSTORE2 { uint256 internal constant DATA_OFFSET = 1; function write(bytes memory data) internal returns (address pointer) { bytes memory runtimeCode = abi.encodePacked(hex"00", data); bytes memory creationCode = abi.encodePacked( hex"63", uint32(runtimeCode.length), hex"80_60_0E_60_00_39_60_00_F3", runtimeCode ); assembly { pointer := create(0, add(creationCode, 32), mload(creationCode)) } require(pointer != address(0), "DEPLOYMENT_FAILED"); } function read(address pointer) internal view returns (bytes memory) { return readBytecode(pointer, DATA_OFFSET, pointer.code.length - DATA_OFFSET); } function read(address pointer, uint256 start) internal view returns (bytes memory) { start += DATA_OFFSET; return readBytecode(pointer, start, pointer.code.length - start); } function read( address pointer, uint256 start, uint256 end ) internal view returns (bytes memory) { start += DATA_OFFSET; end += DATA_OFFSET; require(pointer.code.length >= end, "OUT_OF_BOUNDS"); return readBytecode(pointer, start, end - start); } function readBytecode( address pointer, uint256 start, uint256 size ) private view returns (bytes memory data) { assembly { data := mload(0x40) mstore(0x40, add(data, and(add(add(size, add(start, 0x20)), 0x1f), not(0x1f)))) mstore(data, size) extcodecopy(pointer, add(data, 0x20), start, size) } } }
// SPDX-License-Identifier: MIT 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"imageHeaderB64","type":"string"},{"internalType":"bytes32[]","name":"imageHashes","type":"bytes32[]"},{"internalType":"uint256[]","name":"mintingGasFees","type":"uint256[]"}],"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":false,"internalType":"address","name":"minerAddress","type":"address"},{"indexed":true,"internalType":"string","name":"phase","type":"string"}],"name":"Mined","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":"NSCANS","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":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getMintingGasFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getPhase","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"string","name":"imageScanB64","type":"string"}],"name":"mine","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addrERC20","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b506040516200668d3803806200668d833981810160405281019062000037919062000785565b6040518060400160405280600a81526020017f4d696e6564204a504547000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4d4a0000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb92919062000462565b508060019080519060200190620000d492919062000462565b505050620000f7620000eb620002bf60201b60201c565b620002c760201b60201c565b60648251146200010657600080fd5b6200013d816040516020016200011d919062000a57565b6040516020818303038152906040526200038d60201b62001b621760201c565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505062000189836200038d60201b62001b621760201c565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050620001f682604051602001620001d6919062000a3e565b6040516020818303038152906040526200038d60201b62001b621760201c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050606467ffffffffffffffff8111156200026e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156200029d5781602001602082028036833780820191505090505b50600b9080519060200190620002b5929190620004f3565b5050505062000e61565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008082604051602001620003a3919062000ab6565b60405160208183030381529060405290506000815182604051602001620003cc92919062000a70565b60405160208183030381529060405290508051602082016000f09250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200045b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004529062000adc565b60405180910390fd5b5050919050565b828054620004709062000cad565b90600052602060002090601f016020900481019282620004945760008555620004e0565b82601f10620004af57805160ff1916838001178555620004e0565b82800160010185558215620004e0579182015b82811115620004df578251825591602001919060010190620004c2565b5b509050620004ef919062000582565b5090565b8280548282559060005260206000209081019282156200056f579160200282015b828111156200056e5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000514565b5b5090506200057e919062000582565b5090565b5b808211156200059d57600081600090555060010162000583565b5090565b6000620005b8620005b28462000b27565b62000afe565b90508083825260208201905082856020860282011115620005d857600080fd5b60005b858110156200060c5781620005f188826200072a565b845260208401935060208301925050600181019050620005db565b5050509392505050565b60006200062d620006278462000b56565b62000afe565b905080838252602082019050828560208602820111156200064d57600080fd5b60005b858110156200068157816200066688826200076e565b84526020840193506020830192505060018101905062000650565b5050509392505050565b6000620006a26200069c8462000b85565b62000afe565b905082815260208101848484011115620006bb57600080fd5b620006c884828562000c77565b509392505050565b600082601f830112620006e257600080fd5b8151620006f4848260208601620005a1565b91505092915050565b600082601f8301126200070f57600080fd5b81516200072184826020860162000616565b91505092915050565b6000815190506200073b8162000e2d565b92915050565b600082601f8301126200075357600080fd5b8151620007658482602086016200068b565b91505092915050565b6000815190506200077f8162000e47565b92915050565b6000806000606084860312156200079b57600080fd5b600084015167ffffffffffffffff811115620007b657600080fd5b620007c48682870162000741565b935050602084015167ffffffffffffffff811115620007e257600080fd5b620007f086828701620006d0565b925050604084015167ffffffffffffffff8111156200080e57600080fd5b6200081c86828701620006fd565b9150509250925092565b60006200083483836200092e565b60208301905092915050565b60006200084e838362000a12565b60208301905092915050565b6000620008678262000bdb565b62000873818562000c16565b9350620008808362000bbb565b8060005b83811015620008b75781516200089b888262000826565b9750620008a88362000bfc565b92505060018101905062000884565b5085935050505092915050565b6000620008d18262000be6565b620008dd818562000c21565b9350620008ea8362000bcb565b8060005b838110156200092157815162000905888262000840565b9750620009128362000c09565b925050600181019050620008ee565b5085935050505092915050565b620009398162000c53565b82525050565b60006200094c8262000bf1565b62000958818562000c2c565b93506200096a81856020860162000c77565b80840191505092915050565b60006200098560118362000c37565b9150620009928262000da9565b602082019050919050565b6000620009ac60018362000c48565b9150620009b98262000dd2565b600182019050919050565b6000620009d360018362000c48565b9150620009e08262000dfb565b600182019050919050565b6000620009fa60098362000c48565b915062000a078262000e04565b600982019050919050565b62000a1d8162000c5d565b82525050565b62000a3862000a328262000c67565b62000d19565b82525050565b600062000a4c82846200085a565b915081905092915050565b600062000a658284620008c4565b915081905092915050565b600062000a7d826200099d565b915062000a8b828562000a23565b60048201915062000a9c82620009eb565b915062000aaa82846200093f565b91508190509392505050565b600062000ac382620009c4565b915062000ad182846200093f565b915081905092915050565b6000602082019050818103600083015262000af78162000976565b9050919050565b600062000b0a62000b1d565b905062000b18828262000ce3565b919050565b6000604051905090565b600067ffffffffffffffff82111562000b455762000b4462000d5c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000b745762000b7362000d5c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000ba35762000ba262000d5c565b5b62000bae8262000d8b565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600081905092915050565b600081905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000819050919050565b6000819050919050565b600063ffffffff82169050919050565b60005b8381101562000c9757808201518184015260208101905062000c7a565b8381111562000ca7576000848401525b50505050565b6000600282049050600182168062000cc657607f821691505b6020821081141562000cdd5762000cdc62000d2d565b5b50919050565b62000cee8262000d8b565b810181811067ffffffffffffffff8211171562000d105762000d0f62000d5c565b5b80604052505050565b600062000d268262000d9c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01b9050919050565b7f4445504c4f594d454e545f4641494c4544000000000000000000000000000000600082015250565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b60008082015250565b7f80600e6000396000f30000000000000000000000000000000000000000000000600082015250565b62000e388162000c53565b811462000e4457600080fd5b50565b62000e528162000c5d565b811462000e5e57600080fd5b50565b60805160601c60a05160601c60c05160601c6157f362000e9a600039600061190601526000610c7b01526000610ecb01526157f36000f3fe6080604052600436106101815760003560e01c806370a08231116100d157806395d89b411161008a578063b88d4fde11610064578063b88d4fde14610599578063c87b56dd146105c2578063e985e9c5146105ff578063f2fde38b1461063c57610181565b806395d89b411461052e578063a0ef91df14610559578063a22cb4651461057057610181565b806370a082311461042d578063715018a61461046a578063757f281f14610481578063841819df146104be57806389476069146104da5780638da5cb5b1461050357610181565b806318160ddd1161013e57806342842e0e1161011857806342842e0e1461034d5780634f6ccce7146103765780636352211e146103b35780636b2fafa9146103f057610181565b806318160ddd146102bc57806323b872dd146102e75780632f745c591461031057610181565b806301ffc9a71461018657806306fdde03146101c3578063081812fc146101ee578063095ea7b31461022b57806315148ab11461025457806316ef376b1461027f575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190613978565b610665565b6040516101ba9190614354565b60405180910390f35b3480156101cf57600080fd5b506101d86106df565b6040516101e5919061438a565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190613a0f565b610771565b60405161022291906142c4565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d9190613913565b6107f6565b005b34801561026057600080fd5b5061026961090e565b60405161027691906146cc565b60405180910390f35b34801561028b57600080fd5b506102a660048036038101906102a19190613a0f565b610913565b6040516102b3919061438a565b60405180910390f35b3480156102c857600080fd5b506102d16109ea565b6040516102de91906146cc565b60405180910390f35b3480156102f357600080fd5b5061030e6004803603810190610309919061380d565b6109f7565b005b34801561031c57600080fd5b5061033760048036038101906103329190613913565b610a57565b60405161034491906146cc565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f919061380d565b610afc565b005b34801561038257600080fd5b5061039d60048036038101906103989190613a0f565b610b1c565b6040516103aa91906146cc565b60405180910390f35b3480156103bf57600080fd5b506103da60048036038101906103d59190613a0f565b610bb3565b6040516103e791906142c4565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190613a0f565b610c65565b604051610424919061436f565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f91906137a8565b610d75565b60405161046191906146cc565b60405180910390f35b34801561047657600080fd5b5061047f610e2d565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613a0f565b610eb5565b6040516104b591906146cc565b60405180910390f35b6104d860048036038101906104d391906139ca565b610fc8565b005b3480156104e657600080fd5b5061050160048036038101906104fc91906137a8565b611335565b005b34801561050f57600080fd5b506105186114d7565b60405161052591906142c4565b60405180910390f35b34801561053a57600080fd5b50610543611501565b604051610550919061438a565b60405180910390f35b34801561056557600080fd5b5061056e611593565b005b34801561057c57600080fd5b50610597600480360381019061059291906138d7565b61165f565b005b3480156105a557600080fd5b506105c060048036038101906105bb919061385c565b6117e0565b005b3480156105ce57600080fd5b506105e960048036038101906105e49190613a0f565b611842565b6040516105f6919061438a565b60405180910390f35b34801561060b57600080fd5b50610626600480360381019061062191906137d1565b6119d6565b6040516106339190614354565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e91906137a8565b611a6a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106d857506106d782611c30565b5b9050919050565b6060600080546106ee90614970565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90614970565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050905090565b600061077c82611d12565b6107bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b2906145cc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080182610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610872576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108699061464c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610891611d7e565b73ffffffffffffffffffffffffffffffffffffffff1614806108c057506108bf816108ba611d7e565b6119d6565b5b6108ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f69061452c565b60405180910390fd5b6109098383611d86565b505050565b606481565b60606064821061092257600080fd5b600a8211610967576040518060400160405280600d81526020017f426c61636b20262057686974650000000000000000000000000000000000000081525090506109e5565b602082116109ac576040518060400160405280600581526020017f436f6c6f7200000000000000000000000000000000000000000000000000000081525090506109e5565b6040518060400160405280600a81526020017f5265736f6c7574696f6e0000000000000000000000000000000000000000000081525090505b919050565b6000600880549050905090565b610a08610a02611d7e565b82611e3f565b610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e9061466c565b60405180910390fd5b610a52838383611f1d565b505050565b6000610a6283610d75565b8210610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a9061440c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b17838383604051806020016040528060008152506117e0565b505050565b6000610b266109ea565b8210610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e9061468c565b60405180910390fd5b60088281548110610ba1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c539061456c565b60405180910390fd5b80915050919050565b600060648210610c7457600080fd5b6000610cc57f0000000000000000000000000000000000000000000000000000000000000000602085610ca79190614812565b6020600187610cb6919061478b565b610cc09190614812565b612179565b9050600080600090505b6020811015610d6a57600881610ce59190614812565b60ff60f81b848381518110610d23577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c821791508080610d62906149d3565b915050610ccf565b508092505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd9061454c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e35611d7e565b73ffffffffffffffffffffffffffffffffffffffff16610e536114d7565b73ffffffffffffffffffffffffffffffffffffffff1614610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea0906145ec565b60405180910390fd5b610eb36000612212565b565b600060648210610ec457600080fd5b6000610f157f0000000000000000000000000000000000000000000000000000000000000000602085610ef79190614812565b6020600187610f06919061478b565b610f109190614812565b612179565b9050600080600090505b6020811015610fba57600881610f359190614812565b60ff60f81b848381518110610f73577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c821791508080610fb2906149d3565b915050610f1f565b508060001c92505050919050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d9061448c565b60405180910390fd5b600061104133610d75565b14611081576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611078906143cc565b60405180910390fd5b606461108b6109ea565b106110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c29061460c565b60405180910390fd5b60006110ef6110e06110db6109ea565b610eb5565b3a6122d890919063ffffffff16565b905080341015611134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b906145ac565b60405180910390fd5b61114461113f6109ea565b610c65565b8383604051611154929190614099565b60405180910390201461119c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611193906146ac565b60405180910390fd5b6111e983838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b62565b600b6111f36109ea565b8154811061122a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff166108fc8234611298919061486c565b9081150290604051600060405180830381858888f193505050501580156112c3573d6000803e3d6000fd5b5060006112ce6109ea565b90506112da33826122ee565b6112e381610913565b6040516112f091906140b2565b60405180910390207f2c54e6e2e2d8edc6b1aaae76a096de3ae58acb2b1d388aef7b74d9aa2240106b3360405161132791906142c4565b60405180910390a250505050565b61133d611d7e565b73ffffffffffffffffffffffffffffffffffffffff1661135b6114d7565b73ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a8906145ec565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113ec91906142c4565b60206040518083038186803b15801561140457600080fd5b505afa158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c9190613a38565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6114626114d7565b836040518363ffffffff1660e01b815260040161148092919061432b565b602060405180830381600087803b15801561149a57600080fd5b505af11580156114ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d2919061394f565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461151090614970565b80601f016020809104026020016040519081016040528092919081815260200182805461153c90614970565b80156115895780601f1061155e57610100808354040283529160200191611589565b820191906000526020600020905b81548152906001019060200180831161156c57829003601f168201915b5050505050905090565b61159b611d7e565b73ffffffffffffffffffffffffffffffffffffffff166115b96114d7565b73ffffffffffffffffffffffffffffffffffffffff161461160f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611606906145ec565b60405180910390fd5b6116176114d7565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561165c573d6000803e3d6000fd5b50565b611667611d7e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc906144cc565b60405180910390fd5b80600560006116e2611d7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661178f611d7e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117d49190614354565b60405180910390a35050565b6117f16117eb611d7e565b83611e3f565b611830576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118279061466c565b60405180910390fd5b61183c848484846124bc565b50505050565b606061184d82611d12565b61188c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611883906144ec565b60405180910390fd5b6119cf826040518060400160405280600a81526020017f4d696e6564204a504547000000000000000000000000000000000000000000008152506118db6001866118d6919061478b565b612518565b6118e56064612518565b6040518061040001604052806103d881526020016153e66103d8913961192a7f00000000000000000000000000000000000000000000000000000000000000006126c5565b60405160200161193e959493929190614220565b6040516020818303038152906040526040518060400160405280600481526020017f2f396b3d000000000000000000000000000000000000000000000000000000008152506040516020016119939190614193565b6040516020818303038152906040526119ab86610913565b6040516020016119bb91906141f3565b6040516020818303038152906040526126fc565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a72611d7e565b73ffffffffffffffffffffffffffffffffffffffff16611a906114d7565b73ffffffffffffffffffffffffffffffffffffffff1614611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add906145ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4d9061444c565b60405180910390fd5b611b5f81612212565b50565b60008082604051602001611b7691906142a2565b60405160208183030381529060405290506000815182604051602001611b9d9291906141b5565b60405160208183030381529060405290508051602082016000f09250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c20906143ec565b60405180910390fd5b5050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cfb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d0b5750611d0a82612f93565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611df983610bb3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e4a82611d12565b611e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e809061450c565b60405180910390fd5b6000611e9483610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f0357508373ffffffffffffffffffffffffffffffffffffffff16611eeb84610771565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f145750611f1381856119d6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f3d82610bb3565b73ffffffffffffffffffffffffffffffffffffffff1614611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a9061462c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa906144ac565b60405180910390fd5b61200e838383612ffd565b612019600082611d86565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612069919061486c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120c0919061478b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6060600183612188919061478b565b9250600182612197919061478b565b9150818473ffffffffffffffffffffffffffffffffffffffff163b10156121f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ea906143ac565b60405180910390fd5b61220984848585612204919061486c565b613111565b90509392505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836122e69190614812565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561235e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123559061458c565b60405180910390fd5b61236781611d12565b156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e9061446c565b60405180910390fd5b6123b360008383612ffd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612403919061478b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6124c7848484611f1d565b6124d38484848461313c565b612512576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125099061442c565b60405180910390fd5b50505050565b60606000821415612560576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126c0565b600082905060005b6000821461259257808061257b906149d3565b915050600a8261258b91906147e1565b9150612568565b60008167ffffffffffffffff8111156125d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126065781602001600182028036833780820191505090505b5090505b600085146126b95760018261261f919061486c565b9150600a8561262e9190614a2e565b603061263a919061478b565b60f81b818381518110612676577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126b291906147e1565b945061260a565b8093505050505b919050565b60606126f5826001808573ffffffffffffffffffffffffffffffffffffffff163b6126f0919061486c565b613111565b9050919050565b6060600080600967ffffffffffffffff811115612742577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561277557816020015b60608152602001906001900390816127605790505b50905060005b6009811015612cd15780600c6127919190614812565b88101561279d57612cd1565b6000600c67ffffffffffffffff8111156127e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561281357816020015b60608152602001906001900390816127fe5790505b50905060005b600c811015612936578083600c6128309190614812565b61283a919061478b565b8a101561284657612936565b60006128cc600b8386600c61285b9190614812565b612865919061478b565b8154811061289c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166126c5565b905080838381518110612908577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181905250805186612920919061478b565b955050808061292e906149d3565b915050612819565b5080600081518110612971577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151816001815181106129b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151826002815181106129f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183600381518110612a37577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015184600481518110612a79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185600581518110612abb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015186600681518110612afd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015187600781518110612b3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015188600881518110612b81577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015189600981518110612bc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518a600a81518110612c05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518b600b81518110612c47577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051602001612c6a9c9b9a999897969594939291906140ed565b604051602081830303815290604052838381518110612cb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181905250508080612cc9906149d3565b91505061277b565b508581600081518110612d0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015182600181518110612d4f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183600281518110612d91577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015184600381518110612dd3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185600481518110612e15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015186600581518110612e57577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015187600681518110612e99577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015188600781518110612edb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015189600881518110612f1d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518e612f3c6104008e612f3791906147e1565b612518565b8f604051602001612f4e9291906140c9565b604051602081830303815290604052604051602001612f789c9b9a999897969594939291906140ed565b60405160208183030381529060405292505050949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6130088383836132d3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561304b57613046816132d8565b61308a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613089576130888382613321565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130cd576130c88161348e565b61310c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461310b5761310a82826135d1565b5b5b505050565b60606040519050601f19601f60208501840101168101604052818152818360208301863c9392505050565b600061315d8473ffffffffffffffffffffffffffffffffffffffff16613650565b156132c6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613186611d7e565b8786866040518563ffffffff1660e01b81526004016131a894939291906142df565b602060405180830381600087803b1580156131c257600080fd5b505af19250505080156131f357506040513d601f19601f820116820180604052508101906131f091906139a1565b60015b613276573d8060008114613223576040519150601f19603f3d011682016040523d82523d6000602084013e613228565b606091505b5060008151141561326e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132659061442c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132cb565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161332e84610d75565b613338919061486c565b905060006007600084815260200190815260200160002054905081811461341d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506134a2919061486c565b90506000600960008481526020019081526020016000205490506000600883815481106134f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613540577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806135b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006135dc83610d75565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b60006136766136718461470c565b6146e7565b90508281526020810184848401111561368e57600080fd5b61369984828561492e565b509392505050565b6000813590506136b081615389565b92915050565b6000813590506136c5816153a0565b92915050565b6000815190506136da816153a0565b92915050565b6000813590506136ef816153b7565b92915050565b600081519050613704816153b7565b92915050565b600082601f83011261371b57600080fd5b813561372b848260208601613663565b91505092915050565b60008083601f84011261374657600080fd5b8235905067ffffffffffffffff81111561375f57600080fd5b60208301915083600182028301111561377757600080fd5b9250929050565b60008135905061378d816153ce565b92915050565b6000815190506137a2816153ce565b92915050565b6000602082840312156137ba57600080fd5b60006137c8848285016136a1565b91505092915050565b600080604083850312156137e457600080fd5b60006137f2858286016136a1565b9250506020613803858286016136a1565b9150509250929050565b60008060006060848603121561382257600080fd5b6000613830868287016136a1565b9350506020613841868287016136a1565b92505060406138528682870161377e565b9150509250925092565b6000806000806080858703121561387257600080fd5b6000613880878288016136a1565b9450506020613891878288016136a1565b93505060406138a28782880161377e565b925050606085013567ffffffffffffffff8111156138bf57600080fd5b6138cb8782880161370a565b91505092959194509250565b600080604083850312156138ea57600080fd5b60006138f8858286016136a1565b9250506020613909858286016136b6565b9150509250929050565b6000806040838503121561392657600080fd5b6000613934858286016136a1565b92505060206139458582860161377e565b9150509250929050565b60006020828403121561396157600080fd5b600061396f848285016136cb565b91505092915050565b60006020828403121561398a57600080fd5b6000613998848285016136e0565b91505092915050565b6000602082840312156139b357600080fd5b60006139c1848285016136f5565b91505092915050565b600080602083850312156139dd57600080fd5b600083013567ffffffffffffffff8111156139f757600080fd5b613a0385828601613734565b92509250509250929050565b600060208284031215613a2157600080fd5b6000613a2f8482850161377e565b91505092915050565b600060208284031215613a4a57600080fd5b6000613a5884828501613793565b91505092915050565b613a6a816148a0565b82525050565b613a79816148b2565b82525050565b613a88816148be565b82525050565b6000613a9a8385614764565b9350613aa783858461492e565b82840190509392505050565b6000613abe8261473d565b613ac88185614753565b9350613ad881856020860161493d565b613ae181614b1b565b840191505092915050565b6000613af78261473d565b613b018185614764565b9350613b1181856020860161493d565b80840191505092915050565b6000613b2882614748565b613b32818561476f565b9350613b4281856020860161493d565b613b4b81614b1b565b840191505092915050565b6000613b6182614748565b613b6b8185614780565b9350613b7b81856020860161493d565b80840191505092915050565b6000613b94600d8361476f565b9150613b9f82614b39565b602082019050919050565b6000613bb7601a8361476f565b9150613bc282614b62565b602082019050919050565b6000613bda60118361476f565b9150613be582614b8b565b602082019050919050565b6000613bfd600183614780565b9150613c0882614bb4565b600182019050919050565b6000613c20602b8361476f565b9150613c2b82614bdd565b604082019050919050565b6000613c4360328361476f565b9150613c4e82614c2c565b604082019050919050565b6000613c6660268361476f565b9150613c7182614c7b565b604082019050919050565b6000613c89601d83614780565b9150613c9482614cca565b601d82019050919050565b6000613cac601c8361476f565b9150613cb782614cf3565b602082019050919050565b6000613ccf60128361476f565b9150613cda82614d1c565b602082019050919050565b6000613cf2600c83614780565b9150613cfd82614d45565b600c82019050919050565b6000613d1560248361476f565b9150613d2082614d6e565b604082019050919050565b6000613d3860198361476f565b9150613d4382614dbd565b602082019050919050565b6000613d5b603083614780565b9150613d6682614de6565b603082019050919050565b6000613d7e60148361476f565b9150613d8982614e35565b602082019050919050565b6000613da1602c8361476f565b9150613dac82614e5e565b604082019050919050565b6000613dc4603b83614780565b9150613dcf82614ead565b603b82019050919050565b6000613de760388361476f565b9150613df282614efc565b604082019050919050565b6000613e0a602a8361476f565b9150613e1582614f4b565b604082019050919050565b6000613e2d60298361476f565b9150613e3882614f9a565b604082019050919050565b6000613e50600483614780565b9150613e5b82614fe9565b600482019050919050565b6000613e7360208361476f565b9150613e7e82615012565b602082019050919050565b6000613e9660148361476f565b9150613ea18261503b565b602082019050919050565b6000613eb9603883614780565b9150613ec482615064565b603882019050919050565b6000613edc602c8361476f565b9150613ee7826150b3565b604082019050919050565b6000613eff60208361476f565b9150613f0a82615102565b602082019050919050565b6000613f22600e8361476f565b9150613f2d8261512b565b602082019050919050565b6000613f4560298361476f565b9150613f5082615154565b604082019050919050565b6000613f68605283614780565b9150613f73826151a3565b605282019050919050565b6000613f8b600483614780565b9150613f9682615218565b600482019050919050565b6000613fae60218361476f565b9150613fb982615241565b604082019050919050565b6000613fd1600183614780565b9150613fdc82615290565b600182019050919050565b6000613ff460318361476f565b9150613fff82615299565b604082019050919050565b6000614017602c8361476f565b9150614022826152e8565b604082019050919050565b600061403a600983614780565b915061404582615337565b600982019050919050565b600061405d600a8361476f565b915061406882615360565b602082019050919050565b61407c81614914565b82525050565b61409361408e8261491e565b614a1c565b82525050565b60006140a6828486613a8e565b91508190509392505050565b60006140be8284613b56565b915081905092915050565b60006140d58285613b56565b91506140e18284613b56565b91508190509392505050565b60006140f9828f613b56565b9150614105828e613b56565b9150614111828d613b56565b915061411d828c613b56565b9150614129828b613b56565b9150614135828a613b56565b91506141418289613b56565b915061414d8288613b56565b91506141598287613b56565b91506141658286613b56565b91506141718285613b56565b915061417d8284613b56565b91508190509d9c50505050505050505050505050565b600061419f8284613b56565b91506141aa82613f5b565b915081905092915050565b60006141c082613bf0565b91506141cc8285614082565b6004820191506141db8261402d565b91506141e78284613aec565b91508190509392505050565b60006141fe82613db7565b915061420a8284613b56565b915061421582613ce5565b915081905092915050565b600061422b82613eac565b91506142378288613b56565b915061424282613f7e565b915061424e8287613b56565b915061425982613e43565b91506142658286613b56565b915061427082613c7c565b915061427c8285613b56565b915061428782613d4e565b91506142938284613b56565b91508190509695505050505050565b60006142ad82613fc4565b91506142b98284613aec565b915081905092915050565b60006020820190506142d96000830184613a61565b92915050565b60006080820190506142f46000830187613a61565b6143016020830186613a61565b61430e6040830185614073565b81810360608301526143208184613ab3565b905095945050505050565b60006040820190506143406000830185613a61565b61434d6020830184614073565b9392505050565b60006020820190506143696000830184613a70565b92915050565b60006020820190506143846000830184613a7f565b92915050565b600060208201905081810360008301526143a48184613b1d565b905092915050565b600060208201905081810360008301526143c581613b87565b9050919050565b600060208201905081810360008301526143e581613baa565b9050919050565b6000602082019050818103600083015261440581613bcd565b9050919050565b6000602082019050818103600083015261442581613c13565b9050919050565b6000602082019050818103600083015261444581613c36565b9050919050565b6000602082019050818103600083015261446581613c59565b9050919050565b6000602082019050818103600083015261448581613c9f565b9050919050565b600060208201905081810360008301526144a581613cc2565b9050919050565b600060208201905081810360008301526144c581613d08565b9050919050565b600060208201905081810360008301526144e581613d2b565b9050919050565b6000602082019050818103600083015261450581613d71565b9050919050565b6000602082019050818103600083015261452581613d94565b9050919050565b6000602082019050818103600083015261454581613dda565b9050919050565b6000602082019050818103600083015261456581613dfd565b9050919050565b6000602082019050818103600083015261458581613e20565b9050919050565b600060208201905081810360008301526145a581613e66565b9050919050565b600060208201905081810360008301526145c581613e89565b9050919050565b600060208201905081810360008301526145e581613ecf565b9050919050565b6000602082019050818103600083015261460581613ef2565b9050919050565b6000602082019050818103600083015261462581613f15565b9050919050565b6000602082019050818103600083015261464581613f38565b9050919050565b6000602082019050818103600083015261466581613fa1565b9050919050565b6000602082019050818103600083015261468581613fe7565b9050919050565b600060208201905081810360008301526146a58161400a565b9050919050565b600060208201905081810360008301526146c581614050565b9050919050565b60006020820190506146e16000830184614073565b92915050565b60006146f1614702565b90506146fd82826149a2565b919050565b6000604051905090565b600067ffffffffffffffff82111561472757614726614aec565b5b61473082614b1b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061479682614914565b91506147a183614914565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147d6576147d5614a5f565b5b828201905092915050565b60006147ec82614914565b91506147f783614914565b92508261480757614806614a8e565b5b828204905092915050565b600061481d82614914565b915061482883614914565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561486157614860614a5f565b5b828202905092915050565b600061487782614914565b915061488283614914565b92508282101561489557614894614a5f565b5b828203905092915050565b60006148ab826148f4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561495b578082015181840152602081019050614940565b8381111561496a576000848401525b50505050565b6000600282049050600182168061498857607f821691505b6020821081141561499c5761499b614abd565b5b50919050565b6149ab82614b1b565b810181811067ffffffffffffffff821117156149ca576149c9614aec565b5b80604052505050565b60006149de82614914565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a1157614a10614a5f565b5b600182019050919050565b6000614a2782614b2c565b9050919050565b6000614a3982614914565b9150614a4483614914565b925082614a5457614a53614a8e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01b9050919050565b7f4f55545f4f465f424f554e445300000000000000000000000000000000000000600082015250565b7f43616e6e6f74206d696e65206d6f7265207468616e206f6e6365000000000000600082015250565b7f4445504c4f594d454e545f4641494c4544000000000000000000000000000000600082015250565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f2532322c202532326465736372697074696f6e25323225334120253232000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4f6e6c7920454127732063616e206d696e650000000000000000000000000000600082015250565b7f2532322537442535442537440000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f2532322c20253232696d6167652532322533412025323264617461253341696d60008201527f6167652f6a7065673b6261736536342c00000000000000000000000000000000602082015250565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2537442c2025374225323274726169745f74797065253232253341202532327060008201527f686173652532322c2025323276616c7565253232253341202532320000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f206f662000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4554482066656520696e73756666696369656e74000000000000000000000000600082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b636861727365743d555460008201527f462d382c2537422532326e616d65253232253341202532320000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e696e67206973206f766572000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f2532322c2532326174747269627574657325323225334120253542253742253260008201527f3274726169745f74797065253232253341202532326b696c6f6279746573253260208201527f322c2025323276616c7565253232253341200000000000000000000000000000604082015250565b7f2533412000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60008082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f80600e6000396000f30000000000000000000000000000000000000000000000600082015250565b7f57726f6e67206461746100000000000000000000000000000000000000000000600082015250565b615392816148a0565b811461539d57600080fd5b50565b6153a9816148b2565b81146153b457600080fd5b50565b6153c0816148c8565b81146153cb57600080fd5b50565b6153d781614914565b81146153e257600080fd5b5056fe4a504547204d696e696e67206973206120636f6c6c61626f726174697665206566666f727420746f2073746f726520253261253261746865206c617267657374206f6e2d636861696e20696d61676525326125326120253238312e354d4220696e2042617365363420666f726d61742025323620312e314d4220696e2062696e6172792532392e2054686520696d6167652069732073706c697420696e746f2031303020706965636573207768696368206172652075706c6f616465642062792065766572792077616c6c657420746861742063616c6c73207468652066756e6374696f6e206d696e652532382532392e205468616e6b7320746f207468652025326125326170726f6772657373697665204a50454725326125326120746563686e6f6c6f67792074686520696d616765206973207669657761626c652073696e636520697473206669727374207069656365206973206d696e65642c20616e6420697473207175616c697479206772616475616c6c7920696d70726f76657320756e74696c20746865206c617374207069656365206973206d696e65642e20202535437220202535437241732074686520696d6167652773207175616c69747920696d70726f766573206f76657220656163682073756363657373697665206d696e696e672c20697420676f6573207468726f756768203320646966666572656e7420636c65617220706861736573253341202025354372312e20696d616765206973202532612532626c61636b20262077686974652532612532206f6e6c792c202025354372322e202532612532636f6c6f7225326125322069732061646465642c20616e64202025354372332e2025326125327265736f6c7574696f6e253261253220696d70726f76657320756e74696c207468652066696e616c2076657273696f6e2e20202535437254686520422657207068617365206973207468652073686f727465737420616e64206f6e6c79206c617374732031312075706c6f6164732c2074686520636f6c6f72207068617365206c6173742032322075706c6f6164732c20616e6420746865207265736f6c7574696f6e20706861736520697320746865206c6f6e6765737420776974682036372075706c6f6164732e2020253543722020253543724576657279204a504547206d696e6572206765747320616e204e4654206f662074686520696d616765207769746820746865207175616c697479206174207468652074696d65206f66206d696e74696e672e202025354372202025354372417274206279204c6f67616e205475726e65722e204964656120616e6420636f64652062792058617461727265722ea264697066735822122098a112fd1a5b4427e195caa399643fc6196987d94ae3a0eb8320e56e05497a3f64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000e2000000000000000000000000000000000000000000000000000000000000000ec2f396a2f34414151536b5a4a5267414241514941484141634141442f32774244414155444241514541775545424151464251554742777749427763484277384c43776b4d455138534568455045524554466877584578516146524552474345594768306448783866457863694a4349654a4277654878372f327742444151554642516347427734494341346546424555486834654868346548683465486834654868346548683465486834654868346548683465486834654868346548683465486834654868346548683465486834654868372f776741524341506f4337674441524541416845424178454200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064c03732180eb567b3ad0d8470bdf944b8e60455e00bb7ca48d88c000bab18454b174568858289d4dd48fad5572eb6340aeecad8a2dc3d89233212abab07c5213a66af71170a2d0ea2cf4df2fa4a2509dd60b02b185965f6a4815e72006d0158036366a11a423611bcb975f2d11a442394a4d05f85c123701c4f2bfd811c911d8be5014f51487423810a80d3e0d5aa70b3790e5e7f0b320a2b845d2cf330def350ac44e8c856b7377e6a1a5b22d70b33dc9425d482180d8c30b8562e9c77eb97d2f159b96868d3c9498d072955e167c3b67705b5993d62e8778664dd0f13e3759bffa0e60216de763859acf0d08292d085da3efef10a06dfe5e47848910a547413fcfa25d5334300bd7095edf9a968aa921112fa8b4ad7eecc75f577d60138091785bb6757b015aa8673f7a36f2dcc6a7a3892e27b86cef2bad3a5ecb77af02322ff00a0bbbc5636ad4deaf0ad84191e29734c9bc56dbc9d3aaf4db88907401715f8f63c6c2f4e605e5b5661c4416fc79ccc9872f01c37028449af68ce53bd7204f6acfaf651b65c641baa8c4f2d5e8299aaa629a5ab0feb465052f0fc3411029a48905933aaaa05c4fdd5b9304020a80918ee5ce5e74729b4bf32c1074ecc1154722164aa9a28e312acb2e6a6cfdf8b06b0bbde550a60aea5a49882f3fb1a0bc4ea68f672650f08943b6502991bf03c07c43e2737026e3f5221f5cb978d7b1f19572ffe74ca16562e9932a8bf2497a4043c16a8e70f5d654ac3f3f9819e9e76a8fd928e0f9f57c9881ad45bf540765d67c037e477f80c01f36c5aab25136bf4eccbaf32a1d8b6aa064625d9213faf431ad8045ca282ce944f61381efdf5e18daf808f620721712df8279d3fcf2a379792fc6d7f72642e0af01a2bbfb0dddc7b74bf7e27370b744124554a62de47d107a13f07c4b3a49cbe92b3802676a9dfc2af687c7d4c21fd585d3d1be6ba9d15d4e62a93857fd669aba8bd0a4068587a4be410dee763f95a32547fde7a9950f7173d257dae0adb214e1b6e19ab977f836e3f2ee499a20d502ed469d351028469a619a6463c2d12e12a238b5581b983fa6894d3abd5086c4183da99a6fc4165592ac85cb0be0f34c4de3ef7ba8ae3d564df5be1b3ffeeba0f18414fcca929aa030fef3fc39417d4c101e4835aa92667bc8ab63a4d54bb9e36d237f34e8803df7c173520d8bbb1214dc8851781fc0e84ade2fec68ad0a777fca1f2e2448013bd5afb9aee2801f53f4bc79b5cd2dad1ac665a59bef1b3bb35d471d413b55b718c665ea071064fc20d0ac919992f672a150a4768826e48b627e841f6c29f1a20e570398419fdaec7ff33bcf7a53cfd60e693030eefe227037870baf3cf7fecc5e6a02bd3093aa4e3854ec2e759ea4e9f8e9c075bade43cf077ff4259fa0b8feb2ccee2416c5d9f356e278ab05bdf0be836f95e3b2d85dc8e2abe7d16bc73a073e3c361a291b1ca95393041e3cf7ea5d2e535a60b62f164a25b9aeaed35a105cab6265a3aabd8adac252e4599f60db83aa0d697c3f478b46588e89a37fd94f7e67c1c8937b0a18cdb4077af738e1ef885a85594850e04db2e329432b94e2afc91412e3129eda59b42571804d0691f23e19c8353eae50209c5ed69f9c901825b9caaece1f696858bc1102157b33cf84a668c85c193da8b039554e49ef068685f2e499e598f7636a36c6b6f5a89dfbf7c122f69586b05dfe0eda0badbe79e9670a86328eff8cb0e3da5efaec3e3bdd84e805eb9f25a8c49afc369a8f72a7726976e17e8f8b1f1222f6ac8b42cd1dad95092f9a29ad65710e457dd6d4baf051efd0046922c3bdcfce49c2a8f1728a21c77dd7c307495d6469189d999c538c1593f335a9f80de710650a20559c6765ebf840bca93bc612aab74e60e6a57849e8a2034c9054ab944bbc252e8382cf0692973d3288951c7d2e95fb03f8b00c6405afff86e6f8671b527da396316163209672342b1ee9d78d6e8928bb01d1022c77c28d505b6a7be984a193bf7579a88e75f08ecaa04198a74f02d2da24575e6127145735e675eb81e9c8a4c19dd1675aafabe3b7c8b25f6f2b1556b0d180d7ea023b566c1273b42329754b9243d67fbbd2b02c47f8656216ff1c2bd4b48144c7b7f4163b499757c21168563b9ccc6b445e5ab3b6ac20f41c2973e09b6e6a563839bab45264a9ce2ea6de8fac12745c2665a72dacdbf837707898a1a41e8aae526d3490f1b59dd8519e8a0eb4da1590b7d75b24d86be4bb9eaec2860dcc50c5e9c33a357f4640fb3b0597ad7123006a0e6dbbe4202647fd0aeb6b404b67ed9221392a4f4b817886166cb75e3623ab7ba60f572785ed395d06ae6f8647666ae6def635e994440750e682bb84435cd0bca618545ff7a864ebb31210627cf056b42e6c94e91ec2888966cde33ad937aed78c91c5ceda32e235b8b7b352f6b8c20d195178854f0986b4684f352fc998e3b09a071e96aeb582f9110ed2784705329d6d7bc0282757b5dfef2c907a005c219915b1c646e112b29b2595e5ff302b63bb4351c2e243b6119ba1185357f97c4cc9377ffd7c17327d08caa8889a505cf161c9bbbde3609a77cbf00b70c163779622de02f5c80857b1c04451b32c5d1ee98da098df05c842f6943480c8a9db0cb05c9ba51ef300e7bce2595d9053d9a6656ed3cb56828a29808a308a84c4ac5b6298e316f3f17447be3080bdd384bbd7c4fa9afe7dd99d94a6ae2755cc88e9508be666c7fed1175bfb8ee992621f4751ce0d7637c436a4f9aa67bd776384df97c9e1c076986dc81b1f798fabfcd6e5406f45f31258c2e07d85d9f1040f6c91b448ca1a6a315c8d274dff887a76c1e9a77cf0111a9a5b51377dc0e31a2e59e41fdf7027adb1be395ec95775003b9de17aceebe851e45a7fb2c8161b7883495b71fb4a0838d78fca20590241ca6d3b6b50ccc8eb0104103685ab6988302c40ba3a013ad594661a49a36af64ad262e87765b908a7c16bf3f5c4a287714239e8fd985b4f337ee2acd2b22111c77f533dd0e6e859d1cae78b76946d8470f4ec9dda92d02dccf992167faaa76d11467248f06a865f3db0eba97d3a73b039a47b8554ffc5e1dfed56f1f81edaf85b8f32fffa04292ee04f247f6c03d43ccb8d0671b7d256e5990bebe306e256fd77139ffe5b6490366a66a6c7599e51588b9f875c808d9550cb344a127f07f9ebb761558c02493789106f5b9cc44f507701135dec6168a9eaa264579741d67323c641b4f376ce0e584c97c0ad7fb90ef11203c6069311f587e2932d7117c76b28446acec34d1e1c2d3e5c564c2c1e3a30134e6ef7f57187e150573f63eb3014331f0a62caa0c76703c04d74e543d219fecebe7b382a4cdc7afd592d57afb6183ad32b72962584c1a7d69f75dec5529ff3792d08e328940a2a1d4a8c44863b7c7510d02ae93519c3054d82f4e899124e4abe051e6671706b2b61d0f7c4f7f2c48447a24609e4daf6984011d3b7c9340e20518ee21a00fb83d842ca8506b60e9ea5cf923bf9dbd14f8d62391cac9e2bbeec83fbc5d8936c231a4c280b2793d20d4fd96d99645bf3a85c367939750b16414e72dbf3e0866c235ead0184aff6090719be9641ec0ffa34f2ec685e60089d7c1c53818404e84a11760497009fa546307c9013842ba34d878375e4a0223a7e9806271ff72d44f19a0539add0598200b8a021c9f6e223e1bba48bb9244b674fe798e6b9b4bac0fd34e45a1310e175153e4aee0bfd67114ea1b68e7c9788f66315c365cc7ddc4bfe8ce7c6e31f162c49b58aeae4db70e9880606ff3dcde166538f09b199e81e40c2a6df0cd5ab2d874d6adb6621530a8582310aa2075b7ff43366574eaa89672014d7921669228751aaed0e561d066538bfd57a014238ce7b17e3c97d487035076d1e6fceb21b775f846577142db03233695e7ba79bc318222bab7789d193e6d411658f8ab1d09e1d9d56a5a783550f80a48803424e39cf6ea19c3a6418089cc63357f0f1a9b86a03c64085408928c9c5887a57309beb164ea2f3fe61754d9d472861759bee50eca792438dc82d8e0543f60171e6bb8bb4064d9eb1312ce240447afa5e409db58a36a253ec34aa38d3f3c1bafc0b8556057ef38897df0e7d467dc55d62eaefd1fd1405e4140fe99fa55fb685699d663f836c5cf9a01e9bf9f142b924b9aaa378b60ab7168d69f808fd77147692561d045825c23ee0efba8d20885009f342fb1bff53791b918cefe4ebc97b4cc1feb4a4c64a480c705b6831732d39a70d87ce25882b8997fd9b16f63e4935be569aab732b550eb63db36e4359f5a6251e3e2fdeb876797e46095676d3bc66dcb319b89ca70c47a48d7be4bb7b30c68489176d71e4eca7c80d3f927ebd0c81936f48da7bc744735e905fc1eee681b970c9e9f94b7c9df67b622b0a667e5323ded95657f7464f6cdb896e1002bba5d36ac1cfbf363d26b4d7799341be4b77ac8027c8db3ad6eb156d93c9099ed75e2a5a828cfcb944a95ede96d000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000b37760000000000000000000000000000000000000000000000000000000000066169000000000000000000000000000000000000000000000000000000000007759500000000000000000000000000000000000000000000000000000000000bd44100000000000000000000000000000000000000000000000000000000000f1e9f000000000000000000000000000000000000000000000000000000000011079b000000000000000000000000000000000000000000000000000000000013840800000000000000000000000000000000000000000000000000000000001511ed0000000000000000000000000000000000000000000000000000000000167a3a000000000000000000000000000000000000000000000000000000000017baee000000000000000000000000000000000000000000000000000000000018df700000000000000000000000000000000000000000000000000000000000168275000000000000000000000000000000000000000000000000000000000017e0b1000000000000000000000000000000000000000000000000000000000015f70600000000000000000000000000000000000000000000000000000000000d564b0000000000000000000000000000000000000000000000000000000000181f5f00000000000000000000000000000000000000000000000000000000000f7ea100000000000000000000000000000000000000000000000000000000001a5b2f000000000000000000000000000000000000000000000000000000000011aa8500000000000000000000000000000000000000000000000000000000001d1a94000000000000000000000000000000000000000000000000000000000017075d000000000000000000000000000000000000000000000000000000000020444d0000000000000000000000000000000000000000000000000000000000219f020000000000000000000000000000000000000000000000000000000000238b22000000000000000000000000000000000000000000000000000000000025c3cb00000000000000000000000000000000000000000000000000000000002711b50000000000000000000000000000000000000000000000000000000000290d7b00000000000000000000000000000000000000000000000000000000002a420f00000000000000000000000000000000000000000000000000000000002bd03800000000000000000000000000000000000000000000000000000000002ce46500000000000000000000000000000000000000000000000000000000002e1f8300000000000000000000000000000000000000000000000000000000002f36d0000000000000000000000000000000000000000000000000000000000030819300000000000000000000000000000000000000000000000000000000001272c0000000000000000000000000000000000000000000000000000000000010009300000000000000000000000000000000000000000000000000000000000a2afb00000000000000000000000000000000000000000000000000000000002000a4000000000000000000000000000000000000000000000000000000000015be0b00000000000000000000000000000000000000000000000000000000000bfe4f000000000000000000000000000000000000000000000000000000000018e1df000000000000000000000000000000000000000000000000000000000009f7940000000000000000000000000000000000000000000000000000000000163183000000000000000000000000000000000000000000000000000000000014196a00000000000000000000000000000000000000000000000000000000001ea8a4000000000000000000000000000000000000000000000000000000000020db8000000000000000000000000000000000000000000000000000000000000a8c950000000000000000000000000000000000000000000000000000000000267c9f0000000000000000000000000000000000000000000000000000000000190d2e000000000000000000000000000000000000000000000000000000000019603f00000000000000000000000000000000000000000000000000000000001407a100000000000000000000000000000000000000000000000000000000001ff05b0000000000000000000000000000000000000000000000000000000000353d650000000000000000000000000000000000000000000000000000000000142a6000000000000000000000000000000000000000000000000000000000001e6a6600000000000000000000000000000000000000000000000000000000001ac85f000000000000000000000000000000000000000000000000000000000025c66a00000000000000000000000000000000000000000000000000000000001f966a00000000000000000000000000000000000000000000000000000000002008d300000000000000000000000000000000000000000000000000000000002eb9e6000000000000000000000000000000000000000000000000000000000032f07b00000000000000000000000000000000000000000000000000000000002ab3a700000000000000000000000000000000000000000000000000000000001bc1be00000000000000000000000000000000000000000000000000000000003f623400000000000000000000000000000000000000000000000000000000003e1c7f00000000000000000000000000000000000000000000000000000000004190d2000000000000000000000000000000000000000000000000000000000040dc3f00000000000000000000000000000000000000000000000000000000004368c000000000000000000000000000000000000000000000000000000000002efaf30000000000000000000000000000000000000000000000000000000000482881000000000000000000000000000000000000000000000000000000000044b5820000000000000000000000000000000000000000000000000000000000371cfc00000000000000000000000000000000000000000000000000000000004592090000000000000000000000000000000000000000000000000000000000475db6000000000000000000000000000000000000000000000000000000000029683d0000000000000000000000000000000000000000000000000000000000482076000000000000000000000000000000000000000000000000000000000048b75a00000000000000000000000000000000000000000000000000000000004a6ca900000000000000000000000000000000000000000000000000000000003fd61800000000000000000000000000000000000000000000000000000000004d5c9100000000000000000000000000000000000000000000000000000000004fac72000000000000000000000000000000000000000000000000000000000037e9e700000000000000000000000000000000000000000000000000000000003eece7000000000000000000000000000000000000000000000000000000000052c1f3000000000000000000000000000000000000000000000000000000000052e1b40000000000000000000000000000000000000000000000000000000000537b4c00000000000000000000000000000000000000000000000000000000004bdda600000000000000000000000000000000000000000000000000000000005769f90000000000000000000000000000000000000000000000000000000000420f82000000000000000000000000000000000000000000000000000000000039c0c200000000000000000000000000000000000000000000000000000000005c9fa100000000000000000000000000000000000000000000000000000000005233df00000000000000000000000000000000000000000000000000000000003bb7070000000000000000000000000000000000000000000000000000000000524bce0000000000000000000000000000000000000000000000000000000000496a51000000000000000000000000000000000000000000000000000000000040706a00000000000000000000000000000000000000000000000000000000004b51c80000000000000000000000000000000000000000000000000000000000513f2700000000000000000000000000000000000000000000000000000000005b207600000000000000000000000000000000000000000000000000000000005e249f0000000000000000000000000000000000000000000000000000000000646e7d
Deployed Bytecode
0x6080604052600436106101815760003560e01c806370a08231116100d157806395d89b411161008a578063b88d4fde11610064578063b88d4fde14610599578063c87b56dd146105c2578063e985e9c5146105ff578063f2fde38b1461063c57610181565b806395d89b411461052e578063a0ef91df14610559578063a22cb4651461057057610181565b806370a082311461042d578063715018a61461046a578063757f281f14610481578063841819df146104be57806389476069146104da5780638da5cb5b1461050357610181565b806318160ddd1161013e57806342842e0e1161011857806342842e0e1461034d5780634f6ccce7146103765780636352211e146103b35780636b2fafa9146103f057610181565b806318160ddd146102bc57806323b872dd146102e75780632f745c591461031057610181565b806301ffc9a71461018657806306fdde03146101c3578063081812fc146101ee578063095ea7b31461022b57806315148ab11461025457806316ef376b1461027f575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190613978565b610665565b6040516101ba9190614354565b60405180910390f35b3480156101cf57600080fd5b506101d86106df565b6040516101e5919061438a565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190613a0f565b610771565b60405161022291906142c4565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d9190613913565b6107f6565b005b34801561026057600080fd5b5061026961090e565b60405161027691906146cc565b60405180910390f35b34801561028b57600080fd5b506102a660048036038101906102a19190613a0f565b610913565b6040516102b3919061438a565b60405180910390f35b3480156102c857600080fd5b506102d16109ea565b6040516102de91906146cc565b60405180910390f35b3480156102f357600080fd5b5061030e6004803603810190610309919061380d565b6109f7565b005b34801561031c57600080fd5b5061033760048036038101906103329190613913565b610a57565b60405161034491906146cc565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f919061380d565b610afc565b005b34801561038257600080fd5b5061039d60048036038101906103989190613a0f565b610b1c565b6040516103aa91906146cc565b60405180910390f35b3480156103bf57600080fd5b506103da60048036038101906103d59190613a0f565b610bb3565b6040516103e791906142c4565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190613a0f565b610c65565b604051610424919061436f565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f91906137a8565b610d75565b60405161046191906146cc565b60405180910390f35b34801561047657600080fd5b5061047f610e2d565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613a0f565b610eb5565b6040516104b591906146cc565b60405180910390f35b6104d860048036038101906104d391906139ca565b610fc8565b005b3480156104e657600080fd5b5061050160048036038101906104fc91906137a8565b611335565b005b34801561050f57600080fd5b506105186114d7565b60405161052591906142c4565b60405180910390f35b34801561053a57600080fd5b50610543611501565b604051610550919061438a565b60405180910390f35b34801561056557600080fd5b5061056e611593565b005b34801561057c57600080fd5b50610597600480360381019061059291906138d7565b61165f565b005b3480156105a557600080fd5b506105c060048036038101906105bb919061385c565b6117e0565b005b3480156105ce57600080fd5b506105e960048036038101906105e49190613a0f565b611842565b6040516105f6919061438a565b60405180910390f35b34801561060b57600080fd5b50610626600480360381019061062191906137d1565b6119d6565b6040516106339190614354565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e91906137a8565b611a6a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106d857506106d782611c30565b5b9050919050565b6060600080546106ee90614970565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90614970565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050905090565b600061077c82611d12565b6107bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b2906145cc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080182610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610872576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108699061464c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610891611d7e565b73ffffffffffffffffffffffffffffffffffffffff1614806108c057506108bf816108ba611d7e565b6119d6565b5b6108ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f69061452c565b60405180910390fd5b6109098383611d86565b505050565b606481565b60606064821061092257600080fd5b600a8211610967576040518060400160405280600d81526020017f426c61636b20262057686974650000000000000000000000000000000000000081525090506109e5565b602082116109ac576040518060400160405280600581526020017f436f6c6f7200000000000000000000000000000000000000000000000000000081525090506109e5565b6040518060400160405280600a81526020017f5265736f6c7574696f6e0000000000000000000000000000000000000000000081525090505b919050565b6000600880549050905090565b610a08610a02611d7e565b82611e3f565b610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e9061466c565b60405180910390fd5b610a52838383611f1d565b505050565b6000610a6283610d75565b8210610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a9061440c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b17838383604051806020016040528060008152506117e0565b505050565b6000610b266109ea565b8210610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e9061468c565b60405180910390fd5b60088281548110610ba1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c539061456c565b60405180910390fd5b80915050919050565b600060648210610c7457600080fd5b6000610cc57f000000000000000000000000538f893049cd2dd8afec29b100e1f4ca9ed38415602085610ca79190614812565b6020600187610cb6919061478b565b610cc09190614812565b612179565b9050600080600090505b6020811015610d6a57600881610ce59190614812565b60ff60f81b848381518110610d23577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c821791508080610d62906149d3565b915050610ccf565b508092505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd9061454c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e35611d7e565b73ffffffffffffffffffffffffffffffffffffffff16610e536114d7565b73ffffffffffffffffffffffffffffffffffffffff1614610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea0906145ec565b60405180910390fd5b610eb36000612212565b565b600060648210610ec457600080fd5b6000610f157f0000000000000000000000001c55612f8840bd1e63964e044737a379a16bb94e602085610ef79190614812565b6020600187610f06919061478b565b610f109190614812565b612179565b9050600080600090505b6020811015610fba57600881610f359190614812565b60ff60f81b848381518110610f73577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c821791508080610fb2906149d3565b915050610f1f565b508060001c92505050919050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d9061448c565b60405180910390fd5b600061104133610d75565b14611081576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611078906143cc565b60405180910390fd5b606461108b6109ea565b106110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c29061460c565b60405180910390fd5b60006110ef6110e06110db6109ea565b610eb5565b3a6122d890919063ffffffff16565b905080341015611134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b906145ac565b60405180910390fd5b61114461113f6109ea565b610c65565b8383604051611154929190614099565b60405180910390201461119c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611193906146ac565b60405180910390fd5b6111e983838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b62565b600b6111f36109ea565b8154811061122a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff166108fc8234611298919061486c565b9081150290604051600060405180830381858888f193505050501580156112c3573d6000803e3d6000fd5b5060006112ce6109ea565b90506112da33826122ee565b6112e381610913565b6040516112f091906140b2565b60405180910390207f2c54e6e2e2d8edc6b1aaae76a096de3ae58acb2b1d388aef7b74d9aa2240106b3360405161132791906142c4565b60405180910390a250505050565b61133d611d7e565b73ffffffffffffffffffffffffffffffffffffffff1661135b6114d7565b73ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a8906145ec565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113ec91906142c4565b60206040518083038186803b15801561140457600080fd5b505afa158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c9190613a38565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6114626114d7565b836040518363ffffffff1660e01b815260040161148092919061432b565b602060405180830381600087803b15801561149a57600080fd5b505af11580156114ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d2919061394f565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461151090614970565b80601f016020809104026020016040519081016040528092919081815260200182805461153c90614970565b80156115895780601f1061155e57610100808354040283529160200191611589565b820191906000526020600020905b81548152906001019060200180831161156c57829003601f168201915b5050505050905090565b61159b611d7e565b73ffffffffffffffffffffffffffffffffffffffff166115b96114d7565b73ffffffffffffffffffffffffffffffffffffffff161461160f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611606906145ec565b60405180910390fd5b6116176114d7565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561165c573d6000803e3d6000fd5b50565b611667611d7e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc906144cc565b60405180910390fd5b80600560006116e2611d7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661178f611d7e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117d49190614354565b60405180910390a35050565b6117f16117eb611d7e565b83611e3f565b611830576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118279061466c565b60405180910390fd5b61183c848484846124bc565b50505050565b606061184d82611d12565b61188c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611883906144ec565b60405180910390fd5b6119cf826040518060400160405280600a81526020017f4d696e6564204a504547000000000000000000000000000000000000000000008152506118db6001866118d6919061478b565b612518565b6118e56064612518565b6040518061040001604052806103d881526020016153e66103d8913961192a7f000000000000000000000000775aba2ce6086aaa9ab5ca1d9bb95c0e285025476126c5565b60405160200161193e959493929190614220565b6040516020818303038152906040526040518060400160405280600481526020017f2f396b3d000000000000000000000000000000000000000000000000000000008152506040516020016119939190614193565b6040516020818303038152906040526119ab86610913565b6040516020016119bb91906141f3565b6040516020818303038152906040526126fc565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a72611d7e565b73ffffffffffffffffffffffffffffffffffffffff16611a906114d7565b73ffffffffffffffffffffffffffffffffffffffff1614611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add906145ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4d9061444c565b60405180910390fd5b611b5f81612212565b50565b60008082604051602001611b7691906142a2565b60405160208183030381529060405290506000815182604051602001611b9d9291906141b5565b60405160208183030381529060405290508051602082016000f09250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c20906143ec565b60405180910390fd5b5050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cfb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d0b5750611d0a82612f93565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611df983610bb3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e4a82611d12565b611e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e809061450c565b60405180910390fd5b6000611e9483610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f0357508373ffffffffffffffffffffffffffffffffffffffff16611eeb84610771565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f145750611f1381856119d6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f3d82610bb3565b73ffffffffffffffffffffffffffffffffffffffff1614611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a9061462c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa906144ac565b60405180910390fd5b61200e838383612ffd565b612019600082611d86565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612069919061486c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120c0919061478b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6060600183612188919061478b565b9250600182612197919061478b565b9150818473ffffffffffffffffffffffffffffffffffffffff163b10156121f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ea906143ac565b60405180910390fd5b61220984848585612204919061486c565b613111565b90509392505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836122e69190614812565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561235e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123559061458c565b60405180910390fd5b61236781611d12565b156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e9061446c565b60405180910390fd5b6123b360008383612ffd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612403919061478b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6124c7848484611f1d565b6124d38484848461313c565b612512576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125099061442c565b60405180910390fd5b50505050565b60606000821415612560576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126c0565b600082905060005b6000821461259257808061257b906149d3565b915050600a8261258b91906147e1565b9150612568565b60008167ffffffffffffffff8111156125d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126065781602001600182028036833780820191505090505b5090505b600085146126b95760018261261f919061486c565b9150600a8561262e9190614a2e565b603061263a919061478b565b60f81b818381518110612676577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126b291906147e1565b945061260a565b8093505050505b919050565b60606126f5826001808573ffffffffffffffffffffffffffffffffffffffff163b6126f0919061486c565b613111565b9050919050565b6060600080600967ffffffffffffffff811115612742577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561277557816020015b60608152602001906001900390816127605790505b50905060005b6009811015612cd15780600c6127919190614812565b88101561279d57612cd1565b6000600c67ffffffffffffffff8111156127e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561281357816020015b60608152602001906001900390816127fe5790505b50905060005b600c811015612936578083600c6128309190614812565b61283a919061478b565b8a101561284657612936565b60006128cc600b8386600c61285b9190614812565b612865919061478b565b8154811061289c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166126c5565b905080838381518110612908577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181905250805186612920919061478b565b955050808061292e906149d3565b915050612819565b5080600081518110612971577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151816001815181106129b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151826002815181106129f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183600381518110612a37577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015184600481518110612a79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185600581518110612abb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015186600681518110612afd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015187600781518110612b3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015188600881518110612b81577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015189600981518110612bc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518a600a81518110612c05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518b600b81518110612c47577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051602001612c6a9c9b9a999897969594939291906140ed565b604051602081830303815290604052838381518110612cb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181905250508080612cc9906149d3565b91505061277b565b508581600081518110612d0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015182600181518110612d4f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183600281518110612d91577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015184600381518110612dd3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185600481518110612e15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015186600581518110612e57577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015187600681518110612e99577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015188600781518110612edb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015189600881518110612f1d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518e612f3c6104008e612f3791906147e1565b612518565b8f604051602001612f4e9291906140c9565b604051602081830303815290604052604051602001612f789c9b9a999897969594939291906140ed565b60405160208183030381529060405292505050949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6130088383836132d3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561304b57613046816132d8565b61308a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613089576130888382613321565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130cd576130c88161348e565b61310c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461310b5761310a82826135d1565b5b5b505050565b60606040519050601f19601f60208501840101168101604052818152818360208301863c9392505050565b600061315d8473ffffffffffffffffffffffffffffffffffffffff16613650565b156132c6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613186611d7e565b8786866040518563ffffffff1660e01b81526004016131a894939291906142df565b602060405180830381600087803b1580156131c257600080fd5b505af19250505080156131f357506040513d601f19601f820116820180604052508101906131f091906139a1565b60015b613276573d8060008114613223576040519150601f19603f3d011682016040523d82523d6000602084013e613228565b606091505b5060008151141561326e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132659061442c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132cb565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161332e84610d75565b613338919061486c565b905060006007600084815260200190815260200160002054905081811461341d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506134a2919061486c565b90506000600960008481526020019081526020016000205490506000600883815481106134f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613540577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806135b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006135dc83610d75565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b60006136766136718461470c565b6146e7565b90508281526020810184848401111561368e57600080fd5b61369984828561492e565b509392505050565b6000813590506136b081615389565b92915050565b6000813590506136c5816153a0565b92915050565b6000815190506136da816153a0565b92915050565b6000813590506136ef816153b7565b92915050565b600081519050613704816153b7565b92915050565b600082601f83011261371b57600080fd5b813561372b848260208601613663565b91505092915050565b60008083601f84011261374657600080fd5b8235905067ffffffffffffffff81111561375f57600080fd5b60208301915083600182028301111561377757600080fd5b9250929050565b60008135905061378d816153ce565b92915050565b6000815190506137a2816153ce565b92915050565b6000602082840312156137ba57600080fd5b60006137c8848285016136a1565b91505092915050565b600080604083850312156137e457600080fd5b60006137f2858286016136a1565b9250506020613803858286016136a1565b9150509250929050565b60008060006060848603121561382257600080fd5b6000613830868287016136a1565b9350506020613841868287016136a1565b92505060406138528682870161377e565b9150509250925092565b6000806000806080858703121561387257600080fd5b6000613880878288016136a1565b9450506020613891878288016136a1565b93505060406138a28782880161377e565b925050606085013567ffffffffffffffff8111156138bf57600080fd5b6138cb8782880161370a565b91505092959194509250565b600080604083850312156138ea57600080fd5b60006138f8858286016136a1565b9250506020613909858286016136b6565b9150509250929050565b6000806040838503121561392657600080fd5b6000613934858286016136a1565b92505060206139458582860161377e565b9150509250929050565b60006020828403121561396157600080fd5b600061396f848285016136cb565b91505092915050565b60006020828403121561398a57600080fd5b6000613998848285016136e0565b91505092915050565b6000602082840312156139b357600080fd5b60006139c1848285016136f5565b91505092915050565b600080602083850312156139dd57600080fd5b600083013567ffffffffffffffff8111156139f757600080fd5b613a0385828601613734565b92509250509250929050565b600060208284031215613a2157600080fd5b6000613a2f8482850161377e565b91505092915050565b600060208284031215613a4a57600080fd5b6000613a5884828501613793565b91505092915050565b613a6a816148a0565b82525050565b613a79816148b2565b82525050565b613a88816148be565b82525050565b6000613a9a8385614764565b9350613aa783858461492e565b82840190509392505050565b6000613abe8261473d565b613ac88185614753565b9350613ad881856020860161493d565b613ae181614b1b565b840191505092915050565b6000613af78261473d565b613b018185614764565b9350613b1181856020860161493d565b80840191505092915050565b6000613b2882614748565b613b32818561476f565b9350613b4281856020860161493d565b613b4b81614b1b565b840191505092915050565b6000613b6182614748565b613b6b8185614780565b9350613b7b81856020860161493d565b80840191505092915050565b6000613b94600d8361476f565b9150613b9f82614b39565b602082019050919050565b6000613bb7601a8361476f565b9150613bc282614b62565b602082019050919050565b6000613bda60118361476f565b9150613be582614b8b565b602082019050919050565b6000613bfd600183614780565b9150613c0882614bb4565b600182019050919050565b6000613c20602b8361476f565b9150613c2b82614bdd565b604082019050919050565b6000613c4360328361476f565b9150613c4e82614c2c565b604082019050919050565b6000613c6660268361476f565b9150613c7182614c7b565b604082019050919050565b6000613c89601d83614780565b9150613c9482614cca565b601d82019050919050565b6000613cac601c8361476f565b9150613cb782614cf3565b602082019050919050565b6000613ccf60128361476f565b9150613cda82614d1c565b602082019050919050565b6000613cf2600c83614780565b9150613cfd82614d45565b600c82019050919050565b6000613d1560248361476f565b9150613d2082614d6e565b604082019050919050565b6000613d3860198361476f565b9150613d4382614dbd565b602082019050919050565b6000613d5b603083614780565b9150613d6682614de6565b603082019050919050565b6000613d7e60148361476f565b9150613d8982614e35565b602082019050919050565b6000613da1602c8361476f565b9150613dac82614e5e565b604082019050919050565b6000613dc4603b83614780565b9150613dcf82614ead565b603b82019050919050565b6000613de760388361476f565b9150613df282614efc565b604082019050919050565b6000613e0a602a8361476f565b9150613e1582614f4b565b604082019050919050565b6000613e2d60298361476f565b9150613e3882614f9a565b604082019050919050565b6000613e50600483614780565b9150613e5b82614fe9565b600482019050919050565b6000613e7360208361476f565b9150613e7e82615012565b602082019050919050565b6000613e9660148361476f565b9150613ea18261503b565b602082019050919050565b6000613eb9603883614780565b9150613ec482615064565b603882019050919050565b6000613edc602c8361476f565b9150613ee7826150b3565b604082019050919050565b6000613eff60208361476f565b9150613f0a82615102565b602082019050919050565b6000613f22600e8361476f565b9150613f2d8261512b565b602082019050919050565b6000613f4560298361476f565b9150613f5082615154565b604082019050919050565b6000613f68605283614780565b9150613f73826151a3565b605282019050919050565b6000613f8b600483614780565b9150613f9682615218565b600482019050919050565b6000613fae60218361476f565b9150613fb982615241565b604082019050919050565b6000613fd1600183614780565b9150613fdc82615290565b600182019050919050565b6000613ff460318361476f565b9150613fff82615299565b604082019050919050565b6000614017602c8361476f565b9150614022826152e8565b604082019050919050565b600061403a600983614780565b915061404582615337565b600982019050919050565b600061405d600a8361476f565b915061406882615360565b602082019050919050565b61407c81614914565b82525050565b61409361408e8261491e565b614a1c565b82525050565b60006140a6828486613a8e565b91508190509392505050565b60006140be8284613b56565b915081905092915050565b60006140d58285613b56565b91506140e18284613b56565b91508190509392505050565b60006140f9828f613b56565b9150614105828e613b56565b9150614111828d613b56565b915061411d828c613b56565b9150614129828b613b56565b9150614135828a613b56565b91506141418289613b56565b915061414d8288613b56565b91506141598287613b56565b91506141658286613b56565b91506141718285613b56565b915061417d8284613b56565b91508190509d9c50505050505050505050505050565b600061419f8284613b56565b91506141aa82613f5b565b915081905092915050565b60006141c082613bf0565b91506141cc8285614082565b6004820191506141db8261402d565b91506141e78284613aec565b91508190509392505050565b60006141fe82613db7565b915061420a8284613b56565b915061421582613ce5565b915081905092915050565b600061422b82613eac565b91506142378288613b56565b915061424282613f7e565b915061424e8287613b56565b915061425982613e43565b91506142658286613b56565b915061427082613c7c565b915061427c8285613b56565b915061428782613d4e565b91506142938284613b56565b91508190509695505050505050565b60006142ad82613fc4565b91506142b98284613aec565b915081905092915050565b60006020820190506142d96000830184613a61565b92915050565b60006080820190506142f46000830187613a61565b6143016020830186613a61565b61430e6040830185614073565b81810360608301526143208184613ab3565b905095945050505050565b60006040820190506143406000830185613a61565b61434d6020830184614073565b9392505050565b60006020820190506143696000830184613a70565b92915050565b60006020820190506143846000830184613a7f565b92915050565b600060208201905081810360008301526143a48184613b1d565b905092915050565b600060208201905081810360008301526143c581613b87565b9050919050565b600060208201905081810360008301526143e581613baa565b9050919050565b6000602082019050818103600083015261440581613bcd565b9050919050565b6000602082019050818103600083015261442581613c13565b9050919050565b6000602082019050818103600083015261444581613c36565b9050919050565b6000602082019050818103600083015261446581613c59565b9050919050565b6000602082019050818103600083015261448581613c9f565b9050919050565b600060208201905081810360008301526144a581613cc2565b9050919050565b600060208201905081810360008301526144c581613d08565b9050919050565b600060208201905081810360008301526144e581613d2b565b9050919050565b6000602082019050818103600083015261450581613d71565b9050919050565b6000602082019050818103600083015261452581613d94565b9050919050565b6000602082019050818103600083015261454581613dda565b9050919050565b6000602082019050818103600083015261456581613dfd565b9050919050565b6000602082019050818103600083015261458581613e20565b9050919050565b600060208201905081810360008301526145a581613e66565b9050919050565b600060208201905081810360008301526145c581613e89565b9050919050565b600060208201905081810360008301526145e581613ecf565b9050919050565b6000602082019050818103600083015261460581613ef2565b9050919050565b6000602082019050818103600083015261462581613f15565b9050919050565b6000602082019050818103600083015261464581613f38565b9050919050565b6000602082019050818103600083015261466581613fa1565b9050919050565b6000602082019050818103600083015261468581613fe7565b9050919050565b600060208201905081810360008301526146a58161400a565b9050919050565b600060208201905081810360008301526146c581614050565b9050919050565b60006020820190506146e16000830184614073565b92915050565b60006146f1614702565b90506146fd82826149a2565b919050565b6000604051905090565b600067ffffffffffffffff82111561472757614726614aec565b5b61473082614b1b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061479682614914565b91506147a183614914565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147d6576147d5614a5f565b5b828201905092915050565b60006147ec82614914565b91506147f783614914565b92508261480757614806614a8e565b5b828204905092915050565b600061481d82614914565b915061482883614914565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561486157614860614a5f565b5b828202905092915050565b600061487782614914565b915061488283614914565b92508282101561489557614894614a5f565b5b828203905092915050565b60006148ab826148f4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561495b578082015181840152602081019050614940565b8381111561496a576000848401525b50505050565b6000600282049050600182168061498857607f821691505b6020821081141561499c5761499b614abd565b5b50919050565b6149ab82614b1b565b810181811067ffffffffffffffff821117156149ca576149c9614aec565b5b80604052505050565b60006149de82614914565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a1157614a10614a5f565b5b600182019050919050565b6000614a2782614b2c565b9050919050565b6000614a3982614914565b9150614a4483614914565b925082614a5457614a53614a8e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01b9050919050565b7f4f55545f4f465f424f554e445300000000000000000000000000000000000000600082015250565b7f43616e6e6f74206d696e65206d6f7265207468616e206f6e6365000000000000600082015250565b7f4445504c4f594d454e545f4641494c4544000000000000000000000000000000600082015250565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f2532322c202532326465736372697074696f6e25323225334120253232000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4f6e6c7920454127732063616e206d696e650000000000000000000000000000600082015250565b7f2532322537442535442537440000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f2532322c20253232696d6167652532322533412025323264617461253341696d60008201527f6167652f6a7065673b6261736536342c00000000000000000000000000000000602082015250565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2537442c2025374225323274726169745f74797065253232253341202532327060008201527f686173652532322c2025323276616c7565253232253341202532320000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f206f662000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4554482066656520696e73756666696369656e74000000000000000000000000600082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b636861727365743d555460008201527f462d382c2537422532326e616d65253232253341202532320000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e696e67206973206f766572000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f2532322c2532326174747269627574657325323225334120253542253742253260008201527f3274726169745f74797065253232253341202532326b696c6f6279746573253260208201527f322c2025323276616c7565253232253341200000000000000000000000000000604082015250565b7f2533412000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60008082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f80600e6000396000f30000000000000000000000000000000000000000000000600082015250565b7f57726f6e67206461746100000000000000000000000000000000000000000000600082015250565b615392816148a0565b811461539d57600080fd5b50565b6153a9816148b2565b81146153b457600080fd5b50565b6153c0816148c8565b81146153cb57600080fd5b50565b6153d781614914565b81146153e257600080fd5b5056fe4a504547204d696e696e67206973206120636f6c6c61626f726174697665206566666f727420746f2073746f726520253261253261746865206c617267657374206f6e2d636861696e20696d61676525326125326120253238312e354d4220696e2042617365363420666f726d61742025323620312e314d4220696e2062696e6172792532392e2054686520696d6167652069732073706c697420696e746f2031303020706965636573207768696368206172652075706c6f616465642062792065766572792077616c6c657420746861742063616c6c73207468652066756e6374696f6e206d696e652532382532392e205468616e6b7320746f207468652025326125326170726f6772657373697665204a50454725326125326120746563686e6f6c6f67792074686520696d616765206973207669657761626c652073696e636520697473206669727374207069656365206973206d696e65642c20616e6420697473207175616c697479206772616475616c6c7920696d70726f76657320756e74696c20746865206c617374207069656365206973206d696e65642e20202535437220202535437241732074686520696d6167652773207175616c69747920696d70726f766573206f76657220656163682073756363657373697665206d696e696e672c20697420676f6573207468726f756768203320646966666572656e7420636c65617220706861736573253341202025354372312e20696d616765206973202532612532626c61636b20262077686974652532612532206f6e6c792c202025354372322e202532612532636f6c6f7225326125322069732061646465642c20616e64202025354372332e2025326125327265736f6c7574696f6e253261253220696d70726f76657320756e74696c207468652066696e616c2076657273696f6e2e20202535437254686520422657207068617365206973207468652073686f727465737420616e64206f6e6c79206c617374732031312075706c6f6164732c2074686520636f6c6f72207068617365206c6173742032322075706c6f6164732c20616e6420746865207265736f6c7574696f6e20706861736520697320746865206c6f6e6765737420776974682036372075706c6f6164732e2020253543722020253543724576657279204a504547206d696e6572206765747320616e204e4654206f662074686520696d616765207769746820746865207175616c697479206174207468652074696d65206f66206d696e74696e672e202025354372202025354372417274206279204c6f67616e205475726e65722e204964656120616e6420636f64652062792058617461727265722ea264697066735822122098a112fd1a5b4427e195caa399643fc6196987d94ae3a0eb8320e56e05497a3f64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000e2000000000000000000000000000000000000000000000000000000000000000ec2f396a2f34414151536b5a4a5267414241514941484141634141442f32774244414155444241514541775545424151464251554742777749427763484277384c43776b4d455138534568455045524554466877584578516146524552474345594768306448783866457863694a4349654a4277654878372f327742444151554642516347427734494341346546424555486834654868346548683465486834654868346548683465486834654868346548683465486834654868346548683465486834654868346548683465486834654868372f776741524341506f4337674441524541416845424178454200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064c03732180eb567b3ad0d8470bdf944b8e60455e00bb7ca48d88c000bab18454b174568858289d4dd48fad5572eb6340aeecad8a2dc3d89233212abab07c5213a66af71170a2d0ea2cf4df2fa4a2509dd60b02b185965f6a4815e72006d0158036366a11a423611bcb975f2d11a442394a4d05f85c123701c4f2bfd811c911d8be5014f51487423810a80d3e0d5aa70b3790e5e7f0b320a2b845d2cf330def350ac44e8c856b7377e6a1a5b22d70b33dc9425d482180d8c30b8562e9c77eb97d2f159b96868d3c9498d072955e167c3b67705b5993d62e8778664dd0f13e3759bffa0e60216de763859acf0d08292d085da3efef10a06dfe5e47848910a547413fcfa25d5334300bd7095edf9a968aa921112fa8b4ad7eecc75f577d60138091785bb6757b015aa8673f7a36f2dcc6a7a3892e27b86cef2bad3a5ecb77af02322ff00a0bbbc5636ad4deaf0ad84191e29734c9bc56dbc9d3aaf4db88907401715f8f63c6c2f4e605e5b5661c4416fc79ccc9872f01c37028449af68ce53bd7204f6acfaf651b65c641baa8c4f2d5e8299aaa629a5ab0feb465052f0fc3411029a48905933aaaa05c4fdd5b9304020a80918ee5ce5e74729b4bf32c1074ecc1154722164aa9a28e312acb2e6a6cfdf8b06b0bbde550a60aea5a49882f3fb1a0bc4ea68f672650f08943b6502991bf03c07c43e2737026e3f5221f5cb978d7b1f19572ffe74ca16562e9932a8bf2497a4043c16a8e70f5d654ac3f3f9819e9e76a8fd928e0f9f57c9881ad45bf540765d67c037e477f80c01f36c5aab25136bf4eccbaf32a1d8b6aa064625d9213faf431ad8045ca282ce944f61381efdf5e18daf808f620721712df8279d3fcf2a379792fc6d7f72642e0af01a2bbfb0dddc7b74bf7e27370b744124554a62de47d107a13f07c4b3a49cbe92b3802676a9dfc2af687c7d4c21fd585d3d1be6ba9d15d4e62a93857fd669aba8bd0a4068587a4be410dee763f95a32547fde7a9950f7173d257dae0adb214e1b6e19ab977f836e3f2ee499a20d502ed469d351028469a619a6463c2d12e12a238b5581b983fa6894d3abd5086c4183da99a6fc4165592ac85cb0be0f34c4de3ef7ba8ae3d564df5be1b3ffeeba0f18414fcca929aa030fef3fc39417d4c101e4835aa92667bc8ab63a4d54bb9e36d237f34e8803df7c173520d8bbb1214dc8851781fc0e84ade2fec68ad0a777fca1f2e2448013bd5afb9aee2801f53f4bc79b5cd2dad1ac665a59bef1b3bb35d471d413b55b718c665ea071064fc20d0ac919992f672a150a4768826e48b627e841f6c29f1a20e570398419fdaec7ff33bcf7a53cfd60e693030eefe227037870baf3cf7fecc5e6a02bd3093aa4e3854ec2e759ea4e9f8e9c075bade43cf077ff4259fa0b8feb2ccee2416c5d9f356e278ab05bdf0be836f95e3b2d85dc8e2abe7d16bc73a073e3c361a291b1ca95393041e3cf7ea5d2e535a60b62f164a25b9aeaed35a105cab6265a3aabd8adac252e4599f60db83aa0d697c3f478b46588e89a37fd94f7e67c1c8937b0a18cdb4077af738e1ef885a85594850e04db2e329432b94e2afc91412e3129eda59b42571804d0691f23e19c8353eae50209c5ed69f9c901825b9caaece1f696858bc1102157b33cf84a668c85c193da8b039554e49ef068685f2e499e598f7636a36c6b6f5a89dfbf7c122f69586b05dfe0eda0badbe79e9670a86328eff8cb0e3da5efaec3e3bdd84e805eb9f25a8c49afc369a8f72a7726976e17e8f8b1f1222f6ac8b42cd1dad95092f9a29ad65710e457dd6d4baf051efd0046922c3bdcfce49c2a8f1728a21c77dd7c307495d6469189d999c538c1593f335a9f80de710650a20559c6765ebf840bca93bc612aab74e60e6a57849e8a2034c9054ab944bbc252e8382cf0692973d3288951c7d2e95fb03f8b00c6405afff86e6f8671b527da396316163209672342b1ee9d78d6e8928bb01d1022c77c28d505b6a7be984a193bf7579a88e75f08ecaa04198a74f02d2da24575e6127145735e675eb81e9c8a4c19dd1675aafabe3b7c8b25f6f2b1556b0d180d7ea023b566c1273b42329754b9243d67fbbd2b02c47f8656216ff1c2bd4b48144c7b7f4163b499757c21168563b9ccc6b445e5ab3b6ac20f41c2973e09b6e6a563839bab45264a9ce2ea6de8fac12745c2665a72dacdbf837707898a1a41e8aae526d3490f1b59dd8519e8a0eb4da1590b7d75b24d86be4bb9eaec2860dcc50c5e9c33a357f4640fb3b0597ad7123006a0e6dbbe4202647fd0aeb6b404b67ed9221392a4f4b817886166cb75e3623ab7ba60f572785ed395d06ae6f8647666ae6def635e994440750e682bb84435cd0bca618545ff7a864ebb31210627cf056b42e6c94e91ec2888966cde33ad937aed78c91c5ceda32e235b8b7b352f6b8c20d195178854f0986b4684f352fc998e3b09a071e96aeb582f9110ed2784705329d6d7bc0282757b5dfef2c907a005c219915b1c646e112b29b2595e5ff302b63bb4351c2e243b6119ba1185357f97c4cc9377ffd7c17327d08caa8889a505cf161c9bbbde3609a77cbf00b70c163779622de02f5c80857b1c04451b32c5d1ee98da098df05c842f6943480c8a9db0cb05c9ba51ef300e7bce2595d9053d9a6656ed3cb56828a29808a308a84c4ac5b6298e316f3f17447be3080bdd384bbd7c4fa9afe7dd99d94a6ae2755cc88e9508be666c7fed1175bfb8ee992621f4751ce0d7637c436a4f9aa67bd776384df97c9e1c076986dc81b1f798fabfcd6e5406f45f31258c2e07d85d9f1040f6c91b448ca1a6a315c8d274dff887a76c1e9a77cf0111a9a5b51377dc0e31a2e59e41fdf7027adb1be395ec95775003b9de17aceebe851e45a7fb2c8161b7883495b71fb4a0838d78fca20590241ca6d3b6b50ccc8eb0104103685ab6988302c40ba3a013ad594661a49a36af64ad262e87765b908a7c16bf3f5c4a287714239e8fd985b4f337ee2acd2b22111c77f533dd0e6e859d1cae78b76946d8470f4ec9dda92d02dccf992167faaa76d11467248f06a865f3db0eba97d3a73b039a47b8554ffc5e1dfed56f1f81edaf85b8f32fffa04292ee04f247f6c03d43ccb8d0671b7d256e5990bebe306e256fd77139ffe5b6490366a66a6c7599e51588b9f875c808d9550cb344a127f07f9ebb761558c02493789106f5b9cc44f507701135dec6168a9eaa264579741d67323c641b4f376ce0e584c97c0ad7fb90ef11203c6069311f587e2932d7117c76b28446acec34d1e1c2d3e5c564c2c1e3a30134e6ef7f57187e150573f63eb3014331f0a62caa0c76703c04d74e543d219fecebe7b382a4cdc7afd592d57afb6183ad32b72962584c1a7d69f75dec5529ff3792d08e328940a2a1d4a8c44863b7c7510d02ae93519c3054d82f4e899124e4abe051e6671706b2b61d0f7c4f7f2c48447a24609e4daf6984011d3b7c9340e20518ee21a00fb83d842ca8506b60e9ea5cf923bf9dbd14f8d62391cac9e2bbeec83fbc5d8936c231a4c280b2793d20d4fd96d99645bf3a85c367939750b16414e72dbf3e0866c235ead0184aff6090719be9641ec0ffa34f2ec685e60089d7c1c53818404e84a11760497009fa546307c9013842ba34d878375e4a0223a7e9806271ff72d44f19a0539add0598200b8a021c9f6e223e1bba48bb9244b674fe798e6b9b4bac0fd34e45a1310e175153e4aee0bfd67114ea1b68e7c9788f66315c365cc7ddc4bfe8ce7c6e31f162c49b58aeae4db70e9880606ff3dcde166538f09b199e81e40c2a6df0cd5ab2d874d6adb6621530a8582310aa2075b7ff43366574eaa89672014d7921669228751aaed0e561d066538bfd57a014238ce7b17e3c97d487035076d1e6fceb21b775f846577142db03233695e7ba79bc318222bab7789d193e6d411658f8ab1d09e1d9d56a5a783550f80a48803424e39cf6ea19c3a6418089cc63357f0f1a9b86a03c64085408928c9c5887a57309beb164ea2f3fe61754d9d472861759bee50eca792438dc82d8e0543f60171e6bb8bb4064d9eb1312ce240447afa5e409db58a36a253ec34aa38d3f3c1bafc0b8556057ef38897df0e7d467dc55d62eaefd1fd1405e4140fe99fa55fb685699d663f836c5cf9a01e9bf9f142b924b9aaa378b60ab7168d69f808fd77147692561d045825c23ee0efba8d20885009f342fb1bff53791b918cefe4ebc97b4cc1feb4a4c64a480c705b6831732d39a70d87ce25882b8997fd9b16f63e4935be569aab732b550eb63db36e4359f5a6251e3e2fdeb876797e46095676d3bc66dcb319b89ca70c47a48d7be4bb7b30c68489176d71e4eca7c80d3f927ebd0c81936f48da7bc744735e905fc1eee681b970c9e9f94b7c9df67b622b0a667e5323ded95657f7464f6cdb896e1002bba5d36ac1cfbf363d26b4d7799341be4b77ac8027c8db3ad6eb156d93c9099ed75e2a5a828cfcb944a95ede96d000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000b37760000000000000000000000000000000000000000000000000000000000066169000000000000000000000000000000000000000000000000000000000007759500000000000000000000000000000000000000000000000000000000000bd44100000000000000000000000000000000000000000000000000000000000f1e9f000000000000000000000000000000000000000000000000000000000011079b000000000000000000000000000000000000000000000000000000000013840800000000000000000000000000000000000000000000000000000000001511ed0000000000000000000000000000000000000000000000000000000000167a3a000000000000000000000000000000000000000000000000000000000017baee000000000000000000000000000000000000000000000000000000000018df700000000000000000000000000000000000000000000000000000000000168275000000000000000000000000000000000000000000000000000000000017e0b1000000000000000000000000000000000000000000000000000000000015f70600000000000000000000000000000000000000000000000000000000000d564b0000000000000000000000000000000000000000000000000000000000181f5f00000000000000000000000000000000000000000000000000000000000f7ea100000000000000000000000000000000000000000000000000000000001a5b2f000000000000000000000000000000000000000000000000000000000011aa8500000000000000000000000000000000000000000000000000000000001d1a94000000000000000000000000000000000000000000000000000000000017075d000000000000000000000000000000000000000000000000000000000020444d0000000000000000000000000000000000000000000000000000000000219f020000000000000000000000000000000000000000000000000000000000238b22000000000000000000000000000000000000000000000000000000000025c3cb00000000000000000000000000000000000000000000000000000000002711b50000000000000000000000000000000000000000000000000000000000290d7b00000000000000000000000000000000000000000000000000000000002a420f00000000000000000000000000000000000000000000000000000000002bd03800000000000000000000000000000000000000000000000000000000002ce46500000000000000000000000000000000000000000000000000000000002e1f8300000000000000000000000000000000000000000000000000000000002f36d0000000000000000000000000000000000000000000000000000000000030819300000000000000000000000000000000000000000000000000000000001272c0000000000000000000000000000000000000000000000000000000000010009300000000000000000000000000000000000000000000000000000000000a2afb00000000000000000000000000000000000000000000000000000000002000a4000000000000000000000000000000000000000000000000000000000015be0b00000000000000000000000000000000000000000000000000000000000bfe4f000000000000000000000000000000000000000000000000000000000018e1df000000000000000000000000000000000000000000000000000000000009f7940000000000000000000000000000000000000000000000000000000000163183000000000000000000000000000000000000000000000000000000000014196a00000000000000000000000000000000000000000000000000000000001ea8a4000000000000000000000000000000000000000000000000000000000020db8000000000000000000000000000000000000000000000000000000000000a8c950000000000000000000000000000000000000000000000000000000000267c9f0000000000000000000000000000000000000000000000000000000000190d2e000000000000000000000000000000000000000000000000000000000019603f00000000000000000000000000000000000000000000000000000000001407a100000000000000000000000000000000000000000000000000000000001ff05b0000000000000000000000000000000000000000000000000000000000353d650000000000000000000000000000000000000000000000000000000000142a6000000000000000000000000000000000000000000000000000000000001e6a6600000000000000000000000000000000000000000000000000000000001ac85f000000000000000000000000000000000000000000000000000000000025c66a00000000000000000000000000000000000000000000000000000000001f966a00000000000000000000000000000000000000000000000000000000002008d300000000000000000000000000000000000000000000000000000000002eb9e6000000000000000000000000000000000000000000000000000000000032f07b00000000000000000000000000000000000000000000000000000000002ab3a700000000000000000000000000000000000000000000000000000000001bc1be00000000000000000000000000000000000000000000000000000000003f623400000000000000000000000000000000000000000000000000000000003e1c7f00000000000000000000000000000000000000000000000000000000004190d2000000000000000000000000000000000000000000000000000000000040dc3f00000000000000000000000000000000000000000000000000000000004368c000000000000000000000000000000000000000000000000000000000002efaf30000000000000000000000000000000000000000000000000000000000482881000000000000000000000000000000000000000000000000000000000044b5820000000000000000000000000000000000000000000000000000000000371cfc00000000000000000000000000000000000000000000000000000000004592090000000000000000000000000000000000000000000000000000000000475db6000000000000000000000000000000000000000000000000000000000029683d0000000000000000000000000000000000000000000000000000000000482076000000000000000000000000000000000000000000000000000000000048b75a00000000000000000000000000000000000000000000000000000000004a6ca900000000000000000000000000000000000000000000000000000000003fd61800000000000000000000000000000000000000000000000000000000004d5c9100000000000000000000000000000000000000000000000000000000004fac72000000000000000000000000000000000000000000000000000000000037e9e700000000000000000000000000000000000000000000000000000000003eece7000000000000000000000000000000000000000000000000000000000052c1f3000000000000000000000000000000000000000000000000000000000052e1b40000000000000000000000000000000000000000000000000000000000537b4c00000000000000000000000000000000000000000000000000000000004bdda600000000000000000000000000000000000000000000000000000000005769f90000000000000000000000000000000000000000000000000000000000420f82000000000000000000000000000000000000000000000000000000000039c0c200000000000000000000000000000000000000000000000000000000005c9fa100000000000000000000000000000000000000000000000000000000005233df00000000000000000000000000000000000000000000000000000000003bb7070000000000000000000000000000000000000000000000000000000000524bce0000000000000000000000000000000000000000000000000000000000496a51000000000000000000000000000000000000000000000000000000000040706a00000000000000000000000000000000000000000000000000000000004b51c80000000000000000000000000000000000000000000000000000000000513f2700000000000000000000000000000000000000000000000000000000005b207600000000000000000000000000000000000000000000000000000000005e249f0000000000000000000000000000000000000000000000000000000000646e7d
-----Decoded View---------------
Arg [0] : imageHeaderB64 (string): /9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wgARCAPoC7gDAREAAhEBAxEB
Arg [1] : imageHashes (bytes32[]): System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[]
Arg [2] : mintingGasFees (uint256[]): 735094,418153,488853,775233,990879,1116059,1278984,1380845,1473082,1555182,1630064,1475189,1564849,1439494,874059,1580895,1015457,1727279,1157765,1907348,1509213,2114637,2203394,2329378,2474955,2560437,2690427,2769423,2871352,2942053,3022723,3094224,3178899,1209024,1048723,666363,2097316,1424907,785999,1630687,653204,1454467,1317226,2009252,2153344,691349,2522271,1641774,1663039,1312673,2093147,3489125,1321568,1993318,1755231,2475626,2070122,2099411,3062246,3338363,2798503,1819070,4153908,4070527,4296914,4250687,4417728,3078899,4728961,4502914,3611900,4559369,4677046,2713661,4726902,4765530,4877481,4183576,5069969,5221490,3664359,4123879,5423603,5431732,5471052,4971942,5728761,4329346,3784898,6070177,5387231,3913479,5393358,4811345,4223082,4936136,5324583,5972086,6169759,6581885
-----Encoded View---------------
214 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000e20
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000ec
Arg [4] : 2f396a2f34414151536b5a4a5267414241514941484141634141442f32774244
Arg [5] : 414155444241514541775545424151464251554742777749427763484277384c
Arg [6] : 43776b4d45513853456845504552455446687758457851614652455247434559
Arg [7] : 4768306448783866457863694a4349654a4277654878372f3277424441515546
Arg [8] : 4251634742773449434134654642455548683465486834654868346548683465
Arg [9] : 4868346548683465486834654868346548683465486834654868346548683465
Arg [10] : 486834654868346548683465486834654868372f776741524341506f43376744
Arg [11] : 4152454141684542417845420000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [13] : c03732180eb567b3ad0d8470bdf944b8e60455e00bb7ca48d88c000bab18454b
Arg [14] : 174568858289d4dd48fad5572eb6340aeecad8a2dc3d89233212abab07c5213a
Arg [15] : 66af71170a2d0ea2cf4df2fa4a2509dd60b02b185965f6a4815e72006d015803
Arg [16] : 6366a11a423611bcb975f2d11a442394a4d05f85c123701c4f2bfd811c911d8b
Arg [17] : e5014f51487423810a80d3e0d5aa70b3790e5e7f0b320a2b845d2cf330def350
Arg [18] : ac44e8c856b7377e6a1a5b22d70b33dc9425d482180d8c30b8562e9c77eb97d2
Arg [19] : f159b96868d3c9498d072955e167c3b67705b5993d62e8778664dd0f13e3759b
Arg [20] : ffa0e60216de763859acf0d08292d085da3efef10a06dfe5e47848910a547413
Arg [21] : fcfa25d5334300bd7095edf9a968aa921112fa8b4ad7eecc75f577d601380917
Arg [22] : 85bb6757b015aa8673f7a36f2dcc6a7a3892e27b86cef2bad3a5ecb77af02322
Arg [23] : ff00a0bbbc5636ad4deaf0ad84191e29734c9bc56dbc9d3aaf4db88907401715
Arg [24] : f8f63c6c2f4e605e5b5661c4416fc79ccc9872f01c37028449af68ce53bd7204
Arg [25] : f6acfaf651b65c641baa8c4f2d5e8299aaa629a5ab0feb465052f0fc3411029a
Arg [26] : 48905933aaaa05c4fdd5b9304020a80918ee5ce5e74729b4bf32c1074ecc1154
Arg [27] : 722164aa9a28e312acb2e6a6cfdf8b06b0bbde550a60aea5a49882f3fb1a0bc4
Arg [28] : ea68f672650f08943b6502991bf03c07c43e2737026e3f5221f5cb978d7b1f19
Arg [29] : 572ffe74ca16562e9932a8bf2497a4043c16a8e70f5d654ac3f3f9819e9e76a8
Arg [30] : fd928e0f9f57c9881ad45bf540765d67c037e477f80c01f36c5aab25136bf4ec
Arg [31] : cbaf32a1d8b6aa064625d9213faf431ad8045ca282ce944f61381efdf5e18daf
Arg [32] : 808f620721712df8279d3fcf2a379792fc6d7f72642e0af01a2bbfb0dddc7b74
Arg [33] : bf7e27370b744124554a62de47d107a13f07c4b3a49cbe92b3802676a9dfc2af
Arg [34] : 687c7d4c21fd585d3d1be6ba9d15d4e62a93857fd669aba8bd0a4068587a4be4
Arg [35] : 10dee763f95a32547fde7a9950f7173d257dae0adb214e1b6e19ab977f836e3f
Arg [36] : 2ee499a20d502ed469d351028469a619a6463c2d12e12a238b5581b983fa6894
Arg [37] : d3abd5086c4183da99a6fc4165592ac85cb0be0f34c4de3ef7ba8ae3d564df5b
Arg [38] : e1b3ffeeba0f18414fcca929aa030fef3fc39417d4c101e4835aa92667bc8ab6
Arg [39] : 3a4d54bb9e36d237f34e8803df7c173520d8bbb1214dc8851781fc0e84ade2fe
Arg [40] : c68ad0a777fca1f2e2448013bd5afb9aee2801f53f4bc79b5cd2dad1ac665a59
Arg [41] : bef1b3bb35d471d413b55b718c665ea071064fc20d0ac919992f672a150a4768
Arg [42] : 826e48b627e841f6c29f1a20e570398419fdaec7ff33bcf7a53cfd60e693030e
Arg [43] : efe227037870baf3cf7fecc5e6a02bd3093aa4e3854ec2e759ea4e9f8e9c075b
Arg [44] : ade43cf077ff4259fa0b8feb2ccee2416c5d9f356e278ab05bdf0be836f95e3b
Arg [45] : 2d85dc8e2abe7d16bc73a073e3c361a291b1ca95393041e3cf7ea5d2e535a60b
Arg [46] : 62f164a25b9aeaed35a105cab6265a3aabd8adac252e4599f60db83aa0d697c3
Arg [47] : f478b46588e89a37fd94f7e67c1c8937b0a18cdb4077af738e1ef885a8559485
Arg [48] : 0e04db2e329432b94e2afc91412e3129eda59b42571804d0691f23e19c8353ea
Arg [49] : e50209c5ed69f9c901825b9caaece1f696858bc1102157b33cf84a668c85c193
Arg [50] : da8b039554e49ef068685f2e499e598f7636a36c6b6f5a89dfbf7c122f69586b
Arg [51] : 05dfe0eda0badbe79e9670a86328eff8cb0e3da5efaec3e3bdd84e805eb9f25a
Arg [52] : 8c49afc369a8f72a7726976e17e8f8b1f1222f6ac8b42cd1dad95092f9a29ad6
Arg [53] : 5710e457dd6d4baf051efd0046922c3bdcfce49c2a8f1728a21c77dd7c307495
Arg [54] : d6469189d999c538c1593f335a9f80de710650a20559c6765ebf840bca93bc61
Arg [55] : 2aab74e60e6a57849e8a2034c9054ab944bbc252e8382cf0692973d3288951c7
Arg [56] : d2e95fb03f8b00c6405afff86e6f8671b527da396316163209672342b1ee9d78
Arg [57] : d6e8928bb01d1022c77c28d505b6a7be984a193bf7579a88e75f08ecaa04198a
Arg [58] : 74f02d2da24575e6127145735e675eb81e9c8a4c19dd1675aafabe3b7c8b25f6
Arg [59] : f2b1556b0d180d7ea023b566c1273b42329754b9243d67fbbd2b02c47f865621
Arg [60] : 6ff1c2bd4b48144c7b7f4163b499757c21168563b9ccc6b445e5ab3b6ac20f41
Arg [61] : c2973e09b6e6a563839bab45264a9ce2ea6de8fac12745c2665a72dacdbf8377
Arg [62] : 07898a1a41e8aae526d3490f1b59dd8519e8a0eb4da1590b7d75b24d86be4bb9
Arg [63] : eaec2860dcc50c5e9c33a357f4640fb3b0597ad7123006a0e6dbbe4202647fd0
Arg [64] : aeb6b404b67ed9221392a4f4b817886166cb75e3623ab7ba60f572785ed395d0
Arg [65] : 6ae6f8647666ae6def635e994440750e682bb84435cd0bca618545ff7a864ebb
Arg [66] : 31210627cf056b42e6c94e91ec2888966cde33ad937aed78c91c5ceda32e235b
Arg [67] : 8b7b352f6b8c20d195178854f0986b4684f352fc998e3b09a071e96aeb582f91
Arg [68] : 10ed2784705329d6d7bc0282757b5dfef2c907a005c219915b1c646e112b29b2
Arg [69] : 595e5ff302b63bb4351c2e243b6119ba1185357f97c4cc9377ffd7c17327d08c
Arg [70] : aa8889a505cf161c9bbbde3609a77cbf00b70c163779622de02f5c80857b1c04
Arg [71] : 451b32c5d1ee98da098df05c842f6943480c8a9db0cb05c9ba51ef300e7bce25
Arg [72] : 95d9053d9a6656ed3cb56828a29808a308a84c4ac5b6298e316f3f17447be308
Arg [73] : 0bdd384bbd7c4fa9afe7dd99d94a6ae2755cc88e9508be666c7fed1175bfb8ee
Arg [74] : 992621f4751ce0d7637c436a4f9aa67bd776384df97c9e1c076986dc81b1f798
Arg [75] : fabfcd6e5406f45f31258c2e07d85d9f1040f6c91b448ca1a6a315c8d274dff8
Arg [76] : 87a76c1e9a77cf0111a9a5b51377dc0e31a2e59e41fdf7027adb1be395ec9577
Arg [77] : 5003b9de17aceebe851e45a7fb2c8161b7883495b71fb4a0838d78fca2059024
Arg [78] : 1ca6d3b6b50ccc8eb0104103685ab6988302c40ba3a013ad594661a49a36af64
Arg [79] : ad262e87765b908a7c16bf3f5c4a287714239e8fd985b4f337ee2acd2b22111c
Arg [80] : 77f533dd0e6e859d1cae78b76946d8470f4ec9dda92d02dccf992167faaa76d1
Arg [81] : 1467248f06a865f3db0eba97d3a73b039a47b8554ffc5e1dfed56f1f81edaf85
Arg [82] : b8f32fffa04292ee04f247f6c03d43ccb8d0671b7d256e5990bebe306e256fd7
Arg [83] : 7139ffe5b6490366a66a6c7599e51588b9f875c808d9550cb344a127f07f9ebb
Arg [84] : 761558c02493789106f5b9cc44f507701135dec6168a9eaa264579741d67323c
Arg [85] : 641b4f376ce0e584c97c0ad7fb90ef11203c6069311f587e2932d7117c76b284
Arg [86] : 46acec34d1e1c2d3e5c564c2c1e3a30134e6ef7f57187e150573f63eb3014331
Arg [87] : f0a62caa0c76703c04d74e543d219fecebe7b382a4cdc7afd592d57afb6183ad
Arg [88] : 32b72962584c1a7d69f75dec5529ff3792d08e328940a2a1d4a8c44863b7c751
Arg [89] : 0d02ae93519c3054d82f4e899124e4abe051e6671706b2b61d0f7c4f7f2c4844
Arg [90] : 7a24609e4daf6984011d3b7c9340e20518ee21a00fb83d842ca8506b60e9ea5c
Arg [91] : f923bf9dbd14f8d62391cac9e2bbeec83fbc5d8936c231a4c280b2793d20d4fd
Arg [92] : 96d99645bf3a85c367939750b16414e72dbf3e0866c235ead0184aff6090719b
Arg [93] : e9641ec0ffa34f2ec685e60089d7c1c53818404e84a11760497009fa546307c9
Arg [94] : 013842ba34d878375e4a0223a7e9806271ff72d44f19a0539add0598200b8a02
Arg [95] : 1c9f6e223e1bba48bb9244b674fe798e6b9b4bac0fd34e45a1310e175153e4ae
Arg [96] : e0bfd67114ea1b68e7c9788f66315c365cc7ddc4bfe8ce7c6e31f162c49b58ae
Arg [97] : ae4db70e9880606ff3dcde166538f09b199e81e40c2a6df0cd5ab2d874d6adb6
Arg [98] : 621530a8582310aa2075b7ff43366574eaa89672014d7921669228751aaed0e5
Arg [99] : 61d066538bfd57a014238ce7b17e3c97d487035076d1e6fceb21b775f8465771
Arg [100] : 42db03233695e7ba79bc318222bab7789d193e6d411658f8ab1d09e1d9d56a5a
Arg [101] : 783550f80a48803424e39cf6ea19c3a6418089cc63357f0f1a9b86a03c640854
Arg [102] : 08928c9c5887a57309beb164ea2f3fe61754d9d472861759bee50eca792438dc
Arg [103] : 82d8e0543f60171e6bb8bb4064d9eb1312ce240447afa5e409db58a36a253ec3
Arg [104] : 4aa38d3f3c1bafc0b8556057ef38897df0e7d467dc55d62eaefd1fd1405e4140
Arg [105] : fe99fa55fb685699d663f836c5cf9a01e9bf9f142b924b9aaa378b60ab7168d6
Arg [106] : 9f808fd77147692561d045825c23ee0efba8d20885009f342fb1bff53791b918
Arg [107] : cefe4ebc97b4cc1feb4a4c64a480c705b6831732d39a70d87ce25882b8997fd9
Arg [108] : b16f63e4935be569aab732b550eb63db36e4359f5a6251e3e2fdeb876797e460
Arg [109] : 95676d3bc66dcb319b89ca70c47a48d7be4bb7b30c68489176d71e4eca7c80d3
Arg [110] : f927ebd0c81936f48da7bc744735e905fc1eee681b970c9e9f94b7c9df67b622
Arg [111] : b0a667e5323ded95657f7464f6cdb896e1002bba5d36ac1cfbf363d26b4d7799
Arg [112] : 341be4b77ac8027c8db3ad6eb156d93c9099ed75e2a5a828cfcb944a95ede96d
Arg [113] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [114] : 00000000000000000000000000000000000000000000000000000000000b3776
Arg [115] : 0000000000000000000000000000000000000000000000000000000000066169
Arg [116] : 0000000000000000000000000000000000000000000000000000000000077595
Arg [117] : 00000000000000000000000000000000000000000000000000000000000bd441
Arg [118] : 00000000000000000000000000000000000000000000000000000000000f1e9f
Arg [119] : 000000000000000000000000000000000000000000000000000000000011079b
Arg [120] : 0000000000000000000000000000000000000000000000000000000000138408
Arg [121] : 00000000000000000000000000000000000000000000000000000000001511ed
Arg [122] : 0000000000000000000000000000000000000000000000000000000000167a3a
Arg [123] : 000000000000000000000000000000000000000000000000000000000017baee
Arg [124] : 000000000000000000000000000000000000000000000000000000000018df70
Arg [125] : 0000000000000000000000000000000000000000000000000000000000168275
Arg [126] : 000000000000000000000000000000000000000000000000000000000017e0b1
Arg [127] : 000000000000000000000000000000000000000000000000000000000015f706
Arg [128] : 00000000000000000000000000000000000000000000000000000000000d564b
Arg [129] : 0000000000000000000000000000000000000000000000000000000000181f5f
Arg [130] : 00000000000000000000000000000000000000000000000000000000000f7ea1
Arg [131] : 00000000000000000000000000000000000000000000000000000000001a5b2f
Arg [132] : 000000000000000000000000000000000000000000000000000000000011aa85
Arg [133] : 00000000000000000000000000000000000000000000000000000000001d1a94
Arg [134] : 000000000000000000000000000000000000000000000000000000000017075d
Arg [135] : 000000000000000000000000000000000000000000000000000000000020444d
Arg [136] : 0000000000000000000000000000000000000000000000000000000000219f02
Arg [137] : 0000000000000000000000000000000000000000000000000000000000238b22
Arg [138] : 000000000000000000000000000000000000000000000000000000000025c3cb
Arg [139] : 00000000000000000000000000000000000000000000000000000000002711b5
Arg [140] : 0000000000000000000000000000000000000000000000000000000000290d7b
Arg [141] : 00000000000000000000000000000000000000000000000000000000002a420f
Arg [142] : 00000000000000000000000000000000000000000000000000000000002bd038
Arg [143] : 00000000000000000000000000000000000000000000000000000000002ce465
Arg [144] : 00000000000000000000000000000000000000000000000000000000002e1f83
Arg [145] : 00000000000000000000000000000000000000000000000000000000002f36d0
Arg [146] : 0000000000000000000000000000000000000000000000000000000000308193
Arg [147] : 00000000000000000000000000000000000000000000000000000000001272c0
Arg [148] : 0000000000000000000000000000000000000000000000000000000000100093
Arg [149] : 00000000000000000000000000000000000000000000000000000000000a2afb
Arg [150] : 00000000000000000000000000000000000000000000000000000000002000a4
Arg [151] : 000000000000000000000000000000000000000000000000000000000015be0b
Arg [152] : 00000000000000000000000000000000000000000000000000000000000bfe4f
Arg [153] : 000000000000000000000000000000000000000000000000000000000018e1df
Arg [154] : 000000000000000000000000000000000000000000000000000000000009f794
Arg [155] : 0000000000000000000000000000000000000000000000000000000000163183
Arg [156] : 000000000000000000000000000000000000000000000000000000000014196a
Arg [157] : 00000000000000000000000000000000000000000000000000000000001ea8a4
Arg [158] : 000000000000000000000000000000000000000000000000000000000020db80
Arg [159] : 00000000000000000000000000000000000000000000000000000000000a8c95
Arg [160] : 0000000000000000000000000000000000000000000000000000000000267c9f
Arg [161] : 0000000000000000000000000000000000000000000000000000000000190d2e
Arg [162] : 000000000000000000000000000000000000000000000000000000000019603f
Arg [163] : 00000000000000000000000000000000000000000000000000000000001407a1
Arg [164] : 00000000000000000000000000000000000000000000000000000000001ff05b
Arg [165] : 0000000000000000000000000000000000000000000000000000000000353d65
Arg [166] : 0000000000000000000000000000000000000000000000000000000000142a60
Arg [167] : 00000000000000000000000000000000000000000000000000000000001e6a66
Arg [168] : 00000000000000000000000000000000000000000000000000000000001ac85f
Arg [169] : 000000000000000000000000000000000000000000000000000000000025c66a
Arg [170] : 00000000000000000000000000000000000000000000000000000000001f966a
Arg [171] : 00000000000000000000000000000000000000000000000000000000002008d3
Arg [172] : 00000000000000000000000000000000000000000000000000000000002eb9e6
Arg [173] : 000000000000000000000000000000000000000000000000000000000032f07b
Arg [174] : 00000000000000000000000000000000000000000000000000000000002ab3a7
Arg [175] : 00000000000000000000000000000000000000000000000000000000001bc1be
Arg [176] : 00000000000000000000000000000000000000000000000000000000003f6234
Arg [177] : 00000000000000000000000000000000000000000000000000000000003e1c7f
Arg [178] : 00000000000000000000000000000000000000000000000000000000004190d2
Arg [179] : 000000000000000000000000000000000000000000000000000000000040dc3f
Arg [180] : 00000000000000000000000000000000000000000000000000000000004368c0
Arg [181] : 00000000000000000000000000000000000000000000000000000000002efaf3
Arg [182] : 0000000000000000000000000000000000000000000000000000000000482881
Arg [183] : 000000000000000000000000000000000000000000000000000000000044b582
Arg [184] : 0000000000000000000000000000000000000000000000000000000000371cfc
Arg [185] : 0000000000000000000000000000000000000000000000000000000000459209
Arg [186] : 0000000000000000000000000000000000000000000000000000000000475db6
Arg [187] : 000000000000000000000000000000000000000000000000000000000029683d
Arg [188] : 0000000000000000000000000000000000000000000000000000000000482076
Arg [189] : 000000000000000000000000000000000000000000000000000000000048b75a
Arg [190] : 00000000000000000000000000000000000000000000000000000000004a6ca9
Arg [191] : 00000000000000000000000000000000000000000000000000000000003fd618
Arg [192] : 00000000000000000000000000000000000000000000000000000000004d5c91
Arg [193] : 00000000000000000000000000000000000000000000000000000000004fac72
Arg [194] : 000000000000000000000000000000000000000000000000000000000037e9e7
Arg [195] : 00000000000000000000000000000000000000000000000000000000003eece7
Arg [196] : 000000000000000000000000000000000000000000000000000000000052c1f3
Arg [197] : 000000000000000000000000000000000000000000000000000000000052e1b4
Arg [198] : 0000000000000000000000000000000000000000000000000000000000537b4c
Arg [199] : 00000000000000000000000000000000000000000000000000000000004bdda6
Arg [200] : 00000000000000000000000000000000000000000000000000000000005769f9
Arg [201] : 0000000000000000000000000000000000000000000000000000000000420f82
Arg [202] : 000000000000000000000000000000000000000000000000000000000039c0c2
Arg [203] : 00000000000000000000000000000000000000000000000000000000005c9fa1
Arg [204] : 00000000000000000000000000000000000000000000000000000000005233df
Arg [205] : 00000000000000000000000000000000000000000000000000000000003bb707
Arg [206] : 0000000000000000000000000000000000000000000000000000000000524bce
Arg [207] : 0000000000000000000000000000000000000000000000000000000000496a51
Arg [208] : 000000000000000000000000000000000000000000000000000000000040706a
Arg [209] : 00000000000000000000000000000000000000000000000000000000004b51c8
Arg [210] : 0000000000000000000000000000000000000000000000000000000000513f27
Arg [211] : 00000000000000000000000000000000000000000000000000000000005b2076
Arg [212] : 00000000000000000000000000000000000000000000000000000000005e249f
Arg [213] : 0000000000000000000000000000000000000000000000000000000000646e7d
Deployed Bytecode Sourcemap
690:7987:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:224:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2426:100:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3985:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3508:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;844:36:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6297:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1577:113:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4875:339:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1245:256:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5285:185:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1767:233:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2120:239:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6961:374:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1850:208:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1650:94:12;;;;;;;;;;;;;:::i;:::-;;6558:395:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7402:952;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8479:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;999:87:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2595:104:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8362:109:11;;;;;;;;;;;;;:::i;:::-;;4278:295:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5541:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3131:1408:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4644:164:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1899:192:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;937:224:4;1039:4;1078:35;1063:50;;;:11;:50;;;;:90;;;;1117:36;1141:11;1117:23;:36::i;:::-;1063:90;1056:97;;937:224;;;:::o;2426:100:3:-;2480:13;2513:5;2506:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2426:100;:::o;3985:221::-;4061:7;4089:16;4097:7;4089;:16::i;:::-;4081:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4174:15;:24;4190:7;4174:24;;;;;;;;;;;;;;;;;;;;;4167:31;;3985:221;;;:::o;3508:411::-;3589:13;3605:23;3620:7;3605:14;:23::i;:::-;3589:39;;3653:5;3647:11;;:2;:11;;;;3639:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3747:5;3731:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3756:37;3773:5;3780:12;:10;:12::i;:::-;3756:16;:37::i;:::-;3731:62;3709:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;3890:21;3899:2;3903:7;3890:8;:21::i;:::-;3508:411;;;:::o;844:36:11:-;877:3;844:36;:::o;6297:253::-;6353:13;877:3;6387:7;:16;6379:25;;;;;;6432:2;6421:7;:13;6417:125;;6436:22;;;;;;;;;;;;;;;;;;;;;6417:125;6489:2;6478:7;:13;6474:68;;6493:14;;;;;;;;;;;;;;;;;;;;;6474:68;6523:19;;;;;;;;;;;;;;;;;;;6297:253;;;;:::o;1577:113:4:-;1638:7;1665:10;:17;;;;1658:24;;1577:113;:::o;4875:339:3:-;5070:41;5089:12;:10;:12::i;:::-;5103:7;5070:18;:41::i;:::-;5062:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5178:28;5188:4;5194:2;5198:7;5178:9;:28::i;:::-;4875:339;;;:::o;1245:256:4:-;1342:7;1378:23;1395:5;1378:16;:23::i;:::-;1370:5;:31;1362:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1467:12;:19;1480:5;1467:19;;;;;;;;;;;;;;;:26;1487:5;1467:26;;;;;;;;;;;;1460:33;;1245:256;;;;:::o;5285:185:3:-;5423:39;5440:4;5446:2;5450:7;5423:39;;;;;;;;;;;;:16;:39::i;:::-;5285:185;;;:::o;1767:233:4:-;1842:7;1878:30;:28;:30::i;:::-;1870:5;:38;1862:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1975:10;1986:5;1975:17;;;;;;;;;;;;;;;;;;;;;;;;1968:24;;1767:233;;;:::o;2120:239:3:-;2192:7;2212:13;2228:7;:16;2236:7;2228:16;;;;;;;;;;;;;;;;;;;;;2212:32;;2280:1;2263:19;;:5;:19;;;;2255:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2346:5;2339:12;;;2120:239;;;:::o;6961:374:11:-;7016:7;877:3;7044:7;:16;7036:25;;;;;;7074:22;7099:67;7112:19;7143:2;7133:7;:12;;;;:::i;:::-;7163:2;7158:1;7148:7;:11;;;;:::i;:::-;7147:18;;;;:::i;:::-;7099:12;:67::i;:::-;7074:92;;7179:11;7206:9;7218:1;7206:13;;7201:106;7225:2;7221:1;:6;7201:106;;;7293:1;7289;:5;;;;:::i;:::-;7279:4;7264:19;;:9;7274:1;7264:12;;;;;;;;;;;;;;;;;;;;;;;;:19;7256:28;;;:39;;7249:46;;;;7229:3;;;;;:::i;:::-;;;;7201:106;;;;7324:3;7317:10;;;;6961:374;;;:::o;1850:208:3:-;1922:7;1967:1;1950:19;;:5;:19;;;;1942:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2034:9;:16;2044:5;2034:16;;;;;;;;;;;;;;;;2027:23;;1850:208;;;:::o;1650:94:12:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;6558:395:11:-;6622:7;877:3;6650:7;:16;6642:25;;;;;;6680:22;6705:70;6718:22;6752:2;6742:7;:12;;;;:::i;:::-;6772:2;6767:1;6757:7;:11;;;;:::i;:::-;6756:18;;;;:::i;:::-;6705:12;:70::i;:::-;6680:95;;6788:11;6815:9;6827:1;6815:13;;6810:106;6834:2;6830:1;:6;6810:106;;;6902:1;6898;:5;;;;:::i;:::-;6888:4;6873:19;;:9;6883:1;6873:12;;;;;;;;;;;;;;;;;;;;;;;;:19;6865:28;;;:39;;6858:46;;;;6838:3;;;;;:::i;:::-;;;;6810:106;;;;6941:3;6933:12;;6926:19;;;;6558:395;;;:::o;7402:952::-;7515:9;7501:23;;:10;:23;;;7493:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;7591:1;7566:21;7576:10;7566:9;:21::i;:::-;:26;7558:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;877:3;7642:13;:11;:13::i;:::-;:22;7634:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;7730:18;7751:48;7767:31;7784:13;:11;:13::i;:::-;7767:16;:31::i;:::-;7751:11;:15;;:48;;;;:::i;:::-;7730:69;;7831:10;7818:9;:23;;7810:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7952:22;7960:13;:11;:13::i;:::-;7952:7;:22::i;:::-;7934:12;;7918:30;;;;;;;:::i;:::-;;;;;;;;:56;7910:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8064:34;8084:12;;8064:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:13;:34::i;:::-;8027:19;8047:13;:11;:13::i;:::-;8027:34;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;8145:10;8137:28;;:52;8178:10;8166:9;:22;;;;:::i;:::-;8137:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8224:15;8242:13;:11;:13::i;:::-;8224:31;;8266:26;8272:10;8284:7;8266:5;:26::i;:::-;8328:17;8337:7;8328:8;:17::i;:::-;8310:36;;;;;;:::i;:::-;;;;;;;;;8316:10;8310:36;;;;;;:::i;:::-;;;;;;;;7402:952;;;;:::o;8479:195::-;1230:12:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8551:15:11::1;8576:9;8569:27;;;8605:4;8569:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8551:60;;8629:9;8622:26;;;8649:7;:5;:7::i;:::-;8658;8622:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1290:1:12;8479:195:11::0;:::o;999:87:12:-;1045:7;1072:6;;;;;;;;;;;1065:13;;999:87;:::o;2595:104:3:-;2651:13;2684:7;2677:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2595:104;:::o;8362:109:11:-;1230:12:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8423:7:11::1;:5;:7::i;:::-;8415:25;;:48;8441:21;8415:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8362:109::o:0;4278:295:3:-;4393:12;:10;:12::i;:::-;4381:24;;:8;:24;;;;4373:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4493:8;4448:18;:32;4467:12;:10;:12::i;:::-;4448:32;;;;;;;;;;;;;;;:42;4481:8;4448:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4546:8;4517:48;;4532:12;:10;:12::i;:::-;4517:48;;;4556:8;4517:48;;;;;;:::i;:::-;;;;;;;;4278:295;;:::o;5541:328::-;5716:41;5735:12;:10;:12::i;:::-;5749:7;5716:18;:41::i;:::-;5708:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5822:39;5836:4;5842:2;5846:7;5855:5;5822:13;:39::i;:::-;5541:328;;;;:::o;3131:1408:11:-;3196:13;3230:16;3238:7;3230;:16::i;:::-;3222:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;3304:1227;3333:7;3516:5;;;;;;;;;;;;;;;;;3581:29;3608:1;3598:7;:11;;;;:::i;:::-;3581:16;:29::i;:::-;3670:24;877:3;3670:16;:24::i;:::-;3779:12;;;;;;;;;;;;;;;;;3902:33;3915:19;3902:12;:33::i;:::-;3388:571;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4069:15;;;;;;;;;;;;;;;;;4026:192;;;;;;;;:::i;:::-;;;;;;;;;;;;;4416:17;4425:7;4416:8;:17::i;:::-;4285:212;;;;;;;;:::i;:::-;;;;;;;;;;;;;3304:10;:1227::i;:::-;3284:1247;;3131:1408;;;:::o;4644:164:3:-;4741:4;4765:18;:25;4784:5;4765:25;;;;;;;;;;;;;;;:35;4791:8;4765:35;;;;;;;;;;;;;;;;;;;;;;;;;4758:42;;4644:164;;;;:::o;1899:192:12:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2008:1:::1;1988:22;;:8;:22;;;;1980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;325:509:13:-;377:15;404:24;457:4;431:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;404:58;;473:25;559:11;:18;637:11;501:157;;;;;;;;;:::i;:::-;;;;;;;;;;;;;473:185;;742:12;736:19;731:2;717:12;713:21;710:1;703:53;692:64;;803:1;784:21;;:7;:21;;;;776:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;325:509;;;;;:::o;1481:305:3:-;1583:4;1635:25;1620:40;;;:11;:40;;;;:105;;;;1692:33;1677:48;;;:11;:48;;;;1620:105;:158;;;;1742:36;1766:11;1742:23;:36::i;:::-;1620:158;1600:178;;1481:305;;;:::o;7379:127::-;7444:4;7496:1;7468:30;;:7;:16;7476:7;7468:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7461:37;;7379:127;;;:::o;587:96:1:-;640:7;666:10;659:17;;587:96;:::o;11361:174:3:-;11463:2;11436:15;:24;11452:7;11436:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11519:7;11515:2;11481:46;;11490:23;11505:7;11490:14;:23::i;:::-;11481:46;;;;;;;;;;;;11361:174;;:::o;7673:348::-;7766:4;7791:16;7799:7;7791;:16::i;:::-;7783:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7867:13;7883:23;7898:7;7883:14;:23::i;:::-;7867:39;;7936:5;7925:16;;:7;:16;;;:51;;;;7969:7;7945:31;;:20;7957:7;7945:11;:20::i;:::-;:31;;;7925:51;:87;;;;7980:32;7997:5;8004:7;7980:16;:32::i;:::-;7925:87;7917:96;;;7673:348;;;;:::o;10665:578::-;10824:4;10797:31;;:23;10812:7;10797:14;:23::i;:::-;:31;;;10789:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10907:1;10893:16;;:2;:16;;;;10885:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10963:39;10984:4;10990:2;10994:7;10963:20;:39::i;:::-;11067:29;11084:1;11088:7;11067:8;:29::i;:::-;11128:1;11109:9;:15;11119:4;11109:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11157:1;11140:9;:13;11150:2;11140:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11188:2;11169:7;:16;11177:7;11169:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11227:7;11223:2;11208:27;;11217:4;11208:27;;;;;;;;;;;;10665:578;;;:::o;1208:313:13:-;1320:12;317:1;1344:20;;;;;:::i;:::-;;;317:1;1374:18;;;;;:::i;:::-;;;1434:3;1411:7;:19;;;:26;;1403:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;1473:41;1486:7;1495:5;1508;1502:3;:11;;;;:::i;:::-;1473:12;:41::i;:::-;1466:48;;1208:313;;;;;:::o;2099:173:12:-;2155:16;2174:6;;;;;;;;;;;2155:25;;2200:8;2191:6;;:17;;;;;;;;;;;;;;;;;;2255:8;2224:40;;2245:8;2224:40;;;;;;;;;;;;2099:173;;:::o;3382:96:14:-;3440:7;3470:1;3466;:5;;;;:::i;:::-;3459:12;;3382:96;;;;:::o;9357:382:3:-;9451:1;9437:16;;:2;:16;;;;9429:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9510:16;9518:7;9510;:16::i;:::-;9509:17;9501:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9572:45;9601:1;9605:2;9609:7;9572:20;:45::i;:::-;9647:1;9630:9;:13;9640:2;9630:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9678:2;9659:7;:16;9667:7;9659:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9723:7;9719:2;9698:33;;9715:1;9698:33;;;;;;;;;;;;9357:382;;:::o;6751:315::-;6908:28;6918:4;6924:2;6928:7;6908:9;:28::i;:::-;6955:48;6978:4;6984:2;6988:7;6997:5;6955:22;:48::i;:::-;6947:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6751:315;;;;:::o;275:703:15:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;840:161:13:-;894:12;925:69;938:7;317:1;;960:7;:19;;;:33;;;;:::i;:::-;925:12;:69::i;:::-;918:76;;840:161;;;:::o;4547:1742:11:-;4721:13;4769:10;4794:20;4830:1;4817:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4794:38;;4850:9;4845:898;4869:1;4865;:5;4845:898;;;4911:1;4906:2;:6;;;;:::i;:::-;4896:7;:16;4892:27;;;4914:5;;4892:27;4936:21;4973:2;4960:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4936:40;;4998:9;4993:263;5017:2;5013:1;:6;4993:263;;;5068:1;5064;5059:2;:6;;;;:::i;:::-;:10;;;;:::i;:::-;5049:7;:20;5045:31;;;5071:5;;5045:31;5097:17;5117:45;5130:19;5159:1;5155;5150:2;:6;;;;:::i;:::-;:10;;;;:::i;:::-;5130:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5117:12;:45::i;:::-;5097:65;;5199:4;5181:5;5187:1;5181:8;;;;;;;;;;;;;;;;;;;;;:23;;;;5229:4;:11;5223:17;;;;;:::i;:::-;;;4993:263;5021:3;;;;;:::i;:::-;;;;4993:263;;;;5346:5;5352:1;5346:8;;;;;;;;;;;;;;;;;;;;;;5377:5;5383:1;5377:8;;;;;;;;;;;;;;;;;;;;;;5408:5;5414:1;5408:8;;;;;;;;;;;;;;;;;;;;;;5439:5;5445:1;5439:8;;;;;;;;;;;;;;;;;;;;;;5470:5;5476:1;5470:8;;;;;;;;;;;;;;;;;;;;;;5501:5;5507:1;5501:8;;;;;;;;;;;;;;;;;;;;;;5532:5;5538:1;5532:8;;;;;;;;;;;;;;;;;;;;;;5563:5;5569:1;5563:8;;;;;;;;;;;;;;;;;;;;;;5594:5;5600:1;5594:8;;;;;;;;;;;;;;;;;;;;;;5625:5;5631:1;5625:8;;;;;;;;;;;;;;;;;;;;;;5656:5;5662:2;5656:9;;;;;;;;;;;;;;;;;;;;;;5688:5;5694:2;5688:9;;;;;;;;;;;;;;;;;;;;;;5307:409;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5272:4;5277:1;5272:7;;;;;;;;;;;;;;;;;;;;;:459;;;;4845:898;4872:3;;;;;:::i;:::-;;;;4845:898;;;;5841:8;5872:4;5877:1;5872:7;;;;;;;;;;;;;;;;;;;;;;5902:4;5907:1;5902:7;;;;;;;;;;;;;;;;;;;;;;5932:4;5937:1;5932:7;;;;;;;;;;;;;;;;;;;;;;5962:4;5967:1;5962:7;;;;;;;;;;;;;;;;;;;;;;5992:4;5997:1;5992:7;;;;;;;;;;;;;;;;;;;;;;6022:4;6027:1;6022:7;;;;;;;;;;;;;;;;;;;;;;6052:4;6057:1;6052:7;;;;;;;;;;;;;;;;;;;;;;6082:4;6087:1;6082:7;;;;;;;;;;;;;;;;;;;;;;6112:4;6117:1;6112:7;;;;;;;;;;;;;;;;;;;;;;6142:8;6197:27;6219:4;6214:2;:9;;;;:::i;:::-;6197:16;:27::i;:::-;6226:8;6180:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5802:453;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5755:526;;;;4547:1742;;;;;;:::o;763:155:2:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;2613:589:4:-;2757:45;2784:4;2790:2;2794:7;2757:26;:45::i;:::-;2835:1;2819:18;;:4;:18;;;2815:187;;;2854:40;2886:7;2854:31;:40::i;:::-;2815:187;;;2924:2;2916:10;;:4;:10;;;2912:90;;2943:47;2976:4;2982:7;2943:32;:47::i;:::-;2912:90;2815:187;3030:1;3016:16;;:2;:16;;;3012:183;;;3049:45;3086:7;3049:36;:45::i;:::-;3012:183;;;3122:4;3116:10;;:2;:10;;;3112:83;;3143:40;3171:2;3175:7;3143:27;:40::i;:::-;3112:83;3012:183;2613:589;;;:::o;1527:393:13:-;1647:17;1713:4;1707:11;1699:19;;1802:4;1798:9;1791:4;1783;1776:5;1772:16;1766:4;1762:27;1758:38;1754:54;1748:4;1744:65;1738:4;1731:79;1836:4;1830;1823:18;1899:4;1892:5;1885:4;1879;1875:15;1866:7;1854:50;1685:229;;;;;:::o;12100:799:3:-;12255:4;12276:15;:2;:13;;;:15::i;:::-;12272:620;;;12328:2;12312:36;;;12349:12;:10;:12::i;:::-;12363:4;12369:7;12378:5;12312:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12308:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12571:1;12554:6;:13;:18;12550:272;;;12597:60;;;;;;;;;;:::i;:::-;;;;;;;;12550:272;12772:6;12766:13;12757:6;12753:2;12749:15;12742:38;12308:529;12445:41;;;12435:51;;;:6;:51;;;;12428:58;;;;;12272:620;12876:4;12869:11;;12100:799;;;;;;;:::o;13471:126::-;;;;:::o;3925:164:4:-;4029:10;:17;;;;4002:15;:24;4018:7;4002:24;;;;;;;;;;;:44;;;;4057:10;4073:7;4057:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3925:164;:::o;4716:988::-;4982:22;5032:1;5007:22;5024:4;5007:16;:22::i;:::-;:26;;;;:::i;:::-;4982:51;;5044:18;5065:17;:26;5083:7;5065:26;;;;;;;;;;;;5044:47;;5212:14;5198:10;:28;5194:328;;5243:19;5265:12;:18;5278:4;5265:18;;;;;;;;;;;;;;;:34;5284:14;5265:34;;;;;;;;;;;;5243:56;;5349:11;5316:12;:18;5329:4;5316:18;;;;;;;;;;;;;;;:30;5335:10;5316:30;;;;;;;;;;;:44;;;;5466:10;5433:17;:30;5451:11;5433:30;;;;;;;;;;;:43;;;;5194:328;;5618:17;:26;5636:7;5618:26;;;;;;;;;;;5611:33;;;5662:12;:18;5675:4;5662:18;;;;;;;;;;;;;;;:34;5681:14;5662:34;;;;;;;;;;;5655:41;;;4716:988;;;;:::o;5999:1079::-;6252:22;6297:1;6277:10;:17;;;;:21;;;;:::i;:::-;6252:46;;6309:18;6330:15;:24;6346:7;6330:24;;;;;;;;;;;;6309:45;;6681:19;6703:10;6714:14;6703:26;;;;;;;;;;;;;;;;;;;;;;;;6681:48;;6767:11;6742:10;6753;6742:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;6878:10;6847:15;:28;6863:11;6847:28;;;;;;;;;;;:41;;;;7019:15;:24;7035:7;7019:24;;;;;;;;;;;7012:31;;;7054:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5999:1079;;;;:::o;3503:221::-;3588:14;3605:20;3622:2;3605:16;:20::i;:::-;3588:37;;3663:7;3636:12;:16;3649:2;3636:16;;;;;;;;;;;;;;;:24;3653:6;3636:24;;;;;;;;;;;:34;;;;3710:6;3681:17;:26;3699:7;3681:26;;;;;;;;;;;:35;;;;3503:221;;;:::o;718:377:0:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;7:343:16:-;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::-;694:5;725:6;719:13;710:22;;741:30;765:5;741:30;:::i;:::-;700:77;;;;:::o;783:137::-;828:5;866:6;853:20;844:29;;882:32;908:5;882:32;:::i;:::-;834:86;;;;:::o;926:141::-;982:5;1013:6;1007:13;998:22;;1029:32;1055:5;1029:32;:::i;:::-;988:79;;;;:::o;1086:271::-;1141:5;1190:3;1183:4;1175:6;1171:17;1167:27;1157:2;;1208:1;1205;1198:12;1157:2;1248:6;1235:20;1273:78;1347:3;1339:6;1332:4;1324:6;1320:17;1273:78;:::i;:::-;1264:87;;1147:210;;;;;:::o;1377:352::-;1435:8;1445:6;1495:3;1488:4;1480:6;1476:17;1472:27;1462:2;;1513:1;1510;1503:12;1462:2;1549:6;1536:20;1526:30;;1579:18;1571:6;1568:30;1565:2;;;1611:1;1608;1601:12;1565:2;1648:4;1640:6;1636:17;1624:29;;1702:3;1694:4;1686:6;1682:17;1672:8;1668:32;1665:41;1662:2;;;1719:1;1716;1709:12;1662:2;1452:277;;;;;:::o;1735:139::-;1781:5;1819:6;1806:20;1797:29;;1835:33;1862:5;1835:33;:::i;:::-;1787:87;;;;:::o;1880:143::-;1937:5;1968:6;1962:13;1953:22;;1984:33;2011:5;1984:33;:::i;:::-;1943:80;;;;:::o;2029:262::-;2088:6;2137:2;2125:9;2116:7;2112:23;2108:32;2105:2;;;2153:1;2150;2143:12;2105:2;2196:1;2221:53;2266:7;2257:6;2246:9;2242:22;2221:53;:::i;:::-;2211:63;;2167:117;2095:196;;;;:::o;2297:407::-;2365:6;2373;2422:2;2410:9;2401:7;2397:23;2393:32;2390:2;;;2438:1;2435;2428:12;2390:2;2481:1;2506:53;2551:7;2542:6;2531:9;2527:22;2506:53;:::i;:::-;2496:63;;2452:117;2608:2;2634:53;2679:7;2670:6;2659:9;2655:22;2634:53;:::i;:::-;2624:63;;2579:118;2380:324;;;;;:::o;2710:552::-;2787:6;2795;2803;2852:2;2840:9;2831:7;2827:23;2823:32;2820:2;;;2868:1;2865;2858:12;2820:2;2911:1;2936:53;2981:7;2972:6;2961:9;2957:22;2936:53;:::i;:::-;2926:63;;2882:117;3038:2;3064:53;3109:7;3100:6;3089:9;3085:22;3064:53;:::i;:::-;3054:63;;3009:118;3166:2;3192:53;3237:7;3228:6;3217:9;3213:22;3192:53;:::i;:::-;3182:63;;3137:118;2810:452;;;;;:::o;3268:809::-;3363:6;3371;3379;3387;3436:3;3424:9;3415:7;3411:23;3407:33;3404:2;;;3453:1;3450;3443:12;3404:2;3496:1;3521:53;3566:7;3557:6;3546:9;3542:22;3521:53;:::i;:::-;3511:63;;3467:117;3623:2;3649:53;3694:7;3685:6;3674:9;3670:22;3649:53;:::i;:::-;3639:63;;3594:118;3751:2;3777:53;3822:7;3813:6;3802:9;3798:22;3777:53;:::i;:::-;3767:63;;3722:118;3907:2;3896:9;3892:18;3879:32;3938:18;3930:6;3927:30;3924:2;;;3970:1;3967;3960:12;3924:2;3998:62;4052:7;4043:6;4032:9;4028:22;3998:62;:::i;:::-;3988:72;;3850:220;3394:683;;;;;;;:::o;4083:401::-;4148:6;4156;4205:2;4193:9;4184:7;4180:23;4176:32;4173:2;;;4221:1;4218;4211:12;4173:2;4264:1;4289:53;4334:7;4325:6;4314:9;4310:22;4289:53;:::i;:::-;4279:63;;4235:117;4391:2;4417:50;4459:7;4450:6;4439:9;4435:22;4417:50;:::i;:::-;4407:60;;4362:115;4163:321;;;;;:::o;4490:407::-;4558:6;4566;4615:2;4603:9;4594:7;4590:23;4586:32;4583:2;;;4631:1;4628;4621:12;4583:2;4674:1;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4645:117;4801:2;4827:53;4872:7;4863:6;4852:9;4848:22;4827:53;:::i;:::-;4817:63;;4772:118;4573:324;;;;;:::o;4903:278::-;4970:6;5019:2;5007:9;4998:7;4994:23;4990:32;4987:2;;;5035:1;5032;5025:12;4987:2;5078:1;5103:61;5156:7;5147:6;5136:9;5132:22;5103:61;:::i;:::-;5093:71;;5049:125;4977:204;;;;:::o;5187:260::-;5245:6;5294:2;5282:9;5273:7;5269:23;5265:32;5262:2;;;5310:1;5307;5300:12;5262:2;5353:1;5378:52;5422:7;5413:6;5402:9;5398:22;5378:52;:::i;:::-;5368:62;;5324:116;5252:195;;;;:::o;5453:282::-;5522:6;5571:2;5559:9;5550:7;5546:23;5542:32;5539:2;;;5587:1;5584;5577:12;5539:2;5630:1;5655:63;5710:7;5701:6;5690:9;5686:22;5655:63;:::i;:::-;5645:73;;5601:127;5529:206;;;;:::o;5741:395::-;5812:6;5820;5869:2;5857:9;5848:7;5844:23;5840:32;5837:2;;;5885:1;5882;5875:12;5837:2;5956:1;5945:9;5941:17;5928:31;5986:18;5978:6;5975:30;5972:2;;;6018:1;6015;6008:12;5972:2;6054:65;6111:7;6102:6;6091:9;6087:22;6054:65;:::i;:::-;6036:83;;;;5899:230;5827:309;;;;;:::o;6142:262::-;6201:6;6250:2;6238:9;6229:7;6225:23;6221:32;6218:2;;;6266:1;6263;6256:12;6218:2;6309:1;6334:53;6379:7;6370:6;6359:9;6355:22;6334:53;:::i;:::-;6324:63;;6280:117;6208:196;;;;:::o;6410:284::-;6480:6;6529:2;6517:9;6508:7;6504:23;6500:32;6497:2;;;6545:1;6542;6535:12;6497:2;6588:1;6613:64;6669:7;6660:6;6649:9;6645:22;6613:64;:::i;:::-;6603:74;;6559:128;6487:207;;;;:::o;6700:118::-;6787:24;6805:5;6787:24;:::i;:::-;6782:3;6775:37;6765:53;;:::o;6824:109::-;6905:21;6920:5;6905:21;:::i;:::-;6900:3;6893:34;6883:50;;:::o;6939:118::-;7026:24;7044:5;7026:24;:::i;:::-;7021:3;7014:37;7004:53;;:::o;7085:314::-;7199:3;7220:88;7301:6;7296:3;7220:88;:::i;:::-;7213:95;;7318:43;7354:6;7349:3;7342:5;7318:43;:::i;:::-;7386:6;7381:3;7377:16;7370:23;;7203:196;;;;;:::o;7405:360::-;7491:3;7519:38;7551:5;7519:38;:::i;:::-;7573:70;7636:6;7631:3;7573:70;:::i;:::-;7566:77;;7652:52;7697:6;7692:3;7685:4;7678:5;7674:16;7652:52;:::i;:::-;7729:29;7751:6;7729:29;:::i;:::-;7724:3;7720:39;7713:46;;7495:270;;;;;:::o;7771:373::-;7875:3;7903:38;7935:5;7903:38;:::i;:::-;7957:88;8038:6;8033:3;7957:88;:::i;:::-;7950:95;;8054:52;8099:6;8094:3;8087:4;8080:5;8076:16;8054:52;:::i;:::-;8131:6;8126:3;8122:16;8115:23;;7879:265;;;;;:::o;8150:364::-;8238:3;8266:39;8299:5;8266:39;:::i;:::-;8321:71;8385:6;8380:3;8321:71;:::i;:::-;8314:78;;8401:52;8446:6;8441:3;8434:4;8427:5;8423:16;8401:52;:::i;:::-;8478:29;8500:6;8478:29;:::i;:::-;8473:3;8469:39;8462:46;;8242:272;;;;;:::o;8520:377::-;8626:3;8654:39;8687:5;8654:39;:::i;:::-;8709:89;8791:6;8786:3;8709:89;:::i;:::-;8702:96;;8807:52;8852:6;8847:3;8840:4;8833:5;8829:16;8807:52;:::i;:::-;8884:6;8879:3;8875:16;8868:23;;8630:267;;;;;:::o;8903:366::-;9045:3;9066:67;9130:2;9125:3;9066:67;:::i;:::-;9059:74;;9142:93;9231:3;9142:93;:::i;:::-;9260:2;9255:3;9251:12;9244:19;;9049:220;;;:::o;9275:366::-;9417:3;9438:67;9502:2;9497:3;9438:67;:::i;:::-;9431:74;;9514:93;9603:3;9514:93;:::i;:::-;9632:2;9627:3;9623:12;9616:19;;9421:220;;;:::o;9647:366::-;9789:3;9810:67;9874:2;9869:3;9810:67;:::i;:::-;9803:74;;9886:93;9975:3;9886:93;:::i;:::-;10004:2;9999:3;9995:12;9988:19;;9793:220;;;:::o;10019:400::-;10179:3;10200:84;10282:1;10277:3;10200:84;:::i;:::-;10193:91;;10293:93;10382:3;10293:93;:::i;:::-;10411:1;10406:3;10402:11;10395:18;;10183:236;;;:::o;10425:366::-;10567:3;10588:67;10652:2;10647:3;10588:67;:::i;:::-;10581:74;;10664:93;10753:3;10664:93;:::i;:::-;10782:2;10777:3;10773:12;10766:19;;10571:220;;;:::o;10797:366::-;10939:3;10960:67;11024:2;11019:3;10960:67;:::i;:::-;10953:74;;11036:93;11125:3;11036:93;:::i;:::-;11154:2;11149:3;11145:12;11138:19;;10943:220;;;:::o;11169:366::-;11311:3;11332:67;11396:2;11391:3;11332:67;:::i;:::-;11325:74;;11408:93;11497:3;11408:93;:::i;:::-;11526:2;11521:3;11517:12;11510:19;;11315:220;;;:::o;11541:402::-;11701:3;11722:85;11804:2;11799:3;11722:85;:::i;:::-;11715:92;;11816:93;11905:3;11816:93;:::i;:::-;11934:2;11929:3;11925:12;11918:19;;11705:238;;;:::o;11949:366::-;12091:3;12112:67;12176:2;12171:3;12112:67;:::i;:::-;12105:74;;12188:93;12277:3;12188:93;:::i;:::-;12306:2;12301:3;12297:12;12290:19;;12095:220;;;:::o;12321:366::-;12463:3;12484:67;12548:2;12543:3;12484:67;:::i;:::-;12477:74;;12560:93;12649:3;12560:93;:::i;:::-;12678:2;12673:3;12669:12;12662:19;;12467:220;;;:::o;12693:402::-;12853:3;12874:85;12956:2;12951:3;12874:85;:::i;:::-;12867:92;;12968:93;13057:3;12968:93;:::i;:::-;13086:2;13081:3;13077:12;13070:19;;12857:238;;;:::o;13101:366::-;13243:3;13264:67;13328:2;13323:3;13264:67;:::i;:::-;13257:74;;13340:93;13429:3;13340:93;:::i;:::-;13458:2;13453:3;13449:12;13442:19;;13247:220;;;:::o;13473:366::-;13615:3;13636:67;13700:2;13695:3;13636:67;:::i;:::-;13629:74;;13712:93;13801:3;13712:93;:::i;:::-;13830:2;13825:3;13821:12;13814:19;;13619:220;;;:::o;13845:402::-;14005:3;14026:85;14108:2;14103:3;14026:85;:::i;:::-;14019:92;;14120:93;14209:3;14120:93;:::i;:::-;14238:2;14233:3;14229:12;14222:19;;14009:238;;;:::o;14253:366::-;14395:3;14416:67;14480:2;14475:3;14416:67;:::i;:::-;14409:74;;14492:93;14581:3;14492:93;:::i;:::-;14610:2;14605:3;14601:12;14594:19;;14399:220;;;:::o;14625:366::-;14767:3;14788:67;14852:2;14847:3;14788:67;:::i;:::-;14781:74;;14864:93;14953:3;14864:93;:::i;:::-;14982:2;14977:3;14973:12;14966:19;;14771:220;;;:::o;14997:402::-;15157:3;15178:85;15260:2;15255:3;15178:85;:::i;:::-;15171:92;;15272:93;15361:3;15272:93;:::i;:::-;15390:2;15385:3;15381:12;15374:19;;15161:238;;;:::o;15405:366::-;15547:3;15568:67;15632:2;15627:3;15568:67;:::i;:::-;15561:74;;15644:93;15733:3;15644:93;:::i;:::-;15762:2;15757:3;15753:12;15746:19;;15551:220;;;:::o;15777:366::-;15919:3;15940:67;16004:2;15999:3;15940:67;:::i;:::-;15933:74;;16016:93;16105:3;16016:93;:::i;:::-;16134:2;16129:3;16125:12;16118:19;;15923:220;;;:::o;16149:366::-;16291:3;16312:67;16376:2;16371:3;16312:67;:::i;:::-;16305:74;;16388:93;16477:3;16388:93;:::i;:::-;16506:2;16501:3;16497:12;16490:19;;16295:220;;;:::o;16521:400::-;16681:3;16702:84;16784:1;16779:3;16702:84;:::i;:::-;16695:91;;16795:93;16884:3;16795:93;:::i;:::-;16913:1;16908:3;16904:11;16897:18;;16685:236;;;:::o;16927:366::-;17069:3;17090:67;17154:2;17149:3;17090:67;:::i;:::-;17083:74;;17166:93;17255:3;17166:93;:::i;:::-;17284:2;17279:3;17275:12;17268:19;;17073:220;;;:::o;17299:366::-;17441:3;17462:67;17526:2;17521:3;17462:67;:::i;:::-;17455:74;;17538:93;17627:3;17538:93;:::i;:::-;17656:2;17651:3;17647:12;17640:19;;17445:220;;;:::o;17671:402::-;17831:3;17852:85;17934:2;17929:3;17852:85;:::i;:::-;17845:92;;17946:93;18035:3;17946:93;:::i;:::-;18064:2;18059:3;18055:12;18048:19;;17835:238;;;:::o;18079:366::-;18221:3;18242:67;18306:2;18301:3;18242:67;:::i;:::-;18235:74;;18318:93;18407:3;18318:93;:::i;:::-;18436:2;18431:3;18427:12;18420:19;;18225:220;;;:::o;18451:366::-;18593:3;18614:67;18678:2;18673:3;18614:67;:::i;:::-;18607:74;;18690:93;18779:3;18690:93;:::i;:::-;18808:2;18803:3;18799:12;18792:19;;18597:220;;;:::o;18823:366::-;18965:3;18986:67;19050:2;19045:3;18986:67;:::i;:::-;18979:74;;19062:93;19151:3;19062:93;:::i;:::-;19180:2;19175:3;19171:12;19164:19;;18969:220;;;:::o;19195:366::-;19337:3;19358:67;19422:2;19417:3;19358:67;:::i;:::-;19351:74;;19434:93;19523:3;19434:93;:::i;:::-;19552:2;19547:3;19543:12;19536:19;;19341:220;;;:::o;19567:402::-;19727:3;19748:85;19830:2;19825:3;19748:85;:::i;:::-;19741:92;;19842:93;19931:3;19842:93;:::i;:::-;19960:2;19955:3;19951:12;19944:19;;19731:238;;;:::o;19975:400::-;20135:3;20156:84;20238:1;20233:3;20156:84;:::i;:::-;20149:91;;20249:93;20338:3;20249:93;:::i;:::-;20367:1;20362:3;20358:11;20351:18;;20139:236;;;:::o;20381:366::-;20523:3;20544:67;20608:2;20603:3;20544:67;:::i;:::-;20537:74;;20620:93;20709:3;20620:93;:::i;:::-;20738:2;20733:3;20729:12;20722:19;;20527:220;;;:::o;20753:400::-;20913:3;20934:84;21016:1;21011:3;20934:84;:::i;:::-;20927:91;;21027:93;21116:3;21027:93;:::i;:::-;21145:1;21140:3;21136:11;21129:18;;20917:236;;;:::o;21159:366::-;21301:3;21322:67;21386:2;21381:3;21322:67;:::i;:::-;21315:74;;21398:93;21487:3;21398:93;:::i;:::-;21516:2;21511:3;21507:12;21500:19;;21305:220;;;:::o;21531:366::-;21673:3;21694:67;21758:2;21753:3;21694:67;:::i;:::-;21687:74;;21770:93;21859:3;21770:93;:::i;:::-;21888:2;21883:3;21879:12;21872:19;;21677:220;;;:::o;21903:400::-;22063:3;22084:84;22166:1;22161:3;22084:84;:::i;:::-;22077:91;;22177:93;22266:3;22177:93;:::i;:::-;22295:1;22290:3;22286:11;22279:18;;22067:236;;;:::o;22309:366::-;22451:3;22472:67;22536:2;22531:3;22472:67;:::i;:::-;22465:74;;22548:93;22637:3;22548:93;:::i;:::-;22666:2;22661:3;22657:12;22650:19;;22455:220;;;:::o;22681:118::-;22768:24;22786:5;22768:24;:::i;:::-;22763:3;22756:37;22746:53;;:::o;22805:153::-;22908:43;22927:23;22944:5;22927:23;:::i;:::-;22908:43;:::i;:::-;22903:3;22896:56;22886:72;;:::o;22964:291::-;23104:3;23126:103;23225:3;23216:6;23208;23126:103;:::i;:::-;23119:110;;23246:3;23239:10;;23108:147;;;;;:::o;23261:275::-;23393:3;23415:95;23506:3;23497:6;23415:95;:::i;:::-;23408:102;;23527:3;23520:10;;23397:139;;;;:::o;23542:435::-;23722:3;23744:95;23835:3;23826:6;23744:95;:::i;:::-;23737:102;;23856:95;23947:3;23938:6;23856:95;:::i;:::-;23849:102;;23968:3;23961:10;;23726:251;;;;;:::o;23983:2039::-;24645:3;24667:95;24758:3;24749:6;24667:95;:::i;:::-;24660:102;;24779:95;24870:3;24861:6;24779:95;:::i;:::-;24772:102;;24891:95;24982:3;24973:6;24891:95;:::i;:::-;24884:102;;25003:95;25094:3;25085:6;25003:95;:::i;:::-;24996:102;;25115:95;25206:3;25197:6;25115:95;:::i;:::-;25108:102;;25227:95;25318:3;25309:6;25227:95;:::i;:::-;25220:102;;25339:95;25430:3;25421:6;25339:95;:::i;:::-;25332:102;;25451:95;25542:3;25533:6;25451:95;:::i;:::-;25444:102;;25563:95;25654:3;25645:6;25563:95;:::i;:::-;25556:102;;25675:95;25766:3;25757:6;25675:95;:::i;:::-;25668:102;;25787:96;25879:3;25869:7;25787:96;:::i;:::-;25780:103;;25900:96;25992:3;25982:7;25900:96;:::i;:::-;25893:103;;26013:3;26006:10;;24649:1373;;;;;;;;;;;;;;;:::o;26028:541::-;26261:3;26283:95;26374:3;26365:6;26283:95;:::i;:::-;26276:102;;26395:148;26539:3;26395:148;:::i;:::-;26388:155;;26560:3;26553:10;;26265:304;;;;:::o;26575:939::-;26933:3;26955:148;27099:3;26955:148;:::i;:::-;26948:155;;27113:73;27182:3;27173:6;27113:73;:::i;:::-;27211:1;27206:3;27202:11;27195:18;;27230:148;27374:3;27230:148;:::i;:::-;27223:155;;27395:93;27484:3;27475:6;27395:93;:::i;:::-;27388:100;;27505:3;27498:10;;26937:577;;;;;:::o;27520:807::-;27854:3;27876:148;28020:3;27876:148;:::i;:::-;27869:155;;28041:95;28132:3;28123:6;28041:95;:::i;:::-;28034:102;;28153:148;28297:3;28153:148;:::i;:::-;28146:155;;28318:3;28311:10;;27858:469;;;;:::o;28333:2245::-;29162:3;29184:148;29328:3;29184:148;:::i;:::-;29177:155;;29349:95;29440:3;29431:6;29349:95;:::i;:::-;29342:102;;29461:148;29605:3;29461:148;:::i;:::-;29454:155;;29626:95;29717:3;29708:6;29626:95;:::i;:::-;29619:102;;29738:148;29882:3;29738:148;:::i;:::-;29731:155;;29903:95;29994:3;29985:6;29903:95;:::i;:::-;29896:102;;30015:148;30159:3;30015:148;:::i;:::-;30008:155;;30180:95;30271:3;30262:6;30180:95;:::i;:::-;30173:102;;30292:148;30436:3;30292:148;:::i;:::-;30285:155;;30457:95;30548:3;30539:6;30457:95;:::i;:::-;30450:102;;30569:3;30562:10;;29166:1412;;;;;;;;:::o;30584:537::-;30815:3;30837:148;30981:3;30837:148;:::i;:::-;30830:155;;31002:93;31091:3;31082:6;31002:93;:::i;:::-;30995:100;;31112:3;31105:10;;30819:302;;;;:::o;31127:222::-;31220:4;31258:2;31247:9;31243:18;31235:26;;31271:71;31339:1;31328:9;31324:17;31315:6;31271:71;:::i;:::-;31225:124;;;;:::o;31355:640::-;31550:4;31588:3;31577:9;31573:19;31565:27;;31602:71;31670:1;31659:9;31655:17;31646:6;31602:71;:::i;:::-;31683:72;31751:2;31740:9;31736:18;31727:6;31683:72;:::i;:::-;31765;31833:2;31822:9;31818:18;31809:6;31765:72;:::i;:::-;31884:9;31878:4;31874:20;31869:2;31858:9;31854:18;31847:48;31912:76;31983:4;31974:6;31912:76;:::i;:::-;31904:84;;31555:440;;;;;;;:::o;32001:332::-;32122:4;32160:2;32149:9;32145:18;32137:26;;32173:71;32241:1;32230:9;32226:17;32217:6;32173:71;:::i;:::-;32254:72;32322:2;32311:9;32307:18;32298:6;32254:72;:::i;:::-;32127:206;;;;;:::o;32339:210::-;32426:4;32464:2;32453:9;32449:18;32441:26;;32477:65;32539:1;32528:9;32524:17;32515:6;32477:65;:::i;:::-;32431:118;;;;:::o;32555:222::-;32648:4;32686:2;32675:9;32671:18;32663:26;;32699:71;32767:1;32756:9;32752:17;32743:6;32699:71;:::i;:::-;32653:124;;;;:::o;32783:313::-;32896:4;32934:2;32923:9;32919:18;32911:26;;32983:9;32977:4;32973:20;32969:1;32958:9;32954:17;32947:47;33011:78;33084:4;33075:6;33011:78;:::i;:::-;33003:86;;32901:195;;;;:::o;33102:419::-;33268:4;33306:2;33295:9;33291:18;33283:26;;33355:9;33349:4;33345:20;33341:1;33330:9;33326:17;33319:47;33383:131;33509:4;33383:131;:::i;:::-;33375:139;;33273:248;;;:::o;33527:419::-;33693:4;33731:2;33720:9;33716:18;33708:26;;33780:9;33774:4;33770:20;33766:1;33755:9;33751:17;33744:47;33808:131;33934:4;33808:131;:::i;:::-;33800:139;;33698:248;;;:::o;33952:419::-;34118:4;34156:2;34145:9;34141:18;34133:26;;34205:9;34199:4;34195:20;34191:1;34180:9;34176:17;34169:47;34233:131;34359:4;34233:131;:::i;:::-;34225:139;;34123:248;;;:::o;34377:419::-;34543:4;34581:2;34570:9;34566:18;34558:26;;34630:9;34624:4;34620:20;34616:1;34605:9;34601:17;34594:47;34658:131;34784:4;34658:131;:::i;:::-;34650:139;;34548:248;;;:::o;34802:419::-;34968:4;35006:2;34995:9;34991:18;34983:26;;35055:9;35049:4;35045:20;35041:1;35030:9;35026:17;35019:47;35083:131;35209:4;35083:131;:::i;:::-;35075:139;;34973:248;;;:::o;35227:419::-;35393:4;35431:2;35420:9;35416:18;35408:26;;35480:9;35474:4;35470:20;35466:1;35455:9;35451:17;35444:47;35508:131;35634:4;35508:131;:::i;:::-;35500:139;;35398:248;;;:::o;35652:419::-;35818:4;35856:2;35845:9;35841:18;35833:26;;35905:9;35899:4;35895:20;35891:1;35880:9;35876:17;35869:47;35933:131;36059:4;35933:131;:::i;:::-;35925:139;;35823:248;;;:::o;36077:419::-;36243:4;36281:2;36270:9;36266:18;36258:26;;36330:9;36324:4;36320:20;36316:1;36305:9;36301:17;36294:47;36358:131;36484:4;36358:131;:::i;:::-;36350:139;;36248:248;;;:::o;36502:419::-;36668:4;36706:2;36695:9;36691:18;36683:26;;36755:9;36749:4;36745:20;36741:1;36730:9;36726:17;36719:47;36783:131;36909:4;36783:131;:::i;:::-;36775:139;;36673:248;;;:::o;36927:419::-;37093:4;37131:2;37120:9;37116:18;37108:26;;37180:9;37174:4;37170:20;37166:1;37155:9;37151:17;37144:47;37208:131;37334:4;37208:131;:::i;:::-;37200:139;;37098:248;;;:::o;37352:419::-;37518:4;37556:2;37545:9;37541:18;37533:26;;37605:9;37599:4;37595:20;37591:1;37580:9;37576:17;37569:47;37633:131;37759:4;37633:131;:::i;:::-;37625:139;;37523:248;;;:::o;37777:419::-;37943:4;37981:2;37970:9;37966:18;37958:26;;38030:9;38024:4;38020:20;38016:1;38005:9;38001:17;37994:47;38058:131;38184:4;38058:131;:::i;:::-;38050:139;;37948:248;;;:::o;38202:419::-;38368:4;38406:2;38395:9;38391:18;38383:26;;38455:9;38449:4;38445:20;38441:1;38430:9;38426:17;38419:47;38483:131;38609:4;38483:131;:::i;:::-;38475:139;;38373:248;;;:::o;38627:419::-;38793:4;38831:2;38820:9;38816:18;38808:26;;38880:9;38874:4;38870:20;38866:1;38855:9;38851:17;38844:47;38908:131;39034:4;38908:131;:::i;:::-;38900:139;;38798:248;;;:::o;39052:419::-;39218:4;39256:2;39245:9;39241:18;39233:26;;39305:9;39299:4;39295:20;39291:1;39280:9;39276:17;39269:47;39333:131;39459:4;39333:131;:::i;:::-;39325:139;;39223:248;;;:::o;39477:419::-;39643:4;39681:2;39670:9;39666:18;39658:26;;39730:9;39724:4;39720:20;39716:1;39705:9;39701:17;39694:47;39758:131;39884:4;39758:131;:::i;:::-;39750:139;;39648:248;;;:::o;39902:419::-;40068:4;40106:2;40095:9;40091:18;40083:26;;40155:9;40149:4;40145:20;40141:1;40130:9;40126:17;40119:47;40183:131;40309:4;40183:131;:::i;:::-;40175:139;;40073:248;;;:::o;40327:419::-;40493:4;40531:2;40520:9;40516:18;40508:26;;40580:9;40574:4;40570:20;40566:1;40555:9;40551:17;40544:47;40608:131;40734:4;40608:131;:::i;:::-;40600:139;;40498:248;;;:::o;40752:419::-;40918:4;40956:2;40945:9;40941:18;40933:26;;41005:9;40999:4;40995:20;40991:1;40980:9;40976:17;40969:47;41033:131;41159:4;41033:131;:::i;:::-;41025:139;;40923:248;;;:::o;41177:419::-;41343:4;41381:2;41370:9;41366:18;41358:26;;41430:9;41424:4;41420:20;41416:1;41405:9;41401:17;41394:47;41458:131;41584:4;41458:131;:::i;:::-;41450:139;;41348:248;;;:::o;41602:419::-;41768:4;41806:2;41795:9;41791:18;41783:26;;41855:9;41849:4;41845:20;41841:1;41830:9;41826:17;41819:47;41883:131;42009:4;41883:131;:::i;:::-;41875:139;;41773:248;;;:::o;42027:419::-;42193:4;42231:2;42220:9;42216:18;42208:26;;42280:9;42274:4;42270:20;42266:1;42255:9;42251:17;42244:47;42308:131;42434:4;42308:131;:::i;:::-;42300:139;;42198:248;;;:::o;42452:419::-;42618:4;42656:2;42645:9;42641:18;42633:26;;42705:9;42699:4;42695:20;42691:1;42680:9;42676:17;42669:47;42733:131;42859:4;42733:131;:::i;:::-;42725:139;;42623:248;;;:::o;42877:419::-;43043:4;43081:2;43070:9;43066:18;43058:26;;43130:9;43124:4;43120:20;43116:1;43105:9;43101:17;43094:47;43158:131;43284:4;43158:131;:::i;:::-;43150:139;;43048:248;;;:::o;43302:419::-;43468:4;43506:2;43495:9;43491:18;43483:26;;43555:9;43549:4;43545:20;43541:1;43530:9;43526:17;43519:47;43583:131;43709:4;43583:131;:::i;:::-;43575:139;;43473:248;;;:::o;43727:222::-;43820:4;43858:2;43847:9;43843:18;43835:26;;43871:71;43939:1;43928:9;43924:17;43915:6;43871:71;:::i;:::-;43825:124;;;;:::o;43955:129::-;43989:6;44016:20;;:::i;:::-;44006:30;;44045:33;44073:4;44065:6;44045:33;:::i;:::-;43996:88;;;:::o;44090:75::-;44123:6;44156:2;44150:9;44140:19;;44130:35;:::o;44171:307::-;44232:4;44322:18;44314:6;44311:30;44308:2;;;44344:18;;:::i;:::-;44308:2;44382:29;44404:6;44382:29;:::i;:::-;44374:37;;44466:4;44460;44456:15;44448:23;;44237:241;;;:::o;44484:98::-;44535:6;44569:5;44563:12;44553:22;;44542:40;;;:::o;44588:99::-;44640:6;44674:5;44668:12;44658:22;;44647:40;;;:::o;44693:168::-;44776:11;44810:6;44805:3;44798:19;44850:4;44845:3;44841:14;44826:29;;44788:73;;;;:::o;44867:147::-;44968:11;45005:3;44990:18;;44980:34;;;;:::o;45020:169::-;45104:11;45138:6;45133:3;45126:19;45178:4;45173:3;45169:14;45154:29;;45116:73;;;;:::o;45195:148::-;45297:11;45334:3;45319:18;;45309:34;;;;:::o;45349:305::-;45389:3;45408:20;45426:1;45408:20;:::i;:::-;45403:25;;45442:20;45460:1;45442:20;:::i;:::-;45437:25;;45596:1;45528:66;45524:74;45521:1;45518:81;45515:2;;;45602:18;;:::i;:::-;45515:2;45646:1;45643;45639:9;45632:16;;45393:261;;;;:::o;45660:185::-;45700:1;45717:20;45735:1;45717:20;:::i;:::-;45712:25;;45751:20;45769:1;45751:20;:::i;:::-;45746:25;;45790:1;45780:2;;45795:18;;:::i;:::-;45780:2;45837:1;45834;45830:9;45825:14;;45702:143;;;;:::o;45851:348::-;45891:7;45914:20;45932:1;45914:20;:::i;:::-;45909:25;;45948:20;45966:1;45948:20;:::i;:::-;45943:25;;46136:1;46068:66;46064:74;46061:1;46058:81;46053:1;46046:9;46039:17;46035:105;46032:2;;;46143:18;;:::i;:::-;46032:2;46191:1;46188;46184:9;46173:20;;45899:300;;;;:::o;46205:191::-;46245:4;46265:20;46283:1;46265:20;:::i;:::-;46260:25;;46299:20;46317:1;46299:20;:::i;:::-;46294:25;;46338:1;46335;46332:8;46329:2;;;46343:18;;:::i;:::-;46329:2;46388:1;46385;46381:9;46373:17;;46250:146;;;;:::o;46402:96::-;46439:7;46468:24;46486:5;46468:24;:::i;:::-;46457:35;;46447:51;;;:::o;46504:90::-;46538:7;46581:5;46574:13;46567:21;46556:32;;46546:48;;;:::o;46600:77::-;46637:7;46666:5;46655:16;;46645:32;;;:::o;46683:149::-;46719:7;46759:66;46752:5;46748:78;46737:89;;46727:105;;;:::o;46838:126::-;46875:7;46915:42;46908:5;46904:54;46893:65;;46883:81;;;:::o;46970:77::-;47007:7;47036:5;47025:16;;47015:32;;;:::o;47053:93::-;47089:7;47129:10;47122:5;47118:22;47107:33;;47097:49;;;:::o;47152:154::-;47236:6;47231:3;47226;47213:30;47298:1;47289:6;47284:3;47280:16;47273:27;47203:103;;;:::o;47312:307::-;47380:1;47390:113;47404:6;47401:1;47398:13;47390:113;;;47489:1;47484:3;47480:11;47474:18;47470:1;47465:3;47461:11;47454:39;47426:2;47423:1;47419:10;47414:15;;47390:113;;;47521:6;47518:1;47515:13;47512:2;;;47601:1;47592:6;47587:3;47583:16;47576:27;47512:2;47361:258;;;;:::o;47625:320::-;47669:6;47706:1;47700:4;47696:12;47686:22;;47753:1;47747:4;47743:12;47774:18;47764:2;;47830:4;47822:6;47818:17;47808:27;;47764:2;47892;47884:6;47881:14;47861:18;47858:38;47855:2;;;47911:18;;:::i;:::-;47855:2;47676:269;;;;:::o;47951:281::-;48034:27;48056:4;48034:27;:::i;:::-;48026:6;48022:40;48164:6;48152:10;48149:22;48128:18;48116:10;48113:34;48110:62;48107:2;;;48175:18;;:::i;:::-;48107:2;48215:10;48211:2;48204:22;47994:238;;;:::o;48238:233::-;48277:3;48300:24;48318:5;48300:24;:::i;:::-;48291:33;;48346:66;48339:5;48336:77;48333:2;;;48416:18;;:::i;:::-;48333:2;48463:1;48456:5;48452:13;48445:20;;48281:190;;;:::o;48477:94::-;48515:7;48544:21;48559:5;48544:21;:::i;:::-;48533:32;;48523:48;;;:::o;48577:176::-;48609:1;48626:20;48644:1;48626:20;:::i;:::-;48621:25;;48660:20;48678:1;48660:20;:::i;:::-;48655:25;;48699:1;48689:2;;48704:18;;:::i;:::-;48689:2;48745:1;48742;48738:9;48733:14;;48611:142;;;;:::o;48759:180::-;48807:77;48804:1;48797:88;48904:4;48901:1;48894:15;48928:4;48925:1;48918:15;48945:180;48993:77;48990:1;48983:88;49090:4;49087:1;49080:15;49114:4;49111:1;49104:15;49131:180;49179:77;49176:1;49169:88;49276:4;49273:1;49266:15;49300:4;49297:1;49290:15;49317:180;49365:77;49362:1;49355:88;49462:4;49459:1;49452:15;49486:4;49483:1;49476:15;49503:102;49544:6;49595:2;49591:7;49586:2;49579:5;49575:14;49571:28;49561:38;;49551:54;;;:::o;49611:96::-;49645:8;49694:5;49689:3;49685:15;49664:36;;49654:53;;;:::o;49713:163::-;49853:15;49849:1;49841:6;49837:14;49830:39;49819:57;:::o;49882:176::-;50022:28;50018:1;50010:6;50006:14;49999:52;49988:70;:::o;50064:167::-;50204:19;50200:1;50192:6;50188:14;50181:43;50170:61;:::o;50237:151::-;50377:3;50373:1;50365:6;50361:14;50354:27;50343:45;:::o;50394:230::-;50534:34;50530:1;50522:6;50518:14;50511:58;50603:13;50598:2;50590:6;50586:15;50579:38;50500:124;:::o;50630:237::-;50770:34;50766:1;50758:6;50754:14;50747:58;50839:20;50834:2;50826:6;50822:15;50815:45;50736:131;:::o;50873:225::-;51013:34;51009:1;51001:6;50997:14;50990:58;51082:8;51077:2;51069:6;51065:15;51058:33;50979:119;:::o;51104:179::-;51244:31;51240:1;51232:6;51228:14;51221:55;51210:73;:::o;51289:178::-;51429:30;51425:1;51417:6;51413:14;51406:54;51395:72;:::o;51473:168::-;51613:20;51609:1;51601:6;51597:14;51590:44;51579:62;:::o;51647:162::-;51787:14;51783:1;51775:6;51771:14;51764:38;51753:56;:::o;51815:223::-;51955:34;51951:1;51943:6;51939:14;51932:58;52024:6;52019:2;52011:6;52007:15;52000:31;51921:117;:::o;52044:175::-;52184:27;52180:1;52172:6;52168:14;52161:51;52150:69;:::o;52225:235::-;52365:34;52361:1;52353:6;52349:14;52342:58;52434:18;52429:2;52421:6;52417:15;52410:43;52331:129;:::o;52466:170::-;52606:22;52602:1;52594:6;52590:14;52583:46;52572:64;:::o;52642:231::-;52782:34;52778:1;52770:6;52766:14;52759:58;52851:14;52846:2;52838:6;52834:15;52827:39;52748:125;:::o;52879:246::-;53019:34;53015:1;53007:6;53003:14;52996:58;53088:29;53083:2;53075:6;53071:15;53064:54;52985:140;:::o;53131:243::-;53271:34;53267:1;53259:6;53255:14;53248:58;53340:26;53335:2;53327:6;53323:15;53316:51;53237:137;:::o;53380:229::-;53520:34;53516:1;53508:6;53504:14;53497:58;53589:12;53584:2;53576:6;53572:15;53565:37;53486:123;:::o;53615:228::-;53755:34;53751:1;53743:6;53739:14;53732:58;53824:11;53819:2;53811:6;53807:15;53800:36;53721:122;:::o;53849:154::-;53989:6;53985:1;53977:6;53973:14;53966:30;53955:48;:::o;54009:182::-;54149:34;54145:1;54137:6;54133:14;54126:58;54115:76;:::o;54197:170::-;54337:22;54333:1;54325:6;54321:14;54314:46;54303:64;:::o;54373:243::-;54513:34;54509:1;54501:6;54497:14;54490:58;54582:26;54577:2;54569:6;54565:15;54558:51;54479:137;:::o;54622:231::-;54762:34;54758:1;54750:6;54746:14;54739:58;54831:14;54826:2;54818:6;54814:15;54807:39;54728:125;:::o;54859:182::-;54999:34;54995:1;54987:6;54983:14;54976:58;54965:76;:::o;55047:164::-;55187:16;55183:1;55175:6;55171:14;55164:40;55153:58;:::o;55217:228::-;55357:34;55353:1;55345:6;55341:14;55334:58;55426:11;55421:2;55413:6;55409:15;55402:36;55323:122;:::o;55451:306::-;55591:34;55587:1;55579:6;55575:14;55568:58;55660:34;55655:2;55647:6;55643:15;55636:59;55729:20;55724:2;55716:6;55712:15;55705:45;55557:200;:::o;55763:154::-;55903:6;55899:1;55891:6;55887:14;55880:30;55869:48;:::o;55923:220::-;56063:34;56059:1;56051:6;56047:14;56040:58;56132:3;56127:2;56119:6;56115:15;56108:28;56029:114;:::o;56149:214::-;56289:66;56285:1;56277:6;56273:14;56266:90;56255:108;:::o;56369:236::-;56509:34;56505:1;56497:6;56493:14;56486:58;56578:19;56573:2;56565:6;56561:15;56554:44;56475:130;:::o;56611:231::-;56751:34;56747:1;56739:6;56735:14;56728:58;56820:14;56815:2;56807:6;56803:15;56796:39;56717:125;:::o;56848:214::-;56988:66;56984:1;56976:6;56972:14;56965:90;56954:108;:::o;57068:160::-;57208:12;57204:1;57196:6;57192:14;57185:36;57174:54;:::o;57234:122::-;57307:24;57325:5;57307:24;:::i;:::-;57300:5;57297:35;57287:2;;57346:1;57343;57336:12;57287:2;57277:79;:::o;57362:116::-;57432:21;57447:5;57432:21;:::i;:::-;57425:5;57422:32;57412:2;;57468:1;57465;57458:12;57412:2;57402:76;:::o;57484:120::-;57556:23;57573:5;57556:23;:::i;:::-;57549:5;57546:34;57536:2;;57594:1;57591;57584:12;57536:2;57526:78;:::o;57610:122::-;57683:24;57701:5;57683:24;:::i;:::-;57676:5;57673:35;57663:2;;57722:1;57719;57712:12;57663:2;57653:79;:::o
Swarm Source
ipfs://98a112fd1a5b4427e195caa399643fc6196987d94ae3a0eb8320e56e05497a3f
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.