type Arr = @stride(16) array<f32, 2>;

struct buf0 {
  x_GLF_uniform_float_values : Arr;
};

type Arr_1 = @stride(16) array<i32, 2>;

struct buf1 {
  x_GLF_uniform_int_values : Arr_1;
};

@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 v1 : vec2<f32>;
  let x_35 : f32 = x_6.x_GLF_uniform_float_values[0];
  v1 = vec2<f32>(x_35, x_35);
  let x_38 : i32 = x_8.x_GLF_uniform_int_values[0];
  let x_40 : f32 = v1.y;
  v1[x_38] = ldexp(x_40, -256);
  let x_43 : vec2<f32> = v1;
  if ((((x_43 * mat2x2<f32>(vec2<f32>(x_35, 0.0), vec2<f32>(0.0, x_35)))).x == x_35)) {
    let x_53 : f32 = f32(x_38);
    let x_55 : i32 = x_8.x_GLF_uniform_int_values[1];
    let x_56 : f32 = f32(x_55);
    x_GLF_color = vec4<f32>(x_53, x_56, x_56, x_53);
  } else {
    let x_59 : i32 = x_8.x_GLF_uniform_int_values[1];
    let x_60 : f32 = f32(x_59);
    x_GLF_color = vec4<f32>(x_60, x_60, x_60, x_60);
  }
  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);
}
