#include <metal_stdlib>

using namespace metal;
struct tint_padded_array_element {
  /* 0x0000 */ float el;
  /* 0x0004 */ int8_t tint_pad[12];
};
struct tint_array_wrapper {
  /* 0x0000 */ tint_padded_array_element arr[3];
};
struct buf0 {
  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
};
struct tint_padded_array_element_1 {
  /* 0x0000 */ int el;
  /* 0x0004 */ int8_t tint_pad_1[12];
};
struct tint_array_wrapper_1 {
  /* 0x0000 */ tint_padded_array_element_1 arr[3];
};
struct buf1 {
  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
};
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_6, constant buf1& x_10, thread float4* const tint_symbol_4) {
  float f0 = 0.0f;
  float f1 = 0.0f;
  int i = 0;
  bool x_63 = false;
  bool x_64_phi = false;
  float const x_34 = x_6.x_GLF_uniform_float_values.arr[0].el;
  f0 = x_34;
  float const x_36 = x_6.x_GLF_uniform_float_values.arr[0].el;
  f1 = x_36;
  int const x_38 = x_10.x_GLF_uniform_int_values.arr[1].el;
  i = x_38;
  while (true) {
    int const x_43 = i;
    int const x_45 = x_10.x_GLF_uniform_int_values.arr[0].el;
    if ((x_43 < x_45)) {
    } else {
      break;
    }
    float const x_48 = f0;
    f0 = fabs((1.100000024f * x_48));
    float const x_51 = f0;
    f1 = x_51;
    {
      int const x_52 = i;
      i = (x_52 + 1);
    }
  }
  float const x_54 = f1;
  float const x_56 = x_6.x_GLF_uniform_float_values.arr[1].el;
  bool const x_57 = (x_54 > x_56);
  x_64_phi = x_57;
  if (x_57) {
    float const x_60 = f1;
    float const x_62 = x_6.x_GLF_uniform_float_values.arr[2].el;
    x_63 = (x_60 < x_62);
    x_64_phi = x_63;
  }
  bool const x_64 = x_64_phi;
  if (x_64) {
    int const x_69 = x_10.x_GLF_uniform_int_values.arr[2].el;
    int const x_72 = x_10.x_GLF_uniform_int_values.arr[1].el;
    int const x_75 = x_10.x_GLF_uniform_int_values.arr[1].el;
    int const x_78 = x_10.x_GLF_uniform_int_values.arr[2].el;
    *(tint_symbol_4) = float4(float(x_69), float(x_72), float(x_75), float(x_78));
  } else {
    int const x_82 = x_10.x_GLF_uniform_int_values.arr[1].el;
    float const x_83 = float(x_82);
    *(tint_symbol_4) = float4(x_83, x_83, x_83, x_83);
  }
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(x_6, x_10, &(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;
}

