#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int arr[10];
};
struct QuicksortObject {
  tint_array_wrapper numbers;
};
struct buf0 {
  /* 0x0000 */ packed_float2 resolution;
};
struct main_out {
  float4 frag_color_1;
  float4 gl_Position;
};
struct tint_symbol_2 {
  float4 x_GLF_pos_param [[attribute(0)]];
};
struct tint_symbol_3 {
  float4 frag_color_1 [[user(locn0)]];
  float4 gl_Position [[position]];
};

void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_5) {
  int temp = 0;
  int const x_239 = *(i);
  int const x_241 = (*(tint_symbol_5)).numbers.arr[x_239];
  temp = x_241;
  int const x_242 = *(i);
  int const x_243 = *(j);
  int const x_245 = (*(tint_symbol_5)).numbers.arr[x_243];
  (*(tint_symbol_5)).numbers.arr[x_242] = x_245;
  int const x_247 = *(j);
  int const x_248 = temp;
  (*(tint_symbol_5)).numbers.arr[x_247] = x_248;
  return;
}

int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_6) {
  int pivot = 0;
  int i_1 = 0;
  int j_1 = 0;
  int param = 0;
  int param_1 = 0;
  int param_2 = 0;
  int param_3 = 0;
  int const x_251 = *(h);
  int const x_253 = (*(tint_symbol_6)).numbers.arr[x_251];
  pivot = x_253;
  int const x_254 = *(l);
  i_1 = as_type<int>((as_type<uint>(x_254) - as_type<uint>(1)));
  int const x_256 = *(l);
  j_1 = x_256;
  while (true) {
    int const x_261 = j_1;
    int const x_262 = *(h);
    if ((x_261 <= as_type<int>((as_type<uint>(x_262) - as_type<uint>(1))))) {
    } else {
      break;
    }
    int const x_266 = j_1;
    int const x_268 = (*(tint_symbol_6)).numbers.arr[x_266];
    int const x_269 = pivot;
    if ((x_268 <= x_269)) {
      int const x_273 = i_1;
      i_1 = as_type<int>((as_type<uint>(x_273) + as_type<uint>(1)));
      int const x_275 = i_1;
      param = x_275;
      int const x_276 = j_1;
      param_1 = x_276;
      swap_i1_i1_(&(param), &(param_1), tint_symbol_6);
    }
    {
      int const x_278 = j_1;
      j_1 = as_type<int>((as_type<uint>(x_278) + as_type<uint>(1)));
    }
  }
  int const x_280 = i_1;
  param_2 = as_type<int>((as_type<uint>(x_280) + as_type<uint>(1)));
  int const x_282 = *(h);
  param_3 = x_282;
  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_6);
  int const x_284 = i_1;
  return as_type<int>((as_type<uint>(x_284) + as_type<uint>(1)));
}

void quicksort_(thread QuicksortObject* const tint_symbol_7) {
  int l_1 = 0;
  int h_1 = 0;
  int top = 0;
  tint_array_wrapper stack = {};
  int p = 0;
  int param_4 = 0;
  int param_5 = 0;
  l_1 = 0;
  h_1 = 9;
  top = -1;
  int const x_287 = top;
  int const x_288 = as_type<int>((as_type<uint>(x_287) + as_type<uint>(1)));
  top = x_288;
  int const x_289 = l_1;
  stack.arr[x_288] = x_289;
  int const x_291 = top;
  int const x_292 = as_type<int>((as_type<uint>(x_291) + as_type<uint>(1)));
  top = x_292;
  int const x_293 = h_1;
  stack.arr[x_292] = x_293;
  while (true) {
    int const x_299 = top;
    if ((x_299 >= 0)) {
    } else {
      break;
    }
    int const x_302 = top;
    top = as_type<int>((as_type<uint>(x_302) - as_type<uint>(1)));
    int const x_305 = stack.arr[x_302];
    h_1 = x_305;
    int const x_306 = top;
    top = as_type<int>((as_type<uint>(x_306) - as_type<uint>(1)));
    int const x_309 = stack.arr[x_306];
    l_1 = x_309;
    int const x_310 = l_1;
    param_4 = x_310;
    int const x_311 = h_1;
    param_5 = x_311;
    int const x_312 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_7);
    p = x_312;
    int const x_313 = p;
    int const x_315 = l_1;
    if ((as_type<int>((as_type<uint>(x_313) - as_type<uint>(1))) > x_315)) {
      int const x_319 = top;
      int const x_320 = as_type<int>((as_type<uint>(x_319) + as_type<uint>(1)));
      top = x_320;
      int const x_321 = l_1;
      stack.arr[x_320] = x_321;
      int const x_323 = top;
      int const x_324 = as_type<int>((as_type<uint>(x_323) + as_type<uint>(1)));
      top = x_324;
      int const x_325 = p;
      stack.arr[x_324] = as_type<int>((as_type<uint>(x_325) - as_type<uint>(1)));
    }
    int const x_328 = p;
    int const x_330 = h_1;
    if ((as_type<int>((as_type<uint>(x_328) + as_type<uint>(1))) < x_330)) {
      int const x_334 = top;
      int const x_335 = as_type<int>((as_type<uint>(x_334) + as_type<uint>(1)));
      top = x_335;
      int const x_336 = p;
      stack.arr[x_335] = as_type<int>((as_type<uint>(x_336) + as_type<uint>(1)));
      int const x_339 = top;
      int const x_340 = as_type<int>((as_type<uint>(x_339) + as_type<uint>(1)));
      top = x_340;
      int const x_341 = h_1;
      stack.arr[x_340] = x_341;
    }
  }
  return;
}

