Program: 173628
Project: 173628
Buggy source:
public void paint(Graphics g){
  Graphics2D g2=(Graphics2D)g;
  if (getAntialias()) {
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
  }
 else {
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
  }
  Color terrainColor=Color.WHITE;
  if (isSelected()) {
    g2.setColor(highlightColor);
    g2.fill(hexagon);
    g2.setColor(terrainColor);
    g2.fill(innerHexagonSelected);
    g2.setColor(Color.black);
    g2.draw(innerHexagonSelected);
  }
 else   if (isSelectable()) {
    g2.setColor(selectableColor);
    g2.fill(hexagon);
    g2.setColor(terrainColor);
    g2.fill(innerHexagonSelectable);
    g2.setColor(Color.black);
    g2.draw(innerHexagonSelectable);
  }
  paintOverlay(g2);
  paintStationTokens(g2);
  paintOffStationTokens(g2);
  FontMetrics fontMetrics=g2.getFontMetrics();
  if (getHexModel().getTileCost() > 0) {
    g2.drawString(Bank.format(getHexModel().getTileCost()),rectBound.x + (rectBound.width - fontMetrics.stringWidth(Integer.toString(getHexModel().getTileCost()))) * 3 / 5,rectBound.y + ((fontMetrics.getHeight() + rectBound.height) * 9 / 15));
  }
  Map<PublicCompanyI,City> homes=getHexModel().getHomes();
  if (homes != null) {
    City homeCity;
    Point p;
    for (    PublicCompanyI company : homes.keySet()) {
      if (company.isClosed())       continue;
      if (model.hasTokenOfCompany(company))       continue;
      homeCity=homes.get(company);
      if (homeCity == null) {
        List<City> cities=getHexModel().getCities();
        for (        City city : cities) {
          if (city.hasTokenSlotsLeft()) {
            homeCity=city;
            break;
          }
        }
      }
      p=getTokenCenter(1,homeCity.getTokens().size(),getHexModel().getCities().size(),homeCity.getNumber() - 1);
      drawHome(g2,company,p);
    }
  }
  if (getHexModel().isBlockedForTileLays()) {
    List<PrivateCompanyI> privates=GameManager.getInstance().getCompanyManager().getAllPrivateCompanies();
    for (    PrivateCompanyI p : privates) {
      List<MapHex> blocked=p.getBlockedHexes();
      if (blocked != null) {
        for (        MapHex hex : blocked) {
          if (getHexModel().equals(hex)) {
            String text="String_Node_Str" + p.getName() + "String_Node_Str";
            g2.drawString(text,rectBound.x + (rectBound.width - fontMetrics.stringWidth(text)) * 1 / 2,rectBound.y + ((fontMetrics.getHeight() + rectBound.height) * 5 / 15));
          }
        }
      }
    }
  }
  if (model.isReservedForCompany() && currentTileId == model.getPreprintedTileId()) {
    String text="String_Node_Str" + model.getReservedForCompany() + "String_Node_Str";
    g2.drawString(text,rectBound.x + (rectBound.width - fontMetrics.stringWidth(text)) * 1 / 2,rectBound.y + ((fontMetrics.getHeight() + rectBound.height) * 5 / 25));
  }
}

Fixed version (ground truth):
public void paint(Graphics g){
  Graphics2D g2=(Graphics2D)g;
  if (getAntialias()) {
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
  }
 else {
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
  }
  Color terrainColor=Color.WHITE;
  if (isSelected()) {
    g2.setColor(highlightColor);
    g2.fill(hexagon);
    g2.setColor(terrainColor);
    g2.fill(innerHexagonSelected);
    g2.setColor(Color.black);
    g2.draw(innerHexagonSelected);
  }
 else   if (isSelectable()) {
    g2.setColor(selectableColor);
    g2.fill(hexagon);
    g2.setColor(terrainColor);
    g2.fill(innerHexagonSelectable);
    g2.setColor(Color.black);
    g2.draw(innerHexagonSelectable);
  }
  paintOverlay(g2);
  paintStationTokens(g2);
  paintOffStationTokens(g2);
  FontMetrics fontMetrics=g2.getFontMetrics();
  if (getHexModel().getTileCost() > 0) {
    g2.drawString(Bank.format(getHexModel().getTileCost()),rectBound.x + (rectBound.width - fontMetrics.stringWidth(Integer.toString(getHexModel().getTileCost()))) * 3 / 5,rectBound.y + ((fontMetrics.getHeight() + rectBound.height) * 9 / 15));
  }
  Map<PublicCompanyI,City> homes=getHexModel().getHomes();
  if (homes != null) {
    City homeCity;
    Point p;
    for (    PublicCompanyI company : homes.keySet()) {
      if (company.isClosed())       continue;
      if (model.hasTokenOfCompany(company))       continue;
      homeCity=homes.get(company);
      if (homeCity == null) {
        List<City> cities=getHexModel().getCities();
        for (        City city : cities) {
          if (city.hasTokenSlotsLeft()) {
            homeCity=city;
            break;
          }
        }
      }
      p=getTokenCenter(1,homeCity.getTokens().size(),getHexModel().getCities().size(),homeCity.getNumber() - 1);
      drawHome(g2,company,p);
    }
  }
  if (getHexModel().isBlockedForTileLays()) {
    List<PrivateCompanyI> privates=hexMap.getOrUIManager().getGameUIManager().getGameManager().getCompanyManager().getAllPrivateCompanies();
    for (    PrivateCompanyI p : privates) {
      List<MapHex> blocked=p.getBlockedHexes();
      if (blocked != null) {
        for (        MapHex hex : blocked) {
          if (getHexModel().equals(hex)) {
            String text="String_Node_Str" + p.getName() + "String_Node_Str";
            g2.drawString(text,rectBound.x + (rectBound.width - fontMetrics.stringWidth(text)) * 1 / 2,rectBound.y + ((fontMetrics.getHeight() + rectBound.height) * 5 / 15));
          }
        }
      }
    }
  }
  if (model.isReservedForCompany() && currentTileId == model.getPreprintedTileId()) {
    String text="String_Node_Str" + model.getReservedForCompany() + "String_Node_Str";
    g2.drawString(text,rectBound.x + (rectBound.width - fontMetrics.stringWidth(text)) * 1 / 2,rectBound.y + ((fontMetrics.getHeight() + rectBound.height) * 5 / 25));
  }
}