code: func (m *mruNonceMap) Add(nonce uint64) {
  	m.mtx.Lock()
  	defer m.mtx.Unlock()
  
  	// When the limit is zero, nothing can be added to the map, so just
  	// return.
  	if m.limit == 0 {
  		return
  	}
  
  	// When the entry already exists move it to the front of the list
  	// thereby marking it most recently used.
  	if node, exists := m.nonceMap[nonce]; exists {
  		m.nonceList.MoveToFront(node)
  		return
  	}
  
  	// Evict the least recently used entry (back of the list) if the the new
  	// entry would exceed the size limit for the map.  Also reuse the list
  	// node so a new one doesn't have to be allocated.
  	if uint(len(m.nonceMap))+1 > m.limit {
  		node := m.nonceList.Back()
  		lru := node.Value.(uint64)
  
  		// Evict least recently used item.
  		delete(m.nonceMap, lru)
  
  		// Reuse the list node of the item that was just evicted for the
  		// new item.
  		node.Value = nonce
  		m.nonceList.MoveToFront(node)
  		m.nonceMap[nonce] = node
  		return
  	}
  
  	// The limit hasn't been reached yet, so just add the new item.
  	node := m.nonceList.PushFront(nonce)
  	m.nonceMap[nonce] = node
  }
docs: // Add adds the passed nonce to the map and handles eviction of the oldest item
  // if adding the new item would exceed the max limit.  Adding an existing item
  // makes it the most recently used item.
  //
  // This function is safe for concurrent access.