struct buf0 {
  injectionSwitch : vec2<f32>;
};

var<private> x_GLF_color : vec4<f32>;

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

fn main_1() {
  var j : i32;
  var x_41 : f32;
  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  loop {
    let x_32 : f32 = x_6.injectionSwitch.x;
    j = i32(x_32);
    loop {
      let x_8 : i32 = j;
      if ((x_8 < 2)) {
      } else {
        break;
      }
      return;
    }

    continuing {
      x_41 = x_6.injectionSwitch.y;
      if ((0.0 > x_41)) {
      } else {
        break;
      }
    }
  }
  let x_43 : i32 = i32(x_41);
  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);
}
