#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ float quarter;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_7, thread float4* const tint_symbol_4) {
  float4 N = 0.0f;
  float4 I = 0.0f;
  float4 Nref = 0.0f;
  float4 v = 0.0f;
  N = float4(1.0f, 2.0f, 3.0f, 4.0f);
  float const x_44 = x_7.quarter;
  I = float4(4.0f, 87.589996338f, x_44, 92.510002136f);
  Nref = float4(17.049999237f, -6.099999905f, 4329.370605469f, 2.700000048f);
  float4 const x_46 = N;
  float4 const x_47 = I;
  float4 const x_48 = Nref;
  v = faceforward(x_46, x_47, x_48);
  float4 const x_50 = v;
  if (all((x_50 == float4(-1.0f, -2.0f, -3.0f, -4.0f)))) {
    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
  }
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(x_7, &(tint_symbol_5));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_5};
  tint_symbol_1 const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_3;
}

