{
 "address": "0x2fc636e7fdf9f3e8d61033103052079781a6e7d2",
 "name": "atropacoin",
 "language": "solidity",
 "compiler_version": "v0.8.21+commit.d9974bed",
 "optimization": false,
 "optimization_runs": null,
 "evm_version": "default",
 "verified_at": "2024-05-29T18:37:32.328233Z",
 "fully_verified": false,
 "proxy_type": null,
 "external_libraries": [],
 "sources": {
  "0x2fc636e7fdf9f3e8d61033103052079781a6e7d2.sol": "\n// File: addresses.sol\n\n\npragma solidity ^0.8.21;\n\naddress constant dead = address(0x000000000000000000000000000000000000dEaD);\naddress constant atropa = address(0x7a20189B297343CF26d8548764b04891f37F3414);\naddress constant trebizond = address(0x903030f7e2d6489F38B0f4F96F9b371ec7960F78);\n\naddress constant dai = address(0x6B175474E89094C44Da98b954EedeAC495271d0F);\naddress constant usdc = address(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);\naddress constant usdt = address(0xdAC17F958D2ee523a2206206994597C13D831ec7);\n\naddress constant AtropaContract = address(0xCc78A0acDF847A2C1714D2A925bB4477df5d48a6);\naddress constant EasternLightningContract = address(0xCD6159D0a1aaE415E0c1504E90A5d741A28afc98);\naddress constant FinalContract = address(0x50E72874dCd7C198d370ac27c7B3cce9f9a0defd);\naddress constant KaContract = address(0x83a918056aB9316837Dc48a216119D679D561d91);\naddress constant BuckinghamContract = address(0xe5d3A6e88590fc2A8037D9CCbd816C05B1ff5f11);\naddress constant WheelContract = address(0xb9A44De20f26a027e467CB6c2F98766F01904189);\naddress constant LibertyContract = address(0xFE9b99eCC43cb423408b975cc5ff439e5ABaCb61);\naddress constant CherokeeContract = address(0xb4C1248812dAbF72cb2e82175b4c0aCffE4D2b10);\naddress constant DreidelContract = address(0x8A03b032c5494219B212e5a74A49e2aa7F9d206F);\naddress constant MantissaContract = address(0x0EB4EE7d5Ff28cbF68565A174f7E5e186c36B4b3);\naddress constant NeptuneContract = address(0x9A3796Cf41B7CbA6921fd50c3f5204ED6506C3e7);\naddress constant HarContract = address(0x557F7e30aA6D909Cfe8a229A4CB178ab186EC622);         // \u0281 \naddress constant ThetaContract = address(0xCd19062a6d3019b02A676D72e51D8de7A398dE25);       // \u04e8\naddress constant CROWSContract = address(0x203e366A1821570b2f84Ff5ae8B3BdeB48Dc4fa1);\naddress constant MonatsContract = address(0xf8AB3393b1f5CD6184Fb6800A1fC802043C4063e);\naddress constant LegalContract = address(0x0b1307dc5D90a0B60Be18D2634843343eBc098AF);\naddress constant ScissorsContract = address(0x1b8F9E19360D1dc94295D984b7Ca7eA9b810D9ee);\naddress constant ReadingContract = address(0xf69e9f943674027Cedf05564A8D5A01041d07c62);     // \u09aa\u0981\u09a6\u09be\u09c7\u09bc\u09a8\u09c1\u09bf\u0982\naddress constant DiContract = address(0x347BC40503E0CE23fE0F5587F232Cd2D07D4Eb89);          // \u7b2c\u4f5c\naddress constant dOWNContract = address(0x2556F7f8d82EbcdD7b821b0981C38D9dA9439CdD);\naddress constant INDEPENDENCEContract = address(0x8B090509eAe0fEB4A0B934de1b4345161fA9a62d);\naddress constant LOLContract = address(0xA63F8061A67ecdbf147Cd1B60f91Cf95464E868D);         // \u078d\naddress constant Bullion5Contract = address(0x77Bed67181CeF592472bcb7F97736c560340E006);\naddress constant Bullion8Contract = address(0x2959221675bdF0e59D0cC3dE834a998FA5fFb9F4);    // \u2467\naddress constant TreasuryBillContract = address(0x463413c579D29c26D59a65312657DFCe30D545A1);\naddress constant TeddyBearContract = address(0xd6c31bA0754C4383A41c0e9DF042C62b5e918f6d);\naddress constant PoppyContract = address(0xdE65090088Df0b2d80A5eC6A7B56ECE36ee83ce8);\naddress constant OjeonContract = address(0xFa4d9C6E012d946853386113ACbF166deC5465Bb);\naddress constant YuContract = address(0x52a4682880E990ebed5309764C7BD29c4aE22deB);          // \uc720\naddress constant YingContract = address(0x271197EFe41073681577CdbBFD6Ee1DA259BAa3c);        // \u7c6f\naddress constant MetisContract = address(0x36d4Ac3DF7Bf8aa3843Ad40C8b3eB67e3d18b4e1);       // \u0e44\u0e21\u0e34\u0e15\u0e34\u0e0b\u0e2a\u0e4c\naddress constant GaiContract = address(0xd6077A029Fb5BEF33b02391D7f0349c345F6DDb1);\naddress constant DiscoContract = address(0xb6936B8e82626405f6E601D54a8292881D86b47D);\naddress constant HOSTContract = address(0x1162104a7b8766784153Dd2D6aC0eCEAecD28117);\naddress constant DampfContract = address(0x08Fe5c72173044314A74705089d014a4416Ed71D);\naddress constant DEIContract = address(0xF77c946C18A77B5DdA5e839dA9818C4D1f087393);\naddress constant TlingitContract = address(0x54D88F0c4a738247DadF160923E1b1C5dc4F510f);\naddress constant AbUrbeConditaContract = address(0x7FB09EE1a2c0E8b6D1c4E19C0248B3CbC0113af6);\naddress constant SIMContract = address(0xBb341FD5C855c206f5538cc649f90d84Df19b65a);\naddress constant BinContract = address(0xf520404CF4fa5B633626333775b05F5dF94E1a9C);\naddress constant PhDContract = address(0x6236073377AC7e0aB694957dA5d7d4241e72EBc6);\naddress constant LilliesContract = address(0xE949a217809d1Fab4018E22d6810500399951dAE);\naddress constant KremlinContract = address(0x7F51FdB20246D7a673036f11C743E99A4AF01de0);\naddress constant TwoContract = address(0xDf6A16689A893095C721542e5d3CE55bBcc23aC6);         // \u3263\naddress constant TseContract = address(0x3d67511733d976800467119264C3d4Cd9FA23041);\naddress constant FrockContract = address(0x8B8b26bB6C5fD4867339ab2f0acf3aE5129BD2F0);\naddress constant QingDaoContract = address(0xE63191967735C52f5de78CE2471759a9963Ce118);\naddress constant TSFiContract = address(0x4243568Fa2bbad327ee36e06c16824cAd8B37819);\naddress constant GreenlandContract = address(0xdE4Ef7Ea464c7771803b9838AeA07cE41089b054);\naddress constant BuddhaghosaContract = address(0x840CBD20A70774BECAc4e932Fff6fb1f5417997F);\naddress constant ZuoContract = address(0x583d1C1427308f7f96BFd3E0d7A3F9674D8BF8ec);\naddress constant HegelBetContract = address(0x51C36aA04ffC2139F6d34436d0EDC7f5ffc6D6Fb);\naddress constant HahnarchContract = address(0x4a458D04909a42F79d31805762B2abc38ab9407d);\naddress constant HermogenesContract = address(0x68E87Fa19984f45C68945BBd4c81bF3481750429);\naddress constant RabContract = address(0x89E8cD6306AbbAB8e39eeD0D53566d8dC2E02c01);\naddress constant LoanContract = address(0xeE67825eF27588FAeE39cfefb465eB0A242A740c);\naddress constant FreebiesContract = address(0x48F628c079353ECC4DB75F0d05de9299e083f3C2);\n\naddress constant WMContract = address(0xA1BEe1daE9Af77dAC73aA0459eD63b4D93fC6d29);\naddress constant NoContract = address(0x1942Ba1EA7c21a070D70C4eFe64B21694283F23e);\naddress constant CallContract = address(0xD4FD96BA83d3E6FF1A0Baa44c32Def94e641D97c);        // \ud800\udf0e\n\naddress constant TeddyBear9Contract = address(0x1f737F7994811fE994Fe72957C374e5cD5D5418A);\n\naddress constant BondContract = address(0x25d53961a27791B9D8b2d74FB3e937c8EAEadc38);\naddress constant BailContract = address(0x8B16115fF716b4c52706122cb4e974f7a72E5Af1);\naddress constant WritingContract = address(0x26D5906c4Cdf8C9F09CBd94049f99deaa874fB0b);\naddress constant SukukContract = address(0x72f96a39AC9408b5458E5597BBC22060552dedF4);\n\n// address constant FAContract = address(0xF2be09EB43c1eD2791d0324BaA0649e62CdA4BBF);\naddress constant hhFaContract = address(0xa28e8aA4d6257157de64a547c90B38C3c540eF72);\naddress constant NoNukesContract = address(0x174A0ad99c60c20D9B3D94c3095BC1fb9ddEFd62);\naddress constant WenTiContract = address(0xA537d6F4c1c8F8C41f1004cc34C00e7Db40179Cc);\naddress constant TwoCentClubContract = address(0x6293373BF0DAE2050641973D49b7b2f71adC91a1);\naddress constant BFFContract = address(0xE35A842eb1EDca4C710B6c1B1565cE7df13f5996);\naddress constant SECURITYContract = address(0x2234da59c2D5EDB197594C95dbbA7a99Bcd91230);\n//\naddress constant TRSIContract = address(0x51A7aaBcCa69B3c0F82b3b9ce5104FDe3efAecE6);\naddress constant BELContract = address(0x4C1518286E1b8D5669Fe965EF174B8B4Ae2f017B);\naddress constant KLANContract = address(0xC196247AA267Db0DF216d5385bCD23e5cf25EA6A);\naddress constant SMGContract = address(0xa8e8412d9B4341239269cBA38ad949fE4870be34);\naddress constant iCEContract = address(0x2fA079d2dAA29Ec8925484F9E9021e9191fE4aE4);\naddress constant PWAContract = address(0x5d4cb28eA61125a1fD3c927162C6F1969DD26788);\naddress constant LITContract = address(0xf5E3Cc8d22B10d967bE49FE103e496F449C8604E);\naddress constant RZRContract = address(0x50e40e8555AaB6b9c6CFF691E14070b6F38142Cb);\naddress constant FLTContract = address(0x86F0985Cd6Ab3196ea8DceBa87B92a2e22124633);\naddress constant GokuldhamContract = address(0x920401FDce49Fc70A2D4cD70DB0dD90212a97f98);\naddress constant KPOPContract = address(0x982B52a54916B899c60031772cc85b041613510E);\naddress constant CiAContract = address(0x2e5898b2e107a3cAf4f0597aCFE5D2e6d73F2196);\naddress constant ACiDContract = address(0xf8b6e89b851e03c724aad1F5170230A60490b819);\naddress constant MaltaContract = address(0xee62EE9A354E55dF7C39209B4304161369333fF7);\naddress constant ZzkContract = address(0xe2e1a5d691cCB9E88b84e23A1166B4e6Bd6904Dc);\naddress constant ACABContract = address(0x241DA2613b0A01C2f60acB636b21A8E082E2f2F0);\n\n//\naddress constant BillBurrContract = address(0xF7ebb9bc80fb6395373c6BbDF690fcFfb217a691);\n\n//\naddress constant BonusContract = address(0xB8FaCE58CB05C55BBBA9c564A550cc2402A40b5b);\n\n///\naddress constant LEPROSYContract = address(0x7759A6D283192ef2BA082923d28Bec6eBfAf9D68);\n\n/// royalty tokens\n/*\n0xC6F085DE4f388a48ce2942857455147A37870086\n0x80C105217885707BA0003ffAe7Ab01466E5E8488\n0xF2563864C22022deb03ce929c26C54033a69E9d5\n0xA78feD26D175b4B2c83F69Ca3eA195123ca30381\n0xdF606c14351fd52bF502d5F60D105320CF5D99D5\n0xa9353a16cA53a2009fEBF62029F8555216588Fea\n0x7ec9043c321A8759Ee5F917Da943979EC70Cf8e3\n*/\n// File: @openzeppelin/contracts/utils/Context.sol\n\n\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n}\n\n// File: @openzeppelin/contracts/access/Ownable.sol\n\n\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the deployer as the initial owner.\n     */\n    constructor() {\n        _transferOwnership(_msgSender());\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n        _;\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby removing any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n\n// File: @openzeppelin/contracts/token/ERC20/IERC20.sol\n\n\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `from` to `to` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(\n        address from,\n        address to,\n        uint256 amount\n    ) external returns (bool);\n\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n\n// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\n\n\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.0;\n\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n *\n * _Available since v4.1._\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n\n// File: @openzeppelin/contracts/token/ERC20/ERC20.sol\n\n\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.0;\n\n\n\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC20\n * applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is Context, IERC20, IERC20Metadata {\n    mapping(address => uint256) private _balances;\n\n    mapping(address => mapping(address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * The default value of {decimals} is 18. To select a different value for\n     * {decimals} you should overload it.\n     *\n     * All two of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual override returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual override returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\n     * overridden;\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual override returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual override returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(\n        address from,\n        address to,\n        uint256 amount\n    ) public virtual override returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, amount);\n        _transfer(from, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, _allowances[owner][spender] + addedValue);\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        uint256 currentAllowance = _allowances[owner][spender];\n        require(currentAllowance >= subtractedValue, \"ERC20: decreased allowance below zero\");\n        unchecked {\n            _approve(owner, spender, currentAllowance - subtractedValue);\n        }\n\n        return true;\n    }\n\n    /**\n     * @dev Moves `amount` of tokens from `sender` to `recipient`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `from` must have a balance of at least `amount`.\n     */\n    function _transfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {\n        require(from != address(0), \"ERC20: transfer from the zero address\");\n        require(to != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(from, to, amount);\n\n        uint256 fromBalance = _balances[from];\n        require(fromBalance >= amount, \"ERC20: transfer amount exceeds balance\");\n        unchecked {\n            _balances[from] = fromBalance - amount;\n        }\n        _balances[to] += amount;\n\n        emit Transfer(from, to, amount);\n\n        _afterTokenTransfer(from, to, amount);\n    }\n\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n     * the total supply.\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     */\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply += amount;\n        _balances[account] += amount;\n        emit Transfer(address(0), account, amount);\n\n        _afterTokenTransfer(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, reducing the\n     * total supply.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     * - `account` must have at least `amount` tokens.\n     */\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        uint256 accountBalance = _balances[account];\n        require(accountBalance >= amount, \"ERC20: burn amount exceeds balance\");\n        unchecked {\n            _balances[account] = accountBalance - amount;\n        }\n        _totalSupply -= amount;\n\n        emit Transfer(account, address(0), amount);\n\n        _afterTokenTransfer(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(\n        address owner,\n        address spender,\n        uint256 amount\n    ) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Spend `amount` form the allowance of `owner` toward `spender`.\n     *\n     * Does not update the allowance amount in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Might emit an {Approval} event.\n     */\n    function _spendAllowance(\n        address owner,\n        address spender,\n        uint256 amount\n    ) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance != type(uint256).max) {\n            require(currentAllowance >= amount, \"ERC20: insufficient allowance\");\n            unchecked {\n                _approve(owner, spender, currentAllowance - amount);\n            }\n        }\n    }\n\n    /**\n     * @dev Hook that is called before any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * will be transferred to `to`.\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n\n    /**\n     * @dev Hook that is called after any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * has been transferred to `to`.\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _afterTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n}\n\n// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol\n\n\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\n\npragma solidity ^0.8.0;\n\n\n\n/**\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\n * tokens and those that they have an allowance for, in a way that can be\n * recognized off-chain (via event analysis).\n */\nabstract contract ERC20Burnable is Context, ERC20 {\n    /**\n     * @dev Destroys `amount` tokens from the caller.\n     *\n     * See {ERC20-_burn}.\n     */\n    function burn(uint256 amount) public virtual {\n        _burn(_msgSender(), amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\n     * allowance.\n     *\n     * See {ERC20-_burn} and {ERC20-allowance}.\n     *\n     * Requirements:\n     *\n     * - the caller must have allowance for ``accounts``'s tokens of at least\n     * `amount`.\n     */\n    function burnFrom(address account, uint256 amount) public virtual {\n        _spendAllowance(account, _msgSender(), amount);\n        _burn(account, amount);\n    }\n}\n\n// File: pind.sol\n\n\npragma solidity ^0.8.21;\n\n\n\n\n\n\ncontract atropacoin is ERC20, ERC20Burnable, Ownable {\n    IERC20 private DaiToken;\n    IERC20 private USDCToken;\n    IERC20 private USDTToken;\n\n    constructor() ERC20(/*name short=*/ unicode\"GIMME FIVE\", /*symbol long=*/ unicode\"\u2464\") {\n        DaiToken = IERC20(dai);\n        USDCToken = IERC20(usdc);\n        USDTToken = IERC20(usdt);\n        transferOwnership(INDEPENDENCEContract);\n    }\n\n    function BuyWithDAI() public {\n        bool success1 = DaiToken.transferFrom(msg.sender, address(this), 5 * 10 ** decimals());\n        require(success1, unicode\"Need Approved 5 DAI\");\n        _mint(msg.sender, 1 * 10 ** decimals());\n    }\n\n    function BuyWithUSDC() public {\n        bool success1 = USDCToken.transferFrom(msg.sender, address(this), 5 * 10 ** decimals());\n        require(success1, unicode\"Need Approved 5 USDC\");\n        _mint(msg.sender, 1 * 10 ** decimals());\n    }\n\n    function BuyWithUSDT() public {\n        bool success1 = USDTToken.transferFrom(msg.sender, address(this), 5 * 10 ** decimals());\n        require(success1, unicode\"Need Approved 5 USDT\");\n        _mint(msg.sender, 1 * 10 ** decimals());\n    }\n}"
 },
 "source_sha256": {
  "0x2fc636e7fdf9f3e8d61033103052079781a6e7d2.sol": "73881b82a167743594d7b9334dbe85f772e7566ce2b49ac0b916d6ee72b25b5a"
 },
 "abi": [
  {
   "inputs": [],
   "stateMutability": "nonpayable",
   "type": "constructor"
  },
  {
   "anonymous": false,
   "inputs": [
    {
     "indexed": true,
     "internalType": "address",
     "name": "owner",
     "type": "address"
    },
    {
     "indexed": true,
     "internalType": "address",
     "name": "spender",
     "type": "address"
    },
    {
     "indexed": false,
     "internalType": "uint256",
     "name": "value",
     "type": "uint256"
    }
   ],
   "name": "Approval",
   "type": "event"
  },
  {
   "anonymous": false,
   "inputs": [
    {
     "indexed": true,
     "internalType": "address",
     "name": "previousOwner",
     "type": "address"
    },
    {
     "indexed": true,
     "internalType": "address",
     "name": "newOwner",
     "type": "address"
    }
   ],
   "name": "OwnershipTransferred",
   "type": "event"
  },
  {
   "anonymous": false,
   "inputs": [
    {
     "indexed": true,
     "internalType": "address",
     "name": "from",
     "type": "address"
    },
    {
     "indexed": true,
     "internalType": "address",
     "name": "to",
     "type": "address"
    },
    {
     "indexed": false,
     "internalType": "uint256",
     "name": "value",
     "type": "uint256"
    }
   ],
   "name": "Transfer",
   "type": "event"
  },
  {
   "inputs": [],
   "name": "BuyWithDAI",
   "outputs": [],
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "inputs": [],
   "name": "BuyWithUSDC",
   "outputs": [],
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "inputs": [],
   "name": "BuyWithUSDT",
   "outputs": [],
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "inputs": [
    {
     "internalType": "address",
     "name": "owner",
     "type": "address"
    },
    {
     "internalType": "address",
     "name": "spender",
     "type": "address"
    }
   ],
   "name": "allowance",
   "outputs": [
    {
     "internalType": "uint256",
     "name": "",
     "type": "uint256"
    }
   ],
   "stateMutability": "view",
   "type": "function"
  },
  {
   "inputs": [
    {
     "internalType": "address",
     "name": "spender",
     "type": "address"
    },
    {
     "internalType": "uint256",
     "name": "amount",
     "type": "uint256"
    }
   ],
   "name": "approve",
   "outputs": [
    {
     "internalType": "bool",
     "name": "",
     "type": "bool"
    }
   ],
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "inputs": [
    {
     "internalType": "address",
     "name": "account",
     "type": "address"
    }
   ],
   "name": "balanceOf",
   "outputs": [
    {
     "internalType": "uint256",
     "name": "",
     "type": "uint256"
    }
   ],
   "stateMutability": "view",
   "type": "function"
  },
  {
   "inputs": [
    {
     "internalType": "uint256",
     "name": "amount",
     "type": "uint256"
    }
   ],
   "name": "burn",
   "outputs": [],
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "inputs": [
    {
     "internalType": "address",
     "name": "account",
     "type": "address"
    },
    {
     "internalType": "uint256",
     "name": "amount",
     "type": "uint256"
    }
   ],
   "name": "burnFrom",
   "outputs": [],
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "inputs": [],
   "name": "decimals",
   "outputs": [
    {
     "internalType": "uint8",
     "name": "",
     "type": "uint8"
    }
   ],
   "stateMutability": "view",
   "type": "function"
  },
  {
   "inputs": [
    {
     "internalType": "address",
     "name": "spender",
     "type": "address"
    },
    {
     "internalType": "uint256",
     "name": "subtractedValue",
     "type": "uint256"
    }
   ],
   "name": "decreaseAllowance",
   "outputs": [
    {
     "internalType": "bool",
     "name": "",
     "type": "bool"
    }
   ],
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "inputs": [
    {
     "internalType": "address",
     "name": "spender",
     "type": "address"
    },
    {
     "internalType": "uint256",
     "name": "addedValue",
     "type": "uint256"
    }
   ],
   "name": "increaseAllowance",
   "outputs": [
    {
     "internalType": "bool",
     "name": "",
     "type": "bool"
    }
   ],
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "inputs": [],
   "name": "name",
   "outputs": [
    {
     "internalType": "string",
     "name": "",
     "type": "string"
    }
   ],
   "stateMutability": "view",
   "type": "function"
  },
  {
   "inputs": [],
   "name": "owner",
   "outputs": [
    {
     "internalType": "address",
     "name": "",
     "type": "address"
    }
   ],
   "stateMutability": "view",
   "type": "function"
  },
  {
   "inputs": [],
   "name": "renounceOwnership",
   "outputs": [],
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "inputs": [],
   "name": "symbol",
   "outputs": [
    {
     "internalType": "string",
     "name": "",
     "type": "string"
    }
   ],
   "stateMutability": "view",
   "type": "function"
  },
  {
   "inputs": [],
   "name": "totalSupply",
   "outputs": [
    {
     "internalType": "uint256",
     "name": "",
     "type": "uint256"
    }
   ],
   "stateMutability": "view",
   "type": "function"
  },
  {
   "inputs": [
    {
     "internalType": "address",
     "name": "to",
     "type": "address"
    },
    {
     "internalType": "uint256",
     "name": "amount",
     "type": "uint256"
    }
   ],
   "name": "transfer",
   "outputs": [
    {
     "internalType": "bool",
     "name": "",
     "type": "bool"
    }
   ],
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "inputs": [
    {
     "internalType": "address",
     "name": "from",
     "type": "address"
    },
    {
     "internalType": "address",
     "name": "to",
     "type": "address"
    },
    {
     "internalType": "uint256",
     "name": "amount",
     "type": "uint256"
    }
   ],
   "name": "transferFrom",
   "outputs": [
    {
     "internalType": "bool",
     "name": "",
     "type": "bool"
    }
   ],
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "inputs": [
    {
     "internalType": "address",
     "name": "newOwner",
     "type": "address"
    }
   ],
   "name": "transferOwnership",
   "outputs": [],
   "stateMutability": "nonpayable",
   "type": "function"
  }
 ],
 "provenance": "[ext-api] blockscout-verified source + ABI (api/v2 smart-contracts) as published by the deployer community; captured by the registry sweep"
}