#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int arr[10];
};
struct QuicksortObject {
  tint_array_wrapper numbers;
};
struct buf1 {
  /* 0x0000 */ packed_float2 resolution;
};
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
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_6) {
  int temp = 0;
  int const x_257 = *(i);
  int const x_259 = (*(tint_symbol_6)).numbers.arr[x_257];
  temp = x_259;
  int const x_260 = *(i);
  int const x_261 = *(j);
  int const x_263 = (*(tint_symbol_6)).numbers.arr[x_261];
  (*(tint_symbol_6)).numbers.arr[x_260] = x_263;
  int const x_265 = *(j);
  int const x_266 = temp;
  (*(tint_symbol_6)).numbers.arr[x_265] = x_266;
  return;
}

int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_7) {
  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_269 = *(h);
  int const x_271 = (*(tint_symbol_7)).numbers.arr[x_269];
  pivot = x_271;
  int const x_272 = *(l);
  i_1 = as_type<int>((as_type<uint>(x_272) - as_type<uint>(1)));
  int const x_274 = *(l);
  j_1 = x_274;
  while (true) {
    int const x_279 = j_1;
    int const x_280 = *(h);
    if ((x_279 <= as_type<int>((as_type<uint>(x_280) - as_type<uint>(1))))) {
    } else {
      break;
    }
    int const x_284 = j_1;
    int const x_286 = (*(tint_symbol_7)).numbers.arr[x_284];
    int const x_287 = pivot;
    if ((x_286 <= x_287)) {
      int const x_291 = i_1;
      i_1 = as_type<int>((as_type<uint>(x_291) + as_type<uint>(1)));
      int const x_293 = i_1;
      param = x_293;
      int const x_294 = j_1;
      param_1 = x_294;
      swap_i1_i1_(&(param), &(param_1), tint_symbol_7);
    }
    {
      int const x_296 = j_1;
      j_1 = as_type<int>((as_type<uint>(x_296) + as_type<uint>(1)));
    }
  }
  int const x_298 = i_1;
  param_2 = as_type<int>((as_type<uint>(x_298) + as_type<uint>(1)));
  int const x_300 = *(h);
  param_3 = x_300;
  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_7);
  int const x_302 = i_1;
  return as_type<int>((as_type<uint>(x_302) + as_type<uint>(1)));
}

void quicksort_(thread QuicksortObject* const tint_symbol_8) {
  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_305 = top;
  int const x_306 = as_type<int>((as_type<uint>(x_305) + as_type<uint>(1)));
  top = x_306;
  int const x_307 = l_1;
  stack.arr[x_306] = x_307;
  int const x_309 = top;
  int const x_310 = as_type<int>((as_type<uint>(x_309) + as_type<uint>(1)));
  top = x_310;
  int const x_311 = h_1;
  stack.arr[x_310] = x_311;
  while (true) {
    int const x_317 = top;
    if ((x_317 >= 0)) {
    } else {
      break;
    }
    int const x_320 = top;
    top = as_type<int>((as_type<uint>(x_320) - as_type<uint>(1)));
    int const x_323 = stack.arr[x_320];
    h_1 = x_323;
    int const x_324 = top;
    top = as_type<int>((as_type<uint>(x_324) - as_type<uint>(1)));
    int const x_327 = stack.arr[x_324];
    l_1 = x_327;
    int const x_328 = l_1;
    param_4 = x_328;
    int const x_329 = h_1;
    param_5 = x_329;
    int const x_330 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_8);
    p = x_330;
    int const x_331 = p;
    int const x_333 = l_1;
    if ((as_type<int>((as_type<uint>(x_331) - as_type<uint>(1))) > x_333)) {
      int const x_337 = top;
      int const x_338 = as_type<int>((as_type<uint>(x_337) + as_type<uint>(1)));
      top = x_338;
      int const x_339 = l_1;
      stack.arr[x_338] = x_339;
      int const x_341 = top;
      int const x_342 = as_type<int>((as_type<uint>(x_341) + as_type<uint>(1)));
      top = x_342;
      int const x_343 = p;
      stack.arr[x_342] = as_type<int>((as_type<uint>(x_343) - as_type<uint>(1)));
    }
    int const x_346 = p;
    int const x_348 = h_1;
    if ((as_type<int>((as_type<uint>(x_346) + as_type<uint>(1))) < x_348)) {
      int const x_352 = top;
      int const x_353 = as_type<int>((as_type<uint>(x_352) + as_type<uint>(1)));
      top = x_353;
      int const x_354 = p;
      stack.arr[x_353] = as_type<int>((as_type<uint>(x_354) + as_type<uint>(1)));
      int const x_357 = top;
      int const x_358 = as_type<int>((as_type<uint>(x_357) + as_type<uint>(1)));
      top = x_358;
      int const x_359 = h_1;
      stack.arr[x_358] = x_359;
    }
  }
  return;
}

