ERC-721
Overview
Max Total Supply
1,000 SBREBORN
Holders
406
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 SBREBORNLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SBREBORN
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-08 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.0 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; 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/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: erc721a/contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @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 override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _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 { _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 { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: SHIBABEASTReborn.sol pragma solidity ^0.8.13; // @name: SBREBORN // @symbol: SBR // @founder: https://twitter.com/SMITH_SHIBA // @artist: https://www.instagram.com/kreoarts/ // @dev: https://twitter.com/kinginthecode // @project: https://twitter.com/shibabeast_nft // @project: https://www.instagram.com/shibabeast_nft/ // @url: https://www.shiba-beast.io/ // @code: MT Blockchain Services /* * * * * * * * * * * ███████╗██████╗ * * ██╔════╝██╔══██╗ * * ███████╗██████╔╝ * * ╚════██║██╔══██╗ * * ███████║██████╔╝ * * ╚══════╝╚═════╝ * * * * * * * * * * */ contract SBREBORN is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; bool public sbreborn_revealed = false; bool public public_stage_activated = false; uint256 public max_supply = 2519; uint256 public current_cost = 0.085 ether; uint256 public current_stage_number = 0; bytes32 public stage_1_mkroot = 0x23595a3a92e2c88661161c6170861b35d5961f7c3dc1006eb0739bbb59b2d218; bytes32 public stage_2_mkroot = 0xe881784b8769b49242bc560a27c4fa9e5657b62def3383fc93765e424e3c35ee; bytes32 public stage_3_mkroot = 0x23595a3a92e2c88661161c6170861b35d5961f7c3dc1006eb0739bbb59b2d218; bytes32 public stage_4_mkroot = 0xe881784b8769b49242bc560a27c4fa9e5657b62def3383fc93765e424e3c35ee; bytes32 public stage_5_mkroot = 0x4a169d65c62315752a1bf5f2401bd24269aafef94e61993a9b42c734dba2f259; string public baseURI; string public revealURI; mapping(address => uint256) block_address; mapping(address => uint256) public wallet_balance; mapping(address => bool) public wallet_can_mint; constructor() ERC721A("SHIBABEAST REBORN", "SBREBORN") {} modifier blockVerifier() { require(tx.origin == msg.sender, "contracts_not_allowed_to_mint"); require(block_address[msg.sender] < block.timestamp, "no_mint_on_the_same_block"); _; } function sbrebornPurchase(uint256 _mint_amount, bytes32[] calldata _mkproof) external payable blockVerifier() nonReentrant { require(current_stage_number > 0, "mint_is_not_started"); if(current_stage_number > 2) { require(msg.value >= current_cost * _mint_amount, "insufficient_funds"); } uint256 supply = totalSupply(); bytes32 current_mkroot = getMerkleRoot(); if(!public_stage_activated) { bytes32 merkle_leaf_node = keccak256(abi.encodePacked(msg.sender)); if(!wallet_can_mint[msg.sender]) { require(MerkleProof.verify(_mkproof, current_mkroot, merkle_leaf_node), "invalid_free_whitelist_merkle_proof"); } } require(_mint_amount > 0, "quantity_is_required"); require(_mint_amount + supply <= max_supply, "max_supply_exceedeed" ); if(current_stage_number == 1) { require(wallet_balance[msg.sender] + _mint_amount <= 2, "max_stage_1_free_mint_exceeded"); } if(current_stage_number == 2) { require(wallet_balance[msg.sender] + _mint_amount <= 1, "max_stage_2_free_mint_exceeded"); } wallet_balance[msg.sender] += _mint_amount; _safeMint(msg.sender, _mint_amount); } function getMerkleRoot() internal virtual returns (bytes32 merkleroot) { bytes32 current_mkroot = keccak256(abi.encodePacked("no_stage_number_defined")); if(current_stage_number == 1) { current_mkroot = stage_1_mkroot; } else if(current_stage_number == 2) { current_mkroot = stage_2_mkroot; } else if(current_stage_number == 3) { current_mkroot = stage_3_mkroot; } else if(current_stage_number == 4) { current_mkroot = stage_4_mkroot; } else if(current_stage_number == 5) { current_mkroot = stage_5_mkroot; } return current_mkroot; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), "non_existant_token"); if (sbreborn_revealed) { return string(abi.encodePacked(baseURI, _tokenId.toString())); } else { return revealURI; } } function set_base_uri(string memory _new_base_uri) public onlyOwner { baseURI = _new_base_uri; } function set_reveal_uri(string memory _new_reveal_uri) public onlyOwner { revealURI = _new_reveal_uri; } function set_sbreborn_revealed(bool _new_sbreborn_revealed) public onlyOwner { sbreborn_revealed = _new_sbreborn_revealed; } function set_public_stage_activated(bool _new_public_stage_activated) public onlyOwner { public_stage_activated = _new_public_stage_activated; } function set_max_supply(uint256 _new_max_supply) public onlyOwner { max_supply = _new_max_supply; } function set_current_cost(uint256 _new_current_cost) public onlyOwner { current_cost = _new_current_cost; } function set_current_stage_number(uint256 _new_current_stage_number) public onlyOwner { current_stage_number = _new_current_stage_number; } function set_stage_1_mkroot(bytes32 _new_stage_1_mkroot) public onlyOwner { stage_1_mkroot = _new_stage_1_mkroot; } function set_stage_2_mkroot(bytes32 _new_stage_2_mkroot) public onlyOwner { stage_2_mkroot = _new_stage_2_mkroot; } function set_stage_3_mkroot(bytes32 _new_stage_3_mkroot) public onlyOwner { stage_3_mkroot = _new_stage_3_mkroot; } function set_stage_4_mkroot(bytes32 _new_stage_4_mkroot) public onlyOwner { stage_4_mkroot = _new_stage_4_mkroot; } function set_stage_5_mkroot(bytes32 _new_stage_5_mkroot) public onlyOwner { stage_5_mkroot = _new_stage_5_mkroot; } function add_mint_wallet(address _new_wallet_can_mint) public onlyOwner { wallet_can_mint[_new_wallet_can_mint] = true; } function burn(uint256 _tokenId) public onlyOwner { _burn(_tokenId); } function withdraw() public payable onlyOwner { uint256 contract_balance = address(this).balance; uint256 community_wallet = contract_balance * 10 / 100; uint256 investment_wallet = contract_balance * 40 / 100; uint256 marketing_wallet = contract_balance * 50 / 100; payable(0x61c9651b626B0aed8476243D2d27F4cdd0D2d881).transfer(community_wallet); payable(0x26E37142DbEF20f1683A5b8d8bAcFaA8c7525631).transfer(investment_wallet); payable(0xBd9e9915fC583bE672Bb882b79a7576C97a1cC6F).transfer(marketing_wallet); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":"_new_wallet_can_mint","type":"address"}],"name":"add_mint_wallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"current_cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"current_stage_number","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":[],"name":"max_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"public_stage_activated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"uint256","name":"_mint_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_mkproof","type":"bytes32[]"}],"name":"sbrebornPurchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"sbreborn_revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_new_base_uri","type":"string"}],"name":"set_base_uri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new_current_cost","type":"uint256"}],"name":"set_current_cost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new_current_stage_number","type":"uint256"}],"name":"set_current_stage_number","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new_max_supply","type":"uint256"}],"name":"set_max_supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_new_public_stage_activated","type":"bool"}],"name":"set_public_stage_activated","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_new_reveal_uri","type":"string"}],"name":"set_reveal_uri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_new_sbreborn_revealed","type":"bool"}],"name":"set_sbreborn_revealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_new_stage_1_mkroot","type":"bytes32"}],"name":"set_stage_1_mkroot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_new_stage_2_mkroot","type":"bytes32"}],"name":"set_stage_2_mkroot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_new_stage_3_mkroot","type":"bytes32"}],"name":"set_stage_3_mkroot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_new_stage_4_mkroot","type":"bytes32"}],"name":"set_stage_4_mkroot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_new_stage_5_mkroot","type":"bytes32"}],"name":"set_stage_5_mkroot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stage_1_mkroot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stage_2_mkroot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stage_3_mkroot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stage_4_mkroot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stage_5_mkroot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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","name":"","type":"address"}],"name":"wallet_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wallet_can_mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506109d7600b5567012dfb0cb5e88000600c556000600d557f23595a3a92e2c88661161c6170861b35d5961f7c3dc1006eb0739bbb59b2d21860001b600e557fe881784b8769b49242bc560a27c4fa9e5657b62def3383fc93765e424e3c35ee60001b600f557f23595a3a92e2c88661161c6170861b35d5961f7c3dc1006eb0739bbb59b2d21860001b6010557fe881784b8769b49242bc560a27c4fa9e5657b62def3383fc93765e424e3c35ee60001b6011557f4a169d65c62315752a1bf5f2401bd24269aafef94e61993a9b42c734dba2f25960001b6012553480156200012157600080fd5b506040518060400160405280601181526020017f53484942414245415354205245424f524e0000000000000000000000000000008152506040518060400160405280600881526020017f53425245424f524e0000000000000000000000000000000000000000000000008152508160029080519060200190620001a6929190620002d9565b508060039080519060200190620001bf929190620002d9565b50620001d06200020660201b60201c565b6000819055505050620001f8620001ec6200020b60201b60201c565b6200021360201b60201c565b6001600981905550620003ed565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002e790620003b8565b90600052602060002090601f0160209004810192826200030b576000855562000357565b82601f106200032657805160ff191683800117855562000357565b8280016001018555821562000357579182015b828111156200035657825182559160200191906001019062000339565b5b5090506200036691906200036a565b5090565b5b80821115620003855760008160009055506001016200036b565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003d157607f821691505b602082108103620003e757620003e662000389565b5b50919050565b614f0e80620003fd6000396000f3fe6080604052600436106102885760003560e01c80638da5cb5b1161015a578063cbc92499116100c1578063ecab70791161007a578063ecab707914610988578063eebb17f8146109b3578063effc9067146109dc578063f0b1292a14610a07578063f2fde38b14610a44578063fc27fc3914610a6d57610288565b8063cbc924991461087e578063cbd751f7146108a7578063d1f0ccd5146108d0578063e1bcb32e146108f9578063e706e5e814610922578063e985e9c51461094b57610288565b8063af1c521111610113578063af1c52111461077f578063b58bab36146107a8578063b88d4fde146107d3578063bd742dd8146107fc578063be1fd87314610825578063c87b56dd1461084157610288565b80638da5cb5b1461067f57806394767c99146106aa57806395d89b41146106d5578063a22cb46514610700578063a83cfbf514610729578063a976620f1461075457610288565b8063420ab222116101fe5780636c0360eb116101b75780636c0360eb1461058157806370a08231146105ac578063715018a6146105e95780637bed1ccf146106005780638a333b501461062b5780638a938f2f1461065657610288565b8063420ab2221461047357806342842e0e1461049c57806342966c68146104c557806357187412146104ee57806360fb5be2146105195780636352211e1461054457610288565b8063160fba5611610250578063160fba561461038457806318160ddd146103af5780631d4b37d0146103da5780631fa7b75d1461041757806323b872dd146104405780633ccfd60b1461046957610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b3146103325780630e467d6f1461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613c3f565b610a96565b6040516102c19190613c87565b60405180910390f35b3480156102d657600080fd5b506102df610b78565b6040516102ec9190613d3b565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613d93565b610c0a565b6040516103299190613e01565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190613e48565b610c86565b005b34801561036757600080fd5b50610382600480360381019061037d9190613d93565b610d90565b005b34801561039057600080fd5b50610399610e16565b6040516103a69190613d3b565b60405180910390f35b3480156103bb57600080fd5b506103c4610ea4565b6040516103d19190613e97565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc9190613eb2565b610ebb565b60405161040e9190613c87565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190613eb2565b610edb565b005b34801561044c57600080fd5b5061046760048036038101906104629190613edf565b610fb2565b005b610471610fc2565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613f68565b6111b1565b005b3480156104a857600080fd5b506104c360048036038101906104be9190613edf565b611237565b005b3480156104d157600080fd5b506104ec60048036038101906104e79190613d93565b611257565b005b3480156104fa57600080fd5b506105036112df565b6040516105109190613c87565b60405180910390f35b34801561052557600080fd5b5061052e6112f2565b60405161053b9190613fa4565b60405180910390f35b34801561055057600080fd5b5061056b60048036038101906105669190613d93565b6112f8565b6040516105789190613e01565b60405180910390f35b34801561058d57600080fd5b5061059661130e565b6040516105a39190613d3b565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce9190613eb2565b61139c565b6040516105e09190613e97565b60405180910390f35b3480156105f557600080fd5b506105fe61146b565b005b34801561060c57600080fd5b506106156114f3565b6040516106229190613c87565b60405180910390f35b34801561063757600080fd5b50610640611506565b60405161064d9190613e97565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190613d93565b61150c565b005b34801561068b57600080fd5b50610694611592565b6040516106a19190613e01565b60405180910390f35b3480156106b657600080fd5b506106bf6115bc565b6040516106cc9190613fa4565b60405180910390f35b3480156106e157600080fd5b506106ea6115c2565b6040516106f79190613d3b565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190613feb565b611654565b005b34801561073557600080fd5b5061073e6117cb565b60405161074b9190613fa4565b60405180910390f35b34801561076057600080fd5b506107696117d1565b6040516107769190613e97565b60405180910390f35b34801561078b57600080fd5b506107a660048036038101906107a19190614160565b6117d7565b005b3480156107b457600080fd5b506107bd61186d565b6040516107ca9190613e97565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f5919061424a565b611873565b005b34801561080857600080fd5b50610823600480360381019061081e9190614160565b6118ef565b005b61083f600480360381019061083a919061432d565b611985565b005b34801561084d57600080fd5b5061086860048036038101906108639190613d93565b611ecc565b6040516108759190613d3b565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a09190613f68565b611ff0565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190613f68565b612076565b005b3480156108dc57600080fd5b506108f760048036038101906108f29190613d93565b6120fc565b005b34801561090557600080fd5b50610920600480360381019061091b9190613f68565b612182565b005b34801561092e57600080fd5b506109496004803603810190610944919061438d565b612208565b005b34801561095757600080fd5b50610972600480360381019061096d91906143ba565b6122a1565b60405161097f9190613c87565b60405180910390f35b34801561099457600080fd5b5061099d612335565b6040516109aa9190613fa4565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190613f68565b61233b565b005b3480156109e857600080fd5b506109f16123c1565b6040516109fe9190613fa4565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190613eb2565b6123c7565b604051610a3b9190613e97565b60405180910390f35b348015610a5057600080fd5b50610a6b6004803603810190610a669190613eb2565b6123df565b005b348015610a7957600080fd5b50610a946004803603810190610a8f919061438d565b6124d6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b6157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b715750610b708261256f565b5b9050919050565b606060028054610b8790614429565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb390614429565b8015610c005780601f10610bd557610100808354040283529160200191610c00565b820191906000526020600020905b815481529060010190602001808311610be357829003601f168201915b5050505050905090565b6000610c15826125d9565b610c4b576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c91826112f8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cf8576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d17612627565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d495750610d4781610d42612627565b6122a1565b155b15610d80576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d8b83838361262f565b505050565b610d98612627565b73ffffffffffffffffffffffffffffffffffffffff16610db6611592565b73ffffffffffffffffffffffffffffffffffffffff1614610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e03906144a6565b60405180910390fd5b80600d8190555050565b60148054610e2390614429565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4f90614429565b8015610e9c5780601f10610e7157610100808354040283529160200191610e9c565b820191906000526020600020905b815481529060010190602001808311610e7f57829003601f168201915b505050505081565b6000610eae6126e1565b6001546000540303905090565b60176020528060005260406000206000915054906101000a900460ff1681565b610ee3612627565b73ffffffffffffffffffffffffffffffffffffffff16610f01611592565b73ffffffffffffffffffffffffffffffffffffffff1614610f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4e906144a6565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610fbd8383836126e6565b505050565b610fca612627565b73ffffffffffffffffffffffffffffffffffffffff16610fe8611592565b73ffffffffffffffffffffffffffffffffffffffff161461103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611035906144a6565b60405180910390fd5b600047905060006064600a8361105491906144f5565b61105e919061457e565b90506000606460288461107191906144f5565b61107b919061457e565b90506000606460328561108e91906144f5565b611098919061457e565b90507361c9651b626b0aed8476243d2d27f4cdd0d2d88173ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156110f4573d6000803e3d6000fd5b507326e37142dbef20f1683a5b8d8bacfaa8c752563173ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561114f573d6000803e3d6000fd5b5073bd9e9915fc583be672bb882b79a7576c97a1cc6f73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111aa573d6000803e3d6000fd5b5050505050565b6111b9612627565b73ffffffffffffffffffffffffffffffffffffffff166111d7611592565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611224906144a6565b60405180910390fd5b8060118190555050565b61125283838360405180602001604052806000815250611873565b505050565b61125f612627565b73ffffffffffffffffffffffffffffffffffffffff1661127d611592565b73ffffffffffffffffffffffffffffffffffffffff16146112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca906144a6565b60405180910390fd5b6112dc81612b9a565b50565b600a60009054906101000a900460ff1681565b600f5481565b600061130382612ba8565b600001519050919050565b6013805461131b90614429565b80601f016020809104026020016040519081016040528092919081815260200182805461134790614429565b80156113945780601f1061136957610100808354040283529160200191611394565b820191906000526020600020905b81548152906001019060200180831161137757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611403576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611473612627565b73ffffffffffffffffffffffffffffffffffffffff16611491611592565b73ffffffffffffffffffffffffffffffffffffffff16146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de906144a6565b60405180910390fd5b6114f16000612e37565b565b600a60019054906101000a900460ff1681565b600b5481565b611514612627565b73ffffffffffffffffffffffffffffffffffffffff16611532611592565b73ffffffffffffffffffffffffffffffffffffffff1614611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f906144a6565b60405180910390fd5b80600b8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6060600380546115d190614429565b80601f01602080910402602001604051908101604052809291908181526020018280546115fd90614429565b801561164a5780601f1061161f5761010080835404028352916020019161164a565b820191906000526020600020905b81548152906001019060200180831161162d57829003601f168201915b5050505050905090565b61165c612627565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c0576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006116cd612627565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661177a612627565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117bf9190613c87565b60405180910390a35050565b60105481565b600c5481565b6117df612627565b73ffffffffffffffffffffffffffffffffffffffff166117fd611592565b73ffffffffffffffffffffffffffffffffffffffff1614611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a906144a6565b60405180910390fd5b8060139080519060200190611869929190613aed565b5050565b600d5481565b61187e8484846126e6565b61189d8373ffffffffffffffffffffffffffffffffffffffff16612efd565b80156118b257506118b084848484612f10565b155b156118e9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6118f7612627565b73ffffffffffffffffffffffffffffffffffffffff16611915611592565b73ffffffffffffffffffffffffffffffffffffffff161461196b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611962906144a6565b60405180910390fd5b8060149080519060200190611981929190613aed565b5050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea906145fb565b60405180910390fd5b42601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b90614667565b60405180910390fd5b600260095403611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab0906146d3565b60405180910390fd5b60026009819055506000600d5411611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd9061473f565b60405180910390fd5b6002600d541115611b625782600c54611b1f91906144f5565b341015611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906147ab565b60405180910390fd5b5b6000611b6c610ea4565b90506000611b78613060565b9050600a60019054906101000a900460ff16611c9857600033604051602001611ba19190614813565b604051602081830303815290604052805190602001209050601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c9657611c56858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505083836130f5565b611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c906148a0565b60405180910390fd5b5b505b60008511611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd29061490c565b60405180910390fd5b600b548286611cea919061492c565b1115611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d22906149ce565b60405180910390fd5b6001600d5403611dc457600285601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d82919061492c565b1115611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90614a3a565b60405180910390fd5b5b6002600d5403611e5d57600185601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e1b919061492c565b1115611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390614aa6565b60405180910390fd5b5b84601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eac919061492c565b92505081905550611ebd338661310c565b50506001600981905550505050565b6060611ed7826125d9565b611f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0d90614b12565b60405180910390fd5b600a60009054906101000a900460ff1615611f5d576013611f368361312a565b604051602001611f47929190614c02565b6040516020818303038152906040529050611feb565b60148054611f6a90614429565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9690614429565b8015611fe35780601f10611fb857610100808354040283529160200191611fe3565b820191906000526020600020905b815481529060010190602001808311611fc657829003601f168201915b505050505090505b919050565b611ff8612627565b73ffffffffffffffffffffffffffffffffffffffff16612016611592565b73ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612063906144a6565b60405180910390fd5b80600f8190555050565b61207e612627565b73ffffffffffffffffffffffffffffffffffffffff1661209c611592565b73ffffffffffffffffffffffffffffffffffffffff16146120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e9906144a6565b60405180910390fd5b8060108190555050565b612104612627565b73ffffffffffffffffffffffffffffffffffffffff16612122611592565b73ffffffffffffffffffffffffffffffffffffffff1614612178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216f906144a6565b60405180910390fd5b80600c8190555050565b61218a612627565b73ffffffffffffffffffffffffffffffffffffffff166121a8611592565b73ffffffffffffffffffffffffffffffffffffffff16146121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f5906144a6565b60405180910390fd5b80600e8190555050565b612210612627565b73ffffffffffffffffffffffffffffffffffffffff1661222e611592565b73ffffffffffffffffffffffffffffffffffffffff1614612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b906144a6565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5481565b612343612627565b73ffffffffffffffffffffffffffffffffffffffff16612361611592565b73ffffffffffffffffffffffffffffffffffffffff16146123b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ae906144a6565b60405180910390fd5b8060128190555050565b60115481565b60166020528060005260406000206000915090505481565b6123e7612627565b73ffffffffffffffffffffffffffffffffffffffff16612405611592565b73ffffffffffffffffffffffffffffffffffffffff161461245b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612452906144a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c190614c98565b60405180910390fd5b6124d381612e37565b50565b6124de612627565b73ffffffffffffffffffffffffffffffffffffffff166124fc611592565b73ffffffffffffffffffffffffffffffffffffffff1614612552576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612549906144a6565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816125e46126e1565b111580156125f3575060005482105b8015612620575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b60006126f182612ba8565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461275c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661277d612627565b73ffffffffffffffffffffffffffffffffffffffff1614806127ac57506127ab856127a6612627565b6122a1565b5b806127f157506127ba612627565b73ffffffffffffffffffffffffffffffffffffffff166127d984610c0a565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061282a576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612890576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61289d858585600161328a565b6128a96000848761262f565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612b28576000548214612b2757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b938585856001613290565b5050505050565b612ba5816000613296565b50565b612bb0613b73565b600082905080612bbe6126e1565b11158015612bcd575060005481105b15612e00576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612dfe57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ce2578092505050612e32565b5b600115612dfd57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612df8578092505050612e32565b612ce3565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f36612627565b8786866040518563ffffffff1660e01b8152600401612f589493929190614d0d565b6020604051808303816000875af1925050508015612f9457506040513d601f19601f82011682018060405250810190612f919190614d6e565b60015b61300d573d8060008114612fc4576040519150601f19603f3d011682016040523d82523d6000602084013e612fc9565b606091505b506000815103613005576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60008060405160200161307290614de7565b6040516020818303038152906040528051906020012090506001600d540361309e57600e5490506130ee565b6002600d54036130b257600f5490506130ed565b6003600d54036130c65760105490506130ec565b6004600d54036130da5760115490506130eb565b6005600d54036130ea5760125490505b5b5b5b5b8091505090565b6000826131028584613685565b1490509392505050565b6131268282604051806020016040528060008152506136fa565b5050565b606060008203613171576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613285565b600082905060005b600082146131a357808061318c90614dfc565b915050600a8261319c919061457e565b9150613179565b60008167ffffffffffffffff8111156131bf576131be614035565b5b6040519080825280601f01601f1916602001820160405280156131f15781602001600182028036833780820191505090505b5090505b6000851461327e5760018261320a9190614e44565b9150600a856132199190614e78565b6030613225919061492c565b60f81b81838151811061323b5761323a614ea9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613277919061457e565b94506131f5565b8093505050505b919050565b50505050565b50505050565b60006132a183612ba8565b905060008160000151905082156133825760008173ffffffffffffffffffffffffffffffffffffffff166132d3612627565b73ffffffffffffffffffffffffffffffffffffffff1614806133025750613301826132fc612627565b6122a1565b5b806133475750613310612627565b73ffffffffffffffffffffffffffffffffffffffff1661332f86610c0a565b73ffffffffffffffffffffffffffffffffffffffff16145b905080613380576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b61339081600086600161328a565b61339c6000858361262f565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036135ff5760005482146135fe57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461366d816000866001613290565b60016000815480929190600101919050555050505050565b60008082905060005b84518110156136ef5760008582815181106136ac576136ab614ea9565b5b602002602001015190508083116136ce576136c7838261370c565b92506136db565b6136d8818461370c565b92505b5080806136e790614dfc565b91505061368e565b508091505092915050565b6137078383836001613723565b505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361378f576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084036137c9576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6137d6600086838761328a565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156139a0575061399f8773ffffffffffffffffffffffffffffffffffffffff16612efd565b5b15613a65575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a156000888480600101955088612f10565b613a4b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082036139a6578260005414613a6057600080fd5b613ad0565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808203613a66575b816000819055505050613ae66000868387613290565b5050505050565b828054613af990614429565b90600052602060002090601f016020900481019282613b1b5760008555613b62565b82601f10613b3457805160ff1916838001178555613b62565b82800160010185558215613b62579182015b82811115613b61578251825591602001919060010190613b46565b5b509050613b6f9190613bb6565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613bcf576000816000905550600101613bb7565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613c1c81613be7565b8114613c2757600080fd5b50565b600081359050613c3981613c13565b92915050565b600060208284031215613c5557613c54613bdd565b5b6000613c6384828501613c2a565b91505092915050565b60008115159050919050565b613c8181613c6c565b82525050565b6000602082019050613c9c6000830184613c78565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cdc578082015181840152602081019050613cc1565b83811115613ceb576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d0d82613ca2565b613d178185613cad565b9350613d27818560208601613cbe565b613d3081613cf1565b840191505092915050565b60006020820190508181036000830152613d558184613d02565b905092915050565b6000819050919050565b613d7081613d5d565b8114613d7b57600080fd5b50565b600081359050613d8d81613d67565b92915050565b600060208284031215613da957613da8613bdd565b5b6000613db784828501613d7e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613deb82613dc0565b9050919050565b613dfb81613de0565b82525050565b6000602082019050613e166000830184613df2565b92915050565b613e2581613de0565b8114613e3057600080fd5b50565b600081359050613e4281613e1c565b92915050565b60008060408385031215613e5f57613e5e613bdd565b5b6000613e6d85828601613e33565b9250506020613e7e85828601613d7e565b9150509250929050565b613e9181613d5d565b82525050565b6000602082019050613eac6000830184613e88565b92915050565b600060208284031215613ec857613ec7613bdd565b5b6000613ed684828501613e33565b91505092915050565b600080600060608486031215613ef857613ef7613bdd565b5b6000613f0686828701613e33565b9350506020613f1786828701613e33565b9250506040613f2886828701613d7e565b9150509250925092565b6000819050919050565b613f4581613f32565b8114613f5057600080fd5b50565b600081359050613f6281613f3c565b92915050565b600060208284031215613f7e57613f7d613bdd565b5b6000613f8c84828501613f53565b91505092915050565b613f9e81613f32565b82525050565b6000602082019050613fb96000830184613f95565b92915050565b613fc881613c6c565b8114613fd357600080fd5b50565b600081359050613fe581613fbf565b92915050565b6000806040838503121561400257614001613bdd565b5b600061401085828601613e33565b925050602061402185828601613fd6565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61406d82613cf1565b810181811067ffffffffffffffff8211171561408c5761408b614035565b5b80604052505050565b600061409f613bd3565b90506140ab8282614064565b919050565b600067ffffffffffffffff8211156140cb576140ca614035565b5b6140d482613cf1565b9050602081019050919050565b82818337600083830152505050565b60006141036140fe846140b0565b614095565b90508281526020810184848401111561411f5761411e614030565b5b61412a8482856140e1565b509392505050565b600082601f8301126141475761414661402b565b5b81356141578482602086016140f0565b91505092915050565b60006020828403121561417657614175613bdd565b5b600082013567ffffffffffffffff81111561419457614193613be2565b5b6141a084828501614132565b91505092915050565b600067ffffffffffffffff8211156141c4576141c3614035565b5b6141cd82613cf1565b9050602081019050919050565b60006141ed6141e8846141a9565b614095565b90508281526020810184848401111561420957614208614030565b5b6142148482856140e1565b509392505050565b600082601f8301126142315761423061402b565b5b81356142418482602086016141da565b91505092915050565b6000806000806080858703121561426457614263613bdd565b5b600061427287828801613e33565b945050602061428387828801613e33565b935050604061429487828801613d7e565b925050606085013567ffffffffffffffff8111156142b5576142b4613be2565b5b6142c18782880161421c565b91505092959194509250565b600080fd5b600080fd5b60008083601f8401126142ed576142ec61402b565b5b8235905067ffffffffffffffff81111561430a576143096142cd565b5b602083019150836020820283011115614326576143256142d2565b5b9250929050565b60008060006040848603121561434657614345613bdd565b5b600061435486828701613d7e565b935050602084013567ffffffffffffffff81111561437557614374613be2565b5b614381868287016142d7565b92509250509250925092565b6000602082840312156143a3576143a2613bdd565b5b60006143b184828501613fd6565b91505092915050565b600080604083850312156143d1576143d0613bdd565b5b60006143df85828601613e33565b92505060206143f085828601613e33565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061444157607f821691505b602082108103614454576144536143fa565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614490602083613cad565b915061449b8261445a565b602082019050919050565b600060208201905081810360008301526144bf81614483565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061450082613d5d565b915061450b83613d5d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614544576145436144c6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458982613d5d565b915061459483613d5d565b9250826145a4576145a361454f565b5b828204905092915050565b7f636f6e7472616374735f6e6f745f616c6c6f7765645f746f5f6d696e74000000600082015250565b60006145e5601d83613cad565b91506145f0826145af565b602082019050919050565b60006020820190508181036000830152614614816145d8565b9050919050565b7f6e6f5f6d696e745f6f6e5f7468655f73616d655f626c6f636b00000000000000600082015250565b6000614651601983613cad565b915061465c8261461b565b602082019050919050565b6000602082019050818103600083015261468081614644565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006146bd601f83613cad565b91506146c882614687565b602082019050919050565b600060208201905081810360008301526146ec816146b0565b9050919050565b7f6d696e745f69735f6e6f745f7374617274656400000000000000000000000000600082015250565b6000614729601383613cad565b9150614734826146f3565b602082019050919050565b600060208201905081810360008301526147588161471c565b9050919050565b7f696e73756666696369656e745f66756e64730000000000000000000000000000600082015250565b6000614795601283613cad565b91506147a08261475f565b602082019050919050565b600060208201905081810360008301526147c481614788565b9050919050565b60008160601b9050919050565b60006147e3826147cb565b9050919050565b60006147f5826147d8565b9050919050565b61480d61480882613de0565b6147ea565b82525050565b600061481f82846147fc565b60148201915081905092915050565b7f696e76616c69645f667265655f77686974656c6973745f6d65726b6c655f707260008201527f6f6f660000000000000000000000000000000000000000000000000000000000602082015250565b600061488a602383613cad565b91506148958261482e565b604082019050919050565b600060208201905081810360008301526148b98161487d565b9050919050565b7f7175616e746974795f69735f7265717569726564000000000000000000000000600082015250565b60006148f6601483613cad565b9150614901826148c0565b602082019050919050565b60006020820190508181036000830152614925816148e9565b9050919050565b600061493782613d5d565b915061494283613d5d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614977576149766144c6565b5b828201905092915050565b7f6d61785f737570706c795f657863656564656564000000000000000000000000600082015250565b60006149b8601483613cad565b91506149c382614982565b602082019050919050565b600060208201905081810360008301526149e7816149ab565b9050919050565b7f6d61785f73746167655f315f667265655f6d696e745f65786365656465640000600082015250565b6000614a24601e83613cad565b9150614a2f826149ee565b602082019050919050565b60006020820190508181036000830152614a5381614a17565b9050919050565b7f6d61785f73746167655f325f667265655f6d696e745f65786365656465640000600082015250565b6000614a90601e83613cad565b9150614a9b82614a5a565b602082019050919050565b60006020820190508181036000830152614abf81614a83565b9050919050565b7f6e6f6e5f6578697374616e745f746f6b656e0000000000000000000000000000600082015250565b6000614afc601283613cad565b9150614b0782614ac6565b602082019050919050565b60006020820190508181036000830152614b2b81614aef565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154614b5f81614429565b614b698186614b32565b94506001821660008114614b845760018114614b9557614bc8565b60ff19831686528186019350614bc8565b614b9e85614b3d565b60005b83811015614bc057815481890152600182019150602081019050614ba1565b838801955050505b50505092915050565b6000614bdc82613ca2565b614be68185614b32565b9350614bf6818560208601613cbe565b80840191505092915050565b6000614c0e8285614b52565b9150614c1a8284614bd1565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c82602683613cad565b9150614c8d82614c26565b604082019050919050565b60006020820190508181036000830152614cb181614c75565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614cdf82614cb8565b614ce98185614cc3565b9350614cf9818560208601613cbe565b614d0281613cf1565b840191505092915050565b6000608082019050614d226000830187613df2565b614d2f6020830186613df2565b614d3c6040830185613e88565b8181036060830152614d4e8184614cd4565b905095945050505050565b600081519050614d6881613c13565b92915050565b600060208284031215614d8457614d83613bdd565b5b6000614d9284828501614d59565b91505092915050565b7f6e6f5f73746167655f6e756d6265725f646566696e6564000000000000000000600082015250565b6000614dd1601783614b32565b9150614ddc82614d9b565b601782019050919050565b6000614df282614dc4565b9150819050919050565b6000614e0782613d5d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e3957614e386144c6565b5b600182019050919050565b6000614e4f82613d5d565b9150614e5a83613d5d565b925082821015614e6d57614e6c6144c6565b5b828203905092915050565b6000614e8382613d5d565b9150614e8e83613d5d565b925082614e9e57614e9d61454f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220c2d9ca7fd92df3e676183bbd98ad35773d5f449854c7273e4c21872a44a0e91b64736f6c634300080d0033
Deployed Bytecode
0x6080604052600436106102885760003560e01c80638da5cb5b1161015a578063cbc92499116100c1578063ecab70791161007a578063ecab707914610988578063eebb17f8146109b3578063effc9067146109dc578063f0b1292a14610a07578063f2fde38b14610a44578063fc27fc3914610a6d57610288565b8063cbc924991461087e578063cbd751f7146108a7578063d1f0ccd5146108d0578063e1bcb32e146108f9578063e706e5e814610922578063e985e9c51461094b57610288565b8063af1c521111610113578063af1c52111461077f578063b58bab36146107a8578063b88d4fde146107d3578063bd742dd8146107fc578063be1fd87314610825578063c87b56dd1461084157610288565b80638da5cb5b1461067f57806394767c99146106aa57806395d89b41146106d5578063a22cb46514610700578063a83cfbf514610729578063a976620f1461075457610288565b8063420ab222116101fe5780636c0360eb116101b75780636c0360eb1461058157806370a08231146105ac578063715018a6146105e95780637bed1ccf146106005780638a333b501461062b5780638a938f2f1461065657610288565b8063420ab2221461047357806342842e0e1461049c57806342966c68146104c557806357187412146104ee57806360fb5be2146105195780636352211e1461054457610288565b8063160fba5611610250578063160fba561461038457806318160ddd146103af5780631d4b37d0146103da5780631fa7b75d1461041757806323b872dd146104405780633ccfd60b1461046957610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b3146103325780630e467d6f1461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613c3f565b610a96565b6040516102c19190613c87565b60405180910390f35b3480156102d657600080fd5b506102df610b78565b6040516102ec9190613d3b565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613d93565b610c0a565b6040516103299190613e01565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190613e48565b610c86565b005b34801561036757600080fd5b50610382600480360381019061037d9190613d93565b610d90565b005b34801561039057600080fd5b50610399610e16565b6040516103a69190613d3b565b60405180910390f35b3480156103bb57600080fd5b506103c4610ea4565b6040516103d19190613e97565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc9190613eb2565b610ebb565b60405161040e9190613c87565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190613eb2565b610edb565b005b34801561044c57600080fd5b5061046760048036038101906104629190613edf565b610fb2565b005b610471610fc2565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613f68565b6111b1565b005b3480156104a857600080fd5b506104c360048036038101906104be9190613edf565b611237565b005b3480156104d157600080fd5b506104ec60048036038101906104e79190613d93565b611257565b005b3480156104fa57600080fd5b506105036112df565b6040516105109190613c87565b60405180910390f35b34801561052557600080fd5b5061052e6112f2565b60405161053b9190613fa4565b60405180910390f35b34801561055057600080fd5b5061056b60048036038101906105669190613d93565b6112f8565b6040516105789190613e01565b60405180910390f35b34801561058d57600080fd5b5061059661130e565b6040516105a39190613d3b565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce9190613eb2565b61139c565b6040516105e09190613e97565b60405180910390f35b3480156105f557600080fd5b506105fe61146b565b005b34801561060c57600080fd5b506106156114f3565b6040516106229190613c87565b60405180910390f35b34801561063757600080fd5b50610640611506565b60405161064d9190613e97565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190613d93565b61150c565b005b34801561068b57600080fd5b50610694611592565b6040516106a19190613e01565b60405180910390f35b3480156106b657600080fd5b506106bf6115bc565b6040516106cc9190613fa4565b60405180910390f35b3480156106e157600080fd5b506106ea6115c2565b6040516106f79190613d3b565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190613feb565b611654565b005b34801561073557600080fd5b5061073e6117cb565b60405161074b9190613fa4565b60405180910390f35b34801561076057600080fd5b506107696117d1565b6040516107769190613e97565b60405180910390f35b34801561078b57600080fd5b506107a660048036038101906107a19190614160565b6117d7565b005b3480156107b457600080fd5b506107bd61186d565b6040516107ca9190613e97565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f5919061424a565b611873565b005b34801561080857600080fd5b50610823600480360381019061081e9190614160565b6118ef565b005b61083f600480360381019061083a919061432d565b611985565b005b34801561084d57600080fd5b5061086860048036038101906108639190613d93565b611ecc565b6040516108759190613d3b565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a09190613f68565b611ff0565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190613f68565b612076565b005b3480156108dc57600080fd5b506108f760048036038101906108f29190613d93565b6120fc565b005b34801561090557600080fd5b50610920600480360381019061091b9190613f68565b612182565b005b34801561092e57600080fd5b506109496004803603810190610944919061438d565b612208565b005b34801561095757600080fd5b50610972600480360381019061096d91906143ba565b6122a1565b60405161097f9190613c87565b60405180910390f35b34801561099457600080fd5b5061099d612335565b6040516109aa9190613fa4565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190613f68565b61233b565b005b3480156109e857600080fd5b506109f16123c1565b6040516109fe9190613fa4565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190613eb2565b6123c7565b604051610a3b9190613e97565b60405180910390f35b348015610a5057600080fd5b50610a6b6004803603810190610a669190613eb2565b6123df565b005b348015610a7957600080fd5b50610a946004803603810190610a8f919061438d565b6124d6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b6157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b715750610b708261256f565b5b9050919050565b606060028054610b8790614429565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb390614429565b8015610c005780601f10610bd557610100808354040283529160200191610c00565b820191906000526020600020905b815481529060010190602001808311610be357829003601f168201915b5050505050905090565b6000610c15826125d9565b610c4b576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c91826112f8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cf8576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d17612627565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d495750610d4781610d42612627565b6122a1565b155b15610d80576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d8b83838361262f565b505050565b610d98612627565b73ffffffffffffffffffffffffffffffffffffffff16610db6611592565b73ffffffffffffffffffffffffffffffffffffffff1614610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e03906144a6565b60405180910390fd5b80600d8190555050565b60148054610e2390614429565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4f90614429565b8015610e9c5780601f10610e7157610100808354040283529160200191610e9c565b820191906000526020600020905b815481529060010190602001808311610e7f57829003601f168201915b505050505081565b6000610eae6126e1565b6001546000540303905090565b60176020528060005260406000206000915054906101000a900460ff1681565b610ee3612627565b73ffffffffffffffffffffffffffffffffffffffff16610f01611592565b73ffffffffffffffffffffffffffffffffffffffff1614610f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4e906144a6565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610fbd8383836126e6565b505050565b610fca612627565b73ffffffffffffffffffffffffffffffffffffffff16610fe8611592565b73ffffffffffffffffffffffffffffffffffffffff161461103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611035906144a6565b60405180910390fd5b600047905060006064600a8361105491906144f5565b61105e919061457e565b90506000606460288461107191906144f5565b61107b919061457e565b90506000606460328561108e91906144f5565b611098919061457e565b90507361c9651b626b0aed8476243d2d27f4cdd0d2d88173ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156110f4573d6000803e3d6000fd5b507326e37142dbef20f1683a5b8d8bacfaa8c752563173ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561114f573d6000803e3d6000fd5b5073bd9e9915fc583be672bb882b79a7576c97a1cc6f73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111aa573d6000803e3d6000fd5b5050505050565b6111b9612627565b73ffffffffffffffffffffffffffffffffffffffff166111d7611592565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611224906144a6565b60405180910390fd5b8060118190555050565b61125283838360405180602001604052806000815250611873565b505050565b61125f612627565b73ffffffffffffffffffffffffffffffffffffffff1661127d611592565b73ffffffffffffffffffffffffffffffffffffffff16146112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca906144a6565b60405180910390fd5b6112dc81612b9a565b50565b600a60009054906101000a900460ff1681565b600f5481565b600061130382612ba8565b600001519050919050565b6013805461131b90614429565b80601f016020809104026020016040519081016040528092919081815260200182805461134790614429565b80156113945780601f1061136957610100808354040283529160200191611394565b820191906000526020600020905b81548152906001019060200180831161137757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611403576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611473612627565b73ffffffffffffffffffffffffffffffffffffffff16611491611592565b73ffffffffffffffffffffffffffffffffffffffff16146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de906144a6565b60405180910390fd5b6114f16000612e37565b565b600a60019054906101000a900460ff1681565b600b5481565b611514612627565b73ffffffffffffffffffffffffffffffffffffffff16611532611592565b73ffffffffffffffffffffffffffffffffffffffff1614611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f906144a6565b60405180910390fd5b80600b8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6060600380546115d190614429565b80601f01602080910402602001604051908101604052809291908181526020018280546115fd90614429565b801561164a5780601f1061161f5761010080835404028352916020019161164a565b820191906000526020600020905b81548152906001019060200180831161162d57829003601f168201915b5050505050905090565b61165c612627565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c0576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006116cd612627565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661177a612627565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117bf9190613c87565b60405180910390a35050565b60105481565b600c5481565b6117df612627565b73ffffffffffffffffffffffffffffffffffffffff166117fd611592565b73ffffffffffffffffffffffffffffffffffffffff1614611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a906144a6565b60405180910390fd5b8060139080519060200190611869929190613aed565b5050565b600d5481565b61187e8484846126e6565b61189d8373ffffffffffffffffffffffffffffffffffffffff16612efd565b80156118b257506118b084848484612f10565b155b156118e9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6118f7612627565b73ffffffffffffffffffffffffffffffffffffffff16611915611592565b73ffffffffffffffffffffffffffffffffffffffff161461196b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611962906144a6565b60405180910390fd5b8060149080519060200190611981929190613aed565b5050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea906145fb565b60405180910390fd5b42601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b90614667565b60405180910390fd5b600260095403611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab0906146d3565b60405180910390fd5b60026009819055506000600d5411611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd9061473f565b60405180910390fd5b6002600d541115611b625782600c54611b1f91906144f5565b341015611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906147ab565b60405180910390fd5b5b6000611b6c610ea4565b90506000611b78613060565b9050600a60019054906101000a900460ff16611c9857600033604051602001611ba19190614813565b604051602081830303815290604052805190602001209050601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c9657611c56858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505083836130f5565b611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c906148a0565b60405180910390fd5b5b505b60008511611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd29061490c565b60405180910390fd5b600b548286611cea919061492c565b1115611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d22906149ce565b60405180910390fd5b6001600d5403611dc457600285601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d82919061492c565b1115611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90614a3a565b60405180910390fd5b5b6002600d5403611e5d57600185601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e1b919061492c565b1115611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390614aa6565b60405180910390fd5b5b84601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eac919061492c565b92505081905550611ebd338661310c565b50506001600981905550505050565b6060611ed7826125d9565b611f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0d90614b12565b60405180910390fd5b600a60009054906101000a900460ff1615611f5d576013611f368361312a565b604051602001611f47929190614c02565b6040516020818303038152906040529050611feb565b60148054611f6a90614429565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9690614429565b8015611fe35780601f10611fb857610100808354040283529160200191611fe3565b820191906000526020600020905b815481529060010190602001808311611fc657829003601f168201915b505050505090505b919050565b611ff8612627565b73ffffffffffffffffffffffffffffffffffffffff16612016611592565b73ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612063906144a6565b60405180910390fd5b80600f8190555050565b61207e612627565b73ffffffffffffffffffffffffffffffffffffffff1661209c611592565b73ffffffffffffffffffffffffffffffffffffffff16146120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e9906144a6565b60405180910390fd5b8060108190555050565b612104612627565b73ffffffffffffffffffffffffffffffffffffffff16612122611592565b73ffffffffffffffffffffffffffffffffffffffff1614612178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216f906144a6565b60405180910390fd5b80600c8190555050565b61218a612627565b73ffffffffffffffffffffffffffffffffffffffff166121a8611592565b73ffffffffffffffffffffffffffffffffffffffff16146121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f5906144a6565b60405180910390fd5b80600e8190555050565b612210612627565b73ffffffffffffffffffffffffffffffffffffffff1661222e611592565b73ffffffffffffffffffffffffffffffffffffffff1614612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b906144a6565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5481565b612343612627565b73ffffffffffffffffffffffffffffffffffffffff16612361611592565b73ffffffffffffffffffffffffffffffffffffffff16146123b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ae906144a6565b60405180910390fd5b8060128190555050565b60115481565b60166020528060005260406000206000915090505481565b6123e7612627565b73ffffffffffffffffffffffffffffffffffffffff16612405611592565b73ffffffffffffffffffffffffffffffffffffffff161461245b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612452906144a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c190614c98565b60405180910390fd5b6124d381612e37565b50565b6124de612627565b73ffffffffffffffffffffffffffffffffffffffff166124fc611592565b73ffffffffffffffffffffffffffffffffffffffff1614612552576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612549906144a6565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816125e46126e1565b111580156125f3575060005482105b8015612620575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b60006126f182612ba8565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461275c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661277d612627565b73ffffffffffffffffffffffffffffffffffffffff1614806127ac57506127ab856127a6612627565b6122a1565b5b806127f157506127ba612627565b73ffffffffffffffffffffffffffffffffffffffff166127d984610c0a565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061282a576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612890576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61289d858585600161328a565b6128a96000848761262f565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612b28576000548214612b2757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b938585856001613290565b5050505050565b612ba5816000613296565b50565b612bb0613b73565b600082905080612bbe6126e1565b11158015612bcd575060005481105b15612e00576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612dfe57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ce2578092505050612e32565b5b600115612dfd57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612df8578092505050612e32565b612ce3565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f36612627565b8786866040518563ffffffff1660e01b8152600401612f589493929190614d0d565b6020604051808303816000875af1925050508015612f9457506040513d601f19601f82011682018060405250810190612f919190614d6e565b60015b61300d573d8060008114612fc4576040519150601f19603f3d011682016040523d82523d6000602084013e612fc9565b606091505b506000815103613005576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60008060405160200161307290614de7565b6040516020818303038152906040528051906020012090506001600d540361309e57600e5490506130ee565b6002600d54036130b257600f5490506130ed565b6003600d54036130c65760105490506130ec565b6004600d54036130da5760115490506130eb565b6005600d54036130ea5760125490505b5b5b5b5b8091505090565b6000826131028584613685565b1490509392505050565b6131268282604051806020016040528060008152506136fa565b5050565b606060008203613171576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613285565b600082905060005b600082146131a357808061318c90614dfc565b915050600a8261319c919061457e565b9150613179565b60008167ffffffffffffffff8111156131bf576131be614035565b5b6040519080825280601f01601f1916602001820160405280156131f15781602001600182028036833780820191505090505b5090505b6000851461327e5760018261320a9190614e44565b9150600a856132199190614e78565b6030613225919061492c565b60f81b81838151811061323b5761323a614ea9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613277919061457e565b94506131f5565b8093505050505b919050565b50505050565b50505050565b60006132a183612ba8565b905060008160000151905082156133825760008173ffffffffffffffffffffffffffffffffffffffff166132d3612627565b73ffffffffffffffffffffffffffffffffffffffff1614806133025750613301826132fc612627565b6122a1565b5b806133475750613310612627565b73ffffffffffffffffffffffffffffffffffffffff1661332f86610c0a565b73ffffffffffffffffffffffffffffffffffffffff16145b905080613380576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b61339081600086600161328a565b61339c6000858361262f565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036135ff5760005482146135fe57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461366d816000866001613290565b60016000815480929190600101919050555050505050565b60008082905060005b84518110156136ef5760008582815181106136ac576136ab614ea9565b5b602002602001015190508083116136ce576136c7838261370c565b92506136db565b6136d8818461370c565b92505b5080806136e790614dfc565b91505061368e565b508091505092915050565b6137078383836001613723565b505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361378f576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084036137c9576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6137d6600086838761328a565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156139a0575061399f8773ffffffffffffffffffffffffffffffffffffffff16612efd565b5b15613a65575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a156000888480600101955088612f10565b613a4b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082036139a6578260005414613a6057600080fd5b613ad0565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808203613a66575b816000819055505050613ae66000868387613290565b5050505050565b828054613af990614429565b90600052602060002090601f016020900481019282613b1b5760008555613b62565b82601f10613b3457805160ff1916838001178555613b62565b82800160010185558215613b62579182015b82811115613b61578251825591602001919060010190613b46565b5b509050613b6f9190613bb6565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613bcf576000816000905550600101613bb7565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613c1c81613be7565b8114613c2757600080fd5b50565b600081359050613c3981613c13565b92915050565b600060208284031215613c5557613c54613bdd565b5b6000613c6384828501613c2a565b91505092915050565b60008115159050919050565b613c8181613c6c565b82525050565b6000602082019050613c9c6000830184613c78565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cdc578082015181840152602081019050613cc1565b83811115613ceb576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d0d82613ca2565b613d178185613cad565b9350613d27818560208601613cbe565b613d3081613cf1565b840191505092915050565b60006020820190508181036000830152613d558184613d02565b905092915050565b6000819050919050565b613d7081613d5d565b8114613d7b57600080fd5b50565b600081359050613d8d81613d67565b92915050565b600060208284031215613da957613da8613bdd565b5b6000613db784828501613d7e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613deb82613dc0565b9050919050565b613dfb81613de0565b82525050565b6000602082019050613e166000830184613df2565b92915050565b613e2581613de0565b8114613e3057600080fd5b50565b600081359050613e4281613e1c565b92915050565b60008060408385031215613e5f57613e5e613bdd565b5b6000613e6d85828601613e33565b9250506020613e7e85828601613d7e565b9150509250929050565b613e9181613d5d565b82525050565b6000602082019050613eac6000830184613e88565b92915050565b600060208284031215613ec857613ec7613bdd565b5b6000613ed684828501613e33565b91505092915050565b600080600060608486031215613ef857613ef7613bdd565b5b6000613f0686828701613e33565b9350506020613f1786828701613e33565b9250506040613f2886828701613d7e565b9150509250925092565b6000819050919050565b613f4581613f32565b8114613f5057600080fd5b50565b600081359050613f6281613f3c565b92915050565b600060208284031215613f7e57613f7d613bdd565b5b6000613f8c84828501613f53565b91505092915050565b613f9e81613f32565b82525050565b6000602082019050613fb96000830184613f95565b92915050565b613fc881613c6c565b8114613fd357600080fd5b50565b600081359050613fe581613fbf565b92915050565b6000806040838503121561400257614001613bdd565b5b600061401085828601613e33565b925050602061402185828601613fd6565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61406d82613cf1565b810181811067ffffffffffffffff8211171561408c5761408b614035565b5b80604052505050565b600061409f613bd3565b90506140ab8282614064565b919050565b600067ffffffffffffffff8211156140cb576140ca614035565b5b6140d482613cf1565b9050602081019050919050565b82818337600083830152505050565b60006141036140fe846140b0565b614095565b90508281526020810184848401111561411f5761411e614030565b5b61412a8482856140e1565b509392505050565b600082601f8301126141475761414661402b565b5b81356141578482602086016140f0565b91505092915050565b60006020828403121561417657614175613bdd565b5b600082013567ffffffffffffffff81111561419457614193613be2565b5b6141a084828501614132565b91505092915050565b600067ffffffffffffffff8211156141c4576141c3614035565b5b6141cd82613cf1565b9050602081019050919050565b60006141ed6141e8846141a9565b614095565b90508281526020810184848401111561420957614208614030565b5b6142148482856140e1565b509392505050565b600082601f8301126142315761423061402b565b5b81356142418482602086016141da565b91505092915050565b6000806000806080858703121561426457614263613bdd565b5b600061427287828801613e33565b945050602061428387828801613e33565b935050604061429487828801613d7e565b925050606085013567ffffffffffffffff8111156142b5576142b4613be2565b5b6142c18782880161421c565b91505092959194509250565b600080fd5b600080fd5b60008083601f8401126142ed576142ec61402b565b5b8235905067ffffffffffffffff81111561430a576143096142cd565b5b602083019150836020820283011115614326576143256142d2565b5b9250929050565b60008060006040848603121561434657614345613bdd565b5b600061435486828701613d7e565b935050602084013567ffffffffffffffff81111561437557614374613be2565b5b614381868287016142d7565b92509250509250925092565b6000602082840312156143a3576143a2613bdd565b5b60006143b184828501613fd6565b91505092915050565b600080604083850312156143d1576143d0613bdd565b5b60006143df85828601613e33565b92505060206143f085828601613e33565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061444157607f821691505b602082108103614454576144536143fa565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614490602083613cad565b915061449b8261445a565b602082019050919050565b600060208201905081810360008301526144bf81614483565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061450082613d5d565b915061450b83613d5d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614544576145436144c6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458982613d5d565b915061459483613d5d565b9250826145a4576145a361454f565b5b828204905092915050565b7f636f6e7472616374735f6e6f745f616c6c6f7765645f746f5f6d696e74000000600082015250565b60006145e5601d83613cad565b91506145f0826145af565b602082019050919050565b60006020820190508181036000830152614614816145d8565b9050919050565b7f6e6f5f6d696e745f6f6e5f7468655f73616d655f626c6f636b00000000000000600082015250565b6000614651601983613cad565b915061465c8261461b565b602082019050919050565b6000602082019050818103600083015261468081614644565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006146bd601f83613cad565b91506146c882614687565b602082019050919050565b600060208201905081810360008301526146ec816146b0565b9050919050565b7f6d696e745f69735f6e6f745f7374617274656400000000000000000000000000600082015250565b6000614729601383613cad565b9150614734826146f3565b602082019050919050565b600060208201905081810360008301526147588161471c565b9050919050565b7f696e73756666696369656e745f66756e64730000000000000000000000000000600082015250565b6000614795601283613cad565b91506147a08261475f565b602082019050919050565b600060208201905081810360008301526147c481614788565b9050919050565b60008160601b9050919050565b60006147e3826147cb565b9050919050565b60006147f5826147d8565b9050919050565b61480d61480882613de0565b6147ea565b82525050565b600061481f82846147fc565b60148201915081905092915050565b7f696e76616c69645f667265655f77686974656c6973745f6d65726b6c655f707260008201527f6f6f660000000000000000000000000000000000000000000000000000000000602082015250565b600061488a602383613cad565b91506148958261482e565b604082019050919050565b600060208201905081810360008301526148b98161487d565b9050919050565b7f7175616e746974795f69735f7265717569726564000000000000000000000000600082015250565b60006148f6601483613cad565b9150614901826148c0565b602082019050919050565b60006020820190508181036000830152614925816148e9565b9050919050565b600061493782613d5d565b915061494283613d5d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614977576149766144c6565b5b828201905092915050565b7f6d61785f737570706c795f657863656564656564000000000000000000000000600082015250565b60006149b8601483613cad565b91506149c382614982565b602082019050919050565b600060208201905081810360008301526149e7816149ab565b9050919050565b7f6d61785f73746167655f315f667265655f6d696e745f65786365656465640000600082015250565b6000614a24601e83613cad565b9150614a2f826149ee565b602082019050919050565b60006020820190508181036000830152614a5381614a17565b9050919050565b7f6d61785f73746167655f325f667265655f6d696e745f65786365656465640000600082015250565b6000614a90601e83613cad565b9150614a9b82614a5a565b602082019050919050565b60006020820190508181036000830152614abf81614a83565b9050919050565b7f6e6f6e5f6578697374616e745f746f6b656e0000000000000000000000000000600082015250565b6000614afc601283613cad565b9150614b0782614ac6565b602082019050919050565b60006020820190508181036000830152614b2b81614aef565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154614b5f81614429565b614b698186614b32565b94506001821660008114614b845760018114614b9557614bc8565b60ff19831686528186019350614bc8565b614b9e85614b3d565b60005b83811015614bc057815481890152600182019150602081019050614ba1565b838801955050505b50505092915050565b6000614bdc82613ca2565b614be68185614b32565b9350614bf6818560208601613cbe565b80840191505092915050565b6000614c0e8285614b52565b9150614c1a8284614bd1565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c82602683613cad565b9150614c8d82614c26565b604082019050919050565b60006020820190508181036000830152614cb181614c75565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614cdf82614cb8565b614ce98185614cc3565b9350614cf9818560208601613cbe565b614d0281613cf1565b840191505092915050565b6000608082019050614d226000830187613df2565b614d2f6020830186613df2565b614d3c6040830185613e88565b8181036060830152614d4e8184614cd4565b905095945050505050565b600081519050614d6881613c13565b92915050565b600060208284031215614d8457614d83613bdd565b5b6000614d9284828501614d59565b91505092915050565b7f6e6f5f73746167655f6e756d6265725f646566696e6564000000000000000000600082015250565b6000614dd1601783614b32565b9150614ddc82614d9b565b601782019050919050565b6000614df282614dc4565b9150819050919050565b6000614e0782613d5d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e3957614e386144c6565b5b600182019050919050565b6000614e4f82613d5d565b9150614e5a83613d5d565b925082821015614e6d57614e6c6144c6565b5b828203905092915050565b6000614e8382613d5d565b9150614e8e83613d5d565b925082614e9e57614e9d61454f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220c2d9ca7fd92df3e676183bbd98ad35773d5f449854c7273e4c21872a44a0e91b64736f6c634300080d0033
Deployed Bytecode Sourcemap
50336:5776:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31768:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34881:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36384:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35947:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54547:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51185:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31017:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51315:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55345:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37249:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55563:546;;;:::i;:::-;;55087:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37490:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55480:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50428:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50747:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34689:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51159:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32137:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9878:103;;;;;;;;;;;;;:::i;:::-;;50470:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50517:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54313:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9227:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51056:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35050:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36660:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50850:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50554:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53789:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50600:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37746:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53899:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51639:1205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53487:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54829:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54958;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54426:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54700:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54017:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37018:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50644:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55216:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50953:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51261:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10136:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54155:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31768:305;31870:4;31922:25;31907:40;;;:11;:40;;;;:105;;;;31979:33;31964:48;;;:11;:48;;;;31907:105;:158;;;;32029:36;32053:11;32029:23;:36::i;:::-;31907:158;31887:178;;31768:305;;;:::o;34881:100::-;34935:13;34968:5;34961:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34881:100;:::o;36384:204::-;36452:7;36477:16;36485:7;36477;:16::i;:::-;36472:64;;36502:34;;;;;;;;;;;;;;36472:64;36556:15;:24;36572:7;36556:24;;;;;;;;;;;;;;;;;;;;;36549:31;;36384:204;;;:::o;35947:371::-;36020:13;36036:24;36052:7;36036:15;:24::i;:::-;36020:40;;36081:5;36075:11;;:2;:11;;;36071:48;;36095:24;;;;;;;;;;;;;;36071:48;36152:5;36136:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;36162:37;36179:5;36186:12;:10;:12::i;:::-;36162:16;:37::i;:::-;36161:38;36136:63;36132:138;;;36223:35;;;;;;;;;;;;;;36132:138;36282:28;36291:2;36295:7;36304:5;36282:8;:28::i;:::-;36009:309;35947:371;;:::o;54547:147::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54663:25:::1;54640:20;:48;;;;54547:147:::0;:::o;51185:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31017:303::-;31061:7;31286:15;:13;:15::i;:::-;31271:12;;31255:13;;:28;:46;31248:53;;31017:303;:::o;51315:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;55345:129::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55464:4:::1;55424:15;:37;55440:20;55424:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;55345:129:::0;:::o;37249:170::-;37383:28;37393:4;37399:2;37403:7;37383:9;:28::i;:::-;37249:170;;;:::o;55563:546::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55615:24:::1;55642:21;55615:48;;55670:24;55721:3;55716:2;55697:16;:21;;;;:::i;:::-;:27;;;;:::i;:::-;55670:54;;55731:25;55783:3;55778:2;55759:16;:21;;;;:::i;:::-;:27;;;;:::i;:::-;55731:55;;55793:24;55844:3;55839:2;55820:16;:21;;;;:::i;:::-;:27;;;;:::i;:::-;55793:54;;55862:42;55854:60;;:78;55915:16;55854:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;55947:42;55939:60;;:79;56000:17;55939:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;56033:42;56025:60;;:78;56086:16;56025:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;55608:501;;;;55563:546::o:0;55087:123::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55185:19:::1;55168:14;:36;;;;55087:123:::0;:::o;37490:185::-;37628:39;37645:4;37651:2;37655:7;37628:39;;;;;;;;;;;;:16;:39::i;:::-;37490:185;;;:::o;55480:77::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55536:15:::1;55542:8;55536:5;:15::i;:::-;55480:77:::0;:::o;50428:37::-;;;;;;;;;;;;;:::o;50747:98::-;;;;:::o;34689:125::-;34753:7;34780:21;34793:7;34780:12;:21::i;:::-;:26;;;34773:33;;34689:125;;;:::o;51159:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32137:206::-;32201:7;32242:1;32225:19;;:5;:19;;;32221:60;;32253:28;;;;;;;;;;;;;;32221:60;32307:12;:19;32320:5;32307:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;32299:36;;32292:43;;32137:206;;;:::o;9878:103::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9943:30:::1;9970:1;9943:18;:30::i;:::-;9878:103::o:0;50470:42::-;;;;;;;;;;;;;:::o;50517:32::-;;;;:::o;54313:107::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54399:15:::1;54386:10;:28;;;;54313:107:::0;:::o;9227:87::-;9273:7;9300:6;;;;;;;;;;;9293:13;;9227:87;:::o;51056:98::-;;;;:::o;35050:104::-;35106:13;35139:7;35132:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35050:104;:::o;36660:287::-;36771:12;:10;:12::i;:::-;36759:24;;:8;:24;;;36755:54;;36792:17;;;;;;;;;;;;;;36755:54;36867:8;36822:18;:32;36841:12;:10;:12::i;:::-;36822:32;;;;;;;;;;;;;;;:42;36855:8;36822:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;36920:8;36891:48;;36906:12;:10;:12::i;:::-;36891:48;;;36930:8;36891:48;;;;;;:::i;:::-;;;;;;;;36660:287;;:::o;50850:98::-;;;;:::o;50554:41::-;;;;:::o;53789:104::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53874:13:::1;53864:7;:23;;;;;;;;;;;;:::i;:::-;;53789:104:::0;:::o;50600:39::-;;;;:::o;37746:369::-;37913:28;37923:4;37929:2;37933:7;37913:9;:28::i;:::-;37956:15;:2;:13;;;:15::i;:::-;:76;;;;;37976:56;38007:4;38013:2;38017:7;38026:5;37976:30;:56::i;:::-;37975:57;37956:76;37952:156;;;38056:40;;;;;;;;;;;;;;37952:156;37746:369;;;;:::o;53899:112::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53990:15:::1;53978:9;:27;;;;;;;;;;;;:::i;:::-;;53899:112:::0;:::o;51639:1205::-;51487:10;51474:23;;:9;:23;;;51466:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;51574:15;51546:13;:25;51560:10;51546:25;;;;;;;;;;;;;;;;:43;51538:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1:::1;2410:7;;:19:::0;2402:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;51800:1:::2;51777:20;;:24;51769:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;51858:1;51835:20;;:24;51832:117;;;51906:12;51891;;:27;;;;:::i;:::-;51878:9;:40;;51870:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;51832:117;51957:14;51974:13;:11;:13::i;:::-;51957:30;;51994:22;52019:15;:13;:15::i;:::-;51994:40;;52047:22;;;;;;;;;;;52043:283;;52080:24;52134:10;52117:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;52107:39;;;;;;52080:66;;52159:15;:27;52175:10;52159:27;;;;;;;;;;;;;;;;;;;;;;;;;52155:164;;52207:62;52226:8;;52207:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52236:14;52252:16;52207:18;:62::i;:::-;52199:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;52155:164;52071:255;52043:283;52357:1;52342:12;:16;52334:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;52423:10;;52413:6;52398:12;:21;;;;:::i;:::-;:35;;52390:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;52495:1;52471:20;;:25:::0;52468:136:::2;;52560:1;52544:12;52515:14;:26;52530:10;52515:26;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:46;;52507:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;52468:136;52637:1;52613:20;;:25:::0;52610:136:::2;;52702:1;52686:12;52657:14;:26;52672:10;52657:26;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:46;;52649:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;52610:136;52784:12;52754:14;:26;52769:10;52754:26;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;52803:35;52813:10;52825:12;52803:9;:35::i;:::-;51762:1082;;1768:1:::1;2722:7;:22;;;;51639:1205:::0;;;:::o;53487:296::-;53561:13;53591:17;53599:8;53591:7;:17::i;:::-;53583:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;53642:17;;;;;;;;;;;53638:140;;;53701:7;53710:19;:8;:17;:19::i;:::-;53684:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53670:61;;;;53638:140;53761:9;53754:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53487:296;;;;:::o;54829:123::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54927:19:::1;54910:14;:36;;;;54829:123:::0;:::o;54958:::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55056:19:::1;55039:14;:36;;;;54958:123:::0;:::o;54426:115::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54518:17:::1;54503:12;:32;;;;54426:115:::0;:::o;54700:123::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54798:19:::1;54781:14;:36;;;;54700:123:::0;:::o;54017:132::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54121:22:::1;54101:17;;:42;;;;;;;;;;;;;;;;;;54017:132:::0;:::o;37018:164::-;37115:4;37139:18;:25;37158:5;37139:25;;;;;;;;;;;;;;;:35;37165:8;37139:35;;;;;;;;;;;;;;;;;;;;;;;;;37132:42;;37018:164;;;;:::o;50644:98::-;;;;:::o;55216:123::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55314:19:::1;55297:14;:36;;;;55216:123:::0;:::o;50953:98::-;;;;:::o;51261:49::-;;;;;;;;;;;;;;;;;:::o;10136:201::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10245:1:::1;10225:22;;:8;:22;;::::0;10217:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10301:28;10320:8;10301:18;:28::i;:::-;10136:201:::0;:::o;54155:152::-;9458:12;:10;:12::i;:::-;9447:23;;:7;:5;:7::i;:::-;:23;;;9439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54274:27:::1;54249:22;;:52;;;;;;;;;;;;;;;;;;54155:152:::0;:::o;21659:157::-;21744:4;21783:25;21768:40;;;:11;:40;;;;21761:47;;21659:157;;;:::o;38370:187::-;38427:4;38470:7;38451:15;:13;:15::i;:::-;:26;;:53;;;;;38491:13;;38481:7;:23;38451:53;:98;;;;;38522:11;:20;38534:7;38522:20;;;;;;;;;;;:27;;;;;;;;;;;;38521:28;38451:98;38444:105;;38370:187;;;:::o;7951:98::-;8004:7;8031:10;8024:17;;7951:98;:::o;46540:196::-;46682:2;46655:15;:24;46671:7;46655:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46720:7;46716:2;46700:28;;46709:5;46700:28;;;;;;;;;;;;46540:196;;;:::o;30791:92::-;30847:7;30791:92;:::o;41483:2130::-;41598:35;41636:21;41649:7;41636:12;:21::i;:::-;41598:59;;41696:4;41674:26;;:13;:18;;;:26;;;41670:67;;41709:28;;;;;;;;;;;;;;41670:67;41750:22;41792:4;41776:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;41813:36;41830:4;41836:12;:10;:12::i;:::-;41813:16;:36::i;:::-;41776:73;:126;;;;41890:12;:10;:12::i;:::-;41866:36;;:20;41878:7;41866:11;:20::i;:::-;:36;;;41776:126;41750:153;;41921:17;41916:66;;41947:35;;;;;;;;;;;;;;41916:66;42011:1;41997:16;;:2;:16;;;41993:52;;42022:23;;;;;;;;;;;;;;41993:52;42058:43;42080:4;42086:2;42090:7;42099:1;42058:21;:43::i;:::-;42166:35;42183:1;42187:7;42196:4;42166:8;:35::i;:::-;42527:1;42497:12;:18;42510:4;42497:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42571:1;42543:12;:16;42556:2;42543:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42589:31;42623:11;:20;42635:7;42623:20;;;;;;;;;;;42589:54;;42674:2;42658:8;:13;;;:18;;;;;;;;;;;;;;;;;;42724:15;42691:8;:23;;;:49;;;;;;;;;;;;;;;;;;42992:19;43024:1;43014:7;:11;42992:33;;43040:31;43074:11;:24;43086:11;43074:24;;;;;;;;;;;43040:58;;43142:1;43117:27;;:8;:13;;;;;;;;;;;;:27;;;43113:384;;43327:13;;43312:11;:28;43308:174;;43381:4;43365:8;:13;;;:20;;;;;;;;;;;;;;;;;;43434:13;:28;;;43408:8;:23;;;:54;;;;;;;;;;;;;;;;;;43308:174;43113:384;42472:1036;;;43544:7;43540:2;43525:27;;43534:4;43525:27;;;;;;;;;;;;43563:42;43584:4;43590:2;43594:7;43603:1;43563:20;:42::i;:::-;41587:2026;;41483:2130;;;:::o;43696:89::-;43756:21;43762:7;43771:5;43756;:21::i;:::-;43696:89;:::o;33518:1109::-;33580:21;;:::i;:::-;33614:12;33629:7;33614:22;;33697:4;33678:15;:13;:15::i;:::-;:23;;:47;;;;;33712:13;;33705:4;:20;33678:47;33674:886;;;33746:31;33780:11;:17;33792:4;33780:17;;;;;;;;;;;33746:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33821:9;:16;;;33816:729;;33892:1;33866:28;;:9;:14;;;:28;;;33862:101;;33930:9;33923:16;;;;;;33862:101;34265:261;34272:4;34265:261;;;34305:6;;;;;;;;34350:11;:17;34362:4;34350:17;;;;;;;;;;;34338:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34424:1;34398:28;;:9;:14;;;:28;;;34394:109;;34466:9;34459:16;;;;;;34394:109;34265:261;;;33816:729;33727:833;33674:886;34588:31;;;;;;;;;;;;;;33518:1109;;;;:::o;10497:191::-;10571:16;10590:6;;;;;;;;;;;10571:25;;10616:8;10607:6;;:17;;;;;;;;;;;;;;;;;;10671:8;10640:40;;10661:8;10640:40;;;;;;;;;;;;10560:128;10497:191;:::o;11515:387::-;11575:4;11783:12;11850:7;11838:20;11830:28;;11893:1;11886:4;:8;11879:15;;;11515:387;;;:::o;47228:667::-;47391:4;47428:2;47412:36;;;47449:12;:10;:12::i;:::-;47463:4;47469:7;47478:5;47412:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47408:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47663:1;47646:6;:13;:18;47642:235;;47692:40;;;;;;;;;;;;;;47642:235;47835:6;47829:13;47820:6;47816:2;47812:15;47805:38;47408:480;47541:45;;;47531:55;;;:6;:55;;;;47524:62;;;47228:667;;;;;;:::o;52850:631::-;52901:18;52928:22;52963:43;;;;;;;:::i;:::-;;;;;;;;;;;;;52953:54;;;;;;52928:79;;53041:1;53017:20;;:25;53014:434;;53070:14;;53053:31;;53014:434;;;53130:1;53106:20;;:25;53103:345;;53159:14;;53142:31;;53103:345;;;53219:1;53195:20;;:25;53192:256;;53248:14;;53231:31;;53192:256;;;53308:1;53284:20;;:25;53281:167;;53337:14;;53320:31;;53281:167;;;53397:1;53373:20;;:25;53370:78;;53426:14;;53409:31;;53370:78;53281:167;53192:256;53103:345;53014:434;53461:14;53454:21;;;52850:631;:::o;3682:190::-;3807:4;3860;3831:25;3844:5;3851:4;3831:12;:25::i;:::-;:33;3824:40;;3682:190;;;;;:::o;38565:104::-;38634:27;38644:2;38648:8;38634:27;;;;;;;;;;;;:9;:27::i;:::-;38565:104;;:::o;5513:723::-;5569:13;5799:1;5790:5;:10;5786:53;;5817:10;;;;;;;;;;;;;;;;;;;;;5786:53;5849:12;5864:5;5849:20;;5880:14;5905:78;5920:1;5912:4;:9;5905:78;;5938:8;;;;;:::i;:::-;;;;5969:2;5961:10;;;;;:::i;:::-;;;5905:78;;;5993:19;6025:6;6015:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5993:39;;6043:154;6059:1;6050:5;:10;6043:154;;6087:1;6077:11;;;;;:::i;:::-;;;6154:2;6146:5;:10;;;;:::i;:::-;6133:2;:24;;;;:::i;:::-;6120:39;;6103:6;6110;6103:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6183:2;6174:11;;;;;:::i;:::-;;;6043:154;;;6221:6;6207:21;;;;;5513:723;;;;:::o;48543:159::-;;;;;:::o;49361:158::-;;;;;:::o;44014:2408::-;44094:35;44132:21;44145:7;44132:12;:21::i;:::-;44094:59;;44166:12;44181:13;:18;;;44166:33;;44216:13;44212:290;;;44246:22;44288:4;44272:20;;:12;:10;:12::i;:::-;:20;;;:77;;;;44313:36;44330:4;44336:12;:10;:12::i;:::-;44313:16;:36::i;:::-;44272:77;:134;;;;44394:12;:10;:12::i;:::-;44370:36;;:20;44382:7;44370:11;:20::i;:::-;:36;;;44272:134;44246:161;;44429:17;44424:66;;44455:35;;;;;;;;;;;;;;44424:66;44231:271;44212:290;44514:51;44536:4;44550:1;44554:7;44563:1;44514:21;:51::i;:::-;44630:35;44647:1;44651:7;44660:4;44630:8;:35::i;:::-;44961:31;44995:12;:18;45008:4;44995:18;;;;;;;;;;;;;;;44961:52;;45051:1;45028:11;:19;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45095:1;45067:11;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45195:31;45229:11;:20;45241:7;45229:20;;;;;;;;;;;45195:54;;45280:4;45264:8;:13;;;:20;;;;;;;;;;;;;;;;;;45332:15;45299:8;:23;;;:49;;;;;;;;;;;;;;;;;;45381:4;45363:8;:15;;;:22;;;;;;;;;;;;;;;;;;45633:19;45665:1;45655:7;:11;45633:33;;45681:31;45715:11;:24;45727:11;45715:24;;;;;;;;;;;45681:58;;45783:1;45758:27;;:8;:13;;;;;;;;;;;;:27;;;45754:384;;45968:13;;45953:11;:28;45949:174;;46022:4;46006:8;:13;;;:20;;;;;;;;;;;;;;;;;;46075:13;:28;;;46049:8;:23;;;:54;;;;;;;;;;;;;;;;;;45949:174;45754:384;44936:1213;;;;46193:7;46189:1;46166:35;;46175:4;46166:35;;;;;;;;;;;;46212:50;46233:4;46247:1;46251:7;46260:1;46212:20;:50::i;:::-;46389:12;;:14;;;;;;;;;;;;;44083:2339;;44014:2408;;:::o;4234:675::-;4317:7;4337:20;4360:4;4337:27;;4380:9;4375:497;4399:5;:12;4395:1;:16;4375:497;;;4433:20;4456:5;4462:1;4456:8;;;;;;;;:::i;:::-;;;;;;;;4433:31;;4499:12;4483;:28;4479:382;;4626:42;4641:12;4655;4626:14;:42::i;:::-;4611:57;;4479:382;;;4803:42;4818:12;4832;4803:14;:42::i;:::-;4788:57;;4479:382;4418:454;4413:3;;;;;:::i;:::-;;;;4375:497;;;;4889:12;4882:19;;;4234:675;;;;:::o;39032:163::-;39155:32;39161:2;39165:8;39175:5;39182:4;39155:5;:32::i;:::-;39032:163;;;:::o;4917:224::-;4985:13;5048:1;5042:4;5035:15;5077:1;5071:4;5064:15;5118:4;5112;5102:21;5093:30;;4917:224;;;;:::o;39454:1775::-;39593:20;39616:13;;39593:36;;39658:1;39644:16;;:2;:16;;;39640:48;;39669:19;;;;;;;;;;;;;;39640:48;39715:1;39703:8;:13;39699:44;;39725:18;;;;;;;;;;;;;;39699:44;39756:61;39786:1;39790:2;39794:12;39808:8;39756:21;:61::i;:::-;40129:8;40094:12;:16;40107:2;40094:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40193:8;40153:12;:16;40166:2;40153:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40252:2;40219:11;:25;40231:12;40219:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;40319:15;40269:11;:25;40281:12;40269:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;40352:20;40375:12;40352:35;;40402:11;40431:8;40416:12;:23;40402:37;;40460:4;:23;;;;;40468:15;:2;:13;;;:15::i;:::-;40460:23;40456:641;;;40504:314;40560:12;40556:2;40535:38;;40552:1;40535:38;;;;;;;;;;;;40601:69;40640:1;40644:2;40648:14;;;;;;40664:5;40601:30;:69::i;:::-;40596:174;;40706:40;;;;;;;;;;;;;;40596:174;40813:3;40797:12;:19;40504:314;;40899:12;40882:13;;:29;40878:43;;40913:8;;;40878:43;40456:641;;;40962:120;41018:14;;;;;;41014:2;40993:40;;41010:1;40993:40;;;;;;;;;;;;41077:3;41061:12;:19;40962:120;;40456:641;41127:12;41111:13;:28;;;;40069:1082;;41161:60;41190:1;41194:2;41198:12;41212:8;41161:20;:60::i;:::-;39582:1647;39454:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:329::-;5349:6;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5290:329;;;;:::o;5625:619::-;5702:6;5710;5718;5767:2;5755:9;5746:7;5742:23;5738:32;5735:119;;;5773:79;;:::i;:::-;5735:119;5893:1;5918:53;5963:7;5954:6;5943:9;5939:22;5918:53;:::i;:::-;5908:63;;5864:117;6020:2;6046:53;6091:7;6082:6;6071:9;6067:22;6046:53;:::i;:::-;6036:63;;5991:118;6148:2;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6119:118;5625:619;;;;;:::o;6250:77::-;6287:7;6316:5;6305:16;;6250:77;;;:::o;6333:122::-;6406:24;6424:5;6406:24;:::i;:::-;6399:5;6396:35;6386:63;;6445:1;6442;6435:12;6386:63;6333:122;:::o;6461:139::-;6507:5;6545:6;6532:20;6523:29;;6561:33;6588:5;6561:33;:::i;:::-;6461:139;;;;:::o;6606:329::-;6665:6;6714:2;6702:9;6693:7;6689:23;6685:32;6682:119;;;6720:79;;:::i;:::-;6682:119;6840:1;6865:53;6910:7;6901:6;6890:9;6886:22;6865:53;:::i;:::-;6855:63;;6811:117;6606:329;;;;:::o;6941:118::-;7028:24;7046:5;7028:24;:::i;:::-;7023:3;7016:37;6941:118;;:::o;7065:222::-;7158:4;7196:2;7185:9;7181:18;7173:26;;7209:71;7277:1;7266:9;7262:17;7253:6;7209:71;:::i;:::-;7065:222;;;;:::o;7293:116::-;7363:21;7378:5;7363:21;:::i;:::-;7356:5;7353:32;7343:60;;7399:1;7396;7389:12;7343:60;7293:116;:::o;7415:133::-;7458:5;7496:6;7483:20;7474:29;;7512:30;7536:5;7512:30;:::i;:::-;7415:133;;;;:::o;7554:468::-;7619:6;7627;7676:2;7664:9;7655:7;7651:23;7647:32;7644:119;;;7682:79;;:::i;:::-;7644:119;7802:1;7827:53;7872:7;7863:6;7852:9;7848:22;7827:53;:::i;:::-;7817:63;;7773:117;7929:2;7955:50;7997:7;7988:6;7977:9;7973:22;7955:50;:::i;:::-;7945:60;;7900:115;7554:468;;;;;:::o;8028:117::-;8137:1;8134;8127:12;8151:117;8260:1;8257;8250:12;8274:180;8322:77;8319:1;8312:88;8419:4;8416:1;8409:15;8443:4;8440:1;8433:15;8460:281;8543:27;8565:4;8543:27;:::i;:::-;8535:6;8531:40;8673:6;8661:10;8658:22;8637:18;8625:10;8622:34;8619:62;8616:88;;;8684:18;;:::i;:::-;8616:88;8724:10;8720:2;8713:22;8503:238;8460:281;;:::o;8747:129::-;8781:6;8808:20;;:::i;:::-;8798:30;;8837:33;8865:4;8857:6;8837:33;:::i;:::-;8747:129;;;:::o;8882:308::-;8944:4;9034:18;9026:6;9023:30;9020:56;;;9056:18;;:::i;:::-;9020:56;9094:29;9116:6;9094:29;:::i;:::-;9086:37;;9178:4;9172;9168:15;9160:23;;8882:308;;;:::o;9196:154::-;9280:6;9275:3;9270;9257:30;9342:1;9333:6;9328:3;9324:16;9317:27;9196:154;;;:::o;9356:412::-;9434:5;9459:66;9475:49;9517:6;9475:49;:::i;:::-;9459:66;:::i;:::-;9450:75;;9548:6;9541:5;9534:21;9586:4;9579:5;9575:16;9624:3;9615:6;9610:3;9606:16;9603:25;9600:112;;;9631:79;;:::i;:::-;9600:112;9721:41;9755:6;9750:3;9745;9721:41;:::i;:::-;9440:328;9356:412;;;;;:::o;9788:340::-;9844:5;9893:3;9886:4;9878:6;9874:17;9870:27;9860:122;;9901:79;;:::i;:::-;9860:122;10018:6;10005:20;10043:79;10118:3;10110:6;10103:4;10095:6;10091:17;10043:79;:::i;:::-;10034:88;;9850:278;9788:340;;;;:::o;10134:509::-;10203:6;10252:2;10240:9;10231:7;10227:23;10223:32;10220:119;;;10258:79;;:::i;:::-;10220:119;10406:1;10395:9;10391:17;10378:31;10436:18;10428:6;10425:30;10422:117;;;10458:79;;:::i;:::-;10422:117;10563:63;10618:7;10609:6;10598:9;10594:22;10563:63;:::i;:::-;10553:73;;10349:287;10134:509;;;;:::o;10649:307::-;10710:4;10800:18;10792:6;10789:30;10786:56;;;10822:18;;:::i;:::-;10786:56;10860:29;10882:6;10860:29;:::i;:::-;10852:37;;10944:4;10938;10934:15;10926:23;;10649:307;;;:::o;10962:410::-;11039:5;11064:65;11080:48;11121:6;11080:48;:::i;:::-;11064:65;:::i;:::-;11055:74;;11152:6;11145:5;11138:21;11190:4;11183:5;11179:16;11228:3;11219:6;11214:3;11210:16;11207:25;11204:112;;;11235:79;;:::i;:::-;11204:112;11325:41;11359:6;11354:3;11349;11325:41;:::i;:::-;11045:327;10962:410;;;;;:::o;11391:338::-;11446:5;11495:3;11488:4;11480:6;11476:17;11472:27;11462:122;;11503:79;;:::i;:::-;11462:122;11620:6;11607:20;11645:78;11719:3;11711:6;11704:4;11696:6;11692:17;11645:78;:::i;:::-;11636:87;;11452:277;11391:338;;;;:::o;11735:943::-;11830:6;11838;11846;11854;11903:3;11891:9;11882:7;11878:23;11874:33;11871:120;;;11910:79;;:::i;:::-;11871:120;12030:1;12055:53;12100:7;12091:6;12080:9;12076:22;12055:53;:::i;:::-;12045:63;;12001:117;12157:2;12183:53;12228:7;12219:6;12208:9;12204:22;12183:53;:::i;:::-;12173:63;;12128:118;12285:2;12311:53;12356:7;12347:6;12336:9;12332:22;12311:53;:::i;:::-;12301:63;;12256:118;12441:2;12430:9;12426:18;12413:32;12472:18;12464:6;12461:30;12458:117;;;12494:79;;:::i;:::-;12458:117;12599:62;12653:7;12644:6;12633:9;12629:22;12599:62;:::i;:::-;12589:72;;12384:287;11735:943;;;;;;;:::o;12684:117::-;12793:1;12790;12783:12;12807:117;12916:1;12913;12906:12;12947:568;13020:8;13030:6;13080:3;13073:4;13065:6;13061:17;13057:27;13047:122;;13088:79;;:::i;:::-;13047:122;13201:6;13188:20;13178:30;;13231:18;13223:6;13220:30;13217:117;;;13253:79;;:::i;:::-;13217:117;13367:4;13359:6;13355:17;13343:29;;13421:3;13413:4;13405:6;13401:17;13391:8;13387:32;13384:41;13381:128;;;13428:79;;:::i;:::-;13381:128;12947:568;;;;;:::o;13521:704::-;13616:6;13624;13632;13681:2;13669:9;13660:7;13656:23;13652:32;13649:119;;;13687:79;;:::i;:::-;13649:119;13807:1;13832:53;13877:7;13868:6;13857:9;13853:22;13832:53;:::i;:::-;13822:63;;13778:117;13962:2;13951:9;13947:18;13934:32;13993:18;13985:6;13982:30;13979:117;;;14015:79;;:::i;:::-;13979:117;14128:80;14200:7;14191:6;14180:9;14176:22;14128:80;:::i;:::-;14110:98;;;;13905:313;13521:704;;;;;:::o;14231:323::-;14287:6;14336:2;14324:9;14315:7;14311:23;14307:32;14304:119;;;14342:79;;:::i;:::-;14304:119;14462:1;14487:50;14529:7;14520:6;14509:9;14505:22;14487:50;:::i;:::-;14477:60;;14433:114;14231:323;;;;:::o;14560:474::-;14628:6;14636;14685:2;14673:9;14664:7;14660:23;14656:32;14653:119;;;14691:79;;:::i;:::-;14653:119;14811:1;14836:53;14881:7;14872:6;14861:9;14857:22;14836:53;:::i;:::-;14826:63;;14782:117;14938:2;14964:53;15009:7;15000:6;14989:9;14985:22;14964:53;:::i;:::-;14954:63;;14909:118;14560:474;;;;;:::o;15040:180::-;15088:77;15085:1;15078:88;15185:4;15182:1;15175:15;15209:4;15206:1;15199:15;15226:320;15270:6;15307:1;15301:4;15297:12;15287:22;;15354:1;15348:4;15344:12;15375:18;15365:81;;15431:4;15423:6;15419:17;15409:27;;15365:81;15493:2;15485:6;15482:14;15462:18;15459:38;15456:84;;15512:18;;:::i;:::-;15456:84;15277:269;15226:320;;;:::o;15552:182::-;15692:34;15688:1;15680:6;15676:14;15669:58;15552:182;:::o;15740:366::-;15882:3;15903:67;15967:2;15962:3;15903:67;:::i;:::-;15896:74;;15979:93;16068:3;15979:93;:::i;:::-;16097:2;16092:3;16088:12;16081:19;;15740:366;;;:::o;16112:419::-;16278:4;16316:2;16305:9;16301:18;16293:26;;16365:9;16359:4;16355:20;16351:1;16340:9;16336:17;16329:47;16393:131;16519:4;16393:131;:::i;:::-;16385:139;;16112:419;;;:::o;16537:180::-;16585:77;16582:1;16575:88;16682:4;16679:1;16672:15;16706:4;16703:1;16696:15;16723:348;16763:7;16786:20;16804:1;16786:20;:::i;:::-;16781:25;;16820:20;16838:1;16820:20;:::i;:::-;16815:25;;17008:1;16940:66;16936:74;16933:1;16930:81;16925:1;16918:9;16911:17;16907:105;16904:131;;;17015:18;;:::i;:::-;16904:131;17063:1;17060;17056:9;17045:20;;16723:348;;;;:::o;17077:180::-;17125:77;17122:1;17115:88;17222:4;17219:1;17212:15;17246:4;17243:1;17236:15;17263:185;17303:1;17320:20;17338:1;17320:20;:::i;:::-;17315:25;;17354:20;17372:1;17354:20;:::i;:::-;17349:25;;17393:1;17383:35;;17398:18;;:::i;:::-;17383:35;17440:1;17437;17433:9;17428:14;;17263:185;;;;:::o;17454:179::-;17594:31;17590:1;17582:6;17578:14;17571:55;17454:179;:::o;17639:366::-;17781:3;17802:67;17866:2;17861:3;17802:67;:::i;:::-;17795:74;;17878:93;17967:3;17878:93;:::i;:::-;17996:2;17991:3;17987:12;17980:19;;17639:366;;;:::o;18011:419::-;18177:4;18215:2;18204:9;18200:18;18192:26;;18264:9;18258:4;18254:20;18250:1;18239:9;18235:17;18228:47;18292:131;18418:4;18292:131;:::i;:::-;18284:139;;18011:419;;;:::o;18436:175::-;18576:27;18572:1;18564:6;18560:14;18553:51;18436:175;:::o;18617:366::-;18759:3;18780:67;18844:2;18839:3;18780:67;:::i;:::-;18773:74;;18856:93;18945:3;18856:93;:::i;:::-;18974:2;18969:3;18965:12;18958:19;;18617:366;;;:::o;18989:419::-;19155:4;19193:2;19182:9;19178:18;19170:26;;19242:9;19236:4;19232:20;19228:1;19217:9;19213:17;19206:47;19270:131;19396:4;19270:131;:::i;:::-;19262:139;;18989:419;;;:::o;19414:181::-;19554:33;19550:1;19542:6;19538:14;19531:57;19414:181;:::o;19601:366::-;19743:3;19764:67;19828:2;19823:3;19764:67;:::i;:::-;19757:74;;19840:93;19929:3;19840:93;:::i;:::-;19958:2;19953:3;19949:12;19942:19;;19601:366;;;:::o;19973:419::-;20139:4;20177:2;20166:9;20162:18;20154:26;;20226:9;20220:4;20216:20;20212:1;20201:9;20197:17;20190:47;20254:131;20380:4;20254:131;:::i;:::-;20246:139;;19973:419;;;:::o;20398:169::-;20538:21;20534:1;20526:6;20522:14;20515:45;20398:169;:::o;20573:366::-;20715:3;20736:67;20800:2;20795:3;20736:67;:::i;:::-;20729:74;;20812:93;20901:3;20812:93;:::i;:::-;20930:2;20925:3;20921:12;20914:19;;20573:366;;;:::o;20945:419::-;21111:4;21149:2;21138:9;21134:18;21126:26;;21198:9;21192:4;21188:20;21184:1;21173:9;21169:17;21162:47;21226:131;21352:4;21226:131;:::i;:::-;21218:139;;20945:419;;;:::o;21370:168::-;21510:20;21506:1;21498:6;21494:14;21487:44;21370:168;:::o;21544:366::-;21686:3;21707:67;21771:2;21766:3;21707:67;:::i;:::-;21700:74;;21783:93;21872:3;21783:93;:::i;:::-;21901:2;21896:3;21892:12;21885:19;;21544:366;;;:::o;21916:419::-;22082:4;22120:2;22109:9;22105:18;22097:26;;22169:9;22163:4;22159:20;22155:1;22144:9;22140:17;22133:47;22197:131;22323:4;22197:131;:::i;:::-;22189:139;;21916:419;;;:::o;22341:94::-;22374:8;22422:5;22418:2;22414:14;22393:35;;22341:94;;;:::o;22441:::-;22480:7;22509:20;22523:5;22509:20;:::i;:::-;22498:31;;22441:94;;;:::o;22541:100::-;22580:7;22609:26;22629:5;22609:26;:::i;:::-;22598:37;;22541:100;;;:::o;22647:157::-;22752:45;22772:24;22790:5;22772:24;:::i;:::-;22752:45;:::i;:::-;22747:3;22740:58;22647:157;;:::o;22810:256::-;22922:3;22937:75;23008:3;22999:6;22937:75;:::i;:::-;23037:2;23032:3;23028:12;23021:19;;23057:3;23050:10;;22810:256;;;;:::o;23072:222::-;23212:34;23208:1;23200:6;23196:14;23189:58;23281:5;23276:2;23268:6;23264:15;23257:30;23072:222;:::o;23300:366::-;23442:3;23463:67;23527:2;23522:3;23463:67;:::i;:::-;23456:74;;23539:93;23628:3;23539:93;:::i;:::-;23657:2;23652:3;23648:12;23641:19;;23300:366;;;:::o;23672:419::-;23838:4;23876:2;23865:9;23861:18;23853:26;;23925:9;23919:4;23915:20;23911:1;23900:9;23896:17;23889:47;23953:131;24079:4;23953:131;:::i;:::-;23945:139;;23672:419;;;:::o;24097:170::-;24237:22;24233:1;24225:6;24221:14;24214:46;24097:170;:::o;24273:366::-;24415:3;24436:67;24500:2;24495:3;24436:67;:::i;:::-;24429:74;;24512:93;24601:3;24512:93;:::i;:::-;24630:2;24625:3;24621:12;24614:19;;24273:366;;;:::o;24645:419::-;24811:4;24849:2;24838:9;24834:18;24826:26;;24898:9;24892:4;24888:20;24884:1;24873:9;24869:17;24862:47;24926:131;25052:4;24926:131;:::i;:::-;24918:139;;24645:419;;;:::o;25070:305::-;25110:3;25129:20;25147:1;25129:20;:::i;:::-;25124:25;;25163:20;25181:1;25163:20;:::i;:::-;25158:25;;25317:1;25249:66;25245:74;25242:1;25239:81;25236:107;;;25323:18;;:::i;:::-;25236:107;25367:1;25364;25360:9;25353:16;;25070:305;;;;:::o;25381:170::-;25521:22;25517:1;25509:6;25505:14;25498:46;25381:170;:::o;25557:366::-;25699:3;25720:67;25784:2;25779:3;25720:67;:::i;:::-;25713:74;;25796:93;25885:3;25796:93;:::i;:::-;25914:2;25909:3;25905:12;25898:19;;25557:366;;;:::o;25929:419::-;26095:4;26133:2;26122:9;26118:18;26110:26;;26182:9;26176:4;26172:20;26168:1;26157:9;26153:17;26146:47;26210:131;26336:4;26210:131;:::i;:::-;26202:139;;25929:419;;;:::o;26354:180::-;26494:32;26490:1;26482:6;26478:14;26471:56;26354:180;:::o;26540:366::-;26682:3;26703:67;26767:2;26762:3;26703:67;:::i;:::-;26696:74;;26779:93;26868:3;26779:93;:::i;:::-;26897:2;26892:3;26888:12;26881:19;;26540:366;;;:::o;26912:419::-;27078:4;27116:2;27105:9;27101:18;27093:26;;27165:9;27159:4;27155:20;27151:1;27140:9;27136:17;27129:47;27193:131;27319:4;27193:131;:::i;:::-;27185:139;;26912:419;;;:::o;27337:180::-;27477:32;27473:1;27465:6;27461:14;27454:56;27337:180;:::o;27523:366::-;27665:3;27686:67;27750:2;27745:3;27686:67;:::i;:::-;27679:74;;27762:93;27851:3;27762:93;:::i;:::-;27880:2;27875:3;27871:12;27864:19;;27523:366;;;:::o;27895:419::-;28061:4;28099:2;28088:9;28084:18;28076:26;;28148:9;28142:4;28138:20;28134:1;28123:9;28119:17;28112:47;28176:131;28302:4;28176:131;:::i;:::-;28168:139;;27895:419;;;:::o;28320:168::-;28460:20;28456:1;28448:6;28444:14;28437:44;28320:168;:::o;28494:366::-;28636:3;28657:67;28721:2;28716:3;28657:67;:::i;:::-;28650:74;;28733:93;28822:3;28733:93;:::i;:::-;28851:2;28846:3;28842:12;28835:19;;28494:366;;;:::o;28866:419::-;29032:4;29070:2;29059:9;29055:18;29047:26;;29119:9;29113:4;29109:20;29105:1;29094:9;29090:17;29083:47;29147:131;29273:4;29147:131;:::i;:::-;29139:139;;28866:419;;;:::o;29291:148::-;29393:11;29430:3;29415:18;;29291:148;;;;:::o;29445:141::-;29494:4;29517:3;29509:11;;29540:3;29537:1;29530:14;29574:4;29571:1;29561:18;29553:26;;29445:141;;;:::o;29616:845::-;29719:3;29756:5;29750:12;29785:36;29811:9;29785:36;:::i;:::-;29837:89;29919:6;29914:3;29837:89;:::i;:::-;29830:96;;29957:1;29946:9;29942:17;29973:1;29968:137;;;;30119:1;30114:341;;;;29935:520;;29968:137;30052:4;30048:9;30037;30033:25;30028:3;30021:38;30088:6;30083:3;30079:16;30072:23;;29968:137;;30114:341;30181:38;30213:5;30181:38;:::i;:::-;30241:1;30255:154;30269:6;30266:1;30263:13;30255:154;;;30343:7;30337:14;30333:1;30328:3;30324:11;30317:35;30393:1;30384:7;30380:15;30369:26;;30291:4;30288:1;30284:12;30279:17;;30255:154;;;30438:6;30433:3;30429:16;30422:23;;30121:334;;29935:520;;29723:738;;29616:845;;;;:::o;30467:377::-;30573:3;30601:39;30634:5;30601:39;:::i;:::-;30656:89;30738:6;30733:3;30656:89;:::i;:::-;30649:96;;30754:52;30799:6;30794:3;30787:4;30780:5;30776:16;30754:52;:::i;:::-;30831:6;30826:3;30822:16;30815:23;;30577:267;30467:377;;;;:::o;30850:429::-;31027:3;31049:92;31137:3;31128:6;31049:92;:::i;:::-;31042:99;;31158:95;31249:3;31240:6;31158:95;:::i;:::-;31151:102;;31270:3;31263:10;;30850:429;;;;;:::o;31285:225::-;31425:34;31421:1;31413:6;31409:14;31402:58;31494:8;31489:2;31481:6;31477:15;31470:33;31285:225;:::o;31516:366::-;31658:3;31679:67;31743:2;31738:3;31679:67;:::i;:::-;31672:74;;31755:93;31844:3;31755:93;:::i;:::-;31873:2;31868:3;31864:12;31857:19;;31516:366;;;:::o;31888:419::-;32054:4;32092:2;32081:9;32077:18;32069:26;;32141:9;32135:4;32131:20;32127:1;32116:9;32112:17;32105:47;32169:131;32295:4;32169:131;:::i;:::-;32161:139;;31888:419;;;:::o;32313:98::-;32364:6;32398:5;32392:12;32382:22;;32313:98;;;:::o;32417:168::-;32500:11;32534:6;32529:3;32522:19;32574:4;32569:3;32565:14;32550:29;;32417:168;;;;:::o;32591:360::-;32677:3;32705:38;32737:5;32705:38;:::i;:::-;32759:70;32822:6;32817:3;32759:70;:::i;:::-;32752:77;;32838:52;32883:6;32878:3;32871:4;32864:5;32860:16;32838:52;:::i;:::-;32915:29;32937:6;32915:29;:::i;:::-;32910:3;32906:39;32899:46;;32681:270;32591:360;;;;:::o;32957:640::-;33152:4;33190:3;33179:9;33175:19;33167:27;;33204:71;33272:1;33261:9;33257:17;33248:6;33204:71;:::i;:::-;33285:72;33353:2;33342:9;33338:18;33329:6;33285:72;:::i;:::-;33367;33435:2;33424:9;33420:18;33411:6;33367:72;:::i;:::-;33486:9;33480:4;33476:20;33471:2;33460:9;33456:18;33449:48;33514:76;33585:4;33576:6;33514:76;:::i;:::-;33506:84;;32957:640;;;;;;;:::o;33603:141::-;33659:5;33690:6;33684:13;33675:22;;33706:32;33732:5;33706:32;:::i;:::-;33603:141;;;;:::o;33750:349::-;33819:6;33868:2;33856:9;33847:7;33843:23;33839:32;33836:119;;;33874:79;;:::i;:::-;33836:119;33994:1;34019:63;34074:7;34065:6;34054:9;34050:22;34019:63;:::i;:::-;34009:73;;33965:127;33750:349;;;;:::o;34105:173::-;34245:25;34241:1;34233:6;34229:14;34222:49;34105:173;:::o;34284:402::-;34444:3;34465:85;34547:2;34542:3;34465:85;:::i;:::-;34458:92;;34559:93;34648:3;34559:93;:::i;:::-;34677:2;34672:3;34668:12;34661:19;;34284:402;;;:::o;34692:381::-;34877:3;34899:148;35043:3;34899:148;:::i;:::-;34892:155;;35064:3;35057:10;;34692:381;;;:::o;35079:233::-;35118:3;35141:24;35159:5;35141:24;:::i;:::-;35132:33;;35187:66;35180:5;35177:77;35174:103;;35257:18;;:::i;:::-;35174:103;35304:1;35297:5;35293:13;35286:20;;35079:233;;;:::o;35318:191::-;35358:4;35378:20;35396:1;35378:20;:::i;:::-;35373:25;;35412:20;35430:1;35412:20;:::i;:::-;35407:25;;35451:1;35448;35445:8;35442:34;;;35456:18;;:::i;:::-;35442:34;35501:1;35498;35494:9;35486:17;;35318:191;;;;:::o;35515:176::-;35547:1;35564:20;35582:1;35564:20;:::i;:::-;35559:25;;35598:20;35616:1;35598:20;:::i;:::-;35593:25;;35637:1;35627:35;;35642:18;;:::i;:::-;35627:35;35683:1;35680;35676:9;35671:14;;35515:176;;;;:::o;35697:180::-;35745:77;35742:1;35735:88;35842:4;35839:1;35832:15;35866:4;35863:1;35856:15
Swarm Source
ipfs://c2d9ca7fd92df3e676183bbd98ad35773d5f449854c7273e4c21872a44a0e91b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.