text: import sys
  import binascii
  import re
  
  def bytes_to_uint32_le(bytes):
      return  (int(bytes[3], 16) << 24) | (int(bytes[2], 16) << 16) | (int(bytes[1], 16) <<  8) | (int(bytes[0], 16) <<  0)
  
  def uint32_to_bytes_le(uint32):
      return [(uint32 >> 0)  & 0xff, 
              (uint32 >> 8)  & 0xff, 
              (uint32 >> 16) & 0xff, 
              (uint32 >> 24) & 0xff]
  
  def uint16_to_bytes_le(value):
      return [(value >> 0 & 0xFF),
              (value >> 8 & 0xFF)]
  
  def zero_pad_array_le(data, padsize):
      for i in range(0, padsize):
          data.insert(0, 0)
  
  def array_to_hex_string(arr):
      hex_str = ""
      for val in arr:
          if val > 255:
              raise Exception("Value is greater than it is possible to represent with one byte")
          hex_str += "%02x" % val
  
      return hex_str
  
  def crc32_unsigned(bytestring):
      return binascii.crc32(bytestring.encode('UTF-8')) % (1 << 32)
  
  def mac_string_to_uint(mac):
      parts = list(re.match('(..):(..):(..):(..):(..):(..)', mac).groups())
      ints = [int(x, 16) for x in parts]
  
      res = 0
      for i in range(0, len(ints)):
          res += (ints[len(ints)-1 - i] << 8*i)
  
      return res
  
  def uint_to_mac_string(mac):
      ints = [0, 0, 0, 0, 0, 0]
      for i in range(0, len(ints)):
          ints[len(ints)-1 - i] = (mac >> 8*i) & 0xff
  
      return ':'.join(['{:02x}'.format(x).upper() for x in ints])
  
  # Print a nice console progress bar
  def print_progress(iteration, total, prefix = '', suffix = '', decimals = 1, barLength = 100):
      """
      Call in a loop to create terminal progress bar
      @params:
          iteration   - Required  : current iteration (Int)
          total       - Required  : total iterations (Int)
          prefix      - Optional  : prefix string (Str)
          suffix      - Optional  : suffix string (Str)
          decimals    - Optional  : positive number of decimals in percent complete (Int)
          barLength   - Optional  : character length of bar (Int)
      """
      formatStr       = "{0:." + str(decimals) + "f}"
      percents        = formatStr.format(100 * (iteration / float(total)))
      filledLength    = int(round(barLength * iteration / float(total)))
      bar             = 'x' * filledLength + '-' * (barLength - filledLength)
      sys.stdout.write('\r%s |%s| %s%s %s (%d of %d bytes)' % (prefix, bar, percents, '%', suffix, iteration, total)),
      if iteration == total:
          sys.stdout.write('\n')
      sys.stdout.flush()
  