| 123456789101112131415161718192021222324252627282930313233343536373839 | // SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Burnable.sol)pragma solidity ^0.8.20;import {ERC20} from "../ERC20.sol";import {Context} from "../../../utils/Context.sol";/** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */abstract contract ERC20Burnable is Context, ERC20 {    /**     * @dev Destroys a `value` amount of tokens from the caller.     *     * See {ERC20-_burn}.     */    function burn(uint256 value) public virtual {        _burn(_msgSender(), value);    }    /**     * @dev Destroys a `value` amount of tokens from `account`, deducting from     * the caller's allowance.     *     * See {ERC20-_burn} and {ERC20-allowance}.     *     * Requirements:     *     * - the caller must have allowance for ``accounts``'s tokens of at least     * `value`.     */    function burnFrom(address account, uint256 value) public virtual {        _spendAllowance(account, _msgSender(), value);        _burn(account, value);    }}
 |