      ret.canTimeout = any(cp.bus_timeout for cp in self.can_parsers if cp is not None)
  
      # copy back for next iteration
      reader = ret.as_reader()
      if self.CS is not None:
        self.CS.out = reader
 
</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; </s> remove   float cur_speed = cs_alive ? std::max<float>(0.0, sm["carState"].getCarState().getVEgo()) : 0.0;
 </s> add   // 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 ret.vEgoCluster == 0.0:
      ret.vEgoCluster = ret.vEgo

    if ret.cruiseState.speedCluster == 0:
      ret.cruiseState.speedCluster = ret.cruiseState.speed

      ret.canTimeout = any(cp.bus_timeout for cp in self.can_parsers if cp is not None)
  
    if ret.vEgoCluster == 0.0:
      ret.vEgoCluster = ret.vEgo

    if ret.cruiseState.speedCluster == 0:
      ret.cruiseState.speedCluster = ret.cruiseState.speed

      # copy back for next iteration
      reader = ret.as_reader()
      if self.CS is not None:
        self.CS.out = reader
keep add 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/car/interfaces.py