creation_sourcecode: // SPDX-License-Identifier: MIT
  
  pragma solidity ^0.8.7;
  
  contract SummerTrump {
      mapping(address => uint256) private _balances;
      mapping(address => mapping(address => uint256)) private _allowances;
  
      string public constant name = "Summer Trump";
      string public constant symbol = "STP";
      uint8 public constant decimals = 18;
      uint256 private constant _totalSupply = 10_000_000_000 * (10 ** uint256(decimals));
  
      event Transfer(address indexed from, address indexed to, uint256 value);
      event Approval(address indexed owner, address indexed spender, uint256 value);
  
      constructor() {
          _balances[msg.sender] = _totalSupply;
          emit Transfer(address(0), msg.sender, _totalSupply);
      }
  
      function getTotalSupply() external pure returns (uint256) {
          return _totalSupply;
      }
  
      function getBalanceOf(address account) external view returns (uint256) {
          return _balances[account];
      }
  
      function makeTransfer(address to, uint256 value) external returns (bool) {
          _executeTransfer(msg.sender, to, value);
          return true;
      }
  
      function getAllowance(address owner, address spender) external view returns (uint256) {
          return _allowances[owner][spender];
      }
  
      function grantApproval(address spender, uint256 value) external returns (bool) {
          _setApproval(msg.sender, spender, value);
          return true;
      }
  
      function executeTransferFrom(address from, address to, uint256 value) external returns (bool) {
          _executeTransfer(from, to, value);
          _setApproval(from, msg.sender, _allowances[from][msg.sender] - value);
          return true;
      }
  
      function increaseApprovedAllowance(address spender, uint256 addedValue) external returns (bool) {
          _setApproval(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
          return true;
      }
  
      function decreaseApprovedAllowance(address spender, uint256 subtractedValue) external returns (bool) {
          uint256 currentAllowance = _allowances[msg.sender][spender];
          require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
          _setApproval(msg.sender, spender, currentAllowance - subtractedValue);
          return true;
      }
  
      function _executeTransfer(address from, address to, uint256 value) internal {
          require(from != address(0), "ERC20: transfer from the zero address");
          require(to != address(0), "ERC20: transfer to the zero address");
          require(value <= _balances[from], "ERC20: transfer amount exceeds balance");
  
          _balances[from] -= value;
          _balances[to] += value;
          emit Transfer(from, to, value);
      }
  
      function _setApproval(address owner, address spender, uint256 value) internal {
          require(owner != address(0), "ERC20: approve from the zero address");
          require(spender != address(0), "ERC20: approve to the zero address");
  
          _allowances[owner][spender] = value;
          emit Approval(owner, spender, value);
      }
  }