code: func (n *node) dereference() {
  	if n.key != nil {
  		key := make([]byte, len(n.key))
  		copy(key, n.key)
  		n.key = key
  		_assert(n.pgid == 0 || len(n.key) > 0, "dereference: zero-length node key on existing node")
  	}
  
  	for i := range n.inodes {
  		inode := &n.inodes[i]
  
  		key := make([]byte, len(inode.key))
  		copy(key, inode.key)
  		inode.key = key
  		_assert(len(inode.key) > 0, "dereference: zero-length inode key")
  
  		value := make([]byte, len(inode.value))
  		copy(value, inode.value)
  		inode.value = value
  	}
  
  	// Recursively dereference children.
  	for _, child := range n.children {
  		child.dereference()
  	}
  
  	// Update statistics.
  	n.bucket.tx.stats.NodeDeref++
  }
docs: // dereference causes the node to copy all its inode key/value references to heap memory.
  // This is required when the mmap is reallocated so inodes are not pointing to stale data.