struct buf0 {
  zero : i32;
}

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

var<private> x_GLF_color : vec4<f32>;

fn func_() -> f32 {
  var s : f32;
  var i : i32;
  var j : i32;
  s = 2.0;
  i = 0;
  loop {
    let x_47 : i32 = i;
    let x_49 : i32 = x_8.zero;
    if ((x_47 < (x_49 + 1))) {
    } else {
      break;
    }
    let x_53 : f32 = s;
    s = (x_53 + 3.0);
    j = 0;
    loop {
      let x_59 : i32 = j;
      if ((x_59 < 10)) {
      } else {
        break;
      }
      let x_63 : i32 = x_8.zero;
      if ((x_63 == 1)) {
        discard;
      }

      continuing {
        let x_67 : i32 = j;
        j = (x_67 + 1);
      }
    }

    continuing {
      let x_69 : i32 = i;
      i = (x_69 + 1);
    }
  }
  let x_71 : f32 = s;
  return x_71;
}

fn main_1() {
  var c : vec4<f32>;
  let x_34 : f32 = func_();
  c = vec4<f32>(x_34, 0.0, 0.0, 1.0);
  let x_36 : f32 = func_();
  if ((x_36 == 5.0)) {
    let x_41 : vec4<f32> = c;
    x_GLF_color = x_41;
  } else {
    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.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);
}
