// File: contracts/SEX69.sol




// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/// @title: Crypto_Grotto
/// @author: manifold.xyz

import "./ERC721Creator.sol";

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    █████████████████████████▓██████████████████████████████████████████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ██████████████████████████▌╬████████████████████████████████████████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ███████████████████████████▌╠╬██████████████████████████████████████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ▓███████████████████████████▌╠╠█████████████████████████████████████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ▓████████████████████████████╠╠╠╬███████████████████████████████████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╣╬███████████▓███████████████▌╠╠╠╠██████████████████████████████████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬▓█████▓▓▓▓▓▓▓██████████████▌╠╠╠╠╟████╩▀██████████████▓████████████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╣█████▓▓▓▓▓▓▓▓██████████████╠╠╠╠╠█████░░░╙╩▀█████████▓████████████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╬╬█████▓▓▓▓▓▓▓╬█████████████╠╠╠╠╠██████▄░░░░░░╙▀██████████████████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬▓╣╬▓██████▓▓▓▓▓▓▓███████████▌╠╠╠╠╠███████▓░░░░░░░░░│╚▀▀████████████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ▓▓╣╣╬████████████████████████▒▒╠╠▒╠█████████▒░░░φ░░░░░░░▒╚╩▀▓███████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ▓▓▓╬╣████████████▓██████████▌▒▒▒╠╠▒██████████▌░░φ░░░░░░░φ░░░░╣▓█████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ▓╣╣▓╬╬██████████▓███████████▒▒╠▒▒▒╟███████████▓▒░░░░░▒░░░▄▓▓█████████▓██████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╣╣▓╣▓████████▓▓██████████▀▒▒▒▒▒▐██████████████▓░░░░░▄▓▓███████████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ▓╬╣╣▓▒╬██████▓▓▓▓█████████▌▒▒▒▒▒▒█████████████████▄╣▓▓▓▓▓███▓▓██████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╣▓▓╬╠╠╠╫████▓▓▓▓█████████▀▒▒▒▒▒╟█████████████████████████████████████████▓▓█████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ▓▓╬╠╠╠╠╠██╬▓▓▓▓█████████▒▒▒▒▒▒▓███████████████╬████╬▓███████████████████▓███████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ▓╬╠╠╠╠╠╠╬▒╬▓▓▓▓████████╠▒▒▒▒▒▓██████████████╬╬▓████▓▓██████████████████▓▓███████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╠╠╠╠╠╠░░╠╬▓▓▓▓██████╬╬╬▒▒▒▓███████████████╬╬╬╣████▓▓▓█████████████████▓████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╠╠╠╬╠╩░░░░╬╣▓▓██████╬╬╬╬╬▓▓▓█████████████╬╬╬╬╬╬████▓▓▓▓████████████████▓█▓██████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╠╬╬╬╩░░░░░╚╣▓▓█████╬╬╬╬╬╬╬▓╬▓▓▓█████████╬╬╬╬╬╬╬╬███▓▓▓▓▓█████████▓██████▓█▓█████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╬╠░░░░░░░╠╣██████╬╬╬╬╬╬╬╬▓▓▓▓▓▓▓█████╬╢╬╬╬╬╬╬╬╬██▓▓▓▓▓▓██████████╬█████▓██████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╬░░░░░░░░░╟██████╬╬╬╬╬╬╬╬╣▓▓▓▓▓▓▓▓██╬╬╬╬╬╬╬╬╬╬╬╬╬▓▓▓▓▓▓▓███████╬╬▓████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╠░░░░░░░░░▓██████▓╬╬╬╬╬╬╬╬╫▓▓▓▓▓▓▓▓█╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▓▓▓▓▓▓████╬╬╬╣█████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╠╠░░░░░░░░╟████████╬╬╬╬╬╬╬╬╬╣▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▓▓▓▓▓██╬╬╬╬╬██████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╠╠░░░░░░░▒██████████▓╬╬╬╬╬╬╬╬▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▓▓▓█╬╬╬╬╬╬███████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╬▒░░░░░▒╟████████████▓╬╬╬╬╬╬╬▓▓▓▓▓▓█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█▌╬╬╬╬╬╬████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╠╬╬╠░░░░▒███████████████╬╬╬╬╬╬╣▓▓▓▓███╬╬╬╬╬╬╬╬╬╬╠╬╬╬╬╬╣█╬╬╬╬╬╬╣████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╬╬╬╠▒░░▒████████████████╬╬╬╬╬╬╣▓▓█████▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████████████████╬                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬▓▓▓▓▓▓▄░╟████████████████╬╬╬╬╬╬█████████╬╬╬╬╬╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓███████████████╬╬                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ▓██▓▓▓▓▓▓█▓▓███████████████╬╬╬╬╣▓╣██████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███████████████╬╬╬                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ██▓▓▓▓█▓▓██████████████████╬▓▓▓╣▓▓▓██████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██████████████╬╬╬╬╬                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ██▓▓▓██▓██████████████████████╣▓▓▓▓▓█████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣████████████╬╬╬╬╬╬╬                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬▓▓▓▓█▓███████████████████████╣▓▓▓▓▓▓████████╬╬╬╬╬╬╬╬╬╬▓╬╬╬╬██████████▓╬╬╬╬╬╬╬╬╬                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╬╬╣▓▓███████████████▌╬▀██████▓▓▓▓▓▓████████▌╬╬╬╬╬╬╬╬╬█▓╬╬▓████████╬╬╬╬╬╬╬╬╬╬╬▓                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╬╬╣╬╣╣╬╬██████████████▌╬╬╬╬████▓▓▓▓▓███████▌╬╬╬╬╬╬╬╬███╬╬█████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╣╣╣╣╬╬╬╣▓╣╣╬█████████████╬╬╬╬╬╬╬╬╣▓▓▓▓███████╬╬╬╬╬╬╬▓██████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╠╣▓╬╬╣╣╣▓▓▓╬╬╬▓███████████╬╬╬╬╬╬╬╬╬╠▓▓▓██████╬╬╬╬╬╬╣████╬▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╬╬▓▓╣╣╣▓▓▓▓▓╣╬╬███████████╬╬╬╬╬╬╬╬╬╬╬╬▓█████╬╬╬╬╬╫█╬╬╬╬▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╬╬╬▓▓╣▓▓▓▓▓▓▓▓▓▓▓█████████╬╬╬╬╬╬╬╬╬╬╬╬╣╬████╬╬╬╬╬╬╬╬╬╬╣▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╬╬╬╬╣▓▓▓▓▓▓▓▓▓▓▓▓▓████████╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬╬╣▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬███████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╬╬╬╬╬▓▓▓▓▓▓▓▓▓▓▓▓▓▓██████╬╬╬╬╬╬╬╬╬╬╬╬╬██████╬╬╬╬╬╬╬╬╣▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬█████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╠╬╬╬╬╣▓▓▓▓▓▓▓▓▓▓▓▓▓████╬╬╬╬╬╬╬╬╬╣╬╬╬╬██████╣╬╬╬╬╬╬╬╬▓▓█▓▓▓▓▓▓▓╬╬╬╬╬▓██████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬╬╣▓▓╬▓██▓▓▓▓▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓██████╬╬╬╬╬╬╬╬▓█████▓▓▓▓▓▓▓╬▓████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬╬▓▓▓▓▓████▓▓▓▓▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╣╣╬╬▓███████╬╬╬╬╬╬╬▓██████▓▓▓▓▓▓███████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ╬▓▓▓▓▓▓████▓▓▓▓▓▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬▓╣╣╣▓▓████████╬╬╬╬╬╬╣████████▓▓▓█████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ▓▓▓▓▓█████▓▓▓▓▓▓▓▓▓╬▓▓▓▓▓╬╣╣╣╬╣▓▓▓▓▓█████████╣╬╬╬╬╣████████▓████████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ▓▓▓▓█▓██▓▓▓▓▓▓▓▓▓▓╬╬╣╬▓██▓╬╣╣╬▓▓▓▓▓██████████▓▓╣╬╣██████████████████████████████                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    ShadingSharpness                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    MonochromeColorized                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    BlackpointWhitepoint                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    Change Size                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    Change Text                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    Change Colors                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    Regenerate                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  //
//    Saving and sharing options:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 //
//    Image (for easy sharing)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    Right-click (or long-press) above image to "Save As..."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     //
//    Or, share online using imgur! Just give it a title:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         //
//    Continuation                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    Share!                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    Submit to Gallery (optional)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//    BBCode (for online forums)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  //
//    [size=9px][font=monospace][color=#303554]█[/color][color=#342b52]████████████████████████▓██████████████████████████████[/color][color=#ad4a22]████████████████████████[/color]                                                                                                                                                                                                                                                                                                                                                                                                                                                                             //
//    [color=#304661]█[/color][color=#33264b]████████[/color][color=#a26921]█[/color][color=#a56c20]██[/color][color=#0888a0]█[/color][color=#068ba2]█████████████[/color][color=#5c5968]▌[/color][color=#526174]╬[/color][color=#196b7f]█[/color][color=#007185]████████[/color][color=#483e1f]█[/color][color=#4d401e]███████████████████[/color][color=#e35810]██████████████████[/color][color=#022f59]█[/color][color=#032a53]████[/color]                                                                                                                                                                                                                   //
//    [color=#2f657d]██[/color][color=#3e325a]███████[/color][color=#a76c1f]█[/color][color=#aa711d]███[/color][color=#068ea6]█[/color][color=#068fa7]█████████████[/color][color=#575565]▌[/color][color=#666272]╠╬[/color][color=#0d6c83]█[/color][color=#007186]███████[/color][color=#473a1d]█[/color][color=#4b3f1e]████████████[/color][color=#185f84]█[/color][color=#166083]████[/color][color=#e25811]█[/color][color=#e7590c]████[/color][color=#5d4c34]█[/color][color=#4c4c3a]██████████[/color][color=#0b3052]█[/color][color=#02305a]███████[/color]                                                                                                //
//    [color=#308699]▓█[/color][color=#392e56]█████[/color][color=#472b57]██[/color][color=#aa701e]█[/color][color=#ab6f1e]███[/color][color=#187982]█[/color][color=#0391a8]██████████████[/color][color=#5e5c6b]▌[/color][color=#676274]╠╠█[/color][color=#007189]█[/color][color=#007186]█████[/color][color=#473c1d]█[/color][color=#483d1c]█████████[/color][color=#156188]█[/color][color=#156489]██████[/color][color=#914629]█[/color][color=#e6590f]███████████████[/color][color=#052e56]█[/color][color=#022f5c]████████[/color]                                                                                                                       //
//    [color=#318d9e]▓[/color][color=#2f6279]█[/color][color=#32294f]██████[/color][color=#a56c22]█[/color][color=#ab701f]█████[/color][color=#0d8697]█[/color][color=#0292a9]██████████████[/color][color=#676374]╠[/color][color=#666173]╠╠╬[/color][color=#086e87]█[/color][color=#007189]████[/color][color=#463c1c]█[/color][color=#473c1c]██████[/color][color=#156087]█[/color][color=#14688f]█████████[/color][color=#d95316]█[/color][color=#e35710]█████████[/color][color=#4b4b39]█[/color][color=#494a38]█████[/color][color=#022f5c]█[/color][color=#022f5d]████████[/color]                                                                         //
//    [color=#338f9f]╣[/color][color=#338e9e]╬█[/color][color=#362e57]███[/color][color=#482d5b]██[/color][color=#ab7121]█[/color][color=#ae7220]████▓█[/color][color=#068ea5]█[/color][color=#0094ac]█████████████[/color][color=#5d5b6c]▌[/color][color=#676275]╠╠╠╠[/color][color=#05708a]█[/color][color=#006f88]███[/color][color=#403b20]█████████████████[/color][color=#e25513]█[/color][color=#e45810]██████████[/color][color=#534935]█[/color][color=#494a38]███[/color][color=#052d55]█[/color][color=#022f5d]████████[/color][color=#20778b]█[/color]                                                                                                //
//    [color=#3390a1]╬╬▓█████[/color][color=#b17622]▓[/color][color=#b47a1e]▓▓▓▓▓▓█[/color][color=#0292aa]█[/color][color=#0290aa]████████████▌[/color][color=#676376]╠[/color][color=#666277]╠╠╠╟[/color][color=#00718c]█[/color][color=#006e87]███[/color][color=#716e57]╩[/color][color=#4c6359]▀█[/color][color=#1d6a8c]████████[/color][color=#135f89]████[/color][color=#78412e]█[/color][color=#e35613]▓██████████████[/color][color=#042b55]█[/color][color=#022f5c]████████[/color][color=#1f7d8c]█[/color]                                                                                                                                              //
//    [color=#3292a2]╬╬╣█████[/color][color=#b87e23]▓[/color][color=#bb7f20]▓▓▓▓▓▓▓[/color][color=#217370]█[/color][color=#0192ab]█████████████[/color][color=#686476]╠[/color][color=#686378]╠╠╠╠[/color][color=#0e6e88]█[/color][color=#007189]███[/color][color=#7a583c]█[/color][color=#97805b]░[/color][color=#a98e54]░░╙╩[/color][color=#3f626d]▀[/color][color=#29627f]████████[/color][color=#d95515]█[/color][color=#e55711]▓█████████████[/color][color=#5b4b37]█[/color][color=#0d2c4c]█[/color][color=#022e5c]███████[/color][color=#1f7c8e]█[/color][color=#1e7e8f]█[/color]                                                                         //
//    [color=#3290a3]╬╬╬╬████[/color][color=#895e2e]█[/color][color=#be8320]▓▓▓▓▓▓▓╬[/color][color=#0e8695]█[/color][color=#0292aa]████████████[/color][color=#686477]╠[/color][color=#686377]╠╠╠╠[/color][color=#30697f]█[/color][color=#00738d]█████[/color][color=#88725a]▄[/color][color=#a28958]░░░░░░╙▀█[/color][color=#225c7b]█[/color][color=#145780]██[/color][color=#e55711]█[/color][color=#e65610]███████████████[/color][color=#252d3b]█[/color][color=#032c59]█████████[/color]                                                                                                                                                                     //
//    [color=#2e94a6]╬[/color][color=#2e95a7]▓╣╬▓████[/color][color=#42443f]█[/color][color=#705e33]█▓[/color][color=#c18a20]▓▓▓▓▓▓[/color][color=#058ea6]█[/color][color=#11527c]██████████▌[/color][color=#696478]╠[/color][color=#686379]╠╠╠╠[/color][color=#306a82]█[/color][color=#00738e]████[/color][color=#734b2f]█[/color][color=#76492e]█▓[/color][color=#927d60]░[/color][color=#a58b56]░░░░░░░░│╚▀[/color][color=#c4592a]▀[/color][color=#dd5413]█████████████[/color][color=#444c5a]█[/color][color=#344257]█[/color][color=#032d59]█[/color][color=#022d5e]█████[/color][color=#217f92]█[/color][color=#207f90]██[/color]                           //
//    [color=#2d95a7]▓▓╣╣╬███████████[/color][color=#74602e]█[/color][color=#836929]██[/color][color=#144d79]█[/color][color=#11507a]█████████[/color][color=#626074]▒[/color][color=#686479]▒╠╠▒╠[/color][color=#236d85]█[/color][color=#007691]████[/color][color=#734c2e]█[/color][color=#764a2e]███[/color][color=#87725e]▒[/color][color=#937f5e]░░░φ░░░░░░░▒╚╩▀[/color][color=#ce5a21]▓[/color][color=#df5b13]█████[/color][color=#444d5a]█[/color][color=#444e5c]████[/color][color=#022d5d]█[/color][color=#022d5e]████[/color][color=#218094]█[/color][color=#1f8293]███[/color]                                                                         //
//    [color=#2d94a7]▓▓▓╬╣████████████[/color][color=#9f9021]▓[/color][color=#1c4c66]█[/color][color=#134e7d]█████████[/color][color=#4b4f60]▌[/color][color=#6a657a]▒▒▒╠╠▒█[/color][color=#007690]█[/color][color=#00738f]███[/color][color=#6e4b2f]█[/color][color=#744c2e]████[/color][color=#856a4f]▌[/color][color=#897864]░░φ░░░░░░░φ░░░░╣▓███████[/color][color=#263e5d]█[/color][color=#022d5d]█████████[/color]                                                                                                                                                                                                                                          //
//    [color=#2d95a8]▓[/color][color=#2d96aa]╣╣▓╬╬███████[/color][color=#25435e]█[/color][color=#233e57]██[/color][color=#b8a11d]▓[/color][color=#7b7a28]█[/color][color=#144d7c]█[/color][color=#124f7e]█████████[/color][color=#676378]▒[/color][color=#6a647a]▒╠▒▒▒╟[/color][color=#156883]█[/color][color=#007590]█████[/color][color=#714a2e]█[/color][color=#73492e]████▓[/color][color=#89745e]▒[/color][color=#9f8757]░░░░░▒░░░▄▓▓███████[/color][color=#454f5d]█[/color][color=#454f5d]█▓[/color][color=#052f5f]█[/color][color=#003062]████[/color][color=#218295]█[/color][color=#208195]████[/color]                                                  //
//    [color=#2c95a9]╬╬╣╣▓╣▓███████[/color][color=#8f8527]█[/color][color=#bba41e]▓▓[/color][color=#275054]█[/color][color=#144e7f]█████████[/color][color=#5a5c70]▀[/color][color=#6a657a]▒▒▒▒▒▐██[/color][color=#017491]█[/color][color=#00728f]████[/color][color=#6f4a2f]█[/color][color=#704b2e]██████▓[/color][color=#817267]░[/color][color=#917d60]░░░░▄▓▓[/color][color=#485260]█[/color][color=#475061]███████████[/color][color=#133356]█[/color][color=#003062]████[/color][color=#517037]█[/color][color=#218192]█████[/color]                                                                                                                       //
//    [color=#2b96ab]▓╬╣╣▓[/color][color=#547f80]▒╬███[/color][color=#234662]█[/color][color=#23425b]██[/color][color=#ab9a23]▓[/color][color=#bea81d]▓▓▓[/color][color=#144d7d]█[/color][color=#105282]████████[/color][color=#555a70]▌[/color][color=#696679]▒▒▒▒▒▒███[/color][color=#1f607a]█[/color][color=#00728f]█████████████[/color][color=#676061]▄[/color][color=#5d5d62]╣▓▓▓▓▓███▓▓█████[/color][color=#73672d]██[/color][color=#0c2e51]█[/color][color=#013263]███[/color][color=#858325]█[/color][color=#979022]██[/color][color=#20808e]█[/color][color=#1c8393]███[/color]                                                                         //
//    [color=#2c96ab]╣▓▓╬[/color][color=#5d7978]╠╠╠╫█[/color][color=#244664]█[/color][color=#244156]██[/color][color=#b6a422]▓[/color][color=#bda91d]▓▓▓[/color][color=#284d56]█[/color][color=#125181]████████[/color][color=#555f77]▀[/color][color=#69667a]▒▒▒▒▒╟[/color][color=#9f3f2f]█[/color][color=#354e62]█[/color][color=#30536d]████████████████[/color][color=#131c45]███████████████████[/color][color=#062c59]███[/color][color=#576227]█[/color][color=#9f9521]▓▓███[/color][color=#1d8095]█[/color][color=#1f8095]█[/color]                                                                                                                       //
//    [color=#2b97ac]▓▓[/color][color=#4f8287]╬╠╠╠╠╠██[/color][color=#938e3c]╬[/color][color=#b8a823]▓▓▓▓█[/color][color=#134e7e]█[/color][color=#0f5282]███████[/color][color=#61657a]▒[/color][color=#686778]▒▒▒▒▒▓[/color][color=#a93c2b]█[/color][color=#a73a2b]█[/color][color=#354c62]█[/color][color=#2f536f]████████████╬█[/color][color=#071942]█[/color][color=#091640]██[/color][color=#b92f38]╬[/color][color=#ae2c36]▓████████████████[/color][color=#023264]█[/color][color=#013166]██[/color][color=#9e9423]▓[/color][color=#9f9521]█████[/color][color=#267c84]█[/color][color=#1e8497]█[/color]                                                  //
//    [color=#2c94a9]▓╬[/color][color=#5d7878]╠╠╠╠╠╠╬[/color][color=#aca33e]▒╬[/color][color=#baa820]▓▓▓▓[/color][color=#204f63]█[/color][color=#115181]███████[/color][color=#606275]╠[/color][color=#696779]▒▒▒▒▒[/color][color=#9d4538]▓[/color][color=#aa3c29]██████████[/color][color=#116785]█[/color][color=#0d697f]█[/color][color=#714830]█[/color][color=#6e4b35]█╬[/color][color=#5c6269]╬▓[/color][color=#081744]█[/color][color=#071945]███[/color][color=#c42e33]▓[/color][color=#c42e2f]▓███████████████[/color][color=#1e353e]█[/color][color=#013267]██[/color][color=#968f24]▓[/color][color=#9f9422]▓██████[/color][color=#257e87]█[/color]    //
//    [color=#418893]╬[/color][color=#5c7978]╠╠╠╠╠╠░░[/color][color=#a49e45]╠╬[/color][color=#baa722]▓▓▓▓[/color][color=#144e7f]█[/color][color=#0f5383]█████[/color][color=#525e73]╬[/color][color=#5e6172]╬╬▒▒▒▓[/color][color=#ac3d2d]█[/color][color=#ac3d2b]█████[/color][color=#30506d]█[/color][color=#2f5271]████████[/color][color=#5b6268]╬[/color][color=#5b636a]╬╬╣[/color][color=#081844]█[/color][color=#071847]███[/color][color=#c52f32]▓[/color][color=#c62e2f]▓▓██████████████[/color][color=#023264]█[/color][color=#013467]█[/color][color=#485931]█[/color][color=#a09522]▓████████[/color]                                                  //
//    [color=#5b797b]╠[/color][color=#5b787a]╠╠╬╠╩░░░░╬[/color][color=#b9a924]╣[/color][color=#bfab1d]▓▓[/color][color=#285154]█[/color][color=#115080]█████[/color][color=#5c6171]╬[/color][color=#5e6171]╬╬╬╬▓[/color][color=#983f34]▓[/color][color=#ac3e2d]▓██████[/color][color=#2f5574]█[/color][color=#2e5575]██████╬[/color][color=#5a636c]╬[/color][color=#5b646b]╬╬╬╬[/color][color=#1f2f52]█[/color][color=#081846]███[/color][color=#c52e33]▓[/color][color=#c62f30]▓▓▓████████████[/color][color=#08345f]█[/color][color=#023569]███[/color][color=#9d9424]▓[/color][color=#9d9222]█▓██████[/color]                                                  //
//    [color=#5b787a]╠[/color][color=#5a787c]╬╬╬╩░░░░░╚╣[/color][color=#bba920]▓[/color][color=#a09623]▓[/color][color=#134e7f]█[/color][color=#115080]████[/color][color=#5b6073]╬[/color][color=#5d6172]╬╬╬╬╬╬▓╬▓▓▓[/color][color=#8b3c36]█[/color][color=#9c3b2b]                                                                                                                                                                                                                                                                                                                                                                                              //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


