docs: def _update_image_flash_params(esp, address, args, image):
      """ Modify the flash mode & size bytes if this looks like an executable bootloader image  """
      if len(image) < 8:
          return image  # not long enough to be a bootloader image
  
      # unpack the (potential) image header
      magic, _, flash_mode, flash_size_freq = struct.unpack("BBBB", image[:4])
      if address != esp.BOOTLOADER_FLASH_OFFSET or magic != esp.ESP_IMAGE_MAGIC:
          return image  # not flashing a bootloader, so don't modify this
  
      if args.flash_mode != 'keep':
          flash_mode = {'qio':0, 'qout':1, 'dio':2, 'dout': 3}[args.flash_mode]
  
      flash_freq = flash_size_freq & 0x0F
      if args.flash_freq != 'keep':
          flash_freq = {'40m':0, '26m':1, '20m':2, '80m': 0xf}[args.flash_freq]
  
      flash_size = flash_size_freq & 0xF0
      if args.flash_size != 'keep':
          flash_size = esp.parse_flash_size_arg(args.flash_size)
  
      flash_params = struct.pack(b'BB', flash_mode, flash_size + flash_freq)
      if flash_params != image[2:4]:
          print('Flash params set to 0x%04x' % struct.unpack(">H", flash_params))
          image = image[0:2] + flash_params + image[4:]
      return image