void main_1(constant buf0& x_34, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12) {
  int i_2 = 0;
  float2 uv = 0.0f;
  float3 color = 0.0f;
  float4 const x_90 = *(tint_symbol_8);
  *(tint_symbol_9) = ((x_90 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
  i_2 = 0;
  while (true) {
    int const x_97 = i_2;
    if ((x_97 < 10)) {
    } else {
      break;
    }
    int const x_100 = i_2;
    int const x_101 = i_2;
    (*(tint_symbol_10)).numbers.arr[x_100] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_101)));
    int const x_104 = i_2;
    int const x_105 = i_2;
    int const x_107 = (*(tint_symbol_10)).numbers.arr[x_105];
    int const x_108 = i_2;
    int const x_110 = (*(tint_symbol_10)).numbers.arr[x_108];
    (*(tint_symbol_10)).numbers.arr[x_104] = as_type<int>((as_type<uint>(x_107) * as_type<uint>(x_110)));
    {
      int const x_113 = i_2;
      i_2 = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
    }
  }
  quicksort_(tint_symbol_10);
  float4 const x_116 = *(tint_symbol_9);
  float2 const x_119 = x_34.resolution;
  uv = (float2(x_116.x, x_116.y) / x_119);
  color = float3(1.0f, 2.0f, 3.0f);
  int const x_122 = (*(tint_symbol_10)).numbers.arr[0];
  float const x_125 = color.x;
  color.x = (x_125 + float(x_122));
  float const x_129 = uv.x;
  if ((x_129 > 0.25f)) {
    int const x_134 = (*(tint_symbol_10)).numbers.arr[1];
    float const x_137 = color.x;
    color.x = (x_137 + float(x_134));
  }
  float const x_141 = uv.x;
  if ((x_141 > 0.5f)) {
    int const x_146 = (*(tint_symbol_10)).numbers.arr[2];
    float const x_149 = color.y;
    color.y = (x_149 + float(x_146));
  }
  float const x_153 = uv.x;
  if ((x_153 > 0.75f)) {
    int const x_158 = (*(tint_symbol_10)).numbers.arr[3];
    float const x_161 = color.z;
    color.z = (x_161 + float(x_158));
  }
  int const x_165 = (*(tint_symbol_10)).numbers.arr[4];
  float const x_168 = color.y;
  color.y = (x_168 + float(x_165));
  float const x_172 = uv.y;
  if ((x_172 > 0.25f)) {
    int const x_177 = (*(tint_symbol_10)).numbers.arr[5];
    float const x_180 = color.x;
    color.x = (x_180 + float(x_177));
  }
  float const x_184 = uv.y;
  if ((x_184 > 0.5f)) {
    int const x_189 = (*(tint_symbol_10)).numbers.arr[6];
    float const x_192 = color.y;
    color.y = (x_192 + float(x_189));
  }
  float const x_196 = uv.y;
  if ((x_196 > 0.75f)) {
    int const x_201 = (*(tint_symbol_10)).numbers.arr[7];
    float const x_204 = color.z;
    color.z = (x_204 + float(x_201));
  }
  int const x_208 = (*(tint_symbol_10)).numbers.arr[8];
  float const x_211 = color.z;
  color.z = (x_211 + float(x_208));
  float const x_215 = uv.x;
  float const x_217 = uv.y;
  if ((fabs((x_215 - x_217)) < 0.25f)) {
    int const x_224 = (*(tint_symbol_10)).numbers.arr[9];
    float const x_227 = color.x;
    color.x = (x_227 + float(x_224));
  }
  float3 const x_230 = color;
  float3 const x_231 = normalize(x_230);
  *(tint_symbol_11) = float4(x_231.x, x_231.y, x_231.z, 1.0f);
  float4 const x_236 = *(tint_symbol_8);
  *(tint_symbol_12) = x_236;
  return;
}

main_out tint_symbol_inner(constant buf0& x_34, float4 x_GLF_pos_param, thread float4* const tint_symbol_13, thread float4* const tint_symbol_14, thread QuicksortObject* const tint_symbol_15, thread float4* const tint_symbol_16, thread float4* const tint_symbol_17) {
  *(tint_symbol_13) = x_GLF_pos_param;
  main_1(x_34, tint_symbol_13, tint_symbol_14, tint_symbol_15, tint_symbol_16, tint_symbol_17);
  main_out const tint_symbol_4 = {.frag_color_1=*(tint_symbol_16), .gl_Position=*(tint_symbol_17)};
  return tint_symbol_4;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf0& x_34 [[buffer(0)]]) {
  thread float4 tint_symbol_18 = 0.0f;
  thread float4 tint_symbol_19 = 0.0f;
  thread QuicksortObject tint_symbol_20 = {};
  thread float4 tint_symbol_21 = 0.0f;
  thread float4 tint_symbol_22 = 0.0f;
  main_out const inner_result = tint_symbol_inner(x_34, tint_symbol_1.x_GLF_pos_param, &(tint_symbol_18), &(tint_symbol_19), &(tint_symbol_20), &(tint_symbol_21), &(tint_symbol_22));
  tint_symbol_3 wrapper_result = {};
  wrapper_result.frag_color_1 = inner_result.frag_color_1;
  wrapper_result.gl_Position = inner_result.gl_Position;
  return wrapper_result;
}