void main_1(constant buf1& x_34, constant buf0& x_37, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10, thread QuicksortObject* const tint_symbol_11, thread float4* const tint_symbol_12, thread float4* const tint_symbol_13) {
  int i_2 = 0;
  float2 uv = 0.0f;
  float3 color = 0.0f;
  float4 const x_94 = *(tint_symbol_9);
  *(tint_symbol_10) = ((x_94 + 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_101 = i_2;
    if ((x_101 < 10)) {
    } else {
      break;
    }
    int const x_104 = i_2;
    int const x_105 = i_2;
    (*(tint_symbol_11)).numbers.arr[x_104] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_105)));
    int const x_108 = i_2;
    int const x_109 = i_2;
    int const x_111 = (*(tint_symbol_11)).numbers.arr[x_109];
    int const x_112 = i_2;
    int const x_114 = (*(tint_symbol_11)).numbers.arr[x_112];
    (*(tint_symbol_11)).numbers.arr[x_108] = as_type<int>((as_type<uint>(x_111) * as_type<uint>(x_114)));
    {
      int const x_117 = i_2;
      i_2 = as_type<int>((as_type<uint>(x_117) + as_type<uint>(1)));
    }
  }
  quicksort_(tint_symbol_11);
  float4 const x_120 = *(tint_symbol_10);
  float2 const x_123 = x_34.resolution;
  uv = (float2(x_120.x, x_120.y) / x_123);
  color = float3(1.0f, 2.0f, 3.0f);
  int const x_126 = (*(tint_symbol_11)).numbers.arr[0];
  float const x_129 = color.x;
  color.x = (x_129 + float(x_126));
  float const x_133 = uv.x;
  if ((x_133 > 0.25f)) {
    int const x_138 = (*(tint_symbol_11)).numbers.arr[1];
    float const x_141 = color.x;
    color.x = (x_141 + float(x_138));
  }
  float const x_145 = uv.x;
  if ((x_145 > 0.5f)) {
    float const x_150 = x_37.injectionSwitch.y;
    int const x_155 = (*(tint_symbol_11)).numbers.arr[max(as_type<int>((as_type<uint>(2) * as_type<uint>(int(x_150)))), 2)];
    float const x_158 = x_37.injectionSwitch.y;
    int const x_163 = (*(tint_symbol_11)).numbers.arr[max(as_type<int>((as_type<uint>(2) * as_type<uint>(int(x_158)))), 2)];
    float const x_167 = color.y;
    color.y = (x_167 + fmax(float(x_155), float(x_163)));
  }
  float const x_171 = uv.x;
  if ((x_171 > 0.75f)) {
    int const x_176 = (*(tint_symbol_11)).numbers.arr[3];
    float const x_179 = color.z;
    color.z = (x_179 + float(x_176));
  }
  int const x_183 = (*(tint_symbol_11)).numbers.arr[4];
  float const x_186 = color.y;
  color.y = (x_186 + float(x_183));
  float const x_190 = uv.y;
  if ((x_190 > 0.25f)) {
    int const x_195 = (*(tint_symbol_11)).numbers.arr[5];
    float const x_198 = color.x;
    color.x = (x_198 + float(x_195));
  }
  float const x_202 = uv.y;
  if ((x_202 > 0.5f)) {
    int const x_207 = (*(tint_symbol_11)).numbers.arr[6];
    float const x_210 = color.y;
    color.y = (x_210 + float(x_207));
  }
  float const x_214 = uv.y;
  if ((x_214 > 0.75f)) {
    int const x_219 = (*(tint_symbol_11)).numbers.arr[7];
    float const x_222 = color.z;
    color.z = (x_222 + float(x_219));
  }
  int const x_226 = (*(tint_symbol_11)).numbers.arr[8];
  float const x_229 = color.z;
  color.z = (x_229 + float(x_226));
  float const x_233 = uv.x;
  float const x_235 = uv.y;
  if ((fabs((x_233 - x_235)) < 0.25f)) {
    int const x_242 = (*(tint_symbol_11)).numbers.arr[9];
    float const x_245 = color.x;
    color.x = (x_245 + float(x_242));
  }
  float3 const x_248 = color;
  float3 const x_249 = normalize(x_248);
  *(tint_symbol_12) = float4(x_249.x, x_249.y, x_249.z, 1.0f);
  float4 const x_254 = *(tint_symbol_9);
  *(tint_symbol_13) = x_254;
  return;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf1& x_34 [[buffer(1)]], constant buf0& x_37 [[buffer(0)]]) {
  thread float4 tint_symbol_14 = 0.0f;
  thread float4 tint_symbol_15 = 0.0f;
  thread QuicksortObject tint_symbol_16 = {};
  thread float4 tint_symbol_17 = 0.0f;
  thread float4 tint_symbol_18 = 0.0f;
  float4 const x_GLF_pos_param = tint_symbol_1.x_GLF_pos_param;
  tint_symbol_14 = x_GLF_pos_param;
  main_1(x_34, x_37, &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
  main_out const tint_symbol_4 = {.frag_color_1=tint_symbol_17, .gl_Position=tint_symbol_18};
  tint_symbol_3 const tint_symbol_5 = {.frag_color_1=tint_symbol_4.frag_color_1, .gl_Position=tint_symbol_4.gl_Position};
  return tint_symbol_5;
}

