struct buf0 {
  injectionSwitch : vec2<f32>;
}

@group(0) @binding(0) var<uniform> x_7 : buf0;

var<private> x_GLF_color : vec4<f32>;

fn func_() -> i32 {
  var loop_count : i32;
  var x_38_phi : i32;
  loop_count = 0;
  x_38_phi = 0;
  loop {
    var x_39 : i32;
    var x_45_phi : i32;
    let x_38 : i32 = x_38_phi;
    let x_43 : i32 = (x_38 + 1);
    loop_count = x_43;
    x_45_phi = x_43;
    loop {
      let x_45 : i32 = x_45_phi;
      x_39 = (x_45 + 1);
      loop_count = x_39;
      let x_50 : f32 = x_7.injectionSwitch.x;
      let x_52 : f32 = x_7.injectionSwitch.y;
      if ((x_50 < x_52)) {
        return 1;
      }
      let x_57 : f32 = x_7.injectionSwitch.x;
      let x_59 : f32 = x_7.injectionSwitch.y;
      if ((x_57 < x_59)) {
        break;
      }

      continuing {
        x_45_phi = x_39;
        if ((x_39 < 100)) {
        } else {
          break;
        }
      }
    }

    continuing {
      x_38_phi = x_39;
      if ((x_39 < 100)) {
      } else {
        break;
      }
    }
  }
  return 0;
}

fn main_1() {
  let x_31 : i32 = func_();
  if ((x_31 == 1)) {
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  } else {
    x_GLF_color = vec4<f32>(1.0, 1.0, 1.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);
}
