Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
30 SEGMENTS
Holders
1
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
10 SEGMENTSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
ReallyLongLine
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-27 */ /** * ReallyLongLine.XYZ * A Project by Muzzammil * * ################################## ################################## ################################## * ################################## ################################## ################################## * ################################## ################################## ################################## * ################################## ################################## ################################## * ################################## ################################## ################################## * ================================== ================================== ================================== * ================================== ================================== ================================== * ================================== ================================== ================================== * &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& * &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& * &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& * &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& * &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& * ---------------------------------- ---------------------------------- ---------------------------------- * https://ReallyLongLine.xyz https://ReallyLongLine.xyz https://ReallyLongLine.xyz **/ // File: contracts/base64.sol // https://github.com/Brechtpd/base64/blob/80238e2ebed645cf7dcfe831f7c4458e9cb574e9/base64.sol pragma solidity >=0.6.0; /// @title Base64 /// @author Brecht Devos - <[email protected]> /// @notice Provides functions for encoding/decoding base64 library Base64 { string internal constant TABLE_ENCODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; bytes internal constant TABLE_DECODE = hex"0000000000000000000000000000000000000000000000000000000000000000" hex"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000" hex"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000" hex"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000"; function encode(bytes memory data) internal pure returns (string memory) { if (data.length == 0) return ''; // load the table into memory string memory table = TABLE_ENCODE; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((data.length + 2) / 3); // add some extra buffer at the end required for the writing string memory result = new string(encodedLen + 32); assembly { // set the actual output length mstore(result, encodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 3 bytes at a time for {} lt(dataPtr, endPtr) {} { // read 3 bytes dataPtr := add(dataPtr, 3) let input := mload(dataPtr) // write 4 characters mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr( 6, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and( input, 0x3F)))) resultPtr := add(resultPtr, 1) } // padding with '=' switch mod(mload(data), 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } } return result; } function decode(string memory _data) internal pure returns (bytes memory) { bytes memory data = bytes(_data); if (data.length == 0) return new bytes(0); require(data.length % 4 == 0, "invalid base64 decoder input"); // load the table into memory bytes memory table = TABLE_DECODE; // every 4 characters represent 3 bytes uint256 decodedLen = (data.length / 4) * 3; // add some extra buffer at the end required for the writing bytes memory result = new bytes(decodedLen + 32); assembly { // padding with '=' let lastBytes := mload(add(data, mload(data))) if eq(and(lastBytes, 0xFF), 0x3d) { decodedLen := sub(decodedLen, 1) if eq(and(lastBytes, 0xFFFF), 0x3d3d) { decodedLen := sub(decodedLen, 1) } } // set the actual output length mstore(result, decodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 4 characters at a time for {} lt(dataPtr, endPtr) {} { // read 4 characters dataPtr := add(dataPtr, 4) let input := mload(dataPtr) // write 3 bytes let output := add( add( shl(18, and(mload(add(tablePtr, and(shr(24, input), 0xFF))), 0xFF)), shl(12, and(mload(add(tablePtr, and(shr(16, input), 0xFF))), 0xFF))), add( shl( 6, and(mload(add(tablePtr, and(shr( 8, input), 0xFF))), 0xFF)), and(mload(add(tablePtr, and( input , 0xFF))), 0xFF) ) ) mstore(resultPtr, shl(232, output)) resultPtr := add(resultPtr, 3) } } return result; } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. 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 { _setApprovalForAll(_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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/reallylongline.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.1; contract ReallyLongLine is Ownable, ERC721 { event tokenChanged(uint256 tokenId); uint256 public nextTokenId = 0; string private _contractURI; uint256 public MINT_PRICE = 37500000000000000; // 0.0375 ETH uint256 public constant MAX_SUPPLY = 10000; bool public MINT_ACTIVE = true; string[MAX_SUPPLY] public _textMessages; constructor() ERC721("ReallyLongLine", "SEGMENTS") {} function getImage(string[4][3] memory colors) internal pure returns (string memory) { // non-payable string memory baseURL = "data:image/svg+xml;base64,"; string memory svgEncoded = Base64.encode(bytes(string(abi.encodePacked( "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"540\" height=\"540\">", "<rect fill=\"rgba(255,255,255,1)\" height=\"540\" width=\"540\" y=\"0\" x=\"0\"/>", abi.encodePacked("<rect fill=\"rgba(", colors[0][0],",",colors[0][1],",",colors[0][2],",0.",colors[0][3], ")\" height=\"270\" width=\"540\" y=\"0\" x=\"0\"/>"), abi.encodePacked("<rect fill=\"rgba(", colors[1][0],",",colors[1][1],",",colors[1][2],",0.",colors[1][3], ")\" height=\"270\" width=\"540\" y=\"270\" x=\"0\"/>"), abi.encodePacked("<rect fill=\"rgba(", colors[2][0],",",colors[2][1],",",colors[2][2],",1", ")\" height=\"81\" width=\"540\" y=\"229.5\" x=\"0\"/></svg>") )))); return string(abi.encodePacked(baseURL, svgEncoded)); } function getColors(uint _tokenId) internal pure returns (string[4][3] memory){ return [ [ randMod( 0, 255, _tokenId, "001"), randMod(100, 210, _tokenId, "002"), randMod( 0, 255, _tokenId, "003"), randMod(600, 999, _tokenId, "004")], [ randMod( 0, 255, _tokenId, "010"), randMod(100, 210, _tokenId, "020"), randMod( 0, 255, _tokenId, "030"), randMod(850, 999, _tokenId, "040")], [ randMod( 0, 95, _tokenId, "000"), randMod( 0, 27, _tokenId, "100"), randMod( 0, 100, _tokenId, "200"), "000"]]; } function randMod(uint min, uint max, uint tokenId, string memory salt) internal pure returns (string memory) { return Strings.toString(min + (uint256(keccak256(abi.encodePacked(salt,"786",tokenId))) % (max-min))); } function getPropertiesPartial(string[4][3] memory colors) internal pure returns (string memory) { return string(abi.encodePacked('{"c1":"(', colors[0][0], ',', colors[0][1], ',', colors[0][2], ',0.', colors[0][3], ')"', ', "c2":"(', colors[1][0], ',', colors[1][1], ',', colors[1][2], ',0.', colors[1][3], ')"', ', "c3":"(', colors[2][0], ',', colors[2][1], ',', colors[2][2], ',1.000)"')); } function formatTokenURI(uint256 _tokenId) internal view returns (string memory) { string[4][3] memory colors = getColors(_tokenId); string memory _imageURI = getImage(colors); string memory _properties = getPropertiesPartial(colors); string memory _text = _textMessages[_tokenId]; return string( abi.encodePacked( "data:application/json;base64,", Base64.encode( bytes( abi.encodePacked( '{"name":"', "LineSegment #", Strings.toString(_tokenId), '", "description": "Part of the Really Long Line"', ', "attributes": ', string(abi.encodePacked(_properties, ', "text": "', _text, '"}')), ', "image":"', _imageURI, '"}' ) ) ) ) ); } function updateTokenText(uint256 _tokenId, string memory _newText) public { require(msg.sender == ownerOf(_tokenId), "Only token owner"); _textMessages[_tokenId] = _newText; emit tokenChanged(_tokenId); } function clearTokenText(uint256 _tokenId) public onlyOwner { _textMessages[_tokenId] = ""; emit tokenChanged(_tokenId); } function safeMint(string memory _text, uint numberOfTokensMax5) public payable { uint256 _nextTokenId = nextTokenId; require(MINT_ACTIVE, "Mint not active"); require(bytes(_text).length < 55, "Text too long!"); require(numberOfTokensMax5 < 6,"Max mint 5"); require((nextTokenId + numberOfTokensMax5) < MAX_SUPPLY, "Exceeds max supply"); require(msg.value == (MINT_PRICE * numberOfTokensMax5), "Not enough ETH sent"); for (uint i = 0; i < numberOfTokensMax5; i++) { _mint(msg.sender, _nextTokenId); _textMessages[_nextTokenId] = _text; emit tokenChanged(_nextTokenId); unchecked { _nextTokenId += numberOfTokensMax5; } nextTokenId = _nextTokenId; } } function setMintPrice(uint256 _newPrice) public onlyOwner { MINT_PRICE = _newPrice; } function withdraw(address payable _to) public onlyOwner { uint256 balance = address(this).balance; _to.transfer(balance); } function totalSupply() public view returns (uint256) { return nextTokenId; } function setMintActive(bool newStatus) public onlyOwner { MINT_ACTIVE = newStatus; } function tokenURI(uint256 tokenId) public view override returns (string memory) { return formatTokenURI(tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenChanged","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_ACTIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_textMessages","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"clearTokenText","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_text","type":"string"},{"internalType":"uint256","name":"numberOfTokensMax5","type":"uint256"}],"name":"safeMint","outputs":[],"stateMutability":"payable","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":"bool","name":"newStatus","type":"bool"}],"name":"setMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_newText","type":"string"}],"name":"updateTokenText","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600060075566853a0d2313c0006009556001600a60006101000a81548160ff0219169083151502179055503480156200003c57600080fd5b506040518060400160405280600e81526020017f5265616c6c794c6f6e674c696e650000000000000000000000000000000000008152506040518060400160405280600881526020017f5345474d454e5453000000000000000000000000000000000000000000000000815250620000c9620000bd6200010360201b60201c565b6200010b60201b60201c565b8160019080519060200190620000e1929190620001cf565b508060029080519060200190620000fa929190620001cf565b505050620002e4565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001dd90620002ae565b90600052602060002090601f0160209004810192826200020157600085556200024d565b82601f106200021c57805160ff19168380011785556200024d565b828001600101855582156200024d579182015b828111156200024c5782518255916020019190600101906200022f565b5b5090506200025c919062000260565b5090565b5b808211156200027b57600081600090555060010162000261565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002c757607f821691505b60208210811415620002de57620002dd6200027f565b5b50919050565b6151b280620002f46000396000f3fe6080604052600436106101b75760003560e01c8063715018a6116100ec578063c002d23d1161008a578063e985e9c511610064578063e985e9c5146105fd578063ee1cc9441461063a578063f2fde38b14610663578063f4a0a5281461068c576101b7565b8063c002d23d1461056c578063c87b56dd14610597578063cfe990da146105d4576101b7565b806395d89b41116100c657806395d89b41146104c6578063a22cb465146104f1578063acde21201461051a578063b88d4fde14610543576101b7565b8063715018a61461045957806375794a3c146104705780638da5cb5b1461049b576101b7565b806332cb6b0c1161015957806351cff8d91161013357806351cff8d9146103795780635904317c146103a25780636352211e146103df57806370a082311461041c576101b7565b806332cb6b0c1461030957806342842e0e1461033457806346b145e11461035d576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a5780631a5aba5e146102b557806323b872dd146102e0576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612f87565b6106b5565b6040516101f09190612fcf565b60405180910390f35b34801561020557600080fd5b5061020e610797565b60405161021b9190613083565b60405180910390f35b34801561023057600080fd5b5061024b600480360381019061024691906130db565b610829565b6040516102589190613149565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190613190565b6108ae565b005b34801561029657600080fd5b5061029f6109c6565b6040516102ac91906131df565b60405180910390f35b3480156102c157600080fd5b506102ca6109d0565b6040516102d79190612fcf565b60405180910390f35b3480156102ec57600080fd5b50610307600480360381019061030291906131fa565b6109e3565b005b34801561031557600080fd5b5061031e610a43565b60405161032b91906131df565b60405180910390f35b34801561034057600080fd5b5061035b600480360381019061035691906131fa565b610a49565b005b61037760048036038101906103729190613382565b610a69565b005b34801561038557600080fd5b506103a0600480360381019061039b919061341c565b610c82565b005b3480156103ae57600080fd5b506103c960048036038101906103c491906130db565b610d4e565b6040516103d69190613083565b60405180910390f35b3480156103eb57600080fd5b50610406600480360381019061040191906130db565b610df2565b6040516104139190613149565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613449565b610ea4565b60405161045091906131df565b60405180910390f35b34801561046557600080fd5b5061046e610f5c565b005b34801561047c57600080fd5b50610485610fe4565b60405161049291906131df565b60405180910390f35b3480156104a757600080fd5b506104b0610fea565b6040516104bd9190613149565b60405180910390f35b3480156104d257600080fd5b506104db611013565b6040516104e89190613083565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906134a2565b6110a5565b005b34801561052657600080fd5b50610541600480360381019061053c91906134e2565b6110bb565b005b34801561054f57600080fd5b5061056a600480360381019061056591906135df565b611197565b005b34801561057857600080fd5b506105816111f9565b60405161058e91906131df565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b991906130db565b6111ff565b6040516105cb9190613083565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f691906130db565b611211565b005b34801561060957600080fd5b50610624600480360381019061061f9190613662565b611301565b6040516106319190612fcf565b60405180910390f35b34801561064657600080fd5b50610661600480360381019061065c91906136a2565b611395565b005b34801561066f57600080fd5b5061068a60048036038101906106859190613449565b61142e565b005b34801561069857600080fd5b506106b360048036038101906106ae91906130db565b611526565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061078057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610790575061078f826115ac565b5b9050919050565b6060600180546107a6906136fe565b80601f01602080910402602001604051908101604052809291908181526020018280546107d2906136fe565b801561081f5780601f106107f45761010080835404028352916020019161081f565b820191906000526020600020905b81548152906001019060200180831161080257829003601f168201915b5050505050905090565b600061083482611616565b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a906137a2565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108b982610df2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092190613834565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610949611682565b73ffffffffffffffffffffffffffffffffffffffff161480610978575061097781610972611682565b611301565b5b6109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae906138c6565b60405180910390fd5b6109c1838361168a565b505050565b6000600754905090565b600a60009054906101000a900460ff1681565b6109f46109ee611682565b82611743565b610a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2a90613958565b60405180910390fd5b610a3e838383611821565b505050565b61271081565b610a6483838360405180602001604052806000815250611197565b505050565b60006007549050600a60009054906101000a900460ff16610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab6906139c4565b60405180910390fd5b6037835110610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa90613a30565b60405180910390fd5b60068210610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90613a9c565b60405180910390fd5b61271082600754610b579190613aeb565b10610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90613b8d565b60405180910390fd5b81600954610ba59190613bad565b3414610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90613c53565b60405180910390fd5b60005b82811015610c7c57610bfb3383611a88565b83600b836127108110610c1157610c10613c73565b5b019080519060200190610c25929190612e24565b507f7258d153b7b27bbf583c7fe290f549b80cf16cc64fa2e041de0783debb77980682604051610c5591906131df565b60405180910390a18282019150816007819055508080610c7490613ca2565b915050610be9565b50505050565b610c8a611682565b73ffffffffffffffffffffffffffffffffffffffff16610ca8610fea565b73ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590613d37565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d49573d6000803e3d6000fd5b505050565b600b816127108110610d5f57600080fd5b016000915090508054610d71906136fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9d906136fe565b8015610dea5780601f10610dbf57610100808354040283529160200191610dea565b820191906000526020600020905b815481529060010190602001808311610dcd57829003601f168201915b505050505081565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9290613dc9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c90613e5b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f64611682565b73ffffffffffffffffffffffffffffffffffffffff16610f82610fea565b73ffffffffffffffffffffffffffffffffffffffff1614610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90613d37565b60405180910390fd5b610fe26000611c62565b565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611022906136fe565b80601f016020809104026020016040519081016040528092919081815260200182805461104e906136fe565b801561109b5780601f106110705761010080835404028352916020019161109b565b820191906000526020600020905b81548152906001019060200180831161107e57829003601f168201915b5050505050905090565b6110b76110b0611682565b8383611d26565b5050565b6110c482610df2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890613ec7565b60405180910390fd5b80600b83612710811061114757611146613c73565b5b01908051906020019061115b929190612e24565b507f7258d153b7b27bbf583c7fe290f549b80cf16cc64fa2e041de0783debb7798068260405161118b91906131df565b60405180910390a15050565b6111a86111a2611682565b83611743565b6111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90613958565b60405180910390fd5b6111f384848484611e93565b50505050565b60095481565b606061120a82611eef565b9050919050565b611219611682565b73ffffffffffffffffffffffffffffffffffffffff16611237610fea565b73ffffffffffffffffffffffffffffffffffffffff161461128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128490613d37565b60405180910390fd5b60405180602001604052806000815250600b8261271081106112b2576112b1613c73565b5b0190805190602001906112c6929190612e24565b507f7258d153b7b27bbf583c7fe290f549b80cf16cc64fa2e041de0783debb779806816040516112f691906131df565b60405180910390a150565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61139d611682565b73ffffffffffffffffffffffffffffffffffffffff166113bb610fea565b73ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140890613d37565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b611436611682565b73ffffffffffffffffffffffffffffffffffffffff16611454610fea565b73ffffffffffffffffffffffffffffffffffffffff16146114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190613d37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190613f59565b60405180910390fd5b61152381611c62565b50565b61152e611682565b73ffffffffffffffffffffffffffffffffffffffff1661154c610fea565b73ffffffffffffffffffffffffffffffffffffffff16146115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990613d37565b60405180910390fd5b8060098190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166116fd83610df2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061174e82611616565b61178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490613feb565b60405180910390fd5b600061179883610df2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061180757508373ffffffffffffffffffffffffffffffffffffffff166117ef84610829565b73ffffffffffffffffffffffffffffffffffffffff16145b8061181857506118178185611301565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661184182610df2565b73ffffffffffffffffffffffffffffffffffffffff1614611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188e9061407d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe9061410f565b60405180910390fd5b61191283838361203a565b61191d60008261168a565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196d919061412f565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119c49190613aeb565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a8383838361203f565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aef906141af565b60405180910390fd5b611b0181611616565b15611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b389061421b565b60405180910390fd5b611b4d6000838361203a565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b9d9190613aeb565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c5e6000838361203f565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8c90614287565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e869190612fcf565b60405180910390a3505050565b611e9e848484611821565b611eaa84848484612044565b611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee090614319565b60405180910390fd5b50505050565b60606000611efc836121cc565b90506000611f0982612565565b90506000611f1683612879565b90506000600b866127108110611f2f57611f2e613c73565b5b018054611f3b906136fe565b80601f0160208091040260200160405190810160405280929190818152602001828054611f67906136fe565b8015611fb45780601f10611f8957610100808354040283529160200191611fb4565b820191906000526020600020905b815481529060010190602001808311611f9757829003601f168201915b50505050509050612010611fc787612ac6565b8383604051602001611fda92919061440d565b60405160208183030381529060405285604051602001611ffc939291906145e9565b604051602081830303815290604052612c27565b60405160200161202091906146a8565b604051602081830303815290604052945050505050919050565b505050565b505050565b60006120658473ffffffffffffffffffffffffffffffffffffffff16612da0565b156121bf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261208e611682565b8786866040518563ffffffff1660e01b81526004016120b0949392919061471f565b6020604051808303816000875af19250505080156120ec57506040513d601f19601f820116820180604052508101906120e99190614780565b60015b61216f573d806000811461211c576040519150601f19603f3d011682016040523d82523d6000602084013e612121565b606091505b50600081511415612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e90614319565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121c4565b600190505b949350505050565b6121d4612eaa565b6040518060600160405280604051806080016040528061222d600060ff886040518060400160405280600381526020017f3030310000000000000000000000000000000000000000000000000000000000815250612dc3565b8152602001612275606460d2886040518060400160405280600381526020017f3030320000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016122bd600060ff886040518060400160405280600381526020017f3030330000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016123076102586103e7886040518060400160405280600381526020017f3030340000000000000000000000000000000000000000000000000000000000815250612dc3565b8152508152602001604051806080016040528061235d600060ff886040518060400160405280600381526020017f3031300000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016123a5606460d2886040518060400160405280600381526020017f3032300000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016123ed600060ff886040518060400160405280600381526020017f3033300000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016124376103526103e7886040518060400160405280600381526020017f3034300000000000000000000000000000000000000000000000000000000000815250612dc3565b8152508152602001604051806080016040528061248d6000605f886040518060400160405280600381526020017f3030300000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016124d56000601b886040518060400160405280600381526020017f3130300000000000000000000000000000000000000000000000000000000000815250612dc3565b815260200161251d60006064886040518060400160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016040518060400160405280600381526020017f30303000000000000000000000000000000000000000000000000000000000008152508152508152509050919050565b606060006040518060400160405280601a81526020017f646174613a696d6167652f7376672b786d6c3b6261736536342c0000000000008152509050600061284c846000600381106125ba576125b9613c73565b5b60200201516000600481106125d2576125d1613c73565b5b6020020151856000600381106125eb576125ea613c73565b5b602002015160016004811061260357612602613c73565b5b60200201518660006003811061261c5761261b613c73565b5b602002015160026004811061263457612633613c73565b5b60200201518760006003811061264d5761264c613c73565b5b602002015160036004811061266557612664613c73565b5b602002015160405160200161267d9493929190614903565b604051602081830303815290604052856001600381106126a05761269f613c73565b5b60200201516000600481106126b8576126b7613c73565b5b6020020151866001600381106126d1576126d0613c73565b5b60200201516001600481106126e9576126e8613c73565b5b60200201518760016003811061270257612701613c73565b5b602002015160026004811061271a57612719613c73565b5b60200201518860016003811061273357612732613c73565b5b602002015160036004811061274b5761274a613c73565b5b602002015160405160200161276394939291906149ea565b6040516020818303038152906040528660026003811061278657612785613c73565b5b602002015160006004811061279e5761279d613c73565b5b6020020151876002600381106127b7576127b6613c73565b5b60200201516001600481106127cf576127ce613c73565b5b6020020151886002600381106127e8576127e7613c73565b5b6020020151600260048110612800576127ff613c73565b5b602002015160405160200161281793929190614b1d565b60405160208183030381529060405260405160200161283893929190614cf1565b604051602081830303815290604052612c27565b90508181604051602001612861929190614d38565b60405160208183030381529060405292505050919050565b60608160006003811061288f5761288e613c73565b5b60200201516000600481106128a7576128a6613c73565b5b6020020151826000600381106128c0576128bf613c73565b5b60200201516001600481106128d8576128d7613c73565b5b6020020151836000600381106128f1576128f0613c73565b5b602002015160026004811061290957612908613c73565b5b60200201518460006003811061292257612921613c73565b5b602002015160036004811061293a57612939613c73565b5b60200201518560016003811061295357612952613c73565b5b602002015160006004811061296b5761296a613c73565b5b60200201518660016003811061298457612983613c73565b5b602002015160016004811061299c5761299b613c73565b5b6020020151876001600381106129b5576129b4613c73565b5b60200201516002600481106129cd576129cc613c73565b5b6020020151886001600381106129e6576129e5613c73565b5b60200201516003600481106129fe576129fd613c73565b5b602002015189600260038110612a1757612a16613c73565b5b6020020151600060048110612a2f57612a2e613c73565b5b60200201518a600260038110612a4857612a47613c73565b5b6020020151600160048110612a6057612a5f613c73565b5b60200201518b600260038110612a7957612a78613c73565b5b6020020151600260048110612a9157612a90613c73565b5b6020020151604051602001612ab09b9a99989796959493929190614ed8565b6040516020818303038152906040529050919050565b60606000821415612b0e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c22565b600082905060005b60008214612b40578080612b2990613ca2565b915050600a82612b39919061503a565b9150612b16565b60008167ffffffffffffffff811115612b5c57612b5b613257565b5b6040519080825280601f01601f191660200182016040528015612b8e5781602001600182028036833780820191505090505b5090505b60008514612c1b57600182612ba7919061412f565b9150600a85612bb6919061506b565b6030612bc29190613aeb565b60f81b818381518110612bd857612bd7613c73565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c14919061503a565b9450612b92565b8093505050505b919050565b6060600082511415612c4a57604051806020016040528060008152509050612d9b565b600060405180606001604052806040815260200161513d6040913990506000600360028551612c799190613aeb565b612c83919061503a565b6004612c8f9190613bad565b90506000602082612ca09190613aeb565b67ffffffffffffffff811115612cb957612cb8613257565b5b6040519080825280601f01601f191660200182016040528015612ceb5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015612d5a576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050612cff565b600389510660018114612d745760028114612d8457612d8f565b613d3d60f01b6002830352612d8f565b603d60f81b60018303525b50505050508093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060612e1a8585612dd4919061412f565b8385604051602001612de7929190615109565b6040516020818303038152906040528051906020012060001c612e0a919061506b565b86612e159190613aeb565b612ac6565b9050949350505050565b828054612e30906136fe565b90600052602060002090601f016020900481019282612e525760008555612e99565b82601f10612e6b57805160ff1916838001178555612e99565b82800160010185558215612e99579182015b82811115612e98578251825591602001919060010190612e7d565b5b509050612ea69190612ed7565b5090565b60405180606001604052806003905b612ec1612ef4565b815260200190600190039081612eb95790505090565b5b80821115612ef0576000816000905550600101612ed8565b5090565b60405180608001604052806004905b6060815260200190600190039081612f035790505090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f6481612f2f565b8114612f6f57600080fd5b50565b600081359050612f8181612f5b565b92915050565b600060208284031215612f9d57612f9c612f25565b5b6000612fab84828501612f72565b91505092915050565b60008115159050919050565b612fc981612fb4565b82525050565b6000602082019050612fe46000830184612fc0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613024578082015181840152602081019050613009565b83811115613033576000848401525b50505050565b6000601f19601f8301169050919050565b600061305582612fea565b61305f8185612ff5565b935061306f818560208601613006565b61307881613039565b840191505092915050565b6000602082019050818103600083015261309d818461304a565b905092915050565b6000819050919050565b6130b8816130a5565b81146130c357600080fd5b50565b6000813590506130d5816130af565b92915050565b6000602082840312156130f1576130f0612f25565b5b60006130ff848285016130c6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061313382613108565b9050919050565b61314381613128565b82525050565b600060208201905061315e600083018461313a565b92915050565b61316d81613128565b811461317857600080fd5b50565b60008135905061318a81613164565b92915050565b600080604083850312156131a7576131a6612f25565b5b60006131b58582860161317b565b92505060206131c6858286016130c6565b9150509250929050565b6131d9816130a5565b82525050565b60006020820190506131f460008301846131d0565b92915050565b60008060006060848603121561321357613212612f25565b5b60006132218682870161317b565b93505060206132328682870161317b565b9250506040613243868287016130c6565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61328f82613039565b810181811067ffffffffffffffff821117156132ae576132ad613257565b5b80604052505050565b60006132c1612f1b565b90506132cd8282613286565b919050565b600067ffffffffffffffff8211156132ed576132ec613257565b5b6132f682613039565b9050602081019050919050565b82818337600083830152505050565b6000613325613320846132d2565b6132b7565b90508281526020810184848401111561334157613340613252565b5b61334c848285613303565b509392505050565b600082601f8301126133695761336861324d565b5b8135613379848260208601613312565b91505092915050565b6000806040838503121561339957613398612f25565b5b600083013567ffffffffffffffff8111156133b7576133b6612f2a565b5b6133c385828601613354565b92505060206133d4858286016130c6565b9150509250929050565b60006133e982613108565b9050919050565b6133f9816133de565b811461340457600080fd5b50565b600081359050613416816133f0565b92915050565b60006020828403121561343257613431612f25565b5b600061344084828501613407565b91505092915050565b60006020828403121561345f5761345e612f25565b5b600061346d8482850161317b565b91505092915050565b61347f81612fb4565b811461348a57600080fd5b50565b60008135905061349c81613476565b92915050565b600080604083850312156134b9576134b8612f25565b5b60006134c78582860161317b565b92505060206134d88582860161348d565b9150509250929050565b600080604083850312156134f9576134f8612f25565b5b6000613507858286016130c6565b925050602083013567ffffffffffffffff81111561352857613527612f2a565b5b61353485828601613354565b9150509250929050565b600067ffffffffffffffff82111561355957613558613257565b5b61356282613039565b9050602081019050919050565b600061358261357d8461353e565b6132b7565b90508281526020810184848401111561359e5761359d613252565b5b6135a9848285613303565b509392505050565b600082601f8301126135c6576135c561324d565b5b81356135d684826020860161356f565b91505092915050565b600080600080608085870312156135f9576135f8612f25565b5b60006136078782880161317b565b94505060206136188782880161317b565b9350506040613629878288016130c6565b925050606085013567ffffffffffffffff81111561364a57613649612f2a565b5b613656878288016135b1565b91505092959194509250565b6000806040838503121561367957613678612f25565b5b60006136878582860161317b565b92505060206136988582860161317b565b9150509250929050565b6000602082840312156136b8576136b7612f25565b5b60006136c68482850161348d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061371657607f821691505b6020821081141561372a576137296136cf565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061378c602c83612ff5565b915061379782613730565b604082019050919050565b600060208201905081810360008301526137bb8161377f565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061381e602183612ff5565b9150613829826137c2565b604082019050919050565b6000602082019050818103600083015261384d81613811565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006138b0603883612ff5565b91506138bb82613854565b604082019050919050565b600060208201905081810360008301526138df816138a3565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613942603183612ff5565b915061394d826138e6565b604082019050919050565b6000602082019050818103600083015261397181613935565b9050919050565b7f4d696e74206e6f74206163746976650000000000000000000000000000000000600082015250565b60006139ae600f83612ff5565b91506139b982613978565b602082019050919050565b600060208201905081810360008301526139dd816139a1565b9050919050565b7f5465787420746f6f206c6f6e6721000000000000000000000000000000000000600082015250565b6000613a1a600e83612ff5565b9150613a25826139e4565b602082019050919050565b60006020820190508181036000830152613a4981613a0d565b9050919050565b7f4d6178206d696e74203500000000000000000000000000000000000000000000600082015250565b6000613a86600a83612ff5565b9150613a9182613a50565b602082019050919050565b60006020820190508181036000830152613ab581613a79565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613af6826130a5565b9150613b01836130a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b3657613b35613abc565b5b828201905092915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b6000613b77601283612ff5565b9150613b8282613b41565b602082019050919050565b60006020820190508181036000830152613ba681613b6a565b9050919050565b6000613bb8826130a5565b9150613bc3836130a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bfc57613bfb613abc565b5b828202905092915050565b7f4e6f7420656e6f756768204554482073656e7400000000000000000000000000600082015250565b6000613c3d601383612ff5565b9150613c4882613c07565b602082019050919050565b60006020820190508181036000830152613c6c81613c30565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613cad826130a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ce057613cdf613abc565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d21602083612ff5565b9150613d2c82613ceb565b602082019050919050565b60006020820190508181036000830152613d5081613d14565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613db3602983612ff5565b9150613dbe82613d57565b604082019050919050565b60006020820190508181036000830152613de281613da6565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613e45602a83612ff5565b9150613e5082613de9565b604082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b7f4f6e6c7920746f6b656e206f776e657200000000000000000000000000000000600082015250565b6000613eb1601083612ff5565b9150613ebc82613e7b565b602082019050919050565b60006020820190508181036000830152613ee081613ea4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f43602683612ff5565b9150613f4e82613ee7565b604082019050919050565b60006020820190508181036000830152613f7281613f36565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613fd5602c83612ff5565b9150613fe082613f79565b604082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614067602583612ff5565b91506140728261400b565b604082019050919050565b600060208201905081810360008301526140968161405a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140f9602483612ff5565b91506141048261409d565b604082019050919050565b60006020820190508181036000830152614128816140ec565b9050919050565b600061413a826130a5565b9150614145836130a5565b92508282101561415857614157613abc565b5b828203905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614199602083612ff5565b91506141a482614163565b602082019050919050565b600060208201905081810360008301526141c88161418c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614205601c83612ff5565b9150614210826141cf565b602082019050919050565b60006020820190508181036000830152614234816141f8565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614271601983612ff5565b915061427c8261423b565b602082019050919050565b600060208201905081810360008301526142a081614264565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614303603283612ff5565b915061430e826142a7565b604082019050919050565b60006020820190508181036000830152614332816142f6565b9050919050565b600081905092915050565b600061434f82612fea565b6143598185614339565b9350614369818560208601613006565b80840191505092915050565b7f2c202274657874223a2022000000000000000000000000000000000000000000600082015250565b60006143ab600b83614339565b91506143b682614375565b600b82019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b60006143f7600283614339565b9150614402826143c1565b600282019050919050565b60006144198285614344565b91506144248261439e565b91506144308284614344565b915061443b826143ea565b91508190509392505050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000600082015250565b600061447d600983614339565b915061448882614447565b600982019050919050565b7f4c696e655365676d656e74202300000000000000000000000000000000000000600082015250565b60006144c9600d83614339565b91506144d482614493565b600d82019050919050565b7f222c20226465736372697074696f6e223a202250617274206f6620746865205260008201527f65616c6c79204c6f6e67204c696e652200000000000000000000000000000000602082015250565b600061453b603083614339565b9150614546826144df565b603082019050919050565b7f2c202261747472696275746573223a2000000000000000000000000000000000600082015250565b6000614587601083614339565b915061459282614551565b601082019050919050565b7f2c2022696d616765223a22000000000000000000000000000000000000000000600082015250565b60006145d3600b83614339565b91506145de8261459d565b600b82019050919050565b60006145f482614470565b91506145ff826144bc565b915061460b8286614344565b91506146168261452e565b91506146218261457a565b915061462d8285614344565b9150614638826145c6565b91506146448284614344565b915061464f826143ea565b9150819050949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614692601d83614339565b915061469d8261465c565b601d82019050919050565b60006146b382614685565b91506146bf8284614344565b915081905092915050565b600081519050919050565b600082825260208201905092915050565b60006146f1826146ca565b6146fb81856146d5565b935061470b818560208601613006565b61471481613039565b840191505092915050565b6000608082019050614734600083018761313a565b614741602083018661313a565b61474e60408301856131d0565b818103606083015261476081846146e6565b905095945050505050565b60008151905061477a81612f5b565b92915050565b60006020828403121561479657614795612f25565b5b60006147a48482850161476b565b91505092915050565b7f3c726563742066696c6c3d227267626128000000000000000000000000000000600082015250565b60006147e3601183614339565b91506147ee826147ad565b601182019050919050565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b600061482f600183614339565b915061483a826147f9565b600182019050919050565b7f2c302e0000000000000000000000000000000000000000000000000000000000600082015250565b600061487b600383614339565b915061488682614845565b600382019050919050565b7f2922206865696768743d22323730222077696474683d223534302220793d223060008201527f2220783d2230222f3e0000000000000000000000000000000000000000000000602082015250565b60006148ed602983614339565b91506148f882614891565b602982019050919050565b600061490e826147d6565b915061491a8287614344565b915061492582614822565b91506149318286614344565b915061493c82614822565b91506149488285614344565b91506149538261486e565b915061495f8284614344565b915061496a826148e0565b915081905095945050505050565b7f2922206865696768743d22323730222077696474683d223534302220793d223260008201527f37302220783d2230222f3e000000000000000000000000000000000000000000602082015250565b60006149d4602b83614339565b91506149df82614978565b602b82019050919050565b60006149f5826147d6565b9150614a018287614344565b9150614a0c82614822565b9150614a188286614344565b9150614a2382614822565b9150614a2f8285614344565b9150614a3a8261486e565b9150614a468284614344565b9150614a51826149c7565b915081905095945050505050565b7f2c31000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a95600283614339565b9150614aa082614a5f565b600282019050919050565b7f2922206865696768743d223831222077696474683d223534302220793d22323260008201527f392e352220783d2230222f3e3c2f7376673e0000000000000000000000000000602082015250565b6000614b07603283614339565b9150614b1282614aab565b603282019050919050565b6000614b28826147d6565b9150614b348286614344565b9150614b3f82614822565b9150614b4b8285614344565b9150614b5682614822565b9150614b628284614344565b9150614b6d82614a88565b9150614b7882614afa565b9150819050949350505050565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060008201527f30302f737667222077696474683d2235343022206865696768743d223534302260208201527f3e00000000000000000000000000000000000000000000000000000000000000604082015250565b6000614c07604183614339565b9150614c1282614b85565b604182019050919050565b7f3c726563742066696c6c3d2272676261283235352c3235352c3235352c31292260008201527f206865696768743d22353430222077696474683d223534302220793d2230222060208201527f783d2230222f3e00000000000000000000000000000000000000000000000000604082015250565b6000614c9f604783614339565b9150614caa82614c1d565b604782019050919050565b600081905092915050565b6000614ccb826146ca565b614cd58185614cb5565b9350614ce5818560208601613006565b80840191505092915050565b6000614cfc82614bfa565b9150614d0782614c92565b9150614d138286614cc0565b9150614d1f8285614cc0565b9150614d2b8284614cc0565b9150819050949350505050565b6000614d448285614344565b9150614d508284614344565b91508190509392505050565b7f7b226331223a2228000000000000000000000000000000000000000000000000600082015250565b6000614d92600883614339565b9150614d9d82614d5c565b600882019050919050565b7f2922000000000000000000000000000000000000000000000000000000000000600082015250565b6000614dde600283614339565b9150614de982614da8565b600282019050919050565b7f2c20226332223a22280000000000000000000000000000000000000000000000600082015250565b6000614e2a600983614339565b9150614e3582614df4565b600982019050919050565b7f2c20226333223a22280000000000000000000000000000000000000000000000600082015250565b6000614e76600983614339565b9150614e8182614e40565b600982019050919050565b7f2c312e3030302922000000000000000000000000000000000000000000000000600082015250565b6000614ec2600883614339565b9150614ecd82614e8c565b600882019050919050565b6000614ee382614d85565b9150614eef828e614344565b9150614efa82614822565b9150614f06828d614344565b9150614f1182614822565b9150614f1d828c614344565b9150614f288261486e565b9150614f34828b614344565b9150614f3f82614dd1565b9150614f4a82614e1d565b9150614f56828a614344565b9150614f6182614822565b9150614f6d8289614344565b9150614f7882614822565b9150614f848288614344565b9150614f8f8261486e565b9150614f9b8287614344565b9150614fa682614dd1565b9150614fb182614e69565b9150614fbd8286614344565b9150614fc882614822565b9150614fd48285614344565b9150614fdf82614822565b9150614feb8284614344565b9150614ff682614eb5565b91508190509c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615045826130a5565b9150615050836130a5565b9250826150605761505f61500b565b5b828204905092915050565b6000615076826130a5565b9150615081836130a5565b9250826150915761509061500b565b5b828206905092915050565b7f3738360000000000000000000000000000000000000000000000000000000000600082015250565b60006150d2600383614339565b91506150dd8261509c565b600382019050919050565b6000819050919050565b6151036150fe826130a5565b6150e8565b82525050565b60006151158285614344565b9150615120826150c5565b915061512c82846150f2565b602082019150819050939250505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212204fc903edaee45564e8a4b852e59ccc75170122f7a03ddedfe6624064854449a964736f6c634300080b0033
Deployed Bytecode
0x6080604052600436106101b75760003560e01c8063715018a6116100ec578063c002d23d1161008a578063e985e9c511610064578063e985e9c5146105fd578063ee1cc9441461063a578063f2fde38b14610663578063f4a0a5281461068c576101b7565b8063c002d23d1461056c578063c87b56dd14610597578063cfe990da146105d4576101b7565b806395d89b41116100c657806395d89b41146104c6578063a22cb465146104f1578063acde21201461051a578063b88d4fde14610543576101b7565b8063715018a61461045957806375794a3c146104705780638da5cb5b1461049b576101b7565b806332cb6b0c1161015957806351cff8d91161013357806351cff8d9146103795780635904317c146103a25780636352211e146103df57806370a082311461041c576101b7565b806332cb6b0c1461030957806342842e0e1461033457806346b145e11461035d576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a5780631a5aba5e146102b557806323b872dd146102e0576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612f87565b6106b5565b6040516101f09190612fcf565b60405180910390f35b34801561020557600080fd5b5061020e610797565b60405161021b9190613083565b60405180910390f35b34801561023057600080fd5b5061024b600480360381019061024691906130db565b610829565b6040516102589190613149565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190613190565b6108ae565b005b34801561029657600080fd5b5061029f6109c6565b6040516102ac91906131df565b60405180910390f35b3480156102c157600080fd5b506102ca6109d0565b6040516102d79190612fcf565b60405180910390f35b3480156102ec57600080fd5b50610307600480360381019061030291906131fa565b6109e3565b005b34801561031557600080fd5b5061031e610a43565b60405161032b91906131df565b60405180910390f35b34801561034057600080fd5b5061035b600480360381019061035691906131fa565b610a49565b005b61037760048036038101906103729190613382565b610a69565b005b34801561038557600080fd5b506103a0600480360381019061039b919061341c565b610c82565b005b3480156103ae57600080fd5b506103c960048036038101906103c491906130db565b610d4e565b6040516103d69190613083565b60405180910390f35b3480156103eb57600080fd5b50610406600480360381019061040191906130db565b610df2565b6040516104139190613149565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613449565b610ea4565b60405161045091906131df565b60405180910390f35b34801561046557600080fd5b5061046e610f5c565b005b34801561047c57600080fd5b50610485610fe4565b60405161049291906131df565b60405180910390f35b3480156104a757600080fd5b506104b0610fea565b6040516104bd9190613149565b60405180910390f35b3480156104d257600080fd5b506104db611013565b6040516104e89190613083565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906134a2565b6110a5565b005b34801561052657600080fd5b50610541600480360381019061053c91906134e2565b6110bb565b005b34801561054f57600080fd5b5061056a600480360381019061056591906135df565b611197565b005b34801561057857600080fd5b506105816111f9565b60405161058e91906131df565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b991906130db565b6111ff565b6040516105cb9190613083565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f691906130db565b611211565b005b34801561060957600080fd5b50610624600480360381019061061f9190613662565b611301565b6040516106319190612fcf565b60405180910390f35b34801561064657600080fd5b50610661600480360381019061065c91906136a2565b611395565b005b34801561066f57600080fd5b5061068a60048036038101906106859190613449565b61142e565b005b34801561069857600080fd5b506106b360048036038101906106ae91906130db565b611526565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061078057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610790575061078f826115ac565b5b9050919050565b6060600180546107a6906136fe565b80601f01602080910402602001604051908101604052809291908181526020018280546107d2906136fe565b801561081f5780601f106107f45761010080835404028352916020019161081f565b820191906000526020600020905b81548152906001019060200180831161080257829003601f168201915b5050505050905090565b600061083482611616565b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a906137a2565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108b982610df2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092190613834565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610949611682565b73ffffffffffffffffffffffffffffffffffffffff161480610978575061097781610972611682565b611301565b5b6109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae906138c6565b60405180910390fd5b6109c1838361168a565b505050565b6000600754905090565b600a60009054906101000a900460ff1681565b6109f46109ee611682565b82611743565b610a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2a90613958565b60405180910390fd5b610a3e838383611821565b505050565b61271081565b610a6483838360405180602001604052806000815250611197565b505050565b60006007549050600a60009054906101000a900460ff16610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab6906139c4565b60405180910390fd5b6037835110610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa90613a30565b60405180910390fd5b60068210610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90613a9c565b60405180910390fd5b61271082600754610b579190613aeb565b10610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90613b8d565b60405180910390fd5b81600954610ba59190613bad565b3414610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90613c53565b60405180910390fd5b60005b82811015610c7c57610bfb3383611a88565b83600b836127108110610c1157610c10613c73565b5b019080519060200190610c25929190612e24565b507f7258d153b7b27bbf583c7fe290f549b80cf16cc64fa2e041de0783debb77980682604051610c5591906131df565b60405180910390a18282019150816007819055508080610c7490613ca2565b915050610be9565b50505050565b610c8a611682565b73ffffffffffffffffffffffffffffffffffffffff16610ca8610fea565b73ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590613d37565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d49573d6000803e3d6000fd5b505050565b600b816127108110610d5f57600080fd5b016000915090508054610d71906136fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9d906136fe565b8015610dea5780601f10610dbf57610100808354040283529160200191610dea565b820191906000526020600020905b815481529060010190602001808311610dcd57829003601f168201915b505050505081565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9290613dc9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c90613e5b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f64611682565b73ffffffffffffffffffffffffffffffffffffffff16610f82610fea565b73ffffffffffffffffffffffffffffffffffffffff1614610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90613d37565b60405180910390fd5b610fe26000611c62565b565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611022906136fe565b80601f016020809104026020016040519081016040528092919081815260200182805461104e906136fe565b801561109b5780601f106110705761010080835404028352916020019161109b565b820191906000526020600020905b81548152906001019060200180831161107e57829003601f168201915b5050505050905090565b6110b76110b0611682565b8383611d26565b5050565b6110c482610df2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890613ec7565b60405180910390fd5b80600b83612710811061114757611146613c73565b5b01908051906020019061115b929190612e24565b507f7258d153b7b27bbf583c7fe290f549b80cf16cc64fa2e041de0783debb7798068260405161118b91906131df565b60405180910390a15050565b6111a86111a2611682565b83611743565b6111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90613958565b60405180910390fd5b6111f384848484611e93565b50505050565b60095481565b606061120a82611eef565b9050919050565b611219611682565b73ffffffffffffffffffffffffffffffffffffffff16611237610fea565b73ffffffffffffffffffffffffffffffffffffffff161461128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128490613d37565b60405180910390fd5b60405180602001604052806000815250600b8261271081106112b2576112b1613c73565b5b0190805190602001906112c6929190612e24565b507f7258d153b7b27bbf583c7fe290f549b80cf16cc64fa2e041de0783debb779806816040516112f691906131df565b60405180910390a150565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61139d611682565b73ffffffffffffffffffffffffffffffffffffffff166113bb610fea565b73ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140890613d37565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b611436611682565b73ffffffffffffffffffffffffffffffffffffffff16611454610fea565b73ffffffffffffffffffffffffffffffffffffffff16146114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190613d37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190613f59565b60405180910390fd5b61152381611c62565b50565b61152e611682565b73ffffffffffffffffffffffffffffffffffffffff1661154c610fea565b73ffffffffffffffffffffffffffffffffffffffff16146115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990613d37565b60405180910390fd5b8060098190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166116fd83610df2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061174e82611616565b61178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490613feb565b60405180910390fd5b600061179883610df2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061180757508373ffffffffffffffffffffffffffffffffffffffff166117ef84610829565b73ffffffffffffffffffffffffffffffffffffffff16145b8061181857506118178185611301565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661184182610df2565b73ffffffffffffffffffffffffffffffffffffffff1614611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188e9061407d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe9061410f565b60405180910390fd5b61191283838361203a565b61191d60008261168a565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196d919061412f565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119c49190613aeb565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a8383838361203f565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aef906141af565b60405180910390fd5b611b0181611616565b15611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b389061421b565b60405180910390fd5b611b4d6000838361203a565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b9d9190613aeb565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c5e6000838361203f565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8c90614287565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e869190612fcf565b60405180910390a3505050565b611e9e848484611821565b611eaa84848484612044565b611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee090614319565b60405180910390fd5b50505050565b60606000611efc836121cc565b90506000611f0982612565565b90506000611f1683612879565b90506000600b866127108110611f2f57611f2e613c73565b5b018054611f3b906136fe565b80601f0160208091040260200160405190810160405280929190818152602001828054611f67906136fe565b8015611fb45780601f10611f8957610100808354040283529160200191611fb4565b820191906000526020600020905b815481529060010190602001808311611f9757829003601f168201915b50505050509050612010611fc787612ac6565b8383604051602001611fda92919061440d565b60405160208183030381529060405285604051602001611ffc939291906145e9565b604051602081830303815290604052612c27565b60405160200161202091906146a8565b604051602081830303815290604052945050505050919050565b505050565b505050565b60006120658473ffffffffffffffffffffffffffffffffffffffff16612da0565b156121bf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261208e611682565b8786866040518563ffffffff1660e01b81526004016120b0949392919061471f565b6020604051808303816000875af19250505080156120ec57506040513d601f19601f820116820180604052508101906120e99190614780565b60015b61216f573d806000811461211c576040519150601f19603f3d011682016040523d82523d6000602084013e612121565b606091505b50600081511415612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e90614319565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121c4565b600190505b949350505050565b6121d4612eaa565b6040518060600160405280604051806080016040528061222d600060ff886040518060400160405280600381526020017f3030310000000000000000000000000000000000000000000000000000000000815250612dc3565b8152602001612275606460d2886040518060400160405280600381526020017f3030320000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016122bd600060ff886040518060400160405280600381526020017f3030330000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016123076102586103e7886040518060400160405280600381526020017f3030340000000000000000000000000000000000000000000000000000000000815250612dc3565b8152508152602001604051806080016040528061235d600060ff886040518060400160405280600381526020017f3031300000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016123a5606460d2886040518060400160405280600381526020017f3032300000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016123ed600060ff886040518060400160405280600381526020017f3033300000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016124376103526103e7886040518060400160405280600381526020017f3034300000000000000000000000000000000000000000000000000000000000815250612dc3565b8152508152602001604051806080016040528061248d6000605f886040518060400160405280600381526020017f3030300000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016124d56000601b886040518060400160405280600381526020017f3130300000000000000000000000000000000000000000000000000000000000815250612dc3565b815260200161251d60006064886040518060400160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250612dc3565b81526020016040518060400160405280600381526020017f30303000000000000000000000000000000000000000000000000000000000008152508152508152509050919050565b606060006040518060400160405280601a81526020017f646174613a696d6167652f7376672b786d6c3b6261736536342c0000000000008152509050600061284c846000600381106125ba576125b9613c73565b5b60200201516000600481106125d2576125d1613c73565b5b6020020151856000600381106125eb576125ea613c73565b5b602002015160016004811061260357612602613c73565b5b60200201518660006003811061261c5761261b613c73565b5b602002015160026004811061263457612633613c73565b5b60200201518760006003811061264d5761264c613c73565b5b602002015160036004811061266557612664613c73565b5b602002015160405160200161267d9493929190614903565b604051602081830303815290604052856001600381106126a05761269f613c73565b5b60200201516000600481106126b8576126b7613c73565b5b6020020151866001600381106126d1576126d0613c73565b5b60200201516001600481106126e9576126e8613c73565b5b60200201518760016003811061270257612701613c73565b5b602002015160026004811061271a57612719613c73565b5b60200201518860016003811061273357612732613c73565b5b602002015160036004811061274b5761274a613c73565b5b602002015160405160200161276394939291906149ea565b6040516020818303038152906040528660026003811061278657612785613c73565b5b602002015160006004811061279e5761279d613c73565b5b6020020151876002600381106127b7576127b6613c73565b5b60200201516001600481106127cf576127ce613c73565b5b6020020151886002600381106127e8576127e7613c73565b5b6020020151600260048110612800576127ff613c73565b5b602002015160405160200161281793929190614b1d565b60405160208183030381529060405260405160200161283893929190614cf1565b604051602081830303815290604052612c27565b90508181604051602001612861929190614d38565b60405160208183030381529060405292505050919050565b60608160006003811061288f5761288e613c73565b5b60200201516000600481106128a7576128a6613c73565b5b6020020151826000600381106128c0576128bf613c73565b5b60200201516001600481106128d8576128d7613c73565b5b6020020151836000600381106128f1576128f0613c73565b5b602002015160026004811061290957612908613c73565b5b60200201518460006003811061292257612921613c73565b5b602002015160036004811061293a57612939613c73565b5b60200201518560016003811061295357612952613c73565b5b602002015160006004811061296b5761296a613c73565b5b60200201518660016003811061298457612983613c73565b5b602002015160016004811061299c5761299b613c73565b5b6020020151876001600381106129b5576129b4613c73565b5b60200201516002600481106129cd576129cc613c73565b5b6020020151886001600381106129e6576129e5613c73565b5b60200201516003600481106129fe576129fd613c73565b5b602002015189600260038110612a1757612a16613c73565b5b6020020151600060048110612a2f57612a2e613c73565b5b60200201518a600260038110612a4857612a47613c73565b5b6020020151600160048110612a6057612a5f613c73565b5b60200201518b600260038110612a7957612a78613c73565b5b6020020151600260048110612a9157612a90613c73565b5b6020020151604051602001612ab09b9a99989796959493929190614ed8565b6040516020818303038152906040529050919050565b60606000821415612b0e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c22565b600082905060005b60008214612b40578080612b2990613ca2565b915050600a82612b39919061503a565b9150612b16565b60008167ffffffffffffffff811115612b5c57612b5b613257565b5b6040519080825280601f01601f191660200182016040528015612b8e5781602001600182028036833780820191505090505b5090505b60008514612c1b57600182612ba7919061412f565b9150600a85612bb6919061506b565b6030612bc29190613aeb565b60f81b818381518110612bd857612bd7613c73565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c14919061503a565b9450612b92565b8093505050505b919050565b6060600082511415612c4a57604051806020016040528060008152509050612d9b565b600060405180606001604052806040815260200161513d6040913990506000600360028551612c799190613aeb565b612c83919061503a565b6004612c8f9190613bad565b90506000602082612ca09190613aeb565b67ffffffffffffffff811115612cb957612cb8613257565b5b6040519080825280601f01601f191660200182016040528015612ceb5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015612d5a576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050612cff565b600389510660018114612d745760028114612d8457612d8f565b613d3d60f01b6002830352612d8f565b603d60f81b60018303525b50505050508093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060612e1a8585612dd4919061412f565b8385604051602001612de7929190615109565b6040516020818303038152906040528051906020012060001c612e0a919061506b565b86612e159190613aeb565b612ac6565b9050949350505050565b828054612e30906136fe565b90600052602060002090601f016020900481019282612e525760008555612e99565b82601f10612e6b57805160ff1916838001178555612e99565b82800160010185558215612e99579182015b82811115612e98578251825591602001919060010190612e7d565b5b509050612ea69190612ed7565b5090565b60405180606001604052806003905b612ec1612ef4565b815260200190600190039081612eb95790505090565b5b80821115612ef0576000816000905550600101612ed8565b5090565b60405180608001604052806004905b6060815260200190600190039081612f035790505090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f6481612f2f565b8114612f6f57600080fd5b50565b600081359050612f8181612f5b565b92915050565b600060208284031215612f9d57612f9c612f25565b5b6000612fab84828501612f72565b91505092915050565b60008115159050919050565b612fc981612fb4565b82525050565b6000602082019050612fe46000830184612fc0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613024578082015181840152602081019050613009565b83811115613033576000848401525b50505050565b6000601f19601f8301169050919050565b600061305582612fea565b61305f8185612ff5565b935061306f818560208601613006565b61307881613039565b840191505092915050565b6000602082019050818103600083015261309d818461304a565b905092915050565b6000819050919050565b6130b8816130a5565b81146130c357600080fd5b50565b6000813590506130d5816130af565b92915050565b6000602082840312156130f1576130f0612f25565b5b60006130ff848285016130c6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061313382613108565b9050919050565b61314381613128565b82525050565b600060208201905061315e600083018461313a565b92915050565b61316d81613128565b811461317857600080fd5b50565b60008135905061318a81613164565b92915050565b600080604083850312156131a7576131a6612f25565b5b60006131b58582860161317b565b92505060206131c6858286016130c6565b9150509250929050565b6131d9816130a5565b82525050565b60006020820190506131f460008301846131d0565b92915050565b60008060006060848603121561321357613212612f25565b5b60006132218682870161317b565b93505060206132328682870161317b565b9250506040613243868287016130c6565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61328f82613039565b810181811067ffffffffffffffff821117156132ae576132ad613257565b5b80604052505050565b60006132c1612f1b565b90506132cd8282613286565b919050565b600067ffffffffffffffff8211156132ed576132ec613257565b5b6132f682613039565b9050602081019050919050565b82818337600083830152505050565b6000613325613320846132d2565b6132b7565b90508281526020810184848401111561334157613340613252565b5b61334c848285613303565b509392505050565b600082601f8301126133695761336861324d565b5b8135613379848260208601613312565b91505092915050565b6000806040838503121561339957613398612f25565b5b600083013567ffffffffffffffff8111156133b7576133b6612f2a565b5b6133c385828601613354565b92505060206133d4858286016130c6565b9150509250929050565b60006133e982613108565b9050919050565b6133f9816133de565b811461340457600080fd5b50565b600081359050613416816133f0565b92915050565b60006020828403121561343257613431612f25565b5b600061344084828501613407565b91505092915050565b60006020828403121561345f5761345e612f25565b5b600061346d8482850161317b565b91505092915050565b61347f81612fb4565b811461348a57600080fd5b50565b60008135905061349c81613476565b92915050565b600080604083850312156134b9576134b8612f25565b5b60006134c78582860161317b565b92505060206134d88582860161348d565b9150509250929050565b600080604083850312156134f9576134f8612f25565b5b6000613507858286016130c6565b925050602083013567ffffffffffffffff81111561352857613527612f2a565b5b61353485828601613354565b9150509250929050565b600067ffffffffffffffff82111561355957613558613257565b5b61356282613039565b9050602081019050919050565b600061358261357d8461353e565b6132b7565b90508281526020810184848401111561359e5761359d613252565b5b6135a9848285613303565b509392505050565b600082601f8301126135c6576135c561324d565b5b81356135d684826020860161356f565b91505092915050565b600080600080608085870312156135f9576135f8612f25565b5b60006136078782880161317b565b94505060206136188782880161317b565b9350506040613629878288016130c6565b925050606085013567ffffffffffffffff81111561364a57613649612f2a565b5b613656878288016135b1565b91505092959194509250565b6000806040838503121561367957613678612f25565b5b60006136878582860161317b565b92505060206136988582860161317b565b9150509250929050565b6000602082840312156136b8576136b7612f25565b5b60006136c68482850161348d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061371657607f821691505b6020821081141561372a576137296136cf565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061378c602c83612ff5565b915061379782613730565b604082019050919050565b600060208201905081810360008301526137bb8161377f565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061381e602183612ff5565b9150613829826137c2565b604082019050919050565b6000602082019050818103600083015261384d81613811565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006138b0603883612ff5565b91506138bb82613854565b604082019050919050565b600060208201905081810360008301526138df816138a3565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613942603183612ff5565b915061394d826138e6565b604082019050919050565b6000602082019050818103600083015261397181613935565b9050919050565b7f4d696e74206e6f74206163746976650000000000000000000000000000000000600082015250565b60006139ae600f83612ff5565b91506139b982613978565b602082019050919050565b600060208201905081810360008301526139dd816139a1565b9050919050565b7f5465787420746f6f206c6f6e6721000000000000000000000000000000000000600082015250565b6000613a1a600e83612ff5565b9150613a25826139e4565b602082019050919050565b60006020820190508181036000830152613a4981613a0d565b9050919050565b7f4d6178206d696e74203500000000000000000000000000000000000000000000600082015250565b6000613a86600a83612ff5565b9150613a9182613a50565b602082019050919050565b60006020820190508181036000830152613ab581613a79565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613af6826130a5565b9150613b01836130a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b3657613b35613abc565b5b828201905092915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b6000613b77601283612ff5565b9150613b8282613b41565b602082019050919050565b60006020820190508181036000830152613ba681613b6a565b9050919050565b6000613bb8826130a5565b9150613bc3836130a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bfc57613bfb613abc565b5b828202905092915050565b7f4e6f7420656e6f756768204554482073656e7400000000000000000000000000600082015250565b6000613c3d601383612ff5565b9150613c4882613c07565b602082019050919050565b60006020820190508181036000830152613c6c81613c30565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613cad826130a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ce057613cdf613abc565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d21602083612ff5565b9150613d2c82613ceb565b602082019050919050565b60006020820190508181036000830152613d5081613d14565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613db3602983612ff5565b9150613dbe82613d57565b604082019050919050565b60006020820190508181036000830152613de281613da6565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613e45602a83612ff5565b9150613e5082613de9565b604082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b7f4f6e6c7920746f6b656e206f776e657200000000000000000000000000000000600082015250565b6000613eb1601083612ff5565b9150613ebc82613e7b565b602082019050919050565b60006020820190508181036000830152613ee081613ea4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f43602683612ff5565b9150613f4e82613ee7565b604082019050919050565b60006020820190508181036000830152613f7281613f36565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613fd5602c83612ff5565b9150613fe082613f79565b604082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614067602583612ff5565b91506140728261400b565b604082019050919050565b600060208201905081810360008301526140968161405a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140f9602483612ff5565b91506141048261409d565b604082019050919050565b60006020820190508181036000830152614128816140ec565b9050919050565b600061413a826130a5565b9150614145836130a5565b92508282101561415857614157613abc565b5b828203905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614199602083612ff5565b91506141a482614163565b602082019050919050565b600060208201905081810360008301526141c88161418c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614205601c83612ff5565b9150614210826141cf565b602082019050919050565b60006020820190508181036000830152614234816141f8565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614271601983612ff5565b915061427c8261423b565b602082019050919050565b600060208201905081810360008301526142a081614264565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614303603283612ff5565b915061430e826142a7565b604082019050919050565b60006020820190508181036000830152614332816142f6565b9050919050565b600081905092915050565b600061434f82612fea565b6143598185614339565b9350614369818560208601613006565b80840191505092915050565b7f2c202274657874223a2022000000000000000000000000000000000000000000600082015250565b60006143ab600b83614339565b91506143b682614375565b600b82019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b60006143f7600283614339565b9150614402826143c1565b600282019050919050565b60006144198285614344565b91506144248261439e565b91506144308284614344565b915061443b826143ea565b91508190509392505050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000600082015250565b600061447d600983614339565b915061448882614447565b600982019050919050565b7f4c696e655365676d656e74202300000000000000000000000000000000000000600082015250565b60006144c9600d83614339565b91506144d482614493565b600d82019050919050565b7f222c20226465736372697074696f6e223a202250617274206f6620746865205260008201527f65616c6c79204c6f6e67204c696e652200000000000000000000000000000000602082015250565b600061453b603083614339565b9150614546826144df565b603082019050919050565b7f2c202261747472696275746573223a2000000000000000000000000000000000600082015250565b6000614587601083614339565b915061459282614551565b601082019050919050565b7f2c2022696d616765223a22000000000000000000000000000000000000000000600082015250565b60006145d3600b83614339565b91506145de8261459d565b600b82019050919050565b60006145f482614470565b91506145ff826144bc565b915061460b8286614344565b91506146168261452e565b91506146218261457a565b915061462d8285614344565b9150614638826145c6565b91506146448284614344565b915061464f826143ea565b9150819050949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614692601d83614339565b915061469d8261465c565b601d82019050919050565b60006146b382614685565b91506146bf8284614344565b915081905092915050565b600081519050919050565b600082825260208201905092915050565b60006146f1826146ca565b6146fb81856146d5565b935061470b818560208601613006565b61471481613039565b840191505092915050565b6000608082019050614734600083018761313a565b614741602083018661313a565b61474e60408301856131d0565b818103606083015261476081846146e6565b905095945050505050565b60008151905061477a81612f5b565b92915050565b60006020828403121561479657614795612f25565b5b60006147a48482850161476b565b91505092915050565b7f3c726563742066696c6c3d227267626128000000000000000000000000000000600082015250565b60006147e3601183614339565b91506147ee826147ad565b601182019050919050565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b600061482f600183614339565b915061483a826147f9565b600182019050919050565b7f2c302e0000000000000000000000000000000000000000000000000000000000600082015250565b600061487b600383614339565b915061488682614845565b600382019050919050565b7f2922206865696768743d22323730222077696474683d223534302220793d223060008201527f2220783d2230222f3e0000000000000000000000000000000000000000000000602082015250565b60006148ed602983614339565b91506148f882614891565b602982019050919050565b600061490e826147d6565b915061491a8287614344565b915061492582614822565b91506149318286614344565b915061493c82614822565b91506149488285614344565b91506149538261486e565b915061495f8284614344565b915061496a826148e0565b915081905095945050505050565b7f2922206865696768743d22323730222077696474683d223534302220793d223260008201527f37302220783d2230222f3e000000000000000000000000000000000000000000602082015250565b60006149d4602b83614339565b91506149df82614978565b602b82019050919050565b60006149f5826147d6565b9150614a018287614344565b9150614a0c82614822565b9150614a188286614344565b9150614a2382614822565b9150614a2f8285614344565b9150614a3a8261486e565b9150614a468284614344565b9150614a51826149c7565b915081905095945050505050565b7f2c31000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a95600283614339565b9150614aa082614a5f565b600282019050919050565b7f2922206865696768743d223831222077696474683d223534302220793d22323260008201527f392e352220783d2230222f3e3c2f7376673e0000000000000000000000000000602082015250565b6000614b07603283614339565b9150614b1282614aab565b603282019050919050565b6000614b28826147d6565b9150614b348286614344565b9150614b3f82614822565b9150614b4b8285614344565b9150614b5682614822565b9150614b628284614344565b9150614b6d82614a88565b9150614b7882614afa565b9150819050949350505050565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060008201527f30302f737667222077696474683d2235343022206865696768743d223534302260208201527f3e00000000000000000000000000000000000000000000000000000000000000604082015250565b6000614c07604183614339565b9150614c1282614b85565b604182019050919050565b7f3c726563742066696c6c3d2272676261283235352c3235352c3235352c31292260008201527f206865696768743d22353430222077696474683d223534302220793d2230222060208201527f783d2230222f3e00000000000000000000000000000000000000000000000000604082015250565b6000614c9f604783614339565b9150614caa82614c1d565b604782019050919050565b600081905092915050565b6000614ccb826146ca565b614cd58185614cb5565b9350614ce5818560208601613006565b80840191505092915050565b6000614cfc82614bfa565b9150614d0782614c92565b9150614d138286614cc0565b9150614d1f8285614cc0565b9150614d2b8284614cc0565b9150819050949350505050565b6000614d448285614344565b9150614d508284614344565b91508190509392505050565b7f7b226331223a2228000000000000000000000000000000000000000000000000600082015250565b6000614d92600883614339565b9150614d9d82614d5c565b600882019050919050565b7f2922000000000000000000000000000000000000000000000000000000000000600082015250565b6000614dde600283614339565b9150614de982614da8565b600282019050919050565b7f2c20226332223a22280000000000000000000000000000000000000000000000600082015250565b6000614e2a600983614339565b9150614e3582614df4565b600982019050919050565b7f2c20226333223a22280000000000000000000000000000000000000000000000600082015250565b6000614e76600983614339565b9150614e8182614e40565b600982019050919050565b7f2c312e3030302922000000000000000000000000000000000000000000000000600082015250565b6000614ec2600883614339565b9150614ecd82614e8c565b600882019050919050565b6000614ee382614d85565b9150614eef828e614344565b9150614efa82614822565b9150614f06828d614344565b9150614f1182614822565b9150614f1d828c614344565b9150614f288261486e565b9150614f34828b614344565b9150614f3f82614dd1565b9150614f4a82614e1d565b9150614f56828a614344565b9150614f6182614822565b9150614f6d8289614344565b9150614f7882614822565b9150614f848288614344565b9150614f8f8261486e565b9150614f9b8287614344565b9150614fa682614dd1565b9150614fb182614e69565b9150614fbd8286614344565b9150614fc882614822565b9150614fd48285614344565b9150614fdf82614822565b9150614feb8284614344565b9150614ff682614eb5565b91508190509c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615045826130a5565b9150615050836130a5565b9250826150605761505f61500b565b5b828204905092915050565b6000615076826130a5565b9150615081836130a5565b9250826150915761509061500b565b5b828206905092915050565b7f3738360000000000000000000000000000000000000000000000000000000000600082015250565b60006150d2600383614339565b91506150dd8261509c565b600382019050919050565b6000819050919050565b6151036150fe826130a5565b6150e8565b82525050565b60006151158285614344565b9150615120826150c5565b915061512c82846150f2565b602082019150819050939250505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212204fc903edaee45564e8a4b852e59ccc75170122f7a03ddedfe6624064854449a964736f6c634300080b0033
Deployed Bytecode Sourcemap
44127:6141:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28383:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29328:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30887:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30410:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49907:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44407:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31637:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44358:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32047:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48816:822;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49753:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44444:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29022:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28752:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43210:103;;;;;;;;;;;;;:::i;:::-;;44221:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42559:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29497:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31180:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48420:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32303:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44292:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50111:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48664:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31406:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50005:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43468:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49646:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28383:305;28485:4;28537:25;28522:40;;;:11;:40;;;;:105;;;;28594:33;28579:48;;;:11;:48;;;;28522:105;:158;;;;28644:36;28668:11;28644:23;:36::i;:::-;28522:158;28502:178;;28383:305;;;:::o;29328:100::-;29382:13;29415:5;29408:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29328:100;:::o;30887:221::-;30963:7;30991:16;30999:7;30991;:16::i;:::-;30983:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31076:15;:24;31092:7;31076:24;;;;;;;;;;;;;;;;;;;;;31069:31;;30887:221;;;:::o;30410:411::-;30491:13;30507:23;30522:7;30507:14;:23::i;:::-;30491:39;;30555:5;30549:11;;:2;:11;;;;30541:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30649:5;30633:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30658:37;30675:5;30682:12;:10;:12::i;:::-;30658:16;:37::i;:::-;30633:62;30611:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30792:21;30801:2;30805:7;30792:8;:21::i;:::-;30480:341;30410:411;;:::o;49907:90::-;49951:7;49978:11;;49971:18;;49907:90;:::o;44407:30::-;;;;;;;;;;;;;:::o;31637:339::-;31832:41;31851:12;:10;:12::i;:::-;31865:7;31832:18;:41::i;:::-;31824:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31940:28;31950:4;31956:2;31960:7;31940:9;:28::i;:::-;31637:339;;;:::o;44358:42::-;44395:5;44358:42;:::o;32047:185::-;32185:39;32202:4;32208:2;32212:7;32185:39;;;;;;;;;;;;:16;:39::i;:::-;32047:185;;;:::o;48816:822::-;48906:20;48929:11;;48906:34;;48959:11;;;;;;;;;;;48951:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;49031:2;49015:5;49009:19;:24;49001:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;49092:1;49071:18;:22;49063:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;44395:5;49141:18;49127:11;;:32;;;;:::i;:::-;49126:47;49118:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;49242:18;49229:10;;:31;;;;:::i;:::-;49215:9;:46;49207:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;49302:6;49297:334;49318:18;49314:1;:22;49297:334;;;49358:31;49364:10;49376:12;49358:5;:31::i;:::-;49434:5;49404:13;49418:12;49404:27;;;;;;;:::i;:::-;;;:35;;;;;;;;;;;;:::i;:::-;;49459:26;49472:12;49459:26;;;;;;:::i;:::-;;;;;;;;49545:18;49529:34;;;;49607:12;49593:11;:26;;;;49338:3;;;;;:::i;:::-;;;;49297:334;;;;48895:743;48816:822;;:::o;49753:146::-;42790:12;:10;:12::i;:::-;42779:23;;:7;:5;:7::i;:::-;:23;;;42771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49820:15:::1;49838:21;49820:39;;49870:3;:12;;:21;49883:7;49870:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49809:90;49753:146:::0;:::o;44444:40::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29022:239::-;29094:7;29114:13;29130:7;:16;29138:7;29130:16;;;;;;;;;;;;;;;;;;;;;29114:32;;29182:1;29165:19;;:5;:19;;;;29157:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29248:5;29241:12;;;29022:239;;;:::o;28752:208::-;28824:7;28869:1;28852:19;;:5;:19;;;;28844:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28936:9;:16;28946:5;28936:16;;;;;;;;;;;;;;;;28929:23;;28752:208;;;:::o;43210:103::-;42790:12;:10;:12::i;:::-;42779:23;;:7;:5;:7::i;:::-;:23;;;42771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43275:30:::1;43302:1;43275:18;:30::i;:::-;43210:103::o:0;44221:30::-;;;;:::o;42559:87::-;42605:7;42632:6;;;;;;;;;;;42625:13;;42559:87;:::o;29497:104::-;29553:13;29586:7;29579:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29497:104;:::o;31180:155::-;31275:52;31294:12;:10;:12::i;:::-;31308:8;31318;31275:18;:52::i;:::-;31180:155;;:::o;48420:236::-;48527:17;48535:8;48527:7;:17::i;:::-;48513:31;;:10;:31;;;48505:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;48602:8;48576:13;48590:8;48576:23;;;;;;;:::i;:::-;;;:34;;;;;;;;;;;;:::i;:::-;;48626:22;48639:8;48626:22;;;;;;:::i;:::-;;;;;;;;48420:236;;:::o;32303:328::-;32478:41;32497:12;:10;:12::i;:::-;32511:7;32478:18;:41::i;:::-;32470:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32584:39;32598:4;32604:2;32608:7;32617:5;32584:13;:39::i;:::-;32303:328;;;;:::o;44292:45::-;;;;:::o;50111:154::-;50196:13;50234:23;50249:7;50234:14;:23::i;:::-;50227:30;;50111:154;;;:::o;48664:144::-;42790:12;:10;:12::i;:::-;42779:23;;:7;:5;:7::i;:::-;:23;;;42771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48734:28:::1;;;;;;;;;;;::::0;:13:::1;48748:8;48734:23;;;;;;;:::i;:::-;;;:28;;;;;;;;;;;;:::i;:::-;;48778:22;48791:8;48778:22;;;;;;:::i;:::-;;;;;;;;48664:144:::0;:::o;31406:164::-;31503:4;31527:18;:25;31546:5;31527:25;;;;;;;;;;;;;;;:35;31553:8;31527:35;;;;;;;;;;;;;;;;;;;;;;;;;31520:42;;31406:164;;;;:::o;50005:98::-;42790:12;:10;:12::i;:::-;42779:23;;:7;:5;:7::i;:::-;:23;;;42771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50086:9:::1;50072:11;;:23;;;;;;;;;;;;;;;;;;50005:98:::0;:::o;43468:201::-;42790:12;:10;:12::i;:::-;42779:23;;:7;:5;:7::i;:::-;:23;;;42771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43577:1:::1;43557:22;;:8;:22;;;;43549:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43633:28;43652:8;43633:18;:28::i;:::-;43468:201:::0;:::o;49646:99::-;42790:12;:10;:12::i;:::-;42779:23;;:7;:5;:7::i;:::-;:23;;;42771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49728:9:::1;49715:10;:22;;;;49646:99:::0;:::o;18120:157::-;18205:4;18244:25;18229:40;;;:11;:40;;;;18222:47;;18120:157;;;:::o;34141:127::-;34206:4;34258:1;34230:30;;:7;:16;34238:7;34230:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34223:37;;34141:127;;;:::o;26762:98::-;26815:7;26842:10;26835:17;;26762:98;:::o;38287:174::-;38389:2;38362:15;:24;38378:7;38362:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38445:7;38441:2;38407:46;;38416:23;38431:7;38416:14;:23::i;:::-;38407:46;;;;;;;;;;;;38287:174;;:::o;34435:348::-;34528:4;34553:16;34561:7;34553;:16::i;:::-;34545:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34629:13;34645:23;34660:7;34645:14;:23::i;:::-;34629:39;;34698:5;34687:16;;:7;:16;;;:51;;;;34731:7;34707:31;;:20;34719:7;34707:11;:20::i;:::-;:31;;;34687:51;:87;;;;34742:32;34759:5;34766:7;34742:16;:32::i;:::-;34687:87;34679:96;;;34435:348;;;;:::o;37544:625::-;37703:4;37676:31;;:23;37691:7;37676:14;:23::i;:::-;:31;;;37668:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37782:1;37768:16;;:2;:16;;;;37760:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37838:39;37859:4;37865:2;37869:7;37838:20;:39::i;:::-;37942:29;37959:1;37963:7;37942:8;:29::i;:::-;38003:1;37984:9;:15;37994:4;37984:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38032:1;38015:9;:13;38025:2;38015:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38063:2;38044:7;:16;38052:7;38044:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38102:7;38098:2;38083:27;;38092:4;38083:27;;;;;;;;;;;;38123:38;38143:4;38149:2;38153:7;38123:19;:38::i;:::-;37544:625;;;:::o;36119:439::-;36213:1;36199:16;;:2;:16;;;;36191:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36272:16;36280:7;36272;:16::i;:::-;36271:17;36263:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36334:45;36363:1;36367:2;36371:7;36334:20;:45::i;:::-;36409:1;36392:9;:13;36402:2;36392:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36440:2;36421:7;:16;36429:7;36421:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36485:7;36481:2;36460:33;;36477:1;36460:33;;;;;;;;;;;;36506:44;36534:1;36538:2;36542:7;36506:19;:44::i;:::-;36119:439;;:::o;43829:191::-;43903:16;43922:6;;;;;;;;;;;43903:25;;43948:8;43939:6;;:17;;;;;;;;;;;;;;;;;;44003:8;43972:40;;43993:8;43972:40;;;;;;;;;;;;43892:128;43829:191;:::o;38603:315::-;38758:8;38749:17;;:5;:17;;;;38741:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38845:8;38807:18;:25;38826:5;38807:25;;;;;;;;;;;;;;;:35;38833:8;38807:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38891:8;38869:41;;38884:5;38869:41;;;38901:8;38869:41;;;;;;:::i;:::-;;;;;;;;38603:315;;;:::o;33513:::-;33670:28;33680:4;33686:2;33690:7;33670:9;:28::i;:::-;33717:48;33740:4;33746:2;33750:7;33759:5;33717:22;:48::i;:::-;33709:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33513:315;;;;:::o;47435:977::-;47506:13;47532:26;47561:19;47571:8;47561:9;:19::i;:::-;47532:48;;47591:23;47617:16;47626:6;47617:8;:16::i;:::-;47591:42;;47644:25;47672:28;47693:6;47672:20;:28::i;:::-;47644:56;;47711:19;47733:13;47747:8;47733:23;;;;;;;:::i;:::-;;;47711:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47880:498;48025:26;48042:8;48025:16;:26::i;:::-;48207:11;48235:5;48190:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48294:9;47948:388;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47880:13;:498::i;:::-;47795:598;;;;;;;;:::i;:::-;;;;;;;;;;;;;47767:637;;;;;;47435:977;;;:::o;40854:126::-;;;;:::o;41365:125::-;;;;:::o;39483:799::-;39638:4;39659:15;:2;:13;;;:15::i;:::-;39655:620;;;39711:2;39695:36;;;39732:12;:10;:12::i;:::-;39746:4;39752:7;39761:5;39695:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39691:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39954:1;39937:6;:13;:18;39933:272;;;39980:60;;;;;;;;;;:::i;:::-;;;;;;;;39933:272;40155:6;40149:13;40140:6;40136:2;40132:15;40125:38;39691:529;39828:41;;;39818:51;;;:6;:51;;;;39811:58;;;;;39655:620;40259:4;40252:11;;39483:799;;;;;;;:::o;45938:773::-;46008:19;;:::i;:::-;46039:664;;;;;;;;;;;;;;;;46080:34;46090:1;46093:3;46098:8;46080:34;;;;;;;;;;;;;;;;;:7;:34::i;:::-;46039:664;;;;46133:34;46141:3;46146;46151:8;46133:34;;;;;;;;;;;;;;;;;:7;:34::i;:::-;46039:664;;;;46186:34;46196:1;46199:3;46204:8;46186:34;;;;;;;;;;;;;;;;;:7;:34::i;:::-;46039:664;;;;46239:34;46247:3;46252;46257:8;46239:34;;;;;;;;;;;;;;;;;:7;:34::i;:::-;46039:664;;;;;;;;;;;;;;;46308:34;46318:1;46321:3;46326:8;46308:34;;;;;;;;;;;;;;;;;:7;:34::i;:::-;46039:664;;;;46361:34;46369:3;46374;46379:8;46361:34;;;;;;;;;;;;;;;;;:7;:34::i;:::-;46039:664;;;;46414:34;46424:1;46427:3;46432:8;46414:34;;;;;;;;;;;;;;;;;:7;:34::i;:::-;46039:664;;;;46467:34;46475:3;46480;46485:8;46467:34;;;;;;;;;;;;;;;;;:7;:34::i;:::-;46039:664;;;;;;;;;;;;;;;46536:34;46546:1;46550:2;46554:8;46536:34;;;;;;;;;;;;;;;;;:7;:34::i;:::-;46039:664;;;;46590:34;46600:1;46604:2;46608:8;46590:34;;;;;;;;;;;;;;;;;:7;:34::i;:::-;46039:664;;;;46643:34;46653:1;46656:3;46661:8;46643:34;;;;;;;;;;;;;;;;;:7;:34::i;:::-;46039:664;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45938:773;;;:::o;44554:1376::-;44663:13;44704:21;:52;;;;;;;;;;;;;;;;;;;44767:24;44794:1065;45149:6;45156:1;45149:9;;;;;;;:::i;:::-;;;;;;45159:1;45149:12;;;;;;;:::i;:::-;;;;;;45166:6;45173:1;45166:9;;;;;;;:::i;:::-;;;;;;45176:1;45166:12;;;;;;;:::i;:::-;;;;;;45183:6;45190:1;45183:9;;;;;;;:::i;:::-;;;;;;45193:1;45183:12;;;;;;;:::i;:::-;;;;;;45202:6;45209:1;45202:9;;;;;;;:::i;:::-;;;;;;45212:1;45202:12;;;;;;;:::i;:::-;;;;;;45110:212;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45400:6;45407:1;45400:9;;;;;;;:::i;:::-;;;;;;45410:1;45400:12;;;;;;;:::i;:::-;;;;;;45417:6;45424:1;45417:9;;;;;;;:::i;:::-;;;;;;45427:1;45417:12;;;;;;;:::i;:::-;;;;;;45434:6;45441:1;45434:9;;;;;;;:::i;:::-;;;;;;45444:1;45434:12;;;;;;;:::i;:::-;;;;;;45453:6;45460:1;45453:9;;;;;;;:::i;:::-;;;;;;45463:1;45453:12;;;;;;;:::i;:::-;;;;;;45361:214;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45653:6;45660:1;45653:9;;;;;;;:::i;:::-;;;;;;45663:1;45653:12;;;;;;;:::i;:::-;;;;;;45670:6;45677:1;45670:9;;;;;;;:::i;:::-;;;;;;45680:1;45670:12;;;;;;;:::i;:::-;;;;;;45687:6;45694:1;45687:9;;;;;;;:::i;:::-;;;;;;45697:1;45687:12;;;;;;;:::i;:::-;;;;;;45614:207;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44821:1035;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44794:13;:1065::i;:::-;44767:1092;;45901:7;45910:10;45884:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45870:52;;;;44554:1376;;;:::o;46995:432::-;47076:13;47145:6;47152:1;47145:9;;;;;;;:::i;:::-;;;;;;47155:1;47145:12;;;;;;;:::i;:::-;;;;;;47164:6;47171:1;47164:9;;;;;;;:::i;:::-;;;;;;47174:1;47164:12;;;;;;;:::i;:::-;;;;;;47183:6;47190:1;47183:9;;;;;;;:::i;:::-;;;;;;47193:1;47183:12;;;;;;;:::i;:::-;;;;;;47204:6;47211:1;47204:9;;;;;;;:::i;:::-;;;;;;47214:1;47204:12;;;;;;;:::i;:::-;;;;;;47250:6;47257:1;47250:9;;;;;;;:::i;:::-;;;;;;47260:1;47250:12;;;;;;;:::i;:::-;;;;;;47269:6;47276:1;47269:9;;;;;;;:::i;:::-;;;;;;47279:1;47269:12;;;;;;;:::i;:::-;;;;;;47288:6;47295:1;47288:9;;;;;;;:::i;:::-;;;;;;47298:1;47288:12;;;;;;;:::i;:::-;;;;;;47309:6;47316:1;47309:9;;;;;;;:::i;:::-;;;;;;47319:1;47309:12;;;;;;;:::i;:::-;;;;;;47355:6;47362:1;47355:9;;;;;;;:::i;:::-;;;;;;47365:1;47355:12;;;;;;;:::i;:::-;;;;;;47374:6;47381:1;47374:9;;;;;;;:::i;:::-;;;;;;47384:1;47374:12;;;;;;;:::i;:::-;;;;;;47393:6;47400:1;47393:9;;;;;;;:::i;:::-;;;;;;47403:1;47393:12;;;;;;;:::i;:::-;;;;;;47116:302;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47102:317;;46995:432;;;:::o;24324:723::-;24380:13;24610:1;24601:5;:10;24597:53;;;24628:10;;;;;;;;;;;;;;;;;;;;;24597:53;24660:12;24675:5;24660:20;;24691:14;24716:78;24731:1;24723:4;:9;24716:78;;24749:8;;;;;:::i;:::-;;;;24780:2;24772:10;;;;;:::i;:::-;;;24716:78;;;24804:19;24836:6;24826:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24804:39;;24854:154;24870:1;24861:5;:10;24854:154;;24898:1;24888:11;;;;;:::i;:::-;;;24965:2;24957:5;:10;;;;:::i;:::-;24944:2;:24;;;;:::i;:::-;24931:39;;24914:6;24921;24914:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;24994:2;24985:11;;;;;:::i;:::-;;;24854:154;;;25032:6;25018:21;;;;;24324:723;;;;:::o;2638:1912::-;2696:13;2741:1;2726:4;:11;:16;2722:31;;;2744:9;;;;;;;;;;;;;;;;2722:31;2805:19;2827:12;;;;;;;;;;;;;;;;;2805:34;;2891:18;2937:1;2932;2918:4;:11;:15;;;;:::i;:::-;2917:21;;;;:::i;:::-;2912:1;:27;;;;:::i;:::-;2891:48;;3022:20;3069:2;3056:10;:15;;;;:::i;:::-;3045:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3022:50;;3169:10;3161:6;3154:26;3264:1;3257:5;3253:13;3323:4;3374;3368:11;3359:7;3355:25;3470:2;3462:6;3458:15;3543:754;3562:6;3553:7;3550:19;3543:754;;;3662:1;3653:7;3649:15;3638:26;;3701:7;3695:14;3827:4;3819:5;3815:2;3811:14;3807:25;3797:8;3793:40;3787:47;3776:9;3768:67;3881:1;3870:9;3866:17;3853:30;;3960:4;3952:5;3948:2;3944:14;3940:25;3930:8;3926:40;3920:47;3909:9;3901:67;4014:1;4003:9;3999:17;3986:30;;4093:4;4085:5;4082:1;4077:14;4073:25;4063:8;4059:40;4053:47;4042:9;4034:67;4147:1;4136:9;4132:17;4119:30;;4226:4;4218:5;4206:25;4196:8;4192:40;4186:47;4175:9;4167:67;4280:1;4269:9;4265:17;4252:30;;3586:711;3543:754;;;4370:1;4363:4;4357:11;4353:19;4391:1;4386:54;;;;4459:1;4454:52;;;;4346:160;;4386:54;4430:6;4425:3;4421:16;4417:1;4406:9;4402:17;4395:43;4386:54;;4454:52;4498:4;4493:3;4489:14;4485:1;4474:9;4470:17;4463:41;4346:160;;3094:1423;;;;4536:6;4529:13;;;;;2638:1912;;;;:::o;8037:326::-;8097:4;8354:1;8332:7;:19;;;:23;8325:30;;8037:326;;;:::o;46719:268::-;46852:13;46885:94;46973:3;46969;:7;;;;:::i;:::-;46944:4;46955:7;46927:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46917:47;;;;;;46909:56;;:68;;;;:::i;:::-;46902:3;:76;;;;:::i;:::-;46885:16;:94::i;:::-;46878:101;;46719:268;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:654::-;8099:6;8107;8156:2;8144:9;8135:7;8131:23;8127:32;8124:119;;;8162:79;;:::i;:::-;8124:119;8310:1;8299:9;8295:17;8282:31;8340:18;8332:6;8329:30;8326:117;;;8362:79;;:::i;:::-;8326:117;8467:63;8522:7;8513:6;8502:9;8498:22;8467:63;:::i;:::-;8457:73;;8253:287;8579:2;8605:53;8650:7;8641:6;8630:9;8626:22;8605:53;:::i;:::-;8595:63;;8550:118;8021:654;;;;;:::o;8681:104::-;8726:7;8755:24;8773:5;8755:24;:::i;:::-;8744:35;;8681:104;;;:::o;8791:138::-;8872:32;8898:5;8872:32;:::i;:::-;8865:5;8862:43;8852:71;;8919:1;8916;8909:12;8852:71;8791:138;:::o;8935:155::-;8989:5;9027:6;9014:20;9005:29;;9043:41;9078:5;9043:41;:::i;:::-;8935:155;;;;:::o;9096:345::-;9163:6;9212:2;9200:9;9191:7;9187:23;9183:32;9180:119;;;9218:79;;:::i;:::-;9180:119;9338:1;9363:61;9416:7;9407:6;9396:9;9392:22;9363:61;:::i;:::-;9353:71;;9309:125;9096:345;;;;:::o;9447:329::-;9506:6;9555:2;9543:9;9534:7;9530:23;9526:32;9523:119;;;9561:79;;:::i;:::-;9523:119;9681:1;9706:53;9751:7;9742:6;9731:9;9727:22;9706:53;:::i;:::-;9696:63;;9652:117;9447:329;;;;:::o;9782:116::-;9852:21;9867:5;9852:21;:::i;:::-;9845:5;9842:32;9832:60;;9888:1;9885;9878:12;9832:60;9782:116;:::o;9904:133::-;9947:5;9985:6;9972:20;9963:29;;10001:30;10025:5;10001:30;:::i;:::-;9904:133;;;;:::o;10043:468::-;10108:6;10116;10165:2;10153:9;10144:7;10140:23;10136:32;10133:119;;;10171:79;;:::i;:::-;10133:119;10291:1;10316:53;10361:7;10352:6;10341:9;10337:22;10316:53;:::i;:::-;10306:63;;10262:117;10418:2;10444:50;10486:7;10477:6;10466:9;10462:22;10444:50;:::i;:::-;10434:60;;10389:115;10043:468;;;;;:::o;10517:654::-;10595:6;10603;10652:2;10640:9;10631:7;10627:23;10623:32;10620:119;;;10658:79;;:::i;:::-;10620:119;10778:1;10803:53;10848:7;10839:6;10828:9;10824:22;10803:53;:::i;:::-;10793:63;;10749:117;10933:2;10922:9;10918:18;10905:32;10964:18;10956:6;10953:30;10950:117;;;10986:79;;:::i;:::-;10950:117;11091:63;11146:7;11137:6;11126:9;11122:22;11091:63;:::i;:::-;11081:73;;10876:288;10517:654;;;;;:::o;11177:307::-;11238:4;11328:18;11320:6;11317:30;11314:56;;;11350:18;;:::i;:::-;11314:56;11388:29;11410:6;11388:29;:::i;:::-;11380:37;;11472:4;11466;11462:15;11454:23;;11177:307;;;:::o;11490:410::-;11567:5;11592:65;11608:48;11649:6;11608:48;:::i;:::-;11592:65;:::i;:::-;11583:74;;11680:6;11673:5;11666:21;11718:4;11711:5;11707:16;11756:3;11747:6;11742:3;11738:16;11735:25;11732:112;;;11763:79;;:::i;:::-;11732:112;11853:41;11887:6;11882:3;11877;11853:41;:::i;:::-;11573:327;11490:410;;;;;:::o;11919:338::-;11974:5;12023:3;12016:4;12008:6;12004:17;12000:27;11990:122;;12031:79;;:::i;:::-;11990:122;12148:6;12135:20;12173:78;12247:3;12239:6;12232:4;12224:6;12220:17;12173:78;:::i;:::-;12164:87;;11980:277;11919:338;;;;:::o;12263:943::-;12358:6;12366;12374;12382;12431:3;12419:9;12410:7;12406:23;12402:33;12399:120;;;12438:79;;:::i;:::-;12399:120;12558:1;12583:53;12628:7;12619:6;12608:9;12604:22;12583:53;:::i;:::-;12573:63;;12529:117;12685:2;12711:53;12756:7;12747:6;12736:9;12732:22;12711:53;:::i;:::-;12701:63;;12656:118;12813:2;12839:53;12884:7;12875:6;12864:9;12860:22;12839:53;:::i;:::-;12829:63;;12784:118;12969:2;12958:9;12954:18;12941:32;13000:18;12992:6;12989:30;12986:117;;;13022:79;;:::i;:::-;12986:117;13127:62;13181:7;13172:6;13161:9;13157:22;13127:62;:::i;:::-;13117:72;;12912:287;12263:943;;;;;;;:::o;13212:474::-;13280:6;13288;13337:2;13325:9;13316:7;13312:23;13308:32;13305:119;;;13343:79;;:::i;:::-;13305:119;13463:1;13488:53;13533:7;13524:6;13513:9;13509:22;13488:53;:::i;:::-;13478:63;;13434:117;13590:2;13616:53;13661:7;13652:6;13641:9;13637:22;13616:53;:::i;:::-;13606:63;;13561:118;13212:474;;;;;:::o;13692:323::-;13748:6;13797:2;13785:9;13776:7;13772:23;13768:32;13765:119;;;13803:79;;:::i;:::-;13765:119;13923:1;13948:50;13990:7;13981:6;13970:9;13966:22;13948:50;:::i;:::-;13938:60;;13894:114;13692:323;;;;:::o;14021:180::-;14069:77;14066:1;14059:88;14166:4;14163:1;14156:15;14190:4;14187:1;14180:15;14207:320;14251:6;14288:1;14282:4;14278:12;14268:22;;14335:1;14329:4;14325:12;14356:18;14346:81;;14412:4;14404:6;14400:17;14390:27;;14346:81;14474:2;14466:6;14463:14;14443:18;14440:38;14437:84;;;14493:18;;:::i;:::-;14437:84;14258:269;14207:320;;;:::o;14533:231::-;14673:34;14669:1;14661:6;14657:14;14650:58;14742:14;14737:2;14729:6;14725:15;14718:39;14533:231;:::o;14770:366::-;14912:3;14933:67;14997:2;14992:3;14933:67;:::i;:::-;14926:74;;15009:93;15098:3;15009:93;:::i;:::-;15127:2;15122:3;15118:12;15111:19;;14770:366;;;:::o;15142:419::-;15308:4;15346:2;15335:9;15331:18;15323:26;;15395:9;15389:4;15385:20;15381:1;15370:9;15366:17;15359:47;15423:131;15549:4;15423:131;:::i;:::-;15415:139;;15142:419;;;:::o;15567:220::-;15707:34;15703:1;15695:6;15691:14;15684:58;15776:3;15771:2;15763:6;15759:15;15752:28;15567:220;:::o;15793:366::-;15935:3;15956:67;16020:2;16015:3;15956:67;:::i;:::-;15949:74;;16032:93;16121:3;16032:93;:::i;:::-;16150:2;16145:3;16141:12;16134:19;;15793:366;;;:::o;16165:419::-;16331:4;16369:2;16358:9;16354:18;16346:26;;16418:9;16412:4;16408:20;16404:1;16393:9;16389:17;16382:47;16446:131;16572:4;16446:131;:::i;:::-;16438:139;;16165:419;;;:::o;16590:243::-;16730:34;16726:1;16718:6;16714:14;16707:58;16799:26;16794:2;16786:6;16782:15;16775:51;16590:243;:::o;16839:366::-;16981:3;17002:67;17066:2;17061:3;17002:67;:::i;:::-;16995:74;;17078:93;17167:3;17078:93;:::i;:::-;17196:2;17191:3;17187:12;17180:19;;16839:366;;;:::o;17211:419::-;17377:4;17415:2;17404:9;17400:18;17392:26;;17464:9;17458:4;17454:20;17450:1;17439:9;17435:17;17428:47;17492:131;17618:4;17492:131;:::i;:::-;17484:139;;17211:419;;;:::o;17636:236::-;17776:34;17772:1;17764:6;17760:14;17753:58;17845:19;17840:2;17832:6;17828:15;17821:44;17636:236;:::o;17878:366::-;18020:3;18041:67;18105:2;18100:3;18041:67;:::i;:::-;18034:74;;18117:93;18206:3;18117:93;:::i;:::-;18235:2;18230:3;18226:12;18219:19;;17878:366;;;:::o;18250:419::-;18416:4;18454:2;18443:9;18439:18;18431:26;;18503:9;18497:4;18493:20;18489:1;18478:9;18474:17;18467:47;18531:131;18657:4;18531:131;:::i;:::-;18523:139;;18250:419;;;:::o;18675:165::-;18815:17;18811:1;18803:6;18799:14;18792:41;18675:165;:::o;18846:366::-;18988:3;19009:67;19073:2;19068:3;19009:67;:::i;:::-;19002:74;;19085:93;19174:3;19085:93;:::i;:::-;19203:2;19198:3;19194:12;19187:19;;18846:366;;;:::o;19218:419::-;19384:4;19422:2;19411:9;19407:18;19399:26;;19471:9;19465:4;19461:20;19457:1;19446:9;19442:17;19435:47;19499:131;19625:4;19499:131;:::i;:::-;19491:139;;19218:419;;;:::o;19643:164::-;19783:16;19779:1;19771:6;19767:14;19760:40;19643:164;:::o;19813:366::-;19955:3;19976:67;20040:2;20035:3;19976:67;:::i;:::-;19969:74;;20052:93;20141:3;20052:93;:::i;:::-;20170:2;20165:3;20161:12;20154:19;;19813:366;;;:::o;20185:419::-;20351:4;20389:2;20378:9;20374:18;20366:26;;20438:9;20432:4;20428:20;20424:1;20413:9;20409:17;20402:47;20466:131;20592:4;20466:131;:::i;:::-;20458:139;;20185:419;;;:::o;20610:160::-;20750:12;20746:1;20738:6;20734:14;20727:36;20610:160;:::o;20776:366::-;20918:3;20939:67;21003:2;20998:3;20939:67;:::i;:::-;20932:74;;21015:93;21104:3;21015:93;:::i;:::-;21133:2;21128:3;21124:12;21117:19;;20776:366;;;:::o;21148:419::-;21314:4;21352:2;21341:9;21337:18;21329:26;;21401:9;21395:4;21391:20;21387:1;21376:9;21372:17;21365:47;21429:131;21555:4;21429:131;:::i;:::-;21421:139;;21148:419;;;:::o;21573:180::-;21621:77;21618:1;21611:88;21718:4;21715:1;21708:15;21742:4;21739:1;21732:15;21759:305;21799:3;21818:20;21836:1;21818:20;:::i;:::-;21813:25;;21852:20;21870:1;21852:20;:::i;:::-;21847:25;;22006:1;21938:66;21934:74;21931:1;21928:81;21925:107;;;22012:18;;:::i;:::-;21925:107;22056:1;22053;22049:9;22042:16;;21759:305;;;;:::o;22070:168::-;22210:20;22206:1;22198:6;22194:14;22187:44;22070:168;:::o;22244:366::-;22386:3;22407:67;22471:2;22466:3;22407:67;:::i;:::-;22400:74;;22483:93;22572:3;22483:93;:::i;:::-;22601:2;22596:3;22592:12;22585:19;;22244:366;;;:::o;22616:419::-;22782:4;22820:2;22809:9;22805:18;22797:26;;22869:9;22863:4;22859:20;22855:1;22844:9;22840:17;22833:47;22897:131;23023:4;22897:131;:::i;:::-;22889:139;;22616:419;;;:::o;23041:348::-;23081:7;23104:20;23122:1;23104:20;:::i;:::-;23099:25;;23138:20;23156:1;23138:20;:::i;:::-;23133:25;;23326:1;23258:66;23254:74;23251:1;23248:81;23243:1;23236:9;23229:17;23225:105;23222:131;;;23333:18;;:::i;:::-;23222:131;23381:1;23378;23374:9;23363:20;;23041:348;;;;:::o;23395:169::-;23535:21;23531:1;23523:6;23519:14;23512:45;23395:169;:::o;23570:366::-;23712:3;23733:67;23797:2;23792:3;23733:67;:::i;:::-;23726:74;;23809:93;23898:3;23809:93;:::i;:::-;23927:2;23922:3;23918:12;23911:19;;23570:366;;;:::o;23942:419::-;24108:4;24146:2;24135:9;24131:18;24123:26;;24195:9;24189:4;24185:20;24181:1;24170:9;24166:17;24159:47;24223:131;24349:4;24223:131;:::i;:::-;24215:139;;23942:419;;;:::o;24367:180::-;24415:77;24412:1;24405:88;24512:4;24509:1;24502:15;24536:4;24533:1;24526:15;24553:233;24592:3;24615:24;24633:5;24615:24;:::i;:::-;24606:33;;24661:66;24654:5;24651:77;24648:103;;;24731:18;;:::i;:::-;24648:103;24778:1;24771:5;24767:13;24760:20;;24553:233;;;:::o;24792:182::-;24932:34;24928:1;24920:6;24916:14;24909:58;24792:182;:::o;24980:366::-;25122:3;25143:67;25207:2;25202:3;25143:67;:::i;:::-;25136:74;;25219:93;25308:3;25219:93;:::i;:::-;25337:2;25332:3;25328:12;25321:19;;24980:366;;;:::o;25352:419::-;25518:4;25556:2;25545:9;25541:18;25533:26;;25605:9;25599:4;25595:20;25591:1;25580:9;25576:17;25569:47;25633:131;25759:4;25633:131;:::i;:::-;25625:139;;25352:419;;;:::o;25777:228::-;25917:34;25913:1;25905:6;25901:14;25894:58;25986:11;25981:2;25973:6;25969:15;25962:36;25777:228;:::o;26011:366::-;26153:3;26174:67;26238:2;26233:3;26174:67;:::i;:::-;26167:74;;26250:93;26339:3;26250:93;:::i;:::-;26368:2;26363:3;26359:12;26352:19;;26011:366;;;:::o;26383:419::-;26549:4;26587:2;26576:9;26572:18;26564:26;;26636:9;26630:4;26626:20;26622:1;26611:9;26607:17;26600:47;26664:131;26790:4;26664:131;:::i;:::-;26656:139;;26383:419;;;:::o;26808:229::-;26948:34;26944:1;26936:6;26932:14;26925:58;27017:12;27012:2;27004:6;27000:15;26993:37;26808:229;:::o;27043:366::-;27185:3;27206:67;27270:2;27265:3;27206:67;:::i;:::-;27199:74;;27282:93;27371:3;27282:93;:::i;:::-;27400:2;27395:3;27391:12;27384:19;;27043:366;;;:::o;27415:419::-;27581:4;27619:2;27608:9;27604:18;27596:26;;27668:9;27662:4;27658:20;27654:1;27643:9;27639:17;27632:47;27696:131;27822:4;27696:131;:::i;:::-;27688:139;;27415:419;;;:::o;27840:166::-;27980:18;27976:1;27968:6;27964:14;27957:42;27840:166;:::o;28012:366::-;28154:3;28175:67;28239:2;28234:3;28175:67;:::i;:::-;28168:74;;28251:93;28340:3;28251:93;:::i;:::-;28369:2;28364:3;28360:12;28353:19;;28012:366;;;:::o;28384:419::-;28550:4;28588:2;28577:9;28573:18;28565:26;;28637:9;28631:4;28627:20;28623:1;28612:9;28608:17;28601:47;28665:131;28791:4;28665:131;:::i;:::-;28657:139;;28384:419;;;:::o;28809:225::-;28949:34;28945:1;28937:6;28933:14;28926:58;29018:8;29013:2;29005:6;29001:15;28994:33;28809:225;:::o;29040:366::-;29182:3;29203:67;29267:2;29262:3;29203:67;:::i;:::-;29196:74;;29279:93;29368:3;29279:93;:::i;:::-;29397:2;29392:3;29388:12;29381:19;;29040:366;;;:::o;29412:419::-;29578:4;29616:2;29605:9;29601:18;29593:26;;29665:9;29659:4;29655:20;29651:1;29640:9;29636:17;29629:47;29693:131;29819:4;29693:131;:::i;:::-;29685:139;;29412:419;;;:::o;29837:231::-;29977:34;29973:1;29965:6;29961:14;29954:58;30046:14;30041:2;30033:6;30029:15;30022:39;29837:231;:::o;30074:366::-;30216:3;30237:67;30301:2;30296:3;30237:67;:::i;:::-;30230:74;;30313:93;30402:3;30313:93;:::i;:::-;30431:2;30426:3;30422:12;30415:19;;30074:366;;;:::o;30446:419::-;30612:4;30650:2;30639:9;30635:18;30627:26;;30699:9;30693:4;30689:20;30685:1;30674:9;30670:17;30663:47;30727:131;30853:4;30727:131;:::i;:::-;30719:139;;30446:419;;;:::o;30871:224::-;31011:34;31007:1;30999:6;30995:14;30988:58;31080:7;31075:2;31067:6;31063:15;31056:32;30871:224;:::o;31101:366::-;31243:3;31264:67;31328:2;31323:3;31264:67;:::i;:::-;31257:74;;31340:93;31429:3;31340:93;:::i;:::-;31458:2;31453:3;31449:12;31442:19;;31101:366;;;:::o;31473:419::-;31639:4;31677:2;31666:9;31662:18;31654:26;;31726:9;31720:4;31716:20;31712:1;31701:9;31697:17;31690:47;31754:131;31880:4;31754:131;:::i;:::-;31746:139;;31473:419;;;:::o;31898:223::-;32038:34;32034:1;32026:6;32022:14;32015:58;32107:6;32102:2;32094:6;32090:15;32083:31;31898:223;:::o;32127:366::-;32269:3;32290:67;32354:2;32349:3;32290:67;:::i;:::-;32283:74;;32366:93;32455:3;32366:93;:::i;:::-;32484:2;32479:3;32475:12;32468:19;;32127:366;;;:::o;32499:419::-;32665:4;32703:2;32692:9;32688:18;32680:26;;32752:9;32746:4;32742:20;32738:1;32727:9;32723:17;32716:47;32780:131;32906:4;32780:131;:::i;:::-;32772:139;;32499:419;;;:::o;32924:191::-;32964:4;32984:20;33002:1;32984:20;:::i;:::-;32979:25;;33018:20;33036:1;33018:20;:::i;:::-;33013:25;;33057:1;33054;33051:8;33048:34;;;33062:18;;:::i;:::-;33048:34;33107:1;33104;33100:9;33092:17;;32924:191;;;;:::o;33121:182::-;33261:34;33257:1;33249:6;33245:14;33238:58;33121:182;:::o;33309:366::-;33451:3;33472:67;33536:2;33531:3;33472:67;:::i;:::-;33465:74;;33548:93;33637:3;33548:93;:::i;:::-;33666:2;33661:3;33657:12;33650:19;;33309:366;;;:::o;33681:419::-;33847:4;33885:2;33874:9;33870:18;33862:26;;33934:9;33928:4;33924:20;33920:1;33909:9;33905:17;33898:47;33962:131;34088:4;33962:131;:::i;:::-;33954:139;;33681:419;;;:::o;34106:178::-;34246:30;34242:1;34234:6;34230:14;34223:54;34106:178;:::o;34290:366::-;34432:3;34453:67;34517:2;34512:3;34453:67;:::i;:::-;34446:74;;34529:93;34618:3;34529:93;:::i;:::-;34647:2;34642:3;34638:12;34631:19;;34290:366;;;:::o;34662:419::-;34828:4;34866:2;34855:9;34851:18;34843:26;;34915:9;34909:4;34905:20;34901:1;34890:9;34886:17;34879:47;34943:131;35069:4;34943:131;:::i;:::-;34935:139;;34662:419;;;:::o;35087:175::-;35227:27;35223:1;35215:6;35211:14;35204:51;35087:175;:::o;35268:366::-;35410:3;35431:67;35495:2;35490:3;35431:67;:::i;:::-;35424:74;;35507:93;35596:3;35507:93;:::i;:::-;35625:2;35620:3;35616:12;35609:19;;35268:366;;;:::o;35640:419::-;35806:4;35844:2;35833:9;35829:18;35821:26;;35893:9;35887:4;35883:20;35879:1;35868:9;35864:17;35857:47;35921:131;36047:4;35921:131;:::i;:::-;35913:139;;35640:419;;;:::o;36065:237::-;36205:34;36201:1;36193:6;36189:14;36182:58;36274:20;36269:2;36261:6;36257:15;36250:45;36065:237;:::o;36308:366::-;36450:3;36471:67;36535:2;36530:3;36471:67;:::i;:::-;36464:74;;36547:93;36636:3;36547:93;:::i;:::-;36665:2;36660:3;36656:12;36649:19;;36308:366;;;:::o;36680:419::-;36846:4;36884:2;36873:9;36869:18;36861:26;;36933:9;36927:4;36923:20;36919:1;36908:9;36904:17;36897:47;36961:131;37087:4;36961:131;:::i;:::-;36953:139;;36680:419;;;:::o;37105:148::-;37207:11;37244:3;37229:18;;37105:148;;;;:::o;37259:377::-;37365:3;37393:39;37426:5;37393:39;:::i;:::-;37448:89;37530:6;37525:3;37448:89;:::i;:::-;37441:96;;37546:52;37591:6;37586:3;37579:4;37572:5;37568:16;37546:52;:::i;:::-;37623:6;37618:3;37614:16;37607:23;;37369:267;37259:377;;;;:::o;37642:214::-;37782:66;37778:1;37770:6;37766:14;37759:90;37642:214;:::o;37862:402::-;38022:3;38043:85;38125:2;38120:3;38043:85;:::i;:::-;38036:92;;38137:93;38226:3;38137:93;:::i;:::-;38255:2;38250:3;38246:12;38239:19;;37862:402;;;:::o;38270:214::-;38410:66;38406:1;38398:6;38394:14;38387:90;38270:214;:::o;38490:400::-;38650:3;38671:84;38753:1;38748:3;38671:84;:::i;:::-;38664:91;;38764:93;38853:3;38764:93;:::i;:::-;38882:1;38877:3;38873:11;38866:18;;38490:400;;;:::o;38896:967::-;39278:3;39300:95;39391:3;39382:6;39300:95;:::i;:::-;39293:102;;39412:148;39556:3;39412:148;:::i;:::-;39405:155;;39577:95;39668:3;39659:6;39577:95;:::i;:::-;39570:102;;39689:148;39833:3;39689:148;:::i;:::-;39682:155;;39854:3;39847:10;;38896:967;;;;;:::o;39869:214::-;40009:66;40005:1;39997:6;39993:14;39986:90;39869:214;:::o;40089:400::-;40249:3;40270:84;40352:1;40347:3;40270:84;:::i;:::-;40263:91;;40363:93;40452:3;40363:93;:::i;:::-;40481:1;40476:3;40472:11;40465:18;;40089:400;;;:::o;40495:163::-;40635:15;40631:1;40623:6;40619:14;40612:39;40495:163;:::o;40664:402::-;40824:3;40845:85;40927:2;40922:3;40845:85;:::i;:::-;40838:92;;40939:93;41028:3;40939:93;:::i;:::-;41057:2;41052:3;41048:12;41041:19;;40664:402;;;:::o;41072:315::-;41212:66;41208:1;41200:6;41196:14;41189:90;41313:66;41308:2;41300:6;41296:15;41289:91;41072:315;:::o;41393:402::-;41553:3;41574:85;41656:2;41651:3;41574:85;:::i;:::-;41567:92;;41668:93;41757:3;41668:93;:::i;:::-;41786:2;41781:3;41777:12;41770:19;;41393:402;;;:::o;41801:214::-;41941:66;41937:1;41929:6;41925:14;41918:90;41801:214;:::o;42021:402::-;42181:3;42202:85;42284:2;42279:3;42202:85;:::i;:::-;42195:92;;42296:93;42385:3;42296:93;:::i;:::-;42414:2;42409:3;42405:12;42398:19;;42021:402;;;:::o;42429:214::-;42569:66;42565:1;42557:6;42553:14;42546:90;42429:214;:::o;42649:402::-;42809:3;42830:85;42912:2;42907:3;42830:85;:::i;:::-;42823:92;;42924:93;43013:3;42924:93;:::i;:::-;43042:2;43037:3;43033:12;43026:19;;42649:402;;;:::o;43057:2191::-;43891:3;43913:148;44057:3;43913:148;:::i;:::-;43906:155;;44078:148;44222:3;44078:148;:::i;:::-;44071:155;;44243:95;44334:3;44325:6;44243:95;:::i;:::-;44236:102;;44355:148;44499:3;44355:148;:::i;:::-;44348:155;;44520:148;44664:3;44520:148;:::i;:::-;44513:155;;44685:95;44776:3;44767:6;44685:95;:::i;:::-;44678:102;;44797:148;44941:3;44797:148;:::i;:::-;44790:155;;44962:95;45053:3;45044:6;44962:95;:::i;:::-;44955:102;;45074:148;45218:3;45074:148;:::i;:::-;45067:155;;45239:3;45232:10;;43057:2191;;;;;;:::o;45254:179::-;45394:31;45390:1;45382:6;45378:14;45371:55;45254:179;:::o;45439:402::-;45599:3;45620:85;45702:2;45697:3;45620:85;:::i;:::-;45613:92;;45714:93;45803:3;45714:93;:::i;:::-;45832:2;45827:3;45823:12;45816:19;;45439:402;;;:::o;45847:541::-;46080:3;46102:148;46246:3;46102:148;:::i;:::-;46095:155;;46267:95;46358:3;46349:6;46267:95;:::i;:::-;46260:102;;46379:3;46372:10;;45847:541;;;;:::o;46394:98::-;46445:6;46479:5;46473:12;46463:22;;46394:98;;;:::o;46498:168::-;46581:11;46615:6;46610:3;46603:19;46655:4;46650:3;46646:14;46631:29;;46498:168;;;;:::o;46672:360::-;46758:3;46786:38;46818:5;46786:38;:::i;:::-;46840:70;46903:6;46898:3;46840:70;:::i;:::-;46833:77;;46919:52;46964:6;46959:3;46952:4;46945:5;46941:16;46919:52;:::i;:::-;46996:29;47018:6;46996:29;:::i;:::-;46991:3;46987:39;46980:46;;46762:270;46672:360;;;;:::o;47038:640::-;47233:4;47271:3;47260:9;47256:19;47248:27;;47285:71;47353:1;47342:9;47338:17;47329:6;47285:71;:::i;:::-;47366:72;47434:2;47423:9;47419:18;47410:6;47366:72;:::i;:::-;47448;47516:2;47505:9;47501:18;47492:6;47448:72;:::i;:::-;47567:9;47561:4;47557:20;47552:2;47541:9;47537:18;47530:48;47595:76;47666:4;47657:6;47595:76;:::i;:::-;47587:84;;47038:640;;;;;;;:::o;47684:141::-;47740:5;47771:6;47765:13;47756:22;;47787:32;47813:5;47787:32;:::i;:::-;47684:141;;;;:::o;47831:349::-;47900:6;47949:2;47937:9;47928:7;47924:23;47920:32;47917:119;;;47955:79;;:::i;:::-;47917:119;48075:1;48100:63;48155:7;48146:6;48135:9;48131:22;48100:63;:::i;:::-;48090:73;;48046:127;47831:349;;;;:::o;48186:214::-;48326:66;48322:1;48314:6;48310:14;48303:90;48186:214;:::o;48406:402::-;48566:3;48587:85;48669:2;48664:3;48587:85;:::i;:::-;48580:92;;48681:93;48770:3;48681:93;:::i;:::-;48799:2;48794:3;48790:12;48783:19;;48406:402;;;:::o;48814:151::-;48954:3;48950:1;48942:6;48938:14;48931:27;48814:151;:::o;48971:400::-;49131:3;49152:84;49234:1;49229:3;49152:84;:::i;:::-;49145:91;;49245:93;49334:3;49245:93;:::i;:::-;49363:1;49358:3;49354:11;49347:18;;48971:400;;;:::o;49377:153::-;49517:5;49513:1;49505:6;49501:14;49494:29;49377:153;:::o;49536:400::-;49696:3;49717:84;49799:1;49794:3;49717:84;:::i;:::-;49710:91;;49810:93;49899:3;49810:93;:::i;:::-;49928:1;49923:3;49919:11;49912:18;;49536:400;;;:::o;49942:315::-;50082:66;50078:1;50070:6;50066:14;50059:90;50183:66;50178:2;50170:6;50166:15;50159:91;49942:315;:::o;50263:402::-;50423:3;50444:85;50526:2;50521:3;50444:85;:::i;:::-;50437:92;;50538:93;50627:3;50538:93;:::i;:::-;50656:2;50651:3;50647:12;50640:19;;50263:402;;;:::o;50671:2085::-;51452:3;51474:148;51618:3;51474:148;:::i;:::-;51467:155;;51639:95;51730:3;51721:6;51639:95;:::i;:::-;51632:102;;51751:148;51895:3;51751:148;:::i;:::-;51744:155;;51916:95;52007:3;51998:6;51916:95;:::i;:::-;51909:102;;52028:148;52172:3;52028:148;:::i;:::-;52021:155;;52193:95;52284:3;52275:6;52193:95;:::i;:::-;52186:102;;52305:148;52449:3;52305:148;:::i;:::-;52298:155;;52470:95;52561:3;52552:6;52470:95;:::i;:::-;52463:102;;52582:148;52726:3;52582:148;:::i;:::-;52575:155;;52747:3;52740:10;;50671:2085;;;;;;;:::o;52762:315::-;52902:66;52898:1;52890:6;52886:14;52879:90;53003:66;52998:2;52990:6;52986:15;52979:91;52762:315;:::o;53083:402::-;53243:3;53264:85;53346:2;53341:3;53264:85;:::i;:::-;53257:92;;53358:93;53447:3;53358:93;:::i;:::-;53476:2;53471:3;53467:12;53460:19;;53083:402;;;:::o;53491:2085::-;54272:3;54294:148;54438:3;54294:148;:::i;:::-;54287:155;;54459:95;54550:3;54541:6;54459:95;:::i;:::-;54452:102;;54571:148;54715:3;54571:148;:::i;:::-;54564:155;;54736:95;54827:3;54818:6;54736:95;:::i;:::-;54729:102;;54848:148;54992:3;54848:148;:::i;:::-;54841:155;;55013:95;55104:3;55095:6;55013:95;:::i;:::-;55006:102;;55125:148;55269:3;55125:148;:::i;:::-;55118:155;;55290:95;55381:3;55372:6;55290:95;:::i;:::-;55283:102;;55402:148;55546:3;55402:148;:::i;:::-;55395:155;;55567:3;55560:10;;53491:2085;;;;;;;:::o;55582:152::-;55722:4;55718:1;55710:6;55706:14;55699:28;55582:152;:::o;55740:400::-;55900:3;55921:84;56003:1;55998:3;55921:84;:::i;:::-;55914:91;;56014:93;56103:3;56014:93;:::i;:::-;56132:1;56127:3;56123:11;56116:18;;55740:400;;;:::o;56146:315::-;56286:66;56282:1;56274:6;56270:14;56263:90;56387:66;56382:2;56374:6;56370:15;56363:91;56146:315;:::o;56467:402::-;56627:3;56648:85;56730:2;56725:3;56648:85;:::i;:::-;56641:92;;56742:93;56831:3;56742:93;:::i;:::-;56860:2;56855:3;56851:12;56844:19;;56467:402;;;:::o;56875:1925::-;57608:3;57630:148;57774:3;57630:148;:::i;:::-;57623:155;;57795:95;57886:3;57877:6;57795:95;:::i;:::-;57788:102;;57907:148;58051:3;57907:148;:::i;:::-;57900:155;;58072:95;58163:3;58154:6;58072:95;:::i;:::-;58065:102;;58184:148;58328:3;58184:148;:::i;:::-;58177:155;;58349:95;58440:3;58431:6;58349:95;:::i;:::-;58342:102;;58461:148;58605:3;58461:148;:::i;:::-;58454:155;;58626:148;58770:3;58626:148;:::i;:::-;58619:155;;58791:3;58784:10;;56875:1925;;;;;;:::o;58806:353::-;58946:66;58942:1;58934:6;58930:14;58923:90;59047:66;59042:2;59034:6;59030:15;59023:91;59148:3;59143:2;59135:6;59131:15;59124:28;58806:353;:::o;59165:402::-;59325:3;59346:85;59428:2;59423:3;59346:85;:::i;:::-;59339:92;;59440:93;59529:3;59440:93;:::i;:::-;59558:2;59553:3;59549:12;59542:19;;59165:402;;;:::o;59573:416::-;59713:66;59709:1;59701:6;59697:14;59690:90;59814:66;59809:2;59801:6;59797:15;59790:91;59915:66;59910:2;59902:6;59898:15;59891:91;59573:416;:::o;59995:402::-;60155:3;60176:85;60258:2;60253:3;60176:85;:::i;:::-;60169:92;;60270:93;60359:3;60270:93;:::i;:::-;60388:2;60383:3;60379:12;60372:19;;59995:402;;;:::o;60403:147::-;60504:11;60541:3;60526:18;;60403:147;;;;:::o;60556:373::-;60660:3;60688:38;60720:5;60688:38;:::i;:::-;60742:88;60823:6;60818:3;60742:88;:::i;:::-;60735:95;;60839:52;60884:6;60879:3;60872:4;60865:5;60861:16;60839:52;:::i;:::-;60916:6;60911:3;60907:16;60900:23;;60664:265;60556:373;;;;:::o;60935:1115::-;61359:3;61381:148;61525:3;61381:148;:::i;:::-;61374:155;;61546:148;61690:3;61546:148;:::i;:::-;61539:155;;61711:93;61800:3;61791:6;61711:93;:::i;:::-;61704:100;;61821:93;61910:3;61901:6;61821:93;:::i;:::-;61814:100;;61931:93;62020:3;62011:6;61931:93;:::i;:::-;61924:100;;62041:3;62034:10;;60935:1115;;;;;;:::o;62056:435::-;62236:3;62258:95;62349:3;62340:6;62258:95;:::i;:::-;62251:102;;62370:95;62461:3;62452:6;62370:95;:::i;:::-;62363:102;;62482:3;62475:10;;62056:435;;;;;:::o;62497:214::-;62637:66;62633:1;62625:6;62621:14;62614:90;62497:214;:::o;62717:400::-;62877:3;62898:84;62980:1;62975:3;62898:84;:::i;:::-;62891:91;;62991:93;63080:3;62991:93;:::i;:::-;63109:1;63104:3;63100:11;63093:18;;62717:400;;;:::o;63123:214::-;63263:66;63259:1;63251:6;63247:14;63240:90;63123:214;:::o;63343:400::-;63503:3;63524:84;63606:1;63601:3;63524:84;:::i;:::-;63517:91;;63617:93;63706:3;63617:93;:::i;:::-;63735:1;63730:3;63726:11;63719:18;;63343:400;;;:::o;63749:214::-;63889:66;63885:1;63877:6;63873:14;63866:90;63749:214;:::o;63969:400::-;64129:3;64150:84;64232:1;64227:3;64150:84;:::i;:::-;64143:91;;64243:93;64332:3;64243:93;:::i;:::-;64361:1;64356:3;64352:11;64345:18;;63969:400;;;:::o;64375:214::-;64515:66;64511:1;64503:6;64499:14;64492:90;64375:214;:::o;64595:400::-;64755:3;64776:84;64858:1;64853:3;64776:84;:::i;:::-;64769:91;;64869:93;64958:3;64869:93;:::i;:::-;64987:1;64982:3;64978:11;64971:18;;64595:400;;;:::o;65001:214::-;65141:66;65137:1;65129:6;65125:14;65118:90;65001:214;:::o;65221:400::-;65381:3;65402:84;65484:1;65479:3;65402:84;:::i;:::-;65395:91;;65495:93;65584:3;65495:93;:::i;:::-;65613:1;65608:3;65604:11;65597:18;;65221:400;;;:::o;65627:5601::-;67654:3;67676:148;67820:3;67676:148;:::i;:::-;67669:155;;67841:95;67932:3;67923:6;67841:95;:::i;:::-;67834:102;;67953:148;68097:3;67953:148;:::i;:::-;67946:155;;68118:95;68209:3;68200:6;68118:95;:::i;:::-;68111:102;;68230:148;68374:3;68230:148;:::i;:::-;68223:155;;68395:95;68486:3;68477:6;68395:95;:::i;:::-;68388:102;;68507:148;68651:3;68507:148;:::i;:::-;68500:155;;68672:95;68763:3;68754:6;68672:95;:::i;:::-;68665:102;;68784:148;68928:3;68784:148;:::i;:::-;68777:155;;68949:148;69093:3;68949:148;:::i;:::-;68942:155;;69114:95;69205:3;69196:6;69114:95;:::i;:::-;69107:102;;69226:148;69370:3;69226:148;:::i;:::-;69219:155;;69391:95;69482:3;69473:6;69391:95;:::i;:::-;69384:102;;69503:148;69647:3;69503:148;:::i;:::-;69496:155;;69668:95;69759:3;69750:6;69668:95;:::i;:::-;69661:102;;69780:148;69924:3;69780:148;:::i;:::-;69773:155;;69945:95;70036:3;70027:6;69945:95;:::i;:::-;69938:102;;70057:148;70201:3;70057:148;:::i;:::-;70050:155;;70222:148;70366:3;70222:148;:::i;:::-;70215:155;;70387:95;70478:3;70469:6;70387:95;:::i;:::-;70380:102;;70499:148;70643:3;70499:148;:::i;:::-;70492:155;;70664:95;70755:3;70746:6;70664:95;:::i;:::-;70657:102;;70776:148;70920:3;70776:148;:::i;:::-;70769:155;;70941:96;71033:3;71023:7;70941:96;:::i;:::-;70934:103;;71054:148;71198:3;71054:148;:::i;:::-;71047:155;;71219:3;71212:10;;65627:5601;;;;;;;;;;;;;;:::o;71234:180::-;71282:77;71279:1;71272:88;71379:4;71376:1;71369:15;71403:4;71400:1;71393:15;71420:185;71460:1;71477:20;71495:1;71477:20;:::i;:::-;71472:25;;71511:20;71529:1;71511:20;:::i;:::-;71506:25;;71550:1;71540:35;;71555:18;;:::i;:::-;71540:35;71597:1;71594;71590:9;71585:14;;71420:185;;;;:::o;71611:176::-;71643:1;71660:20;71678:1;71660:20;:::i;:::-;71655:25;;71694:20;71712:1;71694:20;:::i;:::-;71689:25;;71733:1;71723:35;;71738:18;;:::i;:::-;71723:35;71779:1;71776;71772:9;71767:14;;71611:176;;;;:::o;71793:153::-;71933:5;71929:1;71921:6;71917:14;71910:29;71793:153;:::o;71952:400::-;72112:3;72133:84;72215:1;72210:3;72133:84;:::i;:::-;72126:91;;72226:93;72315:3;72226:93;:::i;:::-;72344:1;72339:3;72335:11;72328:18;;71952:400;;;:::o;72358:79::-;72397:7;72426:5;72415:16;;72358:79;;;:::o;72443:157::-;72548:45;72568:24;72586:5;72568:24;:::i;:::-;72548:45;:::i;:::-;72543:3;72536:58;72443:157;;:::o;72606:682::-;72867:3;72889:95;72980:3;72971:6;72889:95;:::i;:::-;72882:102;;73001:148;73145:3;73001:148;:::i;:::-;72994:155;;73159:75;73230:3;73221:6;73159:75;:::i;:::-;73259:2;73254:3;73250:12;73243:19;;73279:3;73272:10;;72606:682;;;;;:::o
Swarm Source
ipfs://4fc903edaee45564e8a4b852e59ccc75170122f7a03ddedfe6624064854449a9
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.