struct buf0 {
  r : vec4<f32>,
}

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var f : f32;
  var v : vec4<f32>;
  f = determinant(mat3x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f)));
  let x_33 : f32 = f;
  let x_35 : f32 = f;
  let x_37 : f32 = f;
  let x_39 : f32 = f;
  v = vec4<f32>(sin(x_33), cos(x_35), exp2(x_37), log(x_39));
  let x_42 : vec4<f32> = v;
  let x_44 : vec4<f32> = x_7.r;
  if ((distance(x_42, x_44) < 0.100000001f)) {
    x_GLF_color = vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    x_GLF_color = vec4<f32>(0.0f, 0.0f, 0.0f, 0.0f);
  }
  return;
}

struct main_out {
  @location(0)
  x_GLF_color_1 : vec4<f32>,
}

@fragment
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
