code: public void back() {
          NavLocation currentLoc = navigationManager.getModel().getCurrentLocation();
          if (currentLoc == null) {
              navigationManager.logger.warn("Current location should never be null before navigating backwards.");
              return;
          }
  
          NavLocation previousLoc = currentLoc.getPreviousLocation();
  
          boolean needFastRewind = false;
          while (previousLoc != null && previousLoc.isInterim()) {
              previousLoc = previousLoc.getPreviousLocation();
              needFastRewind = true;
          }
  
          if (needFastRewind) {
              navigateBackToLoc(previousLoc == null ? null : previousLoc.getLocationId());
          } else {
              navigationManager.getModel().setCurrentLocation(previousLoc);
              navigateEvent = new NavigationManager.Event.OnLocationBack(sender, currentLoc, previousLoc, false, this);
              go();
          }
      }
docs: <p>
  Navigates one step back. However, if the previous location is an interim location, it keeps
  seeking backward to the first non-interim navigation location. Interim locations are set when
  forward navigate to them by
  
  <pre>
  navigationManager.navigate(this).to(SomeController.class, new Forwarder().setInterim(true));
  </pre>
  </p>
  
  <p>
  If current location is null it doesn't take any effect otherwise
  raises a {@link NavigationManager.Event.OnLocationBack} event when there is a previous
  location.
  </p>