code: func readBundle(reader *bufio.Reader, start *int, end int) (*Bundle, error) {
  	// Read the '#bundle' OSC string
  	startTag, n, err := readPaddedString(reader)
  	if err != nil {
  		return nil, err
  	}
  	*start += n
  
  	if startTag != bundleTagString {
  		return nil, fmt.Errorf("Invalid bundle start tag: %s", startTag)
  	}
  
  	// Read the timetag
  	var timeTag uint64
  	if err := binary.Read(reader, binary.BigEndian, &timeTag); err != nil {
  		return nil, err
  	}
  	*start += 8
  
  	// Create a new bundle
  	bundle := NewBundle(timetagToTime(timeTag))
  
  	// Read until the end of the buffer
  	for *start < end {
  		// Read the size of the bundle element
  		var length int32
  		if err := binary.Read(reader, binary.BigEndian, &length); err != nil {
  			return nil, err
  		}
  		*start += 4
  
  		p, err := readPacket(reader, start, end)
  		if err != nil {
  			return nil, err
  		}
  		if err = bundle.Append(p); err != nil {
  			return nil, err
  		}
  	}
  
  	return bundle, nil
  }
docs: // readBundle reads an Bundle from reader.