code: func calcID(n *ast.MsgNode) uint64 {
  	var buf bytes.Buffer
  	writeFingerprint(&buf, n, false)
  
  	var fp = fingerprint(buf.Bytes())
  	if n.Meaning != "" {
  		var topbit uint64
  		if fp&(1<<63) > 0 {
  			topbit = 1
  		}
  		fp = (fp << 1) + topbit + fingerprint([]byte(n.Meaning))
  	}
  
  	return fp & 0x7fffffffffffffff
  }
docs: // calcID calculates the message ID for the given message node.
  // The ID changes if the text content or meaning attribute changes.
  // It is invariant to changes in description.