type Arr = [[stride(16)]] array<f32, 1>;

struct buf0 {
  x_GLF_uniform_float_values : Arr;
};

struct buf1 {
  v1 : vec2<f32>;
};

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

[[group(0), binding(1)]] var<uniform> x_8 : buf1;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var m24 : mat2x2<f32>;
  var a : f32;
  var v2 : vec2<f32>;
  var v3 : vec2<f32>;
  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
  let x_42 : f32 = x_6.x_GLF_uniform_float_values[0];
  let x_44 : f32 = x_8.v1.x;
  let x_47 : f32 = x_6.x_GLF_uniform_float_values[0];
  m24 = mat2x2<f32>(vec2<f32>(x_40, x_42), vec2<f32>((x_44 * 1.0), x_47));
  let x_51 : mat2x2<f32> = m24;
  a = x_51[0u].x;
  v2 = vec2<f32>(-0x1.8p+128, 1.0);
  let x_53 : vec2<f32> = v2;
  let x_54 : f32 = a;
  v3 = reflect(x_53, vec2<f32>(x_54, 1.0));
  let x_58 : f32 = x_6.x_GLF_uniform_float_values[0];
  let x_59 : vec2<f32> = v3;
  let x_61 : f32 = x_6.x_GLF_uniform_float_values[0];
  x_GLF_color = vec4<f32>(x_58, x_59.x, x_59.y, x_61);
  let x_66 : f32 = x_8.v1.y;
  let x_68 : f32 = x_6.x_GLF_uniform_float_values[0];
  if ((x_66 == x_68)) {
    let x_73 : vec4<f32> = x_GLF_color;
    x_GLF_color = vec4<f32>(x_73.x, vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).y, x_73.w);
  } 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);
}
