Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 57 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 14229395 | 1100 days ago | IN | 0 ETH | 0.00385362 | ||||
Transfer From | 13825556 | 1162 days ago | IN | 0 ETH | 0.01085978 | ||||
Withdraw | 13199720 | 1261 days ago | IN | 0 ETH | 0.00258321 | ||||
Mint | 13194919 | 1261 days ago | IN | 0.05 ETH | 0.014565 | ||||
Mint | 13179823 | 1264 days ago | IN | 0.05 ETH | 0.03253069 | ||||
Mint | 13164169 | 1266 days ago | IN | 0.05 ETH | 0.01466655 | ||||
Mint | 13163621 | 1266 days ago | IN | 0.05 ETH | 0.01234252 | ||||
Mint | 13163621 | 1266 days ago | IN | 0.05 ETH | 0.01234252 | ||||
Mint | 13163364 | 1266 days ago | IN | 0.05 ETH | 0.01269265 | ||||
Mint | 13163364 | 1266 days ago | IN | 0.05 ETH | 0.01104809 | ||||
Mint | 13163364 | 1266 days ago | IN | 0.05 ETH | 0.01104809 | ||||
Mint | 13163364 | 1266 days ago | IN | 0.05 ETH | 0.01179771 | ||||
Mint | 13163364 | 1266 days ago | IN | 0.05 ETH | 0.0118032 | ||||
Mint | 13163364 | 1266 days ago | IN | 0.05 ETH | 0.01069472 | ||||
Mint | 13163146 | 1266 days ago | IN | 0.05 ETH | 0.01171276 | ||||
Mint | 13163131 | 1266 days ago | IN | 0.05 ETH | 0.01224382 | ||||
Mint | 13162825 | 1266 days ago | IN | 0.05 ETH | 0.01110184 | ||||
Mint | 13162669 | 1266 days ago | IN | 0.05 ETH | 0.01154579 | ||||
Mint | 13162637 | 1266 days ago | IN | 0.05 ETH | 0.00962955 | ||||
Mint | 13162557 | 1266 days ago | IN | 0.05 ETH | 0.01547302 | ||||
Mint | 13161729 | 1266 days ago | IN | 0.05 ETH | 0.01277757 | ||||
Mint | 13161494 | 1266 days ago | IN | 0.05 ETH | 0.01322895 | ||||
Mint | 13160932 | 1267 days ago | IN | 0.05 ETH | 0.01554983 | ||||
Mint | 13160832 | 1267 days ago | IN | 0.05 ETH | 0.01618391 | ||||
Mint | 13160785 | 1267 days ago | IN | 0.05 ETH | 0.01671272 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Loadout
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-04 */ // Sources flattened with hardhat v2.6.2 https://hardhat.org // File contracts/IterableMapping.sol pragma solidity ^0.8.0; library IterableMapping { // Iterable mapping from address to uint; struct Map { string[] keys; mapping(string => uint) values; mapping(string => uint) indexOf; mapping(string => bool) inserted; } function get(Map storage map, string memory key) public view returns (uint) { return map.values[key]; } function getKeyAtIndex(Map storage map, uint index) public view returns (string memory) { return map.keys[index]; } function size(Map storage map) public view returns (uint) { return map.keys.length; } function set( Map storage map, string memory key, uint val ) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, string memory key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; string memory lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } // File @openzeppelin/contracts/utils/[email protected] 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 contracts/GunManager.sol pragma solidity ^0.8.0; library GunManager { using IterableMapping for IterableMapping.Map; function random(string memory input) internal pure returns (uint256) { return uint256(keccak256(abi.encodePacked(input))); } function getRandomItemFromArray(uint256 tokenId, string memory keyPrefix, string[] memory items, uint256[] storage supplies, uint256 MAX_NFTS) internal view returns (string memory) { uint256 rand = random(string(abi.encodePacked(keyPrefix, Strings.toString(tokenId)))) % MAX_NFTS; string memory item; uint256 sum = 0; for (uint256 i = 0; i < supplies.length; i++) { sum += supplies[i]; if (rand <= sum) { item = items[i]; break; } } return item; } } // File contracts/Base64.sol pragma solidity ^0.8.0; /// @title Base64 /// @author Brecht Devos - <[email protected]> /// @notice Provides a function for encoding some bytes in base64 library Base64 { string internal constant TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; function encode(bytes memory data) internal pure returns (string memory) { if (data.length == 0) return ''; // load the table into memory string memory table = TABLE; // 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) {} { dataPtr := add(dataPtr, 3) // read 3 bytes let input := mload(dataPtr) // write 4 characters mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr( 6, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, 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; } } // File @openzeppelin/contracts/utils/[email protected] 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/access/[email protected] // SPDX-License-Identifier: MIT 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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/security/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] 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/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] 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/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/introspection/[email protected] 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/[email protected] 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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File contracts/Loadout.sol pragma solidity ^0.8.0; contract Loadout is ERC721Enumerable, Ownable, ReentrancyGuard { uint256 public price = 50000000000000000; //0.05 ETH // consts string constant PRIMARY_WEAPON = "PRIMARY_WEAPON"; string constant SECONDARY_WEAPON = "SECONDARY_WEAPON"; string constant LEATHAL = "LEATHAL"; string constant TACTICAL = "TACTICAL"; string constant MELEE = "MELEE"; uint256 constant MAX_NFTS = 10000; string[] private primaryWeapons = [ "PMX", "Scorpion EVO 3", "Vector", "UMP 45", "MP7", "P90", "MP5", "UZI", "MAC-10", "Musket", "Honey Badger PDW", "ACR", "M16", "M4A1", "QBZ-93", "SCAR", "AK-47", "AN-94", "AEK-999", "Mark 48", "UKM-2000", "QBB-95", "MG4", "Winchester 1873", "MK 13", "Barrett 50 Cal", "DMR", "AX-50", "Recurve Bow", "Crossbow", "Dragunov" ]; uint256[] private primaryWeaponsSupply = [ 100, 100, 290, 400, 400, 400, 400, 500, 400, 10, 100, 300, 400, 400, 400, 400, 400, 400, 100, 200, 500, 500, 500, 50, 100, 200, 600, 600, 50, 150, 650 ]; string[] private secondaryWeapons = [ "Slingshot", "Blow Dart", "Taser Gun", "M1911", "Makarov", "USP", "CZ 83", "M9", "Glock 19", "KSG", "Vepr-12", "Saiga-12", "Striker", "SPAS-12", "Benelli M3", "Mossberg 500", "Bazooka", "Javelin", "AT4", "RPG" ]; uint256[] private secondaryWeaponsSupply = [ 10, 15, 25, 500, 800, 700, 700, 1100, 1250, 50, 100, 600, 600, 550, 600, 500, 100, 400, 400, 500 ]; string[] private lethals = [ "Ninja Stars", "Frag Grenade", "C4", "Throwing Knife", "Molotov Cocktail", "Claymore", "Frag Mine" ]; uint256[] private lethalsSupply = [ 100, 2500, 1500, 400, 3000, 1500, 1000 ]; string[] private tacticals = [ "Bear Mace", "Stun Grenade", "Flash Grenande", "Smoke Grenade", "Tear Gas" ]; uint256[] private tacticalsSupply = [ 100, 3000, 3000, 3000, 900 ]; string[] private melee = [ "Cleaver", "Katana", "Switch Blade", "Tomahawk", "Combat Kife", "Karambit", "Machete", "Banjo", "Bat", "Rock", "Brass Knuckles" ]; uint256[] private meleeSupply = [ 100, 100, 300, 300, 5000, 2700, 1200, 10, 50, 5, 235 ]; // token mapping mapping(uint256 => mapping(string => string)) tokenData; // reserve random weapons function getRandomPrimaryWeapon(uint256 tokenId) internal view returns (string memory) { return GunManager.getRandomItemFromArray(tokenId, PRIMARY_WEAPON, primaryWeapons, primaryWeaponsSupply, MAX_NFTS); } function getRandomSecondaryWeapon(uint256 tokenId) internal view returns (string memory) { return GunManager.getRandomItemFromArray(tokenId, SECONDARY_WEAPON, secondaryWeapons, secondaryWeaponsSupply, MAX_NFTS); } function getRandomLethal(uint256 tokenId) internal view returns (string memory) { return GunManager.getRandomItemFromArray(tokenId, LEATHAL, lethals, lethalsSupply, MAX_NFTS); } function getRandomTactical(uint256 tokenId) internal view returns (string memory) { return GunManager.getRandomItemFromArray(tokenId, TACTICAL, tacticals, tacticalsSupply, MAX_NFTS); } function getRandomMelee(uint256 tokenId) internal view returns (string memory) { return GunManager.getRandomItemFromArray(tokenId, MELEE, melee, meleeSupply, MAX_NFTS); } function isMinted(uint256 tokenId) public view returns (bool) { return _exists(tokenId); } function tokenURI(uint256 tokenId) override public view returns (string memory) { require(_exists(tokenId), "Token is not minted yet."); string[17] memory parts; parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: white; font-family: serif; font-size: 14px; }</style><rect width="100%" height="100%" fill="black" /><text x="10" y="30%" class="base">'; parts[1] = getRandomPrimaryWeapon(tokenId); parts[2] = '</text><text x="10" y="40%" class="base">'; parts[3] = getRandomSecondaryWeapon(tokenId); parts[4] = '</text><text x="10" y="50%" class="base">'; parts[5] = getRandomLethal(tokenId); parts[6] = '</text><text x="10" y="60%" class="base">'; parts[7] = getRandomTactical(tokenId); parts[8] = '</text><text x="10" y="70%" class="base">'; parts[9] = getRandomMelee(tokenId); parts[10] = '</text></svg>'; // pack svg string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8])); output = string(abi.encodePacked(output, parts[9], parts[10])); // pack json string memory json = string(abi.encodePacked('{"name": "Loadout #', Strings.toString(tokenId), '", "description": "Loadout is randomized modern combat packs generated and stored on chain.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '", ')); // add attributes json = string(abi.encodePacked(json, '"attributes": [{"trait_type": "Primary Weapon", "value": "', parts[1], '"}, {"trait_type": "Secondary Weapon", "value": "', parts[3], '"}, {"trait_type": "Leathal Device", "value": "', parts[5], '"}, {"trait_type": "Tactical Device", "value": "', parts[7],'"}, {"trait_type": "Melee", "value": "', parts[9], '"}]}')); string memory encodedJson = Base64.encode(bytes(json)); output = string(abi.encodePacked('data:application/json;base64,', encodedJson)); return output; } function mint(uint256 tokenId) public payable nonReentrant { require(tokenId > 0 && tokenId <= MAX_NFTS, "Token ID invalid"); require(price <= msg.value, "Ether value sent is not correct"); _safeMint(_msgSender(), tokenId); } function withdraw(address payable to) public onlyOwner { payable(to).transfer(address(this).balance); } constructor() ERC721("Loadout", "LOADY") Ownable() {} }
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"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266b1a2bc2ec50000600c55604051806103e001604052806040518060400160405280600381526020017f504d58000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f53636f7270696f6e2045564f203300000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f566563746f72000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f554d50203435000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f4d5037000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f503930000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f4d5035000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f555a49000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4d41432d3130000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4d75736b6574000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f486f6e657920426164676572205044570000000000000000000000000000000081525081526020016040518060400160405280600381526020017f414352000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f4d3136000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4d3441310000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f51425a2d3933000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f534341520000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f414b2d343700000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f414e2d393400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f41454b2d3939390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d61726b2034380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f554b4d2d3230303000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f5142422d3935000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f4d4734000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f57696e636865737465722031383733000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4d4b20313300000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f426172726574742035302043616c00000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f444d52000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f41582d353000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f5265637572766520426f7700000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f43726f7373626f7700000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f44726167756e6f76000000000000000000000000000000000000000000000000815250815250600d90601f6200075092919062001744565b50604051806103e00160405280606461ffff168152602001606461ffff16815260200161012261ffff16815260200161019061ffff16815260200161019061ffff16815260200161019061ffff16815260200161019061ffff1681526020016101f461ffff16815260200161019061ffff168152602001600a61ffff168152602001606461ffff16815260200161012c61ffff16815260200161019061ffff16815260200161019061ffff16815260200161019061ffff16815260200161019061ffff16815260200161019061ffff16815260200161019061ffff168152602001606461ffff16815260200160c861ffff1681526020016101f461ffff1681526020016101f461ffff1681526020016101f461ffff168152602001603261ffff168152602001606461ffff16815260200160c861ffff16815260200161025861ffff16815260200161025861ffff168152602001603261ffff168152602001609661ffff16815260200161028a61ffff16815250600e90601f620008d6929190620017ab565b506040518061028001604052806040518060400160405280600981526020017f536c696e6773686f74000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f426c6f772044617274000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f54617365722047756e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4d3139313100000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d616b61726f760000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f555350000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f435a20383300000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f4d3900000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f476c6f636b20313900000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f4b5347000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f566570722d31320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f53616967612d313200000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f537472696b65720000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f535041532d31320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f42656e656c6c69204d330000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4d6f73736265726720353030000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f42617a6f6f6b610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4a6176656c696e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f415434000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f5250470000000000000000000000000000000000000000000000000000000000815250815250600f90601462000d8f92919062001803565b50604051806102800160405280600a61ffff168152602001600f61ffff168152602001601961ffff1681526020016101f461ffff16815260200161032061ffff1681526020016102bc61ffff1681526020016102bc61ffff16815260200161044c61ffff1681526020016104e261ffff168152602001603261ffff168152602001606461ffff16815260200161025861ffff16815260200161025861ffff16815260200161022661ffff16815260200161025861ffff1681526020016101f461ffff168152602001606461ffff16815260200161019061ffff16815260200161019061ffff1681526020016101f461ffff16815250601090601462000e969291906200186a565b506040518060e001604052806040518060400160405280600b81526020017f4e696e6a6120537461727300000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f46726167204772656e616465000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f433400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f5468726f77696e67204b6e69666500000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4d6f6c6f746f7620436f636b7461696c0000000000000000000000000000000081525081526020016040518060400160405280600881526020017f436c61796d6f726500000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f46726167204d696e65000000000000000000000000000000000000000000000081525081525060119060076200104f929190620018c2565b506040518060e00160405280606461ffff1681526020016109c461ffff1681526020016105dc61ffff16815260200161019061ffff168152602001610bb861ffff1681526020016105dc61ffff1681526020016103e861ffff168152506012906007620010be92919062001929565b506040518060a001604052806040518060400160405280600981526020017f42656172204d616365000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5374756e204772656e616465000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f466c617368204772656e616e646500000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f536d6f6b65204772656e6164650000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f546561722047617300000000000000000000000000000000000000000000000081525081525060139060056200120192919062001981565b506040518060a00160405280606461ffff168152602001610bb861ffff168152602001610bb861ffff168152602001610bb861ffff16815260200161038461ffff16815250601490600562001258929190620019e8565b506040518061016001604052806040518060400160405280600781526020017f436c65617665720000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4b6174616e61000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f53776974636820426c616465000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f546f6d616861776b00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f436f6d626174204b69666500000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4b6172616d62697400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d6163686574650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f42616e6a6f00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f426174000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f526f636b0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f4272617373204b6e75636b6c6573000000000000000000000000000000000000815250815250601590600b620014fe92919062001a40565b50604051806101600160405280606461ffff168152602001606461ffff16815260200161012c61ffff16815260200161012c61ffff16815260200161138861ffff168152602001610a8c61ffff1681526020016104b061ffff168152602001600a61ffff168152602001603261ffff168152602001600561ffff16815260200160eb61ffff16815250601690600b6200159992919062001aa7565b50348015620015a757600080fd5b506040518060400160405280600781526020017f4c6f61646f7574000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4c4f41445900000000000000000000000000000000000000000000000000000081525081600090805190602001906200162c92919062001aff565b5080600190805190602001906200164592919062001aff565b505050620016686200165c6200167660201b60201c565b6200167e60201b60201c565b6001600b8190555062001c82565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805482825590600052602060002090810192821562001798579160200282015b82811115620017975782518290805190602001906200178692919062001aff565b509160200191906001019062001765565b5b509050620017a7919062001b90565b5090565b828054828255906000526020600020908101928215620017f0579160200282015b82811115620017ef578251829061ffff16905591602001919060010190620017cc565b5b509050620017ff919062001bb8565b5090565b82805482825590600052602060002090810192821562001857579160200282015b82811115620018565782518290805190602001906200184592919062001aff565b509160200191906001019062001824565b5b50905062001866919062001b90565b5090565b828054828255906000526020600020908101928215620018af579160200282015b82811115620018ae578251829061ffff169055916020019190600101906200188b565b5b509050620018be919062001bb8565b5090565b82805482825590600052602060002090810192821562001916579160200282015b82811115620019155782518290805190602001906200190492919062001aff565b5091602001919060010190620018e3565b5b50905062001925919062001b90565b5090565b8280548282559060005260206000209081019282156200196e579160200282015b828111156200196d578251829061ffff169055916020019190600101906200194a565b5b5090506200197d919062001bb8565b5090565b828054828255906000526020600020908101928215620019d5579160200282015b82811115620019d4578251829080519060200190620019c392919062001aff565b5091602001919060010190620019a2565b5b509050620019e4919062001b90565b5090565b82805482825590600052602060002090810192821562001a2d579160200282015b8281111562001a2c578251829061ffff1690559160200191906001019062001a09565b5b50905062001a3c919062001bb8565b5090565b82805482825590600052602060002090810192821562001a94579160200282015b8281111562001a9357825182908051906020019062001a8292919062001aff565b509160200191906001019062001a61565b5b50905062001aa3919062001b90565b5090565b82805482825590600052602060002090810192821562001aec579160200282015b8281111562001aeb578251829061ffff1690559160200191906001019062001ac8565b5b50905062001afb919062001bb8565b5090565b82805462001b0d9062001c1d565b90600052602060002090601f01602090048101928262001b31576000855562001b7d565b82601f1062001b4c57805160ff191683800117855562001b7d565b8280016001018555821562001b7d579182015b8281111562001b7c57825182559160200191906001019062001b5f565b5b50905062001b8c919062001bb8565b5090565b5b8082111562001bb4576000818162001baa919062001bd7565b5060010162001b91565b5090565b5b8082111562001bd357600081600090555060010162001bb9565b5090565b50805462001be59062001c1d565b6000825580601f1062001bf9575062001c1a565b601f01602090049060005260206000209081019062001c19919062001bb8565b5b50565b6000600282049050600182168062001c3657607f821691505b6020821081141562001c4d5762001c4c62001c53565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614f728062001c926000396000f3fe6080604052600436106101405760003560e01c80636352211e116100b6578063a0712d681161006f578063a0712d6814610482578063a22cb4651461049e578063b88d4fde146104c7578063c87b56dd146104f0578063e985e9c51461052d578063f2fde38b1461056a57610140565b80636352211e1461037057806370a08231146103ad578063715018a6146103ea5780638da5cb5b1461040157806395d89b411461042c578063a035b1fe1461045757610140565b806323b872dd1161010857806323b872dd1461023e5780632f745c591461026757806333c41a90146102a457806342842e0e146102e15780634f6ccce71461030a57806351cff8d91461034757610140565b806301ffc9a71461014557806306fdde0314610182578063081812fc146101ad578063095ea7b3146101ea57806318160ddd14610213575b600080fd5b34801561015157600080fd5b5061016c60048036038101906101679190613753565b610593565b60405161017991906145f5565b60405180910390f35b34801561018e57600080fd5b5061019761060d565b6040516101a49190614610565b60405180910390f35b3480156101b957600080fd5b506101d460048036038101906101cf91906137a5565b61069f565b6040516101e1919061458e565b60405180910390f35b3480156101f657600080fd5b50610211600480360381019061020c9190613717565b610724565b005b34801561021f57600080fd5b5061022861083c565b60405161023591906148d2565b60405180910390f35b34801561024a57600080fd5b5061026560048036038101906102609190613611565b610849565b005b34801561027357600080fd5b5061028e60048036038101906102899190613717565b6108a9565b60405161029b91906148d2565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906137a5565b61094e565b6040516102d891906145f5565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190613611565b610960565b005b34801561031657600080fd5b50610331600480360381019061032c91906137a5565b610980565b60405161033e91906148d2565b60405180910390f35b34801561035357600080fd5b5061036e600480360381019061036991906135ac565b610a17565b005b34801561037c57600080fd5b50610397600480360381019061039291906137a5565b610add565b6040516103a4919061458e565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613583565b610b8f565b6040516103e191906148d2565b60405180910390f35b3480156103f657600080fd5b506103ff610c47565b005b34801561040d57600080fd5b50610416610ccf565b604051610423919061458e565b60405180910390f35b34801561043857600080fd5b50610441610cf9565b60405161044e9190614610565b60405180910390f35b34801561046357600080fd5b5061046c610d8b565b60405161047991906148d2565b60405180910390f35b61049c600480360381019061049791906137a5565b610d91565b005b3480156104aa57600080fd5b506104c560048036038101906104c091906136db565b610e91565b005b3480156104d357600080fd5b506104ee60048036038101906104e99190613660565b611012565b005b3480156104fc57600080fd5b50610517600480360381019061051291906137a5565b611074565b6040516105249190614610565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906135d5565b611954565b60405161056191906145f5565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190613583565b6119e8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610606575061060582611ae0565b5b9050919050565b60606000805461061c90614b6e565b80601f016020809104026020016040519081016040528092919081815260200182805461064890614b6e565b80156106955780601f1061066a57610100808354040283529160200191610695565b820191906000526020600020905b81548152906001019060200180831161067857829003601f168201915b5050505050905090565b60006106aa82611bc2565b6106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e0906147d2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061072f82610add565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079790614852565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107bf611c2e565b73ffffffffffffffffffffffffffffffffffffffff1614806107ee57506107ed816107e8611c2e565b611954565b5b61082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490614732565b60405180910390fd5b6108378383611c36565b505050565b6000600880549050905090565b61085a610854611c2e565b82611cef565b610899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089090614872565b60405180910390fd5b6108a4838383611dcd565b505050565b60006108b483610b8f565b82106108f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ec90614632565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600061095982611bc2565b9050919050565b61097b83838360405180602001604052806000815250611012565b505050565b600061098a61083c565b82106109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c290614892565b60405180910390fd5b60088281548110610a05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610a1f611c2e565b73ffffffffffffffffffffffffffffffffffffffff16610a3d610ccf565b73ffffffffffffffffffffffffffffffffffffffff1614610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a906147f2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ad9573d6000803e3d6000fd5b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d90614772565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790614752565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c4f611c2e565b73ffffffffffffffffffffffffffffffffffffffff16610c6d610ccf565b73ffffffffffffffffffffffffffffffffffffffff1614610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba906147f2565b60405180910390fd5b610ccd6000612029565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d0890614b6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3490614b6e565b8015610d815780601f10610d5657610100808354040283529160200191610d81565b820191906000526020600020905b815481529060010190602001808311610d6457829003601f168201915b5050505050905090565b600c5481565b6002600b541415610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce906148b2565b60405180910390fd5b6002600b81905550600081118015610df157506127108111155b610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790614812565b60405180910390fd5b34600c541115610e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6c906146f2565b60405180910390fd5b610e86610e80611c2e565b826120ef565b6001600b8190555050565b610e99611c2e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe906146d2565b60405180910390fd5b8060056000610f14611c2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610fc1611c2e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161100691906145f5565b60405180910390a35050565b61102361101d611c2e565b83611cef565b611062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105990614872565b60405180910390fd5b61106e8484848461210d565b50505050565b606061107f82611bc2565b6110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590614792565b60405180910390fd5b6110c6613475565b60405180610120016040528060fe8152602001614e1660fe91398160006011811061111a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525061112b83612169565b81600160118110611165577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060298152602001614ded60299139816002601181106111c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506111d183612288565b8160036011811061120b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060298152602001614d5b6029913981600460118110611266577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250611277836123a7565b816005601181106112b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060298152602001614d84602991398160066011811061130c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525061131d836124c6565b81600760118110611357577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060298152602001614f1460299139816008601181106113b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506113c3836125e5565b816009601181106113fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060400160405280600d81526020017f3c2f746578743e3c2f7376673e0000000000000000000000000000000000000081525081600a60118110611475577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506000816000601181106114b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151826001601181106114f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015183600260118110611537577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184600360118110611576577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151856004601181106115b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151866005601181106115f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015187600660118110611633577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015188600760118110611672577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151896008601181106116b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201516040516020016116ce9998979695949392919061440e565b6040516020818303038152906040529050808260096011811061171a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015183600a60118110611759577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151604051602001611770939291906143dd565b6040516020818303038152906040529050600061178c85612704565b611795836128b1565b6040516020016117a6929190614527565b604051602081830303815290604052905080836001601181106117f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184600360118110611831577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015185600560118110611870577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151866007601181106118af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151876009601181106118ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201516040516020016119089695949392919061448d565b60405160208183030381529060405290506000611924826128b1565b905080604051602001611937919061456c565b604051602081830303815290604052925082945050505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119f0611c2e565b73ffffffffffffffffffffffffffffffffffffffff16611a0e610ccf565b73ffffffffffffffffffffffffffffffffffffffff1614611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b906147f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb90614672565b60405180910390fd5b611add81612029565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bab57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bbb5750611bba82612a5c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ca983610add565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611cfa82611bc2565b611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3090614712565b60405180910390fd5b6000611d4483610add565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611db357508373ffffffffffffffffffffffffffffffffffffffff16611d9b8461069f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611dc45750611dc38185611954565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ded82610add565b73ffffffffffffffffffffffffffffffffffffffff1614611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a90614832565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa906146b2565b60405180910390fd5b611ebe838383612ac6565b611ec9600082611c36565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f199190614a72565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f709190614991565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612109828260405180602001604052806000815250612bda565b5050565b612118848484611dcd565b61212484848484612c35565b612163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215a90614652565b60405180910390fd5b50505050565b6060612281826040518060400160405280600e81526020017f5052494d4152595f574541504f4e000000000000000000000000000000000000815250600d805480602002602001604051908101604052809291908181526020016000905b828210156122735783829060005260206000200180546121e690614b6e565b80601f016020809104026020016040519081016040528092919081815260200182805461221290614b6e565b801561225f5780601f106122345761010080835404028352916020019161225f565b820191906000526020600020905b81548152906001019060200180831161224257829003601f168201915b5050505050815260200190600101906121c7565b50505050600e612710612dcc565b9050919050565b60606123a0826040518060400160405280601081526020017f5345434f4e444152595f574541504f4e00000000000000000000000000000000815250600f805480602002602001604051908101604052809291908181526020016000905b8282101561239257838290600052602060002001805461230590614b6e565b80601f016020809104026020016040519081016040528092919081815260200182805461233190614b6e565b801561237e5780601f106123535761010080835404028352916020019161237e565b820191906000526020600020905b81548152906001019060200180831161236157829003601f168201915b5050505050815260200190600101906122e6565b505050506010612710612dcc565b9050919050565b60606124bf826040518060400160405280600781526020017f4c45415448414c000000000000000000000000000000000000000000000000008152506011805480602002602001604051908101604052809291908181526020016000905b828210156124b157838290600052602060002001805461242490614b6e565b80601f016020809104026020016040519081016040528092919081815260200182805461245090614b6e565b801561249d5780601f106124725761010080835404028352916020019161249d565b820191906000526020600020905b81548152906001019060200180831161248057829003601f168201915b505050505081526020019060010190612405565b505050506012612710612dcc565b9050919050565b60606125de826040518060400160405280600881526020017f544143544943414c0000000000000000000000000000000000000000000000008152506013805480602002602001604051908101604052809291908181526020016000905b828210156125d057838290600052602060002001805461254390614b6e565b80601f016020809104026020016040519081016040528092919081815260200182805461256f90614b6e565b80156125bc5780601f10612591576101008083540402835291602001916125bc565b820191906000526020600020905b81548152906001019060200180831161259f57829003601f168201915b505050505081526020019060010190612524565b505050506014612710612dcc565b9050919050565b60606126fd826040518060400160405280600581526020017f4d454c45450000000000000000000000000000000000000000000000000000008152506015805480602002602001604051908101604052809291908181526020016000905b828210156126ef57838290600052602060002001805461266290614b6e565b80601f016020809104026020016040519081016040528092919081815260200182805461268e90614b6e565b80156126db5780601f106126b0576101008083540402835291602001916126db565b820191906000526020600020905b8154815290600101906020018083116126be57829003601f168201915b505050505081526020019060010190612643565b505050506016612710612dcc565b9050919050565b6060600082141561274c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128ac565b600082905060005b6000821461277e57808061276790614ba0565b915050600a8261277791906149e7565b9150612754565b60008167ffffffffffffffff8111156127c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127f25781602001600182028036833780820191505090505b5090505b600085146128a55760018261280b9190614a72565b9150600a8561281a9190614be9565b60306128269190614991565b60f81b818381518110612862577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561289e91906149e7565b94506127f6565b8093505050505b919050565b60606000825114156128d457604051806020016040528060008152509050612a57565b6000604051806060016040528060408152602001614dad60409139905060006003600285516129039190614991565b61290d91906149e7565b60046129199190614a18565b9050600060208261292a9190614991565b67ffffffffffffffff811115612969577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561299b5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015612a16576003830192508251603f8160121c1685015160f81b8252600182019150603f81600c1c1685015160f81b8252600182019150603f8160061c1685015160f81b8252600182019150603f811685015160f81b8252600182019150506129af565b600389510660018114612a305760028114612a4057612a4b565b613d3d60f01b6002830352612a4b565b603d60f81b60018303525b50505050508093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ad1838383612ee4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b1457612b0f81612ee9565b612b53565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b5257612b518382612f32565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b9657612b918161309f565b612bd5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bd457612bd382826131e2565b5b5b505050565b612be48383613261565b612bf16000848484612c35565b612c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2790614652565b60405180910390fd5b505050565b6000612c568473ffffffffffffffffffffffffffffffffffffffff1661342f565b15612dbf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c7f611c2e565b8786866040518563ffffffff1660e01b8152600401612ca194939291906145a9565b602060405180830381600087803b158015612cbb57600080fd5b505af1925050508015612cec57506040513d601f19601f82011682018060405250810190612ce9919061377c565b60015b612d6f573d8060008114612d1c576040519150601f19603f3d011682016040523d82523d6000602084013e612d21565b606091505b50600081511415612d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5e90614652565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dc4565b600190505b949350505050565b6060600082612e0387612dde8a612704565b604051602001612def9291906143b9565b604051602081830303815290604052613442565b612e0d9190614be9565b905060606000805b8680549050811015612ed457868181548110612e5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015482612e709190614991565b9150818411612ec157878181518110612eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519250612ed4565b8080612ecc90614ba0565b915050612e15565b5081935050505095945050505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f3f84610b8f565b612f499190614a72565b905060006007600084815260200190815260200160002054905081811461302e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130b39190614a72565b9050600060096000848152602001908152602001600020549050600060088381548110613109577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613151577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806131c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006131ed83610b8f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c8906147b2565b60405180910390fd5b6132da81611bc2565b1561331a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331190614692565b60405180910390fd5b61332660008383612ac6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133769190614991565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60008160405160200161345591906143a2565b6040516020818303038152906040528051906020012060001c9050919050565b6040518061022001604052806011905b60608152602001906001900390816134855790505090565b60006134b06134ab8461491e565b6148ed565b9050828152602081018484840111156134c857600080fd5b6134d3848285614b2c565b509392505050565b6000813590506134ea81614ce7565b92915050565b6000813590506134ff81614cfe565b92915050565b60008135905061351481614d15565b92915050565b60008135905061352981614d2c565b92915050565b60008151905061353e81614d2c565b92915050565b600082601f83011261355557600080fd5b813561356584826020860161349d565b91505092915050565b60008135905061357d81614d43565b92915050565b60006020828403121561359557600080fd5b60006135a3848285016134db565b91505092915050565b6000602082840312156135be57600080fd5b60006135cc848285016134f0565b91505092915050565b600080604083850312156135e857600080fd5b60006135f6858286016134db565b9250506020613607858286016134db565b9150509250929050565b60008060006060848603121561362657600080fd5b6000613634868287016134db565b9350506020613645868287016134db565b92505060406136568682870161356e565b9150509250925092565b6000806000806080858703121561367657600080fd5b6000613684878288016134db565b9450506020613695878288016134db565b93505060406136a68782880161356e565b925050606085013567ffffffffffffffff8111156136c357600080fd5b6136cf87828801613544565b91505092959194509250565b600080604083850312156136ee57600080fd5b60006136fc858286016134db565b925050602061370d85828601613505565b9150509250929050565b6000806040838503121561372a57600080fd5b6000613738858286016134db565b92505060206137498582860161356e565b9150509250929050565b60006020828403121561376557600080fd5b60006137738482850161351a565b91505092915050565b60006020828403121561378e57600080fd5b600061379c8482850161352f565b91505092915050565b6000602082840312156137b757600080fd5b60006137c58482850161356e565b91505092915050565b6137d781614aa6565b82525050565b6137e681614aca565b82525050565b60006137f78261494e565b6138018185614964565b9350613811818560208601614b3b565b61381a81614cd6565b840191505092915050565b600061383082614959565b61383a8185614975565b935061384a818560208601614b3b565b61385381614cd6565b840191505092915050565b600061386982614959565b6138738185614986565b9350613883818560208601614b3b565b80840191505092915050565b600061389c603083614986565b91507f227d2c207b2274726169745f74797065223a2022546163746963616c2044657660008301527f696365222c202276616c7565223a2022000000000000000000000000000000006020830152603082019050919050565b6000613902602b83614975565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613968603283614975565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006139ce602683614975565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a34601c83614975565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613a74603a83614986565b91507f2261747472696275746573223a205b7b2274726169745f74797065223a20225060008301527f72696d61727920576561706f6e222c202276616c7565223a20220000000000006020830152603a82019050919050565b6000613ada602483614975565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b40601983614975565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613b80601f83614975565b91507f45746865722076616c75652073656e74206973206e6f7420636f7272656374006000830152602082019050919050565b6000613bc0602c83614975565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613c26603883614975565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613c8c602a83614975565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cf2602983614975565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d58601883614975565b91507f546f6b656e206973206e6f74206d696e746564207965742e00000000000000006000830152602082019050919050565b6000613d98602683614986565b91507f227d2c207b2274726169745f74797065223a20224d656c6565222c202276616c60008301527f7565223a202200000000000000000000000000000000000000000000000000006020830152602682019050919050565b6000613dfe602083614975565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613e3e602c83614975565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613ea4602083614975565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613ee4601083614975565b91507f546f6b656e20494420696e76616c6964000000000000000000000000000000006000830152602082019050919050565b6000613f24602983614975565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f8a601383614986565b91507f7b226e616d65223a20224c6f61646f75742023000000000000000000000000006000830152601382019050919050565b6000613fca608283614986565b91507f222c20226465736372697074696f6e223a20224c6f61646f757420697320726160008301527f6e646f6d697a6564206d6f6465726e20636f6d626174207061636b732067656e60208301527f65726174656420616e642073746f726564206f6e20636861696e2e222c20226960408301527f6d616765223a2022646174613a696d6167652f7376672b786d6c3b626173653660608301527f342c0000000000000000000000000000000000000000000000000000000000006080830152608282019050919050565b60006140a2602183614975565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614108602f83614986565b91507f227d2c207b2274726169745f74797065223a20224c65617468616c204465766960008301527f6365222c202276616c7565223a202200000000000000000000000000000000006020830152602f82019050919050565b600061416e601d83614986565b91507f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006000830152601d82019050919050565b60006141ae603183614975565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614214602c83614975565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061427a600383614986565b91507f222c2000000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b60006142ba603183614986565b91507f227d2c207b2274726169745f74797065223a20225365636f6e6461727920576560008301527f61706f6e222c202276616c7565223a20220000000000000000000000000000006020830152603182019050919050565b6000614320601f83614975565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000614360600483614986565b91507f227d5d7d000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b61439c81614b22565b82525050565b60006143ae828461385e565b915081905092915050565b60006143c5828561385e565b91506143d1828461385e565b91508190509392505050565b60006143e9828661385e565b91506143f5828561385e565b9150614401828461385e565b9150819050949350505050565b600061441a828c61385e565b9150614426828b61385e565b9150614432828a61385e565b915061443e828961385e565b915061444a828861385e565b9150614456828761385e565b9150614462828661385e565b915061446e828561385e565b915061447a828461385e565b91508190509a9950505050505050505050565b6000614499828961385e565b91506144a482613a67565b91506144b0828861385e565b91506144bb826142ad565b91506144c7828761385e565b91506144d2826140fb565b91506144de828661385e565b91506144e98261388f565b91506144f5828561385e565b915061450082613d8b565b915061450c828461385e565b915061451782614353565b9150819050979650505050505050565b600061453282613f7d565b915061453e828561385e565b915061454982613fbd565b9150614555828461385e565b91506145608261426d565b91508190509392505050565b600061457782614161565b9150614583828461385e565b915081905092915050565b60006020820190506145a360008301846137ce565b92915050565b60006080820190506145be60008301876137ce565b6145cb60208301866137ce565b6145d86040830185614393565b81810360608301526145ea81846137ec565b905095945050505050565b600060208201905061460a60008301846137dd565b92915050565b6000602082019050818103600083015261462a8184613825565b905092915050565b6000602082019050818103600083015261464b816138f5565b9050919050565b6000602082019050818103600083015261466b8161395b565b9050919050565b6000602082019050818103600083015261468b816139c1565b9050919050565b600060208201905081810360008301526146ab81613a27565b9050919050565b600060208201905081810360008301526146cb81613acd565b9050919050565b600060208201905081810360008301526146eb81613b33565b9050919050565b6000602082019050818103600083015261470b81613b73565b9050919050565b6000602082019050818103600083015261472b81613bb3565b9050919050565b6000602082019050818103600083015261474b81613c19565b9050919050565b6000602082019050818103600083015261476b81613c7f565b9050919050565b6000602082019050818103600083015261478b81613ce5565b9050919050565b600060208201905081810360008301526147ab81613d4b565b9050919050565b600060208201905081810360008301526147cb81613df1565b9050919050565b600060208201905081810360008301526147eb81613e31565b9050919050565b6000602082019050818103600083015261480b81613e97565b9050919050565b6000602082019050818103600083015261482b81613ed7565b9050919050565b6000602082019050818103600083015261484b81613f17565b9050919050565b6000602082019050818103600083015261486b81614095565b9050919050565b6000602082019050818103600083015261488b816141a1565b9050919050565b600060208201905081810360008301526148ab81614207565b9050919050565b600060208201905081810360008301526148cb81614313565b9050919050565b60006020820190506148e76000830184614393565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561491457614913614ca7565b5b8060405250919050565b600067ffffffffffffffff82111561493957614938614ca7565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061499c82614b22565b91506149a783614b22565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149dc576149db614c1a565b5b828201905092915050565b60006149f282614b22565b91506149fd83614b22565b925082614a0d57614a0c614c49565b5b828204905092915050565b6000614a2382614b22565b9150614a2e83614b22565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a6757614a66614c1a565b5b828202905092915050565b6000614a7d82614b22565b9150614a8883614b22565b925082821015614a9b57614a9a614c1a565b5b828203905092915050565b6000614ab182614b02565b9050919050565b6000614ac382614b02565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614b59578082015181840152602081019050614b3e565b83811115614b68576000848401525b50505050565b60006002820490506001821680614b8657607f821691505b60208210811415614b9a57614b99614c78565b5b50919050565b6000614bab82614b22565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614bde57614bdd614c1a565b5b600182019050919050565b6000614bf482614b22565b9150614bff83614b22565b925082614c0f57614c0e614c49565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614cf081614aa6565b8114614cfb57600080fd5b50565b614d0781614ab8565b8114614d1257600080fd5b50565b614d1e81614aca565b8114614d2957600080fd5b50565b614d3581614ad6565b8114614d4057600080fd5b50565b614d4c81614b22565b8114614d5757600080fd5b5056fe3c2f746578743e3c7465787420783d2231302220793d223530252220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223630252220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f746578743e3c7465787420783d2231302220793d223430252220636c6173733d2262617365223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d223330252220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223730252220636c6173733d2262617365223ea264697066735822122048a30f1ecdee320af1171d92a8ec7df3a112c727f7d2b5a2fd8a87656b10be1264736f6c63430008000033
Deployed Bytecode
0x6080604052600436106101405760003560e01c80636352211e116100b6578063a0712d681161006f578063a0712d6814610482578063a22cb4651461049e578063b88d4fde146104c7578063c87b56dd146104f0578063e985e9c51461052d578063f2fde38b1461056a57610140565b80636352211e1461037057806370a08231146103ad578063715018a6146103ea5780638da5cb5b1461040157806395d89b411461042c578063a035b1fe1461045757610140565b806323b872dd1161010857806323b872dd1461023e5780632f745c591461026757806333c41a90146102a457806342842e0e146102e15780634f6ccce71461030a57806351cff8d91461034757610140565b806301ffc9a71461014557806306fdde0314610182578063081812fc146101ad578063095ea7b3146101ea57806318160ddd14610213575b600080fd5b34801561015157600080fd5b5061016c60048036038101906101679190613753565b610593565b60405161017991906145f5565b60405180910390f35b34801561018e57600080fd5b5061019761060d565b6040516101a49190614610565b60405180910390f35b3480156101b957600080fd5b506101d460048036038101906101cf91906137a5565b61069f565b6040516101e1919061458e565b60405180910390f35b3480156101f657600080fd5b50610211600480360381019061020c9190613717565b610724565b005b34801561021f57600080fd5b5061022861083c565b60405161023591906148d2565b60405180910390f35b34801561024a57600080fd5b5061026560048036038101906102609190613611565b610849565b005b34801561027357600080fd5b5061028e60048036038101906102899190613717565b6108a9565b60405161029b91906148d2565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906137a5565b61094e565b6040516102d891906145f5565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190613611565b610960565b005b34801561031657600080fd5b50610331600480360381019061032c91906137a5565b610980565b60405161033e91906148d2565b60405180910390f35b34801561035357600080fd5b5061036e600480360381019061036991906135ac565b610a17565b005b34801561037c57600080fd5b50610397600480360381019061039291906137a5565b610add565b6040516103a4919061458e565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613583565b610b8f565b6040516103e191906148d2565b60405180910390f35b3480156103f657600080fd5b506103ff610c47565b005b34801561040d57600080fd5b50610416610ccf565b604051610423919061458e565b60405180910390f35b34801561043857600080fd5b50610441610cf9565b60405161044e9190614610565b60405180910390f35b34801561046357600080fd5b5061046c610d8b565b60405161047991906148d2565b60405180910390f35b61049c600480360381019061049791906137a5565b610d91565b005b3480156104aa57600080fd5b506104c560048036038101906104c091906136db565b610e91565b005b3480156104d357600080fd5b506104ee60048036038101906104e99190613660565b611012565b005b3480156104fc57600080fd5b50610517600480360381019061051291906137a5565b611074565b6040516105249190614610565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906135d5565b611954565b60405161056191906145f5565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190613583565b6119e8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610606575061060582611ae0565b5b9050919050565b60606000805461061c90614b6e565b80601f016020809104026020016040519081016040528092919081815260200182805461064890614b6e565b80156106955780601f1061066a57610100808354040283529160200191610695565b820191906000526020600020905b81548152906001019060200180831161067857829003601f168201915b5050505050905090565b60006106aa82611bc2565b6106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e0906147d2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061072f82610add565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079790614852565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107bf611c2e565b73ffffffffffffffffffffffffffffffffffffffff1614806107ee57506107ed816107e8611c2e565b611954565b5b61082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490614732565b60405180910390fd5b6108378383611c36565b505050565b6000600880549050905090565b61085a610854611c2e565b82611cef565b610899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089090614872565b60405180910390fd5b6108a4838383611dcd565b505050565b60006108b483610b8f565b82106108f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ec90614632565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600061095982611bc2565b9050919050565b61097b83838360405180602001604052806000815250611012565b505050565b600061098a61083c565b82106109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c290614892565b60405180910390fd5b60088281548110610a05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610a1f611c2e565b73ffffffffffffffffffffffffffffffffffffffff16610a3d610ccf565b73ffffffffffffffffffffffffffffffffffffffff1614610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a906147f2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ad9573d6000803e3d6000fd5b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d90614772565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790614752565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c4f611c2e565b73ffffffffffffffffffffffffffffffffffffffff16610c6d610ccf565b73ffffffffffffffffffffffffffffffffffffffff1614610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba906147f2565b60405180910390fd5b610ccd6000612029565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d0890614b6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3490614b6e565b8015610d815780601f10610d5657610100808354040283529160200191610d81565b820191906000526020600020905b815481529060010190602001808311610d6457829003601f168201915b5050505050905090565b600c5481565b6002600b541415610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce906148b2565b60405180910390fd5b6002600b81905550600081118015610df157506127108111155b610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790614812565b60405180910390fd5b34600c541115610e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6c906146f2565b60405180910390fd5b610e86610e80611c2e565b826120ef565b6001600b8190555050565b610e99611c2e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe906146d2565b60405180910390fd5b8060056000610f14611c2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610fc1611c2e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161100691906145f5565b60405180910390a35050565b61102361101d611c2e565b83611cef565b611062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105990614872565b60405180910390fd5b61106e8484848461210d565b50505050565b606061107f82611bc2565b6110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590614792565b60405180910390fd5b6110c6613475565b60405180610120016040528060fe8152602001614e1660fe91398160006011811061111a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525061112b83612169565b81600160118110611165577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060298152602001614ded60299139816002601181106111c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506111d183612288565b8160036011811061120b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060298152602001614d5b6029913981600460118110611266577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250611277836123a7565b816005601181106112b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060298152602001614d84602991398160066011811061130c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525061131d836124c6565b81600760118110611357577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060298152602001614f1460299139816008601181106113b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506113c3836125e5565b816009601181106113fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060400160405280600d81526020017f3c2f746578743e3c2f7376673e0000000000000000000000000000000000000081525081600a60118110611475577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506000816000601181106114b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151826001601181106114f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015183600260118110611537577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184600360118110611576577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151856004601181106115b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151866005601181106115f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015187600660118110611633577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015188600760118110611672577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151896008601181106116b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201516040516020016116ce9998979695949392919061440e565b6040516020818303038152906040529050808260096011811061171a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015183600a60118110611759577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151604051602001611770939291906143dd565b6040516020818303038152906040529050600061178c85612704565b611795836128b1565b6040516020016117a6929190614527565b604051602081830303815290604052905080836001601181106117f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184600360118110611831577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015185600560118110611870577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151866007601181106118af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151876009601181106118ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201516040516020016119089695949392919061448d565b60405160208183030381529060405290506000611924826128b1565b905080604051602001611937919061456c565b604051602081830303815290604052925082945050505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119f0611c2e565b73ffffffffffffffffffffffffffffffffffffffff16611a0e610ccf565b73ffffffffffffffffffffffffffffffffffffffff1614611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b906147f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb90614672565b60405180910390fd5b611add81612029565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bab57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bbb5750611bba82612a5c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ca983610add565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611cfa82611bc2565b611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3090614712565b60405180910390fd5b6000611d4483610add565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611db357508373ffffffffffffffffffffffffffffffffffffffff16611d9b8461069f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611dc45750611dc38185611954565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ded82610add565b73ffffffffffffffffffffffffffffffffffffffff1614611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a90614832565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa906146b2565b60405180910390fd5b611ebe838383612ac6565b611ec9600082611c36565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f199190614a72565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f709190614991565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612109828260405180602001604052806000815250612bda565b5050565b612118848484611dcd565b61212484848484612c35565b612163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215a90614652565b60405180910390fd5b50505050565b6060612281826040518060400160405280600e81526020017f5052494d4152595f574541504f4e000000000000000000000000000000000000815250600d805480602002602001604051908101604052809291908181526020016000905b828210156122735783829060005260206000200180546121e690614b6e565b80601f016020809104026020016040519081016040528092919081815260200182805461221290614b6e565b801561225f5780601f106122345761010080835404028352916020019161225f565b820191906000526020600020905b81548152906001019060200180831161224257829003601f168201915b5050505050815260200190600101906121c7565b50505050600e612710612dcc565b9050919050565b60606123a0826040518060400160405280601081526020017f5345434f4e444152595f574541504f4e00000000000000000000000000000000815250600f805480602002602001604051908101604052809291908181526020016000905b8282101561239257838290600052602060002001805461230590614b6e565b80601f016020809104026020016040519081016040528092919081815260200182805461233190614b6e565b801561237e5780601f106123535761010080835404028352916020019161237e565b820191906000526020600020905b81548152906001019060200180831161236157829003601f168201915b5050505050815260200190600101906122e6565b505050506010612710612dcc565b9050919050565b60606124bf826040518060400160405280600781526020017f4c45415448414c000000000000000000000000000000000000000000000000008152506011805480602002602001604051908101604052809291908181526020016000905b828210156124b157838290600052602060002001805461242490614b6e565b80601f016020809104026020016040519081016040528092919081815260200182805461245090614b6e565b801561249d5780601f106124725761010080835404028352916020019161249d565b820191906000526020600020905b81548152906001019060200180831161248057829003601f168201915b505050505081526020019060010190612405565b505050506012612710612dcc565b9050919050565b60606125de826040518060400160405280600881526020017f544143544943414c0000000000000000000000000000000000000000000000008152506013805480602002602001604051908101604052809291908181526020016000905b828210156125d057838290600052602060002001805461254390614b6e565b80601f016020809104026020016040519081016040528092919081815260200182805461256f90614b6e565b80156125bc5780601f10612591576101008083540402835291602001916125bc565b820191906000526020600020905b81548152906001019060200180831161259f57829003601f168201915b505050505081526020019060010190612524565b505050506014612710612dcc565b9050919050565b60606126fd826040518060400160405280600581526020017f4d454c45450000000000000000000000000000000000000000000000000000008152506015805480602002602001604051908101604052809291908181526020016000905b828210156126ef57838290600052602060002001805461266290614b6e565b80601f016020809104026020016040519081016040528092919081815260200182805461268e90614b6e565b80156126db5780601f106126b0576101008083540402835291602001916126db565b820191906000526020600020905b8154815290600101906020018083116126be57829003601f168201915b505050505081526020019060010190612643565b505050506016612710612dcc565b9050919050565b6060600082141561274c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128ac565b600082905060005b6000821461277e57808061276790614ba0565b915050600a8261277791906149e7565b9150612754565b60008167ffffffffffffffff8111156127c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127f25781602001600182028036833780820191505090505b5090505b600085146128a55760018261280b9190614a72565b9150600a8561281a9190614be9565b60306128269190614991565b60f81b818381518110612862577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561289e91906149e7565b94506127f6565b8093505050505b919050565b60606000825114156128d457604051806020016040528060008152509050612a57565b6000604051806060016040528060408152602001614dad60409139905060006003600285516129039190614991565b61290d91906149e7565b60046129199190614a18565b9050600060208261292a9190614991565b67ffffffffffffffff811115612969577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561299b5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015612a16576003830192508251603f8160121c1685015160f81b8252600182019150603f81600c1c1685015160f81b8252600182019150603f8160061c1685015160f81b8252600182019150603f811685015160f81b8252600182019150506129af565b600389510660018114612a305760028114612a4057612a4b565b613d3d60f01b6002830352612a4b565b603d60f81b60018303525b50505050508093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ad1838383612ee4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b1457612b0f81612ee9565b612b53565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b5257612b518382612f32565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b9657612b918161309f565b612bd5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bd457612bd382826131e2565b5b5b505050565b612be48383613261565b612bf16000848484612c35565b612c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2790614652565b60405180910390fd5b505050565b6000612c568473ffffffffffffffffffffffffffffffffffffffff1661342f565b15612dbf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c7f611c2e565b8786866040518563ffffffff1660e01b8152600401612ca194939291906145a9565b602060405180830381600087803b158015612cbb57600080fd5b505af1925050508015612cec57506040513d601f19601f82011682018060405250810190612ce9919061377c565b60015b612d6f573d8060008114612d1c576040519150601f19603f3d011682016040523d82523d6000602084013e612d21565b606091505b50600081511415612d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5e90614652565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dc4565b600190505b949350505050565b6060600082612e0387612dde8a612704565b604051602001612def9291906143b9565b604051602081830303815290604052613442565b612e0d9190614be9565b905060606000805b8680549050811015612ed457868181548110612e5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015482612e709190614991565b9150818411612ec157878181518110612eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519250612ed4565b8080612ecc90614ba0565b915050612e15565b5081935050505095945050505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f3f84610b8f565b612f499190614a72565b905060006007600084815260200190815260200160002054905081811461302e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130b39190614a72565b9050600060096000848152602001908152602001600020549050600060088381548110613109577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613151577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806131c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006131ed83610b8f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c8906147b2565b60405180910390fd5b6132da81611bc2565b1561331a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331190614692565b60405180910390fd5b61332660008383612ac6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133769190614991565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60008160405160200161345591906143a2565b6040516020818303038152906040528051906020012060001c9050919050565b6040518061022001604052806011905b60608152602001906001900390816134855790505090565b60006134b06134ab8461491e565b6148ed565b9050828152602081018484840111156134c857600080fd5b6134d3848285614b2c565b509392505050565b6000813590506134ea81614ce7565b92915050565b6000813590506134ff81614cfe565b92915050565b60008135905061351481614d15565b92915050565b60008135905061352981614d2c565b92915050565b60008151905061353e81614d2c565b92915050565b600082601f83011261355557600080fd5b813561356584826020860161349d565b91505092915050565b60008135905061357d81614d43565b92915050565b60006020828403121561359557600080fd5b60006135a3848285016134db565b91505092915050565b6000602082840312156135be57600080fd5b60006135cc848285016134f0565b91505092915050565b600080604083850312156135e857600080fd5b60006135f6858286016134db565b9250506020613607858286016134db565b9150509250929050565b60008060006060848603121561362657600080fd5b6000613634868287016134db565b9350506020613645868287016134db565b92505060406136568682870161356e565b9150509250925092565b6000806000806080858703121561367657600080fd5b6000613684878288016134db565b9450506020613695878288016134db565b93505060406136a68782880161356e565b925050606085013567ffffffffffffffff8111156136c357600080fd5b6136cf87828801613544565b91505092959194509250565b600080604083850312156136ee57600080fd5b60006136fc858286016134db565b925050602061370d85828601613505565b9150509250929050565b6000806040838503121561372a57600080fd5b6000613738858286016134db565b92505060206137498582860161356e565b9150509250929050565b60006020828403121561376557600080fd5b60006137738482850161351a565b91505092915050565b60006020828403121561378e57600080fd5b600061379c8482850161352f565b91505092915050565b6000602082840312156137b757600080fd5b60006137c58482850161356e565b91505092915050565b6137d781614aa6565b82525050565b6137e681614aca565b82525050565b60006137f78261494e565b6138018185614964565b9350613811818560208601614b3b565b61381a81614cd6565b840191505092915050565b600061383082614959565b61383a8185614975565b935061384a818560208601614b3b565b61385381614cd6565b840191505092915050565b600061386982614959565b6138738185614986565b9350613883818560208601614b3b565b80840191505092915050565b600061389c603083614986565b91507f227d2c207b2274726169745f74797065223a2022546163746963616c2044657660008301527f696365222c202276616c7565223a2022000000000000000000000000000000006020830152603082019050919050565b6000613902602b83614975565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613968603283614975565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006139ce602683614975565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a34601c83614975565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613a74603a83614986565b91507f2261747472696275746573223a205b7b2274726169745f74797065223a20225060008301527f72696d61727920576561706f6e222c202276616c7565223a20220000000000006020830152603a82019050919050565b6000613ada602483614975565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b40601983614975565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613b80601f83614975565b91507f45746865722076616c75652073656e74206973206e6f7420636f7272656374006000830152602082019050919050565b6000613bc0602c83614975565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613c26603883614975565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613c8c602a83614975565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cf2602983614975565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d58601883614975565b91507f546f6b656e206973206e6f74206d696e746564207965742e00000000000000006000830152602082019050919050565b6000613d98602683614986565b91507f227d2c207b2274726169745f74797065223a20224d656c6565222c202276616c60008301527f7565223a202200000000000000000000000000000000000000000000000000006020830152602682019050919050565b6000613dfe602083614975565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613e3e602c83614975565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613ea4602083614975565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613ee4601083614975565b91507f546f6b656e20494420696e76616c6964000000000000000000000000000000006000830152602082019050919050565b6000613f24602983614975565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f8a601383614986565b91507f7b226e616d65223a20224c6f61646f75742023000000000000000000000000006000830152601382019050919050565b6000613fca608283614986565b91507f222c20226465736372697074696f6e223a20224c6f61646f757420697320726160008301527f6e646f6d697a6564206d6f6465726e20636f6d626174207061636b732067656e60208301527f65726174656420616e642073746f726564206f6e20636861696e2e222c20226960408301527f6d616765223a2022646174613a696d6167652f7376672b786d6c3b626173653660608301527f342c0000000000000000000000000000000000000000000000000000000000006080830152608282019050919050565b60006140a2602183614975565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614108602f83614986565b91507f227d2c207b2274726169745f74797065223a20224c65617468616c204465766960008301527f6365222c202276616c7565223a202200000000000000000000000000000000006020830152602f82019050919050565b600061416e601d83614986565b91507f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006000830152601d82019050919050565b60006141ae603183614975565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614214602c83614975565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061427a600383614986565b91507f222c2000000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b60006142ba603183614986565b91507f227d2c207b2274726169745f74797065223a20225365636f6e6461727920576560008301527f61706f6e222c202276616c7565223a20220000000000000000000000000000006020830152603182019050919050565b6000614320601f83614975565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000614360600483614986565b91507f227d5d7d000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b61439c81614b22565b82525050565b60006143ae828461385e565b915081905092915050565b60006143c5828561385e565b91506143d1828461385e565b91508190509392505050565b60006143e9828661385e565b91506143f5828561385e565b9150614401828461385e565b9150819050949350505050565b600061441a828c61385e565b9150614426828b61385e565b9150614432828a61385e565b915061443e828961385e565b915061444a828861385e565b9150614456828761385e565b9150614462828661385e565b915061446e828561385e565b915061447a828461385e565b91508190509a9950505050505050505050565b6000614499828961385e565b91506144a482613a67565b91506144b0828861385e565b91506144bb826142ad565b91506144c7828761385e565b91506144d2826140fb565b91506144de828661385e565b91506144e98261388f565b91506144f5828561385e565b915061450082613d8b565b915061450c828461385e565b915061451782614353565b9150819050979650505050505050565b600061453282613f7d565b915061453e828561385e565b915061454982613fbd565b9150614555828461385e565b91506145608261426d565b91508190509392505050565b600061457782614161565b9150614583828461385e565b915081905092915050565b60006020820190506145a360008301846137ce565b92915050565b60006080820190506145be60008301876137ce565b6145cb60208301866137ce565b6145d86040830185614393565b81810360608301526145ea81846137ec565b905095945050505050565b600060208201905061460a60008301846137dd565b92915050565b6000602082019050818103600083015261462a8184613825565b905092915050565b6000602082019050818103600083015261464b816138f5565b9050919050565b6000602082019050818103600083015261466b8161395b565b9050919050565b6000602082019050818103600083015261468b816139c1565b9050919050565b600060208201905081810360008301526146ab81613a27565b9050919050565b600060208201905081810360008301526146cb81613acd565b9050919050565b600060208201905081810360008301526146eb81613b33565b9050919050565b6000602082019050818103600083015261470b81613b73565b9050919050565b6000602082019050818103600083015261472b81613bb3565b9050919050565b6000602082019050818103600083015261474b81613c19565b9050919050565b6000602082019050818103600083015261476b81613c7f565b9050919050565b6000602082019050818103600083015261478b81613ce5565b9050919050565b600060208201905081810360008301526147ab81613d4b565b9050919050565b600060208201905081810360008301526147cb81613df1565b9050919050565b600060208201905081810360008301526147eb81613e31565b9050919050565b6000602082019050818103600083015261480b81613e97565b9050919050565b6000602082019050818103600083015261482b81613ed7565b9050919050565b6000602082019050818103600083015261484b81613f17565b9050919050565b6000602082019050818103600083015261486b81614095565b9050919050565b6000602082019050818103600083015261488b816141a1565b9050919050565b600060208201905081810360008301526148ab81614207565b9050919050565b600060208201905081810360008301526148cb81614313565b9050919050565b60006020820190506148e76000830184614393565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561491457614913614ca7565b5b8060405250919050565b600067ffffffffffffffff82111561493957614938614ca7565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061499c82614b22565b91506149a783614b22565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149dc576149db614c1a565b5b828201905092915050565b60006149f282614b22565b91506149fd83614b22565b925082614a0d57614a0c614c49565b5b828204905092915050565b6000614a2382614b22565b9150614a2e83614b22565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a6757614a66614c1a565b5b828202905092915050565b6000614a7d82614b22565b9150614a8883614b22565b925082821015614a9b57614a9a614c1a565b5b828203905092915050565b6000614ab182614b02565b9050919050565b6000614ac382614b02565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614b59578082015181840152602081019050614b3e565b83811115614b68576000848401525b50505050565b60006002820490506001821680614b8657607f821691505b60208210811415614b9a57614b99614c78565b5b50919050565b6000614bab82614b22565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614bde57614bdd614c1a565b5b600182019050919050565b6000614bf482614b22565b9150614bff83614b22565b925082614c0f57614c0e614c49565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614cf081614aa6565b8114614cfb57600080fd5b50565b614d0781614ab8565b8114614d1257600080fd5b50565b614d1e81614aca565b8114614d2957600080fd5b50565b614d3581614ad6565b8114614d4057600080fd5b50565b614d4c81614b22565b8114614d5757600080fd5b5056fe3c2f746578743e3c7465787420783d2231302220793d223530252220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223630252220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f746578743e3c7465787420783d2231302220793d223430252220636c6173733d2262617365223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d223330252220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223730252220636c6173733d2262617365223ea264697066735822122048a30f1ecdee320af1171d92a8ec7df3a112c727f7d2b5a2fd8a87656b10be1264736f6c63430008000033
Deployed Bytecode Sourcemap
50880:7360:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44660:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31549:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33108:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32631:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45300:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33998:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44968:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55521:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34408:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45490:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58059:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31243:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30973:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9491:94;;;;;;;;;;;;;:::i;:::-;;8840:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31718:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50950:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57792:259;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33401:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34664:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55633:2151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33767:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9740:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44660:224;44762:4;44801:35;44786:50;;;:11;:50;;;;:90;;;;44840:36;44864:11;44840:23;:36::i;:::-;44786:90;44779:97;;44660:224;;;:::o;31549:100::-;31603:13;31636:5;31629:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31549:100;:::o;33108:221::-;33184:7;33212:16;33220:7;33212;:16::i;:::-;33204:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33297:15;:24;33313:7;33297:24;;;;;;;;;;;;;;;;;;;;;33290:31;;33108:221;;;:::o;32631:411::-;32712:13;32728:23;32743:7;32728:14;:23::i;:::-;32712:39;;32776:5;32770:11;;:2;:11;;;;32762:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32870:5;32854:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32879:37;32896:5;32903:12;:10;:12::i;:::-;32879:16;:37::i;:::-;32854:62;32832:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33013:21;33022:2;33026:7;33013:8;:21::i;:::-;32631:411;;;:::o;45300:113::-;45361:7;45388:10;:17;;;;45381:24;;45300:113;:::o;33998:339::-;34193:41;34212:12;:10;:12::i;:::-;34226:7;34193:18;:41::i;:::-;34185:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34301:28;34311:4;34317:2;34321:7;34301:9;:28::i;:::-;33998:339;;;:::o;44968:256::-;45065:7;45101:23;45118:5;45101:16;:23::i;:::-;45093:5;:31;45085:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;45190:12;:19;45203:5;45190:19;;;;;;;;;;;;;;;:26;45210:5;45190:26;;;;;;;;;;;;45183:33;;44968:256;;;;:::o;55521:104::-;55577:4;55601:16;55609:7;55601;:16::i;:::-;55594:23;;55521:104;;;:::o;34408:185::-;34546:39;34563:4;34569:2;34573:7;34546:39;;;;;;;;;;;;:16;:39::i;:::-;34408:185;;;:::o;45490:233::-;45565:7;45601:30;:28;:30::i;:::-;45593:5;:38;45585:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;45698:10;45709:5;45698:17;;;;;;;;;;;;;;;;;;;;;;;;45691:24;;45490:233;;;:::o;58059:117::-;9071:12;:10;:12::i;:::-;9060:23;;:7;:5;:7::i;:::-;:23;;;9052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58133:2:::1;58125:20;;:43;58146:21;58125:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;58059:117:::0;:::o;31243:239::-;31315:7;31335:13;31351:7;:16;31359:7;31351:16;;;;;;;;;;;;;;;;;;;;;31335:32;;31403:1;31386:19;;:5;:19;;;;31378:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31469:5;31462:12;;;31243:239;;;:::o;30973:208::-;31045:7;31090:1;31073:19;;:5;:19;;;;31065:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31157:9;:16;31167:5;31157:16;;;;;;;;;;;;;;;;31150:23;;30973:208;;;:::o;9491:94::-;9071:12;:10;:12::i;:::-;9060:23;;:7;:5;:7::i;:::-;:23;;;9052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9556:21:::1;9574:1;9556:9;:21::i;:::-;9491:94::o:0;8840:87::-;8886:7;8913:6;;;;;;;;;;;8906:13;;8840:87;:::o;31718:104::-;31774:13;31807:7;31800:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31718:104;:::o;50950:40::-;;;;:::o;57792:259::-;11875:1;12471:7;;:19;;12463:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;11875:1;12604:7;:18;;;;57880:1:::1;57870:7;:11;:34;;;;;51293:5;57885:7;:19;;57870:34;57862:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;57953:9;57944:5;;:18;;57936:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;58011:32;58021:12;:10;:12::i;:::-;58035:7;58011:9;:32::i;:::-;11831:1:::0;12783:7;:22;;;;57792:259;:::o;33401:295::-;33516:12;:10;:12::i;:::-;33504:24;;:8;:24;;;;33496:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33616:8;33571:18;:32;33590:12;:10;:12::i;:::-;33571:32;;;;;;;;;;;;;;;:42;33604:8;33571:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33669:8;33640:48;;33655:12;:10;:12::i;:::-;33640:48;;;33679:8;33640:48;;;;;;:::i;:::-;;;;;;;;33401:295;;:::o;34664:328::-;34839:41;34858:12;:10;:12::i;:::-;34872:7;34839:18;:41::i;:::-;34831:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34945:39;34959:4;34965:2;34969:7;34978:5;34945:13;:39::i;:::-;34664:328;;;;:::o;55633:2151::-;55698:13;55732:16;55740:7;55732;:16::i;:::-;55724:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;55790:23;;:::i;:::-;55826:267;;;;;;;;;;;;;;;;;:5;55832:1;55826:8;;;;;;;;;;;;;;;;;;:267;;;;56115:31;56138:7;56115:22;:31::i;:::-;56104:5;56110:1;56104:8;;;;;;;;;;;;;;;;;;:42;;;;56157:54;;;;;;;;;;;;;;;;;:5;56163:1;56157:8;;;;;;;;;;;;;;;;;;:54;;;;56233:33;56258:7;56233:24;:33::i;:::-;56222:5;56228:1;56222:8;;;;;;;;;;;;;;;;;;:44;;;;56277:54;;;;;;;;;;;;;;;;;:5;56283:1;56277:8;;;;;;;;;;;;;;;;;;:54;;;;56353:24;56369:7;56353:15;:24::i;:::-;56342:5;56348:1;56342:8;;;;;;;;;;;;;;;;;;:35;;;;56388:54;;;;;;;;;;;;;;;;;:5;56394:1;56388:8;;;;;;;;;;;;;;;;;;:54;;;;56464:26;56482:7;56464:17;:26::i;:::-;56453:5;56459:1;56453:8;;;;;;;;;;;;;;;;;;:37;;;;56501:54;;;;;;;;;;;;;;;;;:5;56507:1;56501:8;;;;;;;;;;;;;;;;;;:54;;;;56577:23;56592:7;56577:14;:23::i;:::-;56566:5;56572:1;56566:8;;;;;;;;;;;;;;;;;;:34;;;;56611:27;;;;;;;;;;;;;;;;;:5;56617:2;56611:9;;;;;;;;;;;;;;;;;;:27;;;;56680:20;56727:5;56733:1;56727:8;;;;;;;;;;;;;;;;;;;56737:5;56743:1;56737:8;;;;;;;;;;;;;;;;;;;56747:5;56753:1;56747:8;;;;;;;;;;;;;;;;;;;56757:5;56763:1;56757:8;;;;;;;;;;;;;;;;;;;56767:5;56773:1;56767:8;;;;;;;;;;;;;;;;;;;56777:5;56783:1;56777:8;;;;;;;;;;;;;;;;;;;56787:5;56793:1;56787:8;;;;;;;;;;;;;;;;;;;56797:5;56803:1;56797:8;;;;;;;;;;;;;;;;;;;56807:5;56813:1;56807:8;;;;;;;;;;;;;;;;;;;56710:106;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56680:137;;56861:6;56869:5;56875:1;56869:8;;;;;;;;;;;;;;;;;;;56879:5;56885:2;56879:9;;;;;;;;;;;;;;;;;;;56844:45;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56828:62;;56925:18;56993:25;57010:7;56993:16;:25::i;:::-;57154:28;57174:6;57154:13;:28::i;:::-;56953:237;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56925:266;;57262:4;57330:5;57336:1;57330:8;;;;;;;;;;;;;;;;;;;57393:5;57399:1;57393:8;;;;;;;;;;;;;;;;;;;57454:5;57460:1;57454:8;;;;;;;;;;;;;;;;;;;57516:5;57522:1;57516:8;;;;;;;;;;;;;;;;;;;57567:5;57573:1;57567:8;;;;;;;;;;;;;;;;;;;57245:339;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57231:354;;57606:25;57634:26;57654:4;57634:13;:26::i;:::-;57606:54;;57737:11;57687:62;;;;;;;;:::i;:::-;;;;;;;;;;;;;57671:79;;57770:6;57763:13;;;;;;55633:2151;;;:::o;33767:164::-;33864:4;33888:18;:25;33907:5;33888:25;;;;;;;;;;;;;;;:35;33914:8;33888:35;;;;;;;;;;;;;;;;;;;;;;;;;33881:42;;33767:164;;;;:::o;9740:192::-;9071:12;:10;:12::i;:::-;9060:23;;:7;:5;:7::i;:::-;:23;;;9052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9849:1:::1;9829:22;;:8;:22;;;;9821:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9905:19;9915:8;9905:9;:19::i;:::-;9740:192:::0;:::o;30604:305::-;30706:4;30758:25;30743:40;;;:11;:40;;;;:105;;;;30815:33;30800:48;;;:11;:48;;;;30743:105;:158;;;;30865:36;30889:11;30865:23;:36::i;:::-;30743:158;30723:178;;30604:305;;;:::o;36502:127::-;36567:4;36619:1;36591:30;;:7;:16;36599:7;36591:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36584:37;;36502:127;;;:::o;7591:98::-;7644:7;7671:10;7664:17;;7591:98;:::o;40484:174::-;40586:2;40559:15;:24;40575:7;40559:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40642:7;40638:2;40604:46;;40613:23;40628:7;40613:14;:23::i;:::-;40604:46;;;;;;;;;;;;40484:174;;:::o;36796:348::-;36889:4;36914:16;36922:7;36914;:16::i;:::-;36906:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36990:13;37006:23;37021:7;37006:14;:23::i;:::-;36990:39;;37059:5;37048:16;;:7;:16;;;:51;;;;37092:7;37068:31;;:20;37080:7;37068:11;:20::i;:::-;:31;;;37048:51;:87;;;;37103:32;37120:5;37127:7;37103:16;:32::i;:::-;37048:87;37040:96;;;36796:348;;;;:::o;39788:578::-;39947:4;39920:31;;:23;39935:7;39920:14;:23::i;:::-;:31;;;39912:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40030:1;40016:16;;:2;:16;;;;40008:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40086:39;40107:4;40113:2;40117:7;40086:20;:39::i;:::-;40190:29;40207:1;40211:7;40190:8;:29::i;:::-;40251:1;40232:9;:15;40242:4;40232:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;40280:1;40263:9;:13;40273:2;40263:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40311:2;40292:7;:16;40300:7;40292:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40350:7;40346:2;40331:27;;40340:4;40331:27;;;;;;;;;;;;39788:578;;;:::o;9940:173::-;9996:16;10015:6;;;;;;;;;;;9996:25;;10041:8;10032:6;;:17;;;;;;;;;;;;;;;;;;10096:8;10065:40;;10086:8;10065:40;;;;;;;;;;;;9940:173;;:::o;37486:110::-;37562:26;37572:2;37576:7;37562:26;;;;;;;;;;;;:9;:26::i;:::-;37486:110;;:::o;35874:315::-;36031:28;36041:4;36047:2;36051:7;36031:9;:28::i;:::-;36078:48;36101:4;36107:2;36111:7;36120:5;36078:22;:48::i;:::-;36070:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35874:315;;;;:::o;54458:219::-;54530:13;54563:106;54597:7;54606:14;;;;;;;;;;;;;;;;;54622;54563:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54638:20;51293:5;54563:33;:106::i;:::-;54556:113;;54458:219;;;:::o;54685:227::-;54759:13;54792:112;54826:7;54835:16;;;;;;;;;;;;;;;;;54853;54792:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54871:22;51293:5;54792:33;:112::i;:::-;54785:119;;54685:227;;;:::o;54920:191::-;54985:13;55018:85;55052:7;55061;;;;;;;;;;;;;;;;;55070;55018:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55079:13;51293:5;55018:33;:85::i;:::-;55011:92;;54920:191;;;:::o;55119:198::-;55186:13;55219:90;55253:7;55262:8;;;;;;;;;;;;;;;;;55272:9;55219:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55283:15;51293:5;55219:33;:90::i;:::-;55212:97;;55119:198;;;:::o;55329:184::-;55393:13;55426:79;55460:7;55469:5;;;;;;;;;;;;;;;;;55476;55426:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55483:11;51293:5;55426:33;:79::i;:::-;55419:86;;55329:184;;;:::o;1941:723::-;1997:13;2227:1;2218:5;:10;2214:53;;;2245:10;;;;;;;;;;;;;;;;;;;;;2214:53;2277:12;2292:5;2277:20;;2308:14;2333:78;2348:1;2340:4;:9;2333:78;;2366:8;;;;;:::i;:::-;;;;2397:2;2389:10;;;;;:::i;:::-;;;2333:78;;;2421:19;2453:6;2443:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2421:39;;2471:154;2487:1;2478:5;:10;2471:154;;2515:1;2505:11;;;;;:::i;:::-;;;2582:2;2574:5;:10;;;;:::i;:::-;2561:2;:24;;;;:::i;:::-;2548:39;;2531:6;2538;2531:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;2611:2;2602:11;;;;;:::i;:::-;;;2471:154;;;2649:6;2635:21;;;;;1941:723;;;;:::o;4914:2037::-;4972:13;5017:1;5002:4;:11;:16;4998:31;;;5020:9;;;;;;;;;;;;;;;;4998:31;5089:19;5111:5;;;;;;;;;;;;;;;;;5089:27;;5168:18;5214:1;5209;5195:4;:11;:15;;;;:::i;:::-;5194:21;;;;:::i;:::-;5189:1;:27;;;;:::i;:::-;5168:48;;5299:20;5346:2;5333:10;:15;;;;:::i;:::-;5322:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:50;;5446:10;5438:6;5431:26;5553:1;5546:5;5542:13;5624:4;5675;5669:11;5660:7;5656:25;5783:2;5775:6;5771:15;5868:810;5887:6;5878:7;5875:19;5868:810;;;5953:1;5944:7;5940:15;5929:26;;6040:7;6034:14;6187:4;6179:5;6175:2;6171:14;6167:25;6157:8;6153:40;6147:47;6142:3;6138:57;6127:9;6120:76;6241:1;6230:9;6226:17;6213:30;;6327:4;6319:5;6315:2;6311:14;6307:25;6297:8;6293:40;6287:47;6282:3;6278:57;6267:9;6260:76;6381:1;6370:9;6366:17;6353:30;;6467:4;6459:5;6456:1;6451:14;6447:25;6437:8;6433:40;6427:47;6422:3;6418:57;6407:9;6400:76;6521:1;6510:9;6506:17;6493:30;;6607:4;6599:5;6587:25;6577:8;6573:40;6567:47;6562:3;6558:57;6547:9;6540:76;6661:1;6650:9;6646:17;6633:30;;5911:767;5868:810;;;6763:1;6756:4;6750:11;6746:19;6784:1;6779:54;;;;6852:1;6847:52;;;;6739:160;;6779:54;6823:6;6818:3;6814:16;6810:1;6799:9;6795:17;6788:43;6779:54;;6847:52;6891:4;6886:3;6882:14;6878:1;6867:9;6863:17;6856:41;6739:160;;5371:1539;;;;6937:6;6930:13;;;;;4914:2037;;;;:::o;29102:157::-;29187:4;29226:25;29211:40;;;:11;:40;;;;29204:47;;29102:157;;;:::o;46336:589::-;46480:45;46507:4;46513:2;46517:7;46480:26;:45::i;:::-;46558:1;46542:18;;:4;:18;;;46538:187;;;46577:40;46609:7;46577:31;:40::i;:::-;46538:187;;;46647:2;46639:10;;:4;:10;;;46635:90;;46666:47;46699:4;46705:7;46666:32;:47::i;:::-;46635:90;46538:187;46753:1;46739:16;;:2;:16;;;46735:183;;;46772:45;46809:7;46772:36;:45::i;:::-;46735:183;;;46845:4;46839:10;;:2;:10;;;46835:83;;46866:40;46894:2;46898:7;46866:27;:40::i;:::-;46835:83;46735:183;46336:589;;;:::o;37823:321::-;37953:18;37959:2;37963:7;37953:5;:18::i;:::-;38004:54;38035:1;38039:2;38043:7;38052:5;38004:22;:54::i;:::-;37982:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37823:321;;;:::o;41223:799::-;41378:4;41399:15;:2;:13;;;:15::i;:::-;41395:620;;;41451:2;41435:36;;;41472:12;:10;:12::i;:::-;41486:4;41492:7;41501:5;41435:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41431:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41694:1;41677:6;:13;:18;41673:272;;;41720:60;;;;;;;;;;:::i;:::-;;;;;;;;41673:272;41895:6;41889:13;41880:6;41876:2;41872:15;41865:38;41431:529;41568:41;;;41558:51;;;:6;:51;;;;41551:58;;;;;41395:620;41999:4;41992:11;;41223:799;;;;;;;:::o;3995:583::-;4161:13;4187:12;4275:8;4202:70;4233:9;4244:25;4261:7;4244:16;:25::i;:::-;4216:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4202:6;:70::i;:::-;:81;;;;:::i;:::-;4187:96;;4294:18;4325:11;4356:9;4351:196;4375:8;:15;;;;4371:1;:19;4351:196;;;4419:8;4428:1;4419:11;;;;;;;;;;;;;;;;;;;;;;;;4412:18;;;;;:::i;:::-;;;4457:3;4449:4;:11;4445:91;;4488:5;4494:1;4488:8;;;;;;;;;;;;;;;;;;;;;;4481:15;;4515:5;;4445:91;4392:3;;;;;:::i;:::-;;;;4351:196;;;;4566:4;4559:11;;;;;3995:583;;;;;;;:::o;42594:126::-;;;;:::o;47648:164::-;47752:10;:17;;;;47725:15;:24;47741:7;47725:24;;;;;;;;;;;:44;;;;47780:10;47796:7;47780:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47648:164;:::o;48439:988::-;48705:22;48755:1;48730:22;48747:4;48730:16;:22::i;:::-;:26;;;;:::i;:::-;48705:51;;48767:18;48788:17;:26;48806:7;48788:26;;;;;;;;;;;;48767:47;;48935:14;48921:10;:28;48917:328;;48966:19;48988:12;:18;49001:4;48988:18;;;;;;;;;;;;;;;:34;49007:14;48988:34;;;;;;;;;;;;48966:56;;49072:11;49039:12;:18;49052:4;49039:18;;;;;;;;;;;;;;;:30;49058:10;49039:30;;;;;;;;;;;:44;;;;49189:10;49156:17;:30;49174:11;49156:30;;;;;;;;;;;:43;;;;48917:328;;49341:17;:26;49359:7;49341:26;;;;;;;;;;;49334:33;;;49385:12;:18;49398:4;49385:18;;;;;;;;;;;;;;;:34;49404:14;49385:34;;;;;;;;;;;49378:41;;;48439:988;;;;:::o;49722:1079::-;49975:22;50020:1;50000:10;:17;;;;:21;;;;:::i;:::-;49975:46;;50032:18;50053:15;:24;50069:7;50053:24;;;;;;;;;;;;50032:45;;50404:19;50426:10;50437:14;50426:26;;;;;;;;;;;;;;;;;;;;;;;;50404:48;;50490:11;50465:10;50476;50465:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;50601:10;50570:15;:28;50586:11;50570:28;;;;;;;;;;;:41;;;;50742:15;:24;50758:7;50742:24;;;;;;;;;;;50735:31;;;50777:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49722:1079;;;;:::o;47226:221::-;47311:14;47328:20;47345:2;47328:16;:20::i;:::-;47311:37;;47386:7;47359:12;:16;47372:2;47359:16;;;;;;;;;;;;;;;:24;47376:6;47359:24;;;;;;;;;;;:34;;;;47433:6;47404:17;:26;47422:7;47404:26;;;;;;;;;;;:35;;;;47226:221;;;:::o;38480:382::-;38574:1;38560:16;;:2;:16;;;;38552:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38633:16;38641:7;38633;:16::i;:::-;38632:17;38624:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38695:45;38724:1;38728:2;38732:7;38695:20;:45::i;:::-;38770:1;38753:9;:13;38763:2;38753:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38801:2;38782:7;:16;38790:7;38782:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38846:7;38842:2;38821:33;;38838:1;38821:33;;;;;;;;;;;;38480:382;;:::o;20967:387::-;21027:4;21235:12;21302:7;21290:20;21282:28;;21345:1;21338:4;:8;21331:15;;;20967:387;;;:::o;3849:138::-;3909:7;3971:5;3954:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;3944:34;;;;;;3936:43;;3929:50;;3849:138;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:139::-;;439:6;426:20;417:29;;455:33;482:5;455:33;:::i;:::-;407:87;;;;:::o;500:155::-;;592:6;579:20;570:29;;608:41;643:5;608:41;:::i;:::-;560:95;;;;:::o;661:133::-;;742:6;729:20;720:29;;758:30;782:5;758:30;:::i;:::-;710:84;;;;:::o;800:137::-;;883:6;870:20;861:29;;899:32;925:5;899:32;:::i;:::-;851:86;;;;:::o;943:141::-;;1030:6;1024:13;1015:22;;1046:32;1072:5;1046:32;:::i;:::-;1005:79;;;;:::o;1103:271::-;;1207:3;1200:4;1192:6;1188:17;1184:27;1174:2;;1225:1;1222;1215:12;1174:2;1265:6;1252:20;1290:78;1364:3;1356:6;1349:4;1341:6;1337:17;1290:78;:::i;:::-;1281:87;;1164:210;;;;;:::o;1380:139::-;;1464:6;1451:20;1442:29;;1480:33;1507:5;1480:33;:::i;:::-;1432:87;;;;:::o;1525:262::-;;1633:2;1621:9;1612:7;1608:23;1604:32;1601:2;;;1649:1;1646;1639:12;1601:2;1692:1;1717:53;1762:7;1753:6;1742:9;1738:22;1717:53;:::i;:::-;1707:63;;1663:117;1591:196;;;;:::o;1793:278::-;;1909:2;1897:9;1888:7;1884:23;1880:32;1877:2;;;1925:1;1922;1915:12;1877:2;1968:1;1993:61;2046:7;2037:6;2026:9;2022:22;1993:61;:::i;:::-;1983:71;;1939:125;1867:204;;;;:::o;2077:407::-;;;2202:2;2190:9;2181:7;2177:23;2173:32;2170:2;;;2218:1;2215;2208:12;2170:2;2261:1;2286:53;2331:7;2322:6;2311:9;2307:22;2286:53;:::i;:::-;2276:63;;2232:117;2388:2;2414:53;2459:7;2450:6;2439:9;2435:22;2414:53;:::i;:::-;2404:63;;2359:118;2160:324;;;;;:::o;2490:552::-;;;;2632:2;2620:9;2611:7;2607:23;2603:32;2600:2;;;2648:1;2645;2638:12;2600:2;2691:1;2716:53;2761:7;2752:6;2741:9;2737:22;2716:53;:::i;:::-;2706:63;;2662:117;2818:2;2844:53;2889:7;2880:6;2869:9;2865:22;2844:53;:::i;:::-;2834:63;;2789:118;2946:2;2972:53;3017:7;3008:6;2997:9;2993:22;2972:53;:::i;:::-;2962:63;;2917:118;2590:452;;;;;:::o;3048:809::-;;;;;3216:3;3204:9;3195:7;3191:23;3187:33;3184:2;;;3233:1;3230;3223:12;3184:2;3276:1;3301:53;3346:7;3337:6;3326:9;3322:22;3301:53;:::i;:::-;3291:63;;3247:117;3403:2;3429:53;3474:7;3465:6;3454:9;3450:22;3429:53;:::i;:::-;3419:63;;3374:118;3531:2;3557:53;3602:7;3593:6;3582:9;3578:22;3557:53;:::i;:::-;3547:63;;3502:118;3687:2;3676:9;3672:18;3659:32;3718:18;3710:6;3707:30;3704:2;;;3750:1;3747;3740:12;3704:2;3778:62;3832:7;3823:6;3812:9;3808:22;3778:62;:::i;:::-;3768:72;;3630:220;3174:683;;;;;;;:::o;3863:401::-;;;3985:2;3973:9;3964:7;3960:23;3956:32;3953:2;;;4001:1;3998;3991:12;3953:2;4044:1;4069:53;4114:7;4105:6;4094:9;4090:22;4069:53;:::i;:::-;4059:63;;4015:117;4171:2;4197:50;4239:7;4230:6;4219:9;4215:22;4197:50;:::i;:::-;4187:60;;4142:115;3943:321;;;;;:::o;4270:407::-;;;4395:2;4383:9;4374:7;4370:23;4366:32;4363:2;;;4411:1;4408;4401:12;4363:2;4454:1;4479:53;4524:7;4515:6;4504:9;4500:22;4479:53;:::i;:::-;4469:63;;4425:117;4581:2;4607:53;4652:7;4643:6;4632:9;4628:22;4607:53;:::i;:::-;4597:63;;4552:118;4353:324;;;;;:::o;4683:260::-;;4790:2;4778:9;4769:7;4765:23;4761:32;4758:2;;;4806:1;4803;4796:12;4758:2;4849:1;4874:52;4918:7;4909:6;4898:9;4894:22;4874:52;:::i;:::-;4864:62;;4820:116;4748:195;;;;:::o;4949:282::-;;5067:2;5055:9;5046:7;5042:23;5038:32;5035:2;;;5083:1;5080;5073:12;5035:2;5126:1;5151:63;5206:7;5197:6;5186:9;5182:22;5151:63;:::i;:::-;5141:73;;5097:127;5025:206;;;;:::o;5237:262::-;;5345:2;5333:9;5324:7;5320:23;5316:32;5313:2;;;5361:1;5358;5351:12;5313:2;5404:1;5429:53;5474:7;5465:6;5454:9;5450:22;5429:53;:::i;:::-;5419:63;;5375:117;5303:196;;;;:::o;5505:118::-;5592:24;5610:5;5592:24;:::i;:::-;5587:3;5580:37;5570:53;;:::o;5629:109::-;5710:21;5725:5;5710:21;:::i;:::-;5705:3;5698:34;5688:50;;:::o;5744:360::-;;5858:38;5890:5;5858:38;:::i;:::-;5912:70;5975:6;5970:3;5912:70;:::i;:::-;5905:77;;5991:52;6036:6;6031:3;6024:4;6017:5;6013:16;5991:52;:::i;:::-;6068:29;6090:6;6068:29;:::i;:::-;6063:3;6059:39;6052:46;;5834:270;;;;;:::o;6110:364::-;;6226:39;6259:5;6226:39;:::i;:::-;6281:71;6345:6;6340:3;6281:71;:::i;:::-;6274:78;;6361:52;6406:6;6401:3;6394:4;6387:5;6383:16;6361:52;:::i;:::-;6438:29;6460:6;6438:29;:::i;:::-;6433:3;6429:39;6422:46;;6202:272;;;;;:::o;6480:377::-;;6614:39;6647:5;6614:39;:::i;:::-;6669:89;6751:6;6746:3;6669:89;:::i;:::-;6662:96;;6767:52;6812:6;6807:3;6800:4;6793:5;6789:16;6767:52;:::i;:::-;6844:6;6839:3;6835:16;6828:23;;6590:267;;;;;:::o;6863:496::-;;7044:85;7126:2;7121:3;7044:85;:::i;:::-;7037:92;;7159:66;7155:1;7150:3;7146:11;7139:87;7257:66;7252:2;7247:3;7243:12;7236:88;7350:2;7345:3;7341:12;7334:19;;7027:332;;;:::o;7365:375::-;;7528:67;7592:2;7587:3;7528:67;:::i;:::-;7521:74;;7625:34;7621:1;7616:3;7612:11;7605:55;7691:13;7686:2;7681:3;7677:12;7670:35;7731:2;7726:3;7722:12;7715:19;;7511:229;;;:::o;7746:382::-;;7909:67;7973:2;7968:3;7909:67;:::i;:::-;7902:74;;8006:34;8002:1;7997:3;7993:11;7986:55;8072:20;8067:2;8062:3;8058:12;8051:42;8119:2;8114:3;8110:12;8103:19;;7892:236;;;:::o;8134:370::-;;8297:67;8361:2;8356:3;8297:67;:::i;:::-;8290:74;;8394:34;8390:1;8385:3;8381:11;8374:55;8460:8;8455:2;8450:3;8446:12;8439:30;8495:2;8490:3;8486:12;8479:19;;8280:224;;;:::o;8510:326::-;;8673:67;8737:2;8732:3;8673:67;:::i;:::-;8666:74;;8770:30;8766:1;8761:3;8757:11;8750:51;8827:2;8822:3;8818:12;8811:19;;8656:180;;;:::o;8842:496::-;;9023:85;9105:2;9100:3;9023:85;:::i;:::-;9016:92;;9138:66;9134:1;9129:3;9125:11;9118:87;9236:66;9231:2;9226:3;9222:12;9215:88;9329:2;9324:3;9320:12;9313:19;;9006:332;;;:::o;9344:368::-;;9507:67;9571:2;9566:3;9507:67;:::i;:::-;9500:74;;9604:34;9600:1;9595:3;9591:11;9584:55;9670:6;9665:2;9660:3;9656:12;9649:28;9703:2;9698:3;9694:12;9687:19;;9490:222;;;:::o;9718:323::-;;9881:67;9945:2;9940:3;9881:67;:::i;:::-;9874:74;;9978:27;9974:1;9969:3;9965:11;9958:48;10032:2;10027:3;10023:12;10016:19;;9864:177;;;:::o;10047:329::-;;10210:67;10274:2;10269:3;10210:67;:::i;:::-;10203:74;;10307:33;10303:1;10298:3;10294:11;10287:54;10367:2;10362:3;10358:12;10351:19;;10193:183;;;:::o;10382:376::-;;10545:67;10609:2;10604:3;10545:67;:::i;:::-;10538:74;;10642:34;10638:1;10633:3;10629:11;10622:55;10708:14;10703:2;10698:3;10694:12;10687:36;10749:2;10744:3;10740:12;10733:19;;10528:230;;;:::o;10764:388::-;;10927:67;10991:2;10986:3;10927:67;:::i;:::-;10920:74;;11024:34;11020:1;11015:3;11011:11;11004:55;11090:26;11085:2;11080:3;11076:12;11069:48;11143:2;11138:3;11134:12;11127:19;;10910:242;;;:::o;11158:374::-;;11321:67;11385:2;11380:3;11321:67;:::i;:::-;11314:74;;11418:34;11414:1;11409:3;11405:11;11398:55;11484:12;11479:2;11474:3;11470:12;11463:34;11523:2;11518:3;11514:12;11507:19;;11304:228;;;:::o;11538:373::-;;11701:67;11765:2;11760:3;11701:67;:::i;:::-;11694:74;;11798:34;11794:1;11789:3;11785:11;11778:55;11864:11;11859:2;11854:3;11850:12;11843:33;11902:2;11897:3;11893:12;11886:19;;11684:227;;;:::o;11917:322::-;;12080:67;12144:2;12139:3;12080:67;:::i;:::-;12073:74;;12177:26;12173:1;12168:3;12164:11;12157:47;12230:2;12225:3;12221:12;12214:19;;12063:176;;;:::o;12245:496::-;;12426:85;12508:2;12503:3;12426:85;:::i;:::-;12419:92;;12541:66;12537:1;12532:3;12528:11;12521:87;12639:66;12634:2;12629:3;12625:12;12618:88;12732:2;12727:3;12723:12;12716:19;;12409:332;;;:::o;12747:330::-;;12910:67;12974:2;12969:3;12910:67;:::i;:::-;12903:74;;13007:34;13003:1;12998:3;12994:11;12987:55;13068:2;13063:3;13059:12;13052:19;;12893:184;;;:::o;13083:376::-;;13246:67;13310:2;13305:3;13246:67;:::i;:::-;13239:74;;13343:34;13339:1;13334:3;13330:11;13323:55;13409:14;13404:2;13399:3;13395:12;13388:36;13450:2;13445:3;13441:12;13434:19;;13229:230;;;:::o;13465:330::-;;13628:67;13692:2;13687:3;13628:67;:::i;:::-;13621:74;;13725:34;13721:1;13716:3;13712:11;13705:55;13786:2;13781:3;13777:12;13770:19;;13611:184;;;:::o;13801:314::-;;13964:67;14028:2;14023:3;13964:67;:::i;:::-;13957:74;;14061:18;14057:1;14052:3;14048:11;14041:39;14106:2;14101:3;14097:12;14090:19;;13947:168;;;:::o;14121:373::-;;14284:67;14348:2;14343:3;14284:67;:::i;:::-;14277:74;;14381:34;14377:1;14372:3;14368:11;14361:55;14447:11;14442:2;14437:3;14433:12;14426:33;14485:2;14480:3;14476:12;14469:19;;14267:227;;;:::o;14500:398::-;;14681:85;14763:2;14758:3;14681:85;:::i;:::-;14674:92;;14796:66;14792:1;14787:3;14783:11;14776:87;14889:2;14884:3;14880:12;14873:19;;14664:234;;;:::o;14904:699::-;;15085:86;15167:3;15162;15085:86;:::i;:::-;15078:93;;15201:66;15197:1;15192:3;15188:11;15181:87;15299:34;15294:2;15289:3;15285:12;15278:56;15365:66;15360:2;15355:3;15351:12;15344:88;15463:66;15458:2;15453:3;15449:12;15442:88;15562:4;15556:3;15551;15547:13;15540:27;15593:3;15588;15584:13;15577:20;;15068:535;;;:::o;15609:365::-;;15772:67;15836:2;15831:3;15772:67;:::i;:::-;15765:74;;15869:34;15865:1;15860:3;15856:11;15849:55;15935:3;15930:2;15925:3;15921:12;15914:25;15965:2;15960:3;15956:12;15949:19;;15755:219;;;:::o;15980:496::-;;16161:85;16243:2;16238:3;16161:85;:::i;:::-;16154:92;;16276:66;16272:1;16267:3;16263:11;16256:87;16374:66;16369:2;16364:3;16360:12;16353:88;16467:2;16462:3;16458:12;16451:19;;16144:332;;;:::o;16482:363::-;;16663:85;16745:2;16740:3;16663:85;:::i;:::-;16656:92;;16778:31;16774:1;16769:3;16765:11;16758:52;16836:2;16831:3;16827:12;16820:19;;16646:199;;;:::o;16851:381::-;;17014:67;17078:2;17073:3;17014:67;:::i;:::-;17007:74;;17111:34;17107:1;17102:3;17098:11;17091:55;17177:19;17172:2;17167:3;17163:12;17156:41;17223:2;17218:3;17214:12;17207:19;;16997:235;;;:::o;17238:376::-;;17401:67;17465:2;17460:3;17401:67;:::i;:::-;17394:74;;17498:34;17494:1;17489:3;17485:11;17478:55;17564:14;17559:2;17554:3;17550:12;17543:36;17605:2;17600:3;17596:12;17589:19;;17384:230;;;:::o;17620:396::-;;17801:84;17883:1;17878:3;17801:84;:::i;:::-;17794:91;;17915:66;17911:1;17906:3;17902:11;17895:87;18008:1;18003:3;17999:11;17992:18;;17784:232;;;:::o;18022:496::-;;18203:85;18285:2;18280:3;18203:85;:::i;:::-;18196:92;;18318:66;18314:1;18309:3;18305:11;18298:87;18416:66;18411:2;18406:3;18402:12;18395:88;18509:2;18504:3;18500:12;18493:19;;18186:332;;;:::o;18524:329::-;;18687:67;18751:2;18746:3;18687:67;:::i;:::-;18680:74;;18784:33;18780:1;18775:3;18771:11;18764:54;18844:2;18839:3;18835:12;18828:19;;18670:183;;;:::o;18859:396::-;;19040:84;19122:1;19117:3;19040:84;:::i;:::-;19033:91;;19154:66;19150:1;19145:3;19141:11;19134:87;19247:1;19242:3;19238:11;19231:18;;19023:232;;;:::o;19261:118::-;19348:24;19366:5;19348:24;:::i;:::-;19343:3;19336:37;19326:53;;:::o;19385:275::-;;19539:95;19630:3;19621:6;19539:95;:::i;:::-;19532:102;;19651:3;19644:10;;19521:139;;;;:::o;19666:435::-;;19868:95;19959:3;19950:6;19868:95;:::i;:::-;19861:102;;19980:95;20071:3;20062:6;19980:95;:::i;:::-;19973:102;;20092:3;20085:10;;19850:251;;;;;:::o;20107:595::-;;20357:95;20448:3;20439:6;20357:95;:::i;:::-;20350:102;;20469:95;20560:3;20551:6;20469:95;:::i;:::-;20462:102;;20581:95;20672:3;20663:6;20581:95;:::i;:::-;20574:102;;20693:3;20686:10;;20339:363;;;;;;:::o;20708:1555::-;;21246:95;21337:3;21328:6;21246:95;:::i;:::-;21239:102;;21358:95;21449:3;21440:6;21358:95;:::i;:::-;21351:102;;21470:95;21561:3;21552:6;21470:95;:::i;:::-;21463:102;;21582:95;21673:3;21664:6;21582:95;:::i;:::-;21575:102;;21694:95;21785:3;21776:6;21694:95;:::i;:::-;21687:102;;21806:95;21897:3;21888:6;21806:95;:::i;:::-;21799:102;;21918:95;22009:3;22000:6;21918:95;:::i;:::-;21911:102;;22030:95;22121:3;22112:6;22030:95;:::i;:::-;22023:102;;22142:95;22233:3;22224:6;22142:95;:::i;:::-;22135:102;;22254:3;22247:10;;21228:1035;;;;;;;;;;;;:::o;22269:2671::-;;23269:95;23360:3;23351:6;23269:95;:::i;:::-;23262:102;;23381:148;23525:3;23381:148;:::i;:::-;23374:155;;23546:95;23637:3;23628:6;23546:95;:::i;:::-;23539:102;;23658:148;23802:3;23658:148;:::i;:::-;23651:155;;23823:95;23914:3;23905:6;23823:95;:::i;:::-;23816:102;;23935:148;24079:3;23935:148;:::i;:::-;23928:155;;24100:95;24191:3;24182:6;24100:95;:::i;:::-;24093:102;;24212:148;24356:3;24212:148;:::i;:::-;24205:155;;24377:95;24468:3;24459:6;24377:95;:::i;:::-;24370:102;;24489:148;24633:3;24489:148;:::i;:::-;24482:155;;24654:95;24745:3;24736:6;24654:95;:::i;:::-;24647:102;;24766:148;24910:3;24766:148;:::i;:::-;24759:155;;24931:3;24924:10;;23251:1689;;;;;;;;;:::o;24946:1233::-;;25451:148;25595:3;25451:148;:::i;:::-;25444:155;;25616:95;25707:3;25698:6;25616:95;:::i;:::-;25609:102;;25728:148;25872:3;25728:148;:::i;:::-;25721:155;;25893:95;25984:3;25975:6;25893:95;:::i;:::-;25886:102;;26005:148;26149:3;26005:148;:::i;:::-;25998:155;;26170:3;26163:10;;25433:746;;;;;:::o;26185:541::-;;26440:148;26584:3;26440:148;:::i;:::-;26433:155;;26605:95;26696:3;26687:6;26605:95;:::i;:::-;26598:102;;26717:3;26710:10;;26422:304;;;;:::o;26732:222::-;;26863:2;26852:9;26848:18;26840:26;;26876:71;26944:1;26933:9;26929:17;26920:6;26876:71;:::i;:::-;26830:124;;;;:::o;26960:640::-;;27193:3;27182:9;27178:19;27170:27;;27207:71;27275:1;27264:9;27260:17;27251:6;27207:71;:::i;:::-;27288:72;27356:2;27345:9;27341:18;27332:6;27288:72;:::i;:::-;27370;27438:2;27427:9;27423:18;27414:6;27370:72;:::i;:::-;27489:9;27483:4;27479:20;27474:2;27463:9;27459:18;27452:48;27517:76;27588:4;27579:6;27517:76;:::i;:::-;27509:84;;27160:440;;;;;;;:::o;27606:210::-;;27731:2;27720:9;27716:18;27708:26;;27744:65;27806:1;27795:9;27791:17;27782:6;27744:65;:::i;:::-;27698:118;;;;:::o;27822:313::-;;27973:2;27962:9;27958:18;27950:26;;28022:9;28016:4;28012:20;28008:1;27997:9;27993:17;27986:47;28050:78;28123:4;28114:6;28050:78;:::i;:::-;28042:86;;27940:195;;;;:::o;28141:419::-;;28345:2;28334:9;28330:18;28322:26;;28394:9;28388:4;28384:20;28380:1;28369:9;28365:17;28358:47;28422:131;28548:4;28422:131;:::i;:::-;28414:139;;28312:248;;;:::o;28566:419::-;;28770:2;28759:9;28755:18;28747:26;;28819:9;28813:4;28809:20;28805:1;28794:9;28790:17;28783:47;28847:131;28973:4;28847:131;:::i;:::-;28839:139;;28737:248;;;:::o;28991:419::-;;29195:2;29184:9;29180:18;29172:26;;29244:9;29238:4;29234:20;29230:1;29219:9;29215:17;29208:47;29272:131;29398:4;29272:131;:::i;:::-;29264:139;;29162:248;;;:::o;29416:419::-;;29620:2;29609:9;29605:18;29597:26;;29669:9;29663:4;29659:20;29655:1;29644:9;29640:17;29633:47;29697:131;29823:4;29697:131;:::i;:::-;29689:139;;29587:248;;;:::o;29841:419::-;;30045:2;30034:9;30030:18;30022:26;;30094:9;30088:4;30084:20;30080:1;30069:9;30065:17;30058:47;30122:131;30248:4;30122:131;:::i;:::-;30114:139;;30012:248;;;:::o;30266:419::-;;30470:2;30459:9;30455:18;30447:26;;30519:9;30513:4;30509:20;30505:1;30494:9;30490:17;30483:47;30547:131;30673:4;30547:131;:::i;:::-;30539:139;;30437:248;;;:::o;30691:419::-;;30895:2;30884:9;30880:18;30872:26;;30944:9;30938:4;30934:20;30930:1;30919:9;30915:17;30908:47;30972:131;31098:4;30972:131;:::i;:::-;30964:139;;30862:248;;;:::o;31116:419::-;;31320:2;31309:9;31305:18;31297:26;;31369:9;31363:4;31359:20;31355:1;31344:9;31340:17;31333:47;31397:131;31523:4;31397:131;:::i;:::-;31389:139;;31287:248;;;:::o;31541:419::-;;31745:2;31734:9;31730:18;31722:26;;31794:9;31788:4;31784:20;31780:1;31769:9;31765:17;31758:47;31822:131;31948:4;31822:131;:::i;:::-;31814:139;;31712:248;;;:::o;31966:419::-;;32170:2;32159:9;32155:18;32147:26;;32219:9;32213:4;32209:20;32205:1;32194:9;32190:17;32183:47;32247:131;32373:4;32247:131;:::i;:::-;32239:139;;32137:248;;;:::o;32391:419::-;;32595:2;32584:9;32580:18;32572:26;;32644:9;32638:4;32634:20;32630:1;32619:9;32615:17;32608:47;32672:131;32798:4;32672:131;:::i;:::-;32664:139;;32562:248;;;:::o;32816:419::-;;33020:2;33009:9;33005:18;32997:26;;33069:9;33063:4;33059:20;33055:1;33044:9;33040:17;33033:47;33097:131;33223:4;33097:131;:::i;:::-;33089:139;;32987:248;;;:::o;33241:419::-;;33445:2;33434:9;33430:18;33422:26;;33494:9;33488:4;33484:20;33480:1;33469:9;33465:17;33458:47;33522:131;33648:4;33522:131;:::i;:::-;33514:139;;33412:248;;;:::o;33666:419::-;;33870:2;33859:9;33855:18;33847:26;;33919:9;33913:4;33909:20;33905:1;33894:9;33890:17;33883:47;33947:131;34073:4;33947:131;:::i;:::-;33939:139;;33837:248;;;:::o;34091:419::-;;34295:2;34284:9;34280:18;34272:26;;34344:9;34338:4;34334:20;34330:1;34319:9;34315:17;34308:47;34372:131;34498:4;34372:131;:::i;:::-;34364:139;;34262:248;;;:::o;34516:419::-;;34720:2;34709:9;34705:18;34697:26;;34769:9;34763:4;34759:20;34755:1;34744:9;34740:17;34733:47;34797:131;34923:4;34797:131;:::i;:::-;34789:139;;34687:248;;;:::o;34941:419::-;;35145:2;35134:9;35130:18;35122:26;;35194:9;35188:4;35184:20;35180:1;35169:9;35165:17;35158:47;35222:131;35348:4;35222:131;:::i;:::-;35214:139;;35112:248;;;:::o;35366:419::-;;35570:2;35559:9;35555:18;35547:26;;35619:9;35613:4;35609:20;35605:1;35594:9;35590:17;35583:47;35647:131;35773:4;35647:131;:::i;:::-;35639:139;;35537:248;;;:::o;35791:419::-;;35995:2;35984:9;35980:18;35972:26;;36044:9;36038:4;36034:20;36030:1;36019:9;36015:17;36008:47;36072:131;36198:4;36072:131;:::i;:::-;36064:139;;35962:248;;;:::o;36216:419::-;;36420:2;36409:9;36405:18;36397:26;;36469:9;36463:4;36459:20;36455:1;36444:9;36440:17;36433:47;36497:131;36623:4;36497:131;:::i;:::-;36489:139;;36387:248;;;:::o;36641:419::-;;36845:2;36834:9;36830:18;36822:26;;36894:9;36888:4;36884:20;36880:1;36869:9;36865:17;36858:47;36922:131;37048:4;36922:131;:::i;:::-;36914:139;;36812:248;;;:::o;37066:222::-;;37197:2;37186:9;37182:18;37174:26;;37210:71;37278:1;37267:9;37263:17;37254:6;37210:71;:::i;:::-;37164:124;;;;:::o;37294:283::-;;37360:2;37354:9;37344:19;;37402:4;37394:6;37390:17;37509:6;37497:10;37494:22;37473:18;37461:10;37458:34;37455:62;37452:2;;;37520:18;;:::i;:::-;37452:2;37560:10;37556:2;37549:22;37334:243;;;;:::o;37583:331::-;;37734:18;37726:6;37723:30;37720:2;;;37756:18;;:::i;:::-;37720:2;37841:4;37837:9;37830:4;37822:6;37818:17;37814:33;37806:41;;37902:4;37896;37892:15;37884:23;;37649:265;;;:::o;37920:98::-;;38005:5;37999:12;37989:22;;37978:40;;;:::o;38024:99::-;;38110:5;38104:12;38094:22;;38083:40;;;:::o;38129:168::-;;38246:6;38241:3;38234:19;38286:4;38281:3;38277:14;38262:29;;38224:73;;;;:::o;38303:169::-;;38421:6;38416:3;38409:19;38461:4;38456:3;38452:14;38437:29;;38399:73;;;;:::o;38478:148::-;;38617:3;38602:18;;38592:34;;;;:::o;38632:305::-;;38691:20;38709:1;38691:20;:::i;:::-;38686:25;;38725:20;38743:1;38725:20;:::i;:::-;38720:25;;38879:1;38811:66;38807:74;38804:1;38801:81;38798:2;;;38885:18;;:::i;:::-;38798:2;38929:1;38926;38922:9;38915:16;;38676:261;;;;:::o;38943:185::-;;39000:20;39018:1;39000:20;:::i;:::-;38995:25;;39034:20;39052:1;39034:20;:::i;:::-;39029:25;;39073:1;39063:2;;39078:18;;:::i;:::-;39063:2;39120:1;39117;39113:9;39108:14;;38985:143;;;;:::o;39134:348::-;;39197:20;39215:1;39197:20;:::i;:::-;39192:25;;39231:20;39249:1;39231:20;:::i;:::-;39226:25;;39419:1;39351:66;39347:74;39344:1;39341:81;39336:1;39329:9;39322:17;39318:105;39315:2;;;39426:18;;:::i;:::-;39315:2;39474:1;39471;39467:9;39456:20;;39182:300;;;;:::o;39488:191::-;;39548:20;39566:1;39548:20;:::i;:::-;39543:25;;39582:20;39600:1;39582:20;:::i;:::-;39577:25;;39621:1;39618;39615:8;39612:2;;;39626:18;;:::i;:::-;39612:2;39671:1;39668;39664:9;39656:17;;39533:146;;;;:::o;39685:96::-;;39751:24;39769:5;39751:24;:::i;:::-;39740:35;;39730:51;;;:::o;39787:104::-;;39861:24;39879:5;39861:24;:::i;:::-;39850:35;;39840:51;;;:::o;39897:90::-;;39974:5;39967:13;39960:21;39949:32;;39939:48;;;:::o;39993:149::-;;40069:66;40062:5;40058:78;40047:89;;40037:105;;;:::o;40148:126::-;;40225:42;40218:5;40214:54;40203:65;;40193:81;;;:::o;40280:77::-;;40346:5;40335:16;;40325:32;;;:::o;40363:154::-;40447:6;40442:3;40437;40424:30;40509:1;40500:6;40495:3;40491:16;40484:27;40414:103;;;:::o;40523:307::-;40591:1;40601:113;40615:6;40612:1;40609:13;40601:113;;;40700:1;40695:3;40691:11;40685:18;40681:1;40676:3;40672:11;40665:39;40637:2;40634:1;40630:10;40625:15;;40601:113;;;40732:6;40729:1;40726:13;40723:2;;;40812:1;40803:6;40798:3;40794:16;40787:27;40723:2;40572:258;;;;:::o;40836:320::-;;40917:1;40911:4;40907:12;40897:22;;40964:1;40958:4;40954:12;40985:18;40975:2;;41041:4;41033:6;41029:17;41019:27;;40975:2;41103;41095:6;41092:14;41072:18;41069:38;41066:2;;;41122:18;;:::i;:::-;41066:2;40887:269;;;;:::o;41162:233::-;;41224:24;41242:5;41224:24;:::i;:::-;41215:33;;41270:66;41263:5;41260:77;41257:2;;;41340:18;;:::i;:::-;41257:2;41387:1;41380:5;41376:13;41369:20;;41205:190;;;:::o;41401:176::-;;41450:20;41468:1;41450:20;:::i;:::-;41445:25;;41484:20;41502:1;41484:20;:::i;:::-;41479:25;;41523:1;41513:2;;41528:18;;:::i;:::-;41513:2;41569:1;41566;41562:9;41557:14;;41435:142;;;;:::o;41583:180::-;41631:77;41628:1;41621:88;41728:4;41725:1;41718:15;41752:4;41749:1;41742:15;41769:180;41817:77;41814:1;41807:88;41914:4;41911:1;41904:15;41938:4;41935:1;41928:15;41955:180;42003:77;42000:1;41993:88;42100:4;42097:1;42090:15;42124:4;42121:1;42114:15;42141:180;42189:77;42186:1;42179:88;42286:4;42283:1;42276:15;42310:4;42307:1;42300:15;42327:102;;42419:2;42415:7;42410:2;42403:5;42399:14;42395:28;42385:38;;42375:54;;;:::o;42435:122::-;42508:24;42526:5;42508:24;:::i;:::-;42501:5;42498:35;42488:2;;42547:1;42544;42537:12;42488:2;42478:79;:::o;42563:138::-;42644:32;42670:5;42644:32;:::i;:::-;42637:5;42634:43;42624:2;;42691:1;42688;42681:12;42624:2;42614:87;:::o;42707:116::-;42777:21;42792:5;42777:21;:::i;:::-;42770:5;42767:32;42757:2;;42813:1;42810;42803:12;42757:2;42747:76;:::o;42829:120::-;42901:23;42918:5;42901:23;:::i;:::-;42894:5;42891:34;42881:2;;42939:1;42936;42929:12;42881:2;42871:78;:::o;42955:122::-;43028:24;43046:5;43028:24;:::i;:::-;43021:5;43018:35;43008:2;;43067:1;43064;43057:12;43008:2;42998:79;:::o
Swarm Source
ipfs://48a30f1ecdee320af1171d92a8ec7df3a112c727f7d2b5a2fd8a87656b10be12
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.