type Arr = [[stride(16)]] array<i32, 6>;

[[block]]
struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var x_36 : i32;
  var x_74 : bool;
  var x_33_phi : vec4<f32>;
  var x_36_phi : i32;
  var x_38_phi : i32;
  var x_75_phi : bool;
  let x_29 : i32 = x_5.x_GLF_uniform_int_values[0];
  let x_31 : i32 = x_5.x_GLF_uniform_int_values[1];
  x_33_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
  x_36_phi = x_29;
  x_38_phi = x_31;
  loop {
    var x_53 : vec4<f32>;
    var x_39 : i32;
    var x_34_phi : vec4<f32>;
    var x_62_phi : i32;
    let x_33 : vec4<f32> = x_33_phi;
    x_36 = x_36_phi;
    let x_38 : i32 = x_38_phi;
    let x_41 : i32 = x_5.x_GLF_uniform_int_values[4];
    if ((x_38 < x_41)) {
    } else {
      break;
    }
    var x_53_phi : vec4<f32>;
    var x_56_phi : i32;
    switch(0u) {
      default: {
        let x_48 : i32 = x_5.x_GLF_uniform_int_values[3];
        if ((x_38 > x_48)) {
          x_34_phi = x_33;
          x_62_phi = 2;
          break;
        }
        x_53_phi = x_33;
        x_56_phi = x_29;
        loop {
          var x_54 : vec4<f32>;
          var x_57 : i32;
          x_53 = x_53_phi;
          let x_56 : i32 = x_56_phi;
          if ((x_56 < x_41)) {
          } else {
            break;
          }

          continuing {
            let x_61 : f32 = f32((x_38 + x_56));
            x_54 = vec4<f32>(x_61, x_61, x_61, x_61);
            x_57 = (x_56 + 1);
            x_53_phi = x_54;
            x_56_phi = x_57;
          }
        }
        x_GLF_color = x_53;
        x_34_phi = x_53;
        x_62_phi = x_31;
      }
    }
    let x_34 : vec4<f32> = x_34_phi;
    let x_62 : i32 = x_62_phi;

    continuing {
      x_39 = (x_38 + 1);
      x_33_phi = x_34;
      x_36_phi = bitcast<i32>((x_36 + bitcast<i32>(x_62)));
      x_38_phi = x_39;
    }
  }
  let x_63 : vec4<f32> = x_GLF_color;
  let x_65 : i32 = x_5.x_GLF_uniform_int_values[2];
  let x_66 : f32 = f32(x_65);
  let x_69 : bool = all((x_63 == vec4<f32>(x_66, x_66, x_66, x_66)));
  x_75_phi = x_69;
  if (x_69) {
    let x_73 : i32 = x_5.x_GLF_uniform_int_values[5];
    x_74 = (x_36 == bitcast<i32>(x_73));
    x_75_phi = x_74;
  }
  let x_75 : bool = x_75_phi;
  if (x_75) {
    let x_79 : f32 = f32(x_31);
    let x_80 : f32 = f32(x_29);
    x_GLF_color = vec4<f32>(x_79, x_80, x_80, x_79);
  } else {
    let x_82 : f32 = f32(x_29);
    x_GLF_color = vec4<f32>(x_82, x_82, x_82, x_82);
  }
  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);
}
