#version 310 es
precision highp float;

layout(location = 0) out vec4 x_GLF_color_1_1;
struct buf0 {
  vec4 r;
};

layout(binding = 0, std140) uniform x_7_block_ubo {
  buf0 inner;
} x_7;

vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
void main_1() {
  float f = 0.0f;
  vec4 v = vec4(0.0f, 0.0f, 0.0f, 0.0f);
  f = 1.0f;
  float x_33 = f;
  float x_35 = f;
  float x_37 = f;
  float x_39 = f;
  v = vec4(sin(x_33), cos(x_35), exp2(x_37), log(x_39));
  vec4 x_42 = v;
  vec4 x_44 = x_7.inner.r;
  if ((distance(x_42, x_44) < 0.10000000149011611938f)) {
    x_GLF_color = vec4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    x_GLF_color = vec4(0.0f);
  }
  return;
}

struct main_out {
  vec4 x_GLF_color_1;
};

main_out tint_symbol() {
  main_1();
  main_out tint_symbol_1 = main_out(x_GLF_color);
  return tint_symbol_1;
}

void main() {
  main_out inner_result = tint_symbol();
  x_GLF_color_1_1 = inner_result.x_GLF_color_1;
  return;
}
