    if (cruise_set && !s.scene.is_metric) {
      set_speed *= KM_TO_MILE;
    }
  
    float cur_speed = cs_alive ? std::max<float>(0.0, sm["carState"].getCarState().getVEgo()) : 0.0;
    cur_speed  *= s.scene.is_metric ? MS_TO_KPH : MS_TO_MPH;
  
    auto speed_limit_sign = sm["navInstruction"].getNavInstruction().getSpeedLimitSign();
    float speed_limit = nav_alive ? sm["navInstruction"].getNavInstruction().getSpeedLimit() : 0.0;
    speed_limit *= (s.scene.is_metric ? MS_TO_KPH : MS_TO_MPH);
 
</s> remove   float set_speed = cs_alive ? cs.getVCruise() : SET_SPEED_NA;
 </s> add   // Handle older routes where vCruiseCluster is not set
  float v_cruise =  cs.getVCruiseCluster() == 0.0 ? cs.getVCruise() : cs.getVCruiseCluster();
  float set_speed = cs_alive ? v_cruise : SET_SPEED_NA;
  // Handle older routes where vEgoCluster is not set
  float v_ego = sm["carState"].getCarState().getVEgoCluster() == 0.0 ? sm["carState"].getCarState().getVEgo() : sm["carState"].getCarState().getVEgoCluster();
  float cur_speed = cs_alive ? std::max<float>(0.0, v_ego) : 0.0;
    if (cruise_set && !s.scene.is_metric) {
      set_speed *= KM_TO_MILE;
    }
  
  // Handle older routes where vEgoCluster is not set
  float v_ego = sm["carState"].getCarState().getVEgoCluster() == 0.0 ? sm["carState"].getCarState().getVEgo() : sm["carState"].getCarState().getVEgoCluster();
  float cur_speed = cs_alive ? std::max<float>(0.0, v_ego) : 0.0;
    cur_speed  *= s.scene.is_metric ? MS_TO_KPH : MS_TO_MPH;
  
    auto speed_limit_sign = sm["navInstruction"].getNavInstruction().getSpeedLimitSign();
    float speed_limit = nav_alive ? sm["navInstruction"].getNavInstruction().getSpeedLimit() : 0.0;
    speed_limit *= (s.scene.is_metric ? MS_TO_KPH : MS_TO_MPH);
keep keep keep keep replace keep keep keep keep keep
 prereq for matching speeds shown on cars dash (#25222)

* prereq for matching speeds shown on cars dash

* also handle fallback in the ui for replay

* update translations

* update ref 
selfdrive/ui/qt/onroad.cc