code: def RRlist2bitmap(lst):
      
      # RFC 4034, 4.1.2. The Type Bit Maps Field
  
      import math
  
      bitmap = b""
      lst = [abs(x) for x in sorted(set(lst)) if x <= 65535]
  
      # number of window blocks
      max_window_blocks = int(math.ceil(lst[-1] / 256.))
      min_window_blocks = int(math.floor(lst[0] / 256.))
      if min_window_blocks == max_window_blocks:
          max_window_blocks += 1
  
      for wb in range(min_window_blocks, max_window_blocks + 1):
          # First, filter out RR not encoded in the current window block
          # i.e. keep everything between 256*wb <= 256*(wb+1)
          rrlist = sorted(x for x in lst if 256 * wb <= x < 256 * (wb + 1))
          if not rrlist:
              continue
  
          # Compute the number of bytes used to store the bitmap
          if rrlist[-1] == 0:  # only one element in the list
              bytes_count = 1
          else:
              max = rrlist[-1] - 256 * wb
              bytes_count = int(math.ceil(max // 8)) + 1  # use at least 1 byte
          if bytes_count > 32:  # Don't encode more than 256 bits / values
              bytes_count = 32
  
          bitmap += struct.pack("BB", wb, bytes_count)
  
          # Generate the bitmap
          # The idea is to remove out of range Resource Records with these steps
          # 1. rescale to fit into 8 bits
          # 2. x gives the bit position ; compute the corresponding value
          # 3. sum everything
          bitmap += b"".join(
              struct.pack(
                  b"B",
                  sum(2 ** (7 - (x - 256 * wb) + (tmp * 8)) for x in rrlist
                      if 256 * wb + 8 * tmp <= x < 256 * wb + 8 * tmp + 8),
              ) for tmp in range(bytes_count)
          )
  
      return bitmap
docs: Encode a list of integers representing Resource Records to a bitmap field
      used in the NSEC Resource Record.