[[block]]
struct buf0 {
  injectionSwitch : vec2<f32>;
};

[[group(0), binding(0)]] var<uniform> x_5 : buf0;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var x_36 : bool = false;
  var x_37 : bool;
  var x_7 : i32;
  var x_38 : bool;
  var color : vec3<f32>;
  var x_40 : bool;
  var x_43 : vec3<f32>;
  var x_40_phi : bool;
  var x_42_phi : vec3<f32>;
  var x_56_phi : bool;
  var x_58_phi : bool;
  x_40_phi = false;
  x_42_phi = vec3<f32>(0.0, 0.0, 0.0);
  loop {
    var x_43_phi : vec3<f32>;
    x_40 = x_40_phi;
    let x_42 : vec3<f32> = x_42_phi;
    let x_47 : f32 = x_5.injectionSwitch.y;
    x_43_phi = x_42;
    if ((x_47 < 0.0)) {
      color = vec3<f32>(1.0, 1.0, 1.0);
      x_43_phi = vec3<f32>(1.0, 1.0, 1.0);
    }
    x_43 = x_43_phi;

    continuing {
      x_40_phi = x_40;
      x_42_phi = x_43;
      if (false) {
      } else {
        break;
      }
    }
  }
  x_36 = false;
  x_56_phi = x_40;
  x_58_phi = false;
  loop {
    var x_62 : bool;
    var x_62_phi : bool;
    var x_64_phi : bool;
    var x_65_phi : i32;
    var x_70_phi : bool;
    var x_71_phi : bool;
    let x_56 : bool = x_56_phi;
    let x_58 : bool = x_58_phi;
    x_7 = 0;
    x_62_phi = x_56;
    x_64_phi = false;
    x_65_phi = 0;
    loop {
      x_62 = x_62_phi;
      let x_64 : bool = x_64_phi;
      let x_65 : i32 = x_65_phi;
      let x_68 : bool = (0 < 1);
      x_70_phi = x_62;
      x_71_phi = false;
      if (true) {
      } else {
        break;
      }
      x_36 = true;
      x_37 = true;
      x_70_phi = true;
      x_71_phi = true;
      break;

      continuing {
        x_62_phi = false;
        x_64_phi = false;
        x_65_phi = 0;
      }
    }
    let x_70 : bool = x_70_phi;
    let x_71 : bool = x_71_phi;
    if (true) {
      break;
    }
    x_36 = true;
    break;

    continuing {
      x_56_phi = false;
      x_58_phi = false;
    }
  }
  x_38 = true;
  let x_73 : f32 = select(0.0, 1.0, true);
  x_GLF_color = (vec4<f32>(x_43.x, x_43.y, x_43.z, 1.0) + vec4<f32>(x_73, x_73, x_73, x_73));
  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