contract SEX69 is ERC721Creator {
    constructor() ERC721Creator("Crypto_Grotto", "SEX69") {}
}

// File: contracts/ERC721Creator.sol




// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/// @author: manifold.xyz

import "@openzeppelin/contracts/proxy/Proxy.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "@openzeppelin/contracts/utils/StorageSlot.sol";

contract ERC721Creator is Proxy {
    
    constructor(string memory name, string memory symbol) {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = 0xe4E4003afE3765Aca8149a82fc064C0b125B9e5a;
        Address.functionDelegateCall(
            0xe4E4003afE3765Aca8149a82fc064C0b125B9e5a,
            abi.encodeWithSignature("initialize(string,string)", name, symbol)
        );
    }
        
    /**
     * @dev Storage slot with the address of the current implementation.
     * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /**
     * @dev Returns the current implementation address.
     */
     function implementation() public view returns (address) {
        return _implementation();
    }

    function _implementation() internal override view returns (address) {
        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
    }    

}

// File: @openzeppelin/contracts/proxy/Proxy.sol



// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)

pragma solidity ^0.8.0;

/**
 * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internal call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal virtual {
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function
     * and {_fallback} should delegate.
     */
    function _implementation() internal view virtual returns (address);

    /**
     * @dev Delegates the current call to the address returned by `_implementation()`.
     *
     * This function does not return to its internal call site, it will return directly to the external caller.
     */
    function _fallback() internal virtual {
        _beforeFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback() external payable virtual {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive() external payable virtual {
        _fallback();
    }

    /**
     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
     * call, or as part of the Solidity `fallback` or `receive` functions.
     *
     * If overridden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {}
}

// File: @openzeppelin/contracts/utils/Address.sol



// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/StorageSlot.sol



// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)

pragma solidity ^0.8.0;

/**
 * @dev Library for reading and writing primitive types to specific storage slots.
 *
 * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
 * This library helps with reading and writing to such slots without the need for inline assembly.
 *
 * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
 *
 * Example usage to set ERC1967 implementation slot:
 * ```
 * contract ERC1967 {
 *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
 *
 *     function _getImplementation() internal view returns (address) {
 *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
 *     }
 *
 *     function _setImplementation(address newImplementation) internal {
 *         require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
 *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
 *     }
 * }
 * ```
 *
 * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._
 */
library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    /**
     * @dev Returns an `AddressSlot` with member `value` located at `slot`.
     */
    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
     */
    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
     */
    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
     */
    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }
}