#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int arr[10];
};
struct QuicksortObject {
  tint_array_wrapper numbers;
};
struct buf0 {
  /* 0x0000 */ float2 resolution;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_81) {
  int temp = 0;
  int const x_932 = temp;
  temp = 0;
  temp = x_932;
  float3 const x_523 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
  int const x_933 = *(i);
  *(i) = 0;
  *(i) = x_933;
  int const x_28 = *(i);
  int const x_934 = *(j);
  *(j) = 0;
  *(j) = x_934;
  float3 const x_524 = float3(x_523[1], x_523[0], x_523[1]);
  int const x_935 = temp;
  temp = 0;
  temp = x_935;
  int const x_30_save = x_28;
  int const x_936 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  (*(tint_symbol_81)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_30_save] = x_936;
  int const x_31 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  int const x_937 = temp;
  temp = 0;
  temp = x_937;
  temp = x_31;
  int const x_938 = *(j);
  *(j) = 0;
  *(j) = x_938;
  float3 const x_525 = float3(x_523[2], float3(1.0f, 2.0f, 3.0f)[0], x_523[1]);
  int const x_939 = *(i);
  *(i) = 0;
  *(i) = x_939;
  int const x_32 = *(i);
  int const x_940 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  (*(tint_symbol_81)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_30_save] = x_940;
  int const x_33 = *(j);
  int const x_941 = *(i);
  *(i) = 0;
  *(i) = x_941;
  float3 const x_526 = float3(x_525[0], x_525[2], x_525[2]);
  int const x_942 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  (*(tint_symbol_81)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_30_save] = x_942;
  int const x_34_save = x_33;
  int const x_35 = (*(tint_symbol_81)).numbers.arr[x_34_save];
  QuicksortObject const x_943 = *(tint_symbol_81);
  tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_3 = {.numbers=tint_symbol_2};
  *(tint_symbol_81) = tint_symbol_3;
  *(tint_symbol_81) = x_943;
  float2 const x_527 = float2(x_526[0], x_526[0]);
  int const x_36_save = x_32;
  float3 const x_528 = float3(x_524[0], x_524[2], x_524[0]);
  (*(tint_symbol_81)).numbers.arr[x_36_save] = x_35;
  QuicksortObject const x_944 = *(tint_symbol_81);
  tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_5 = {.numbers=tint_symbol_4};
  *(tint_symbol_81) = tint_symbol_5;
  *(tint_symbol_81) = x_944;
  float3 const x_529 = float3(x_526[1], x_526[2], x_526[0]);
  int const x_945 = *(i);
  *(i) = 0;
  *(i) = x_945;
  int const x_37 = *(j);
  int const x_946 = temp;
  temp = 0;
  temp = x_946;
  float2 const x_530 = float2(x_529[2], x_529[1]);
  int const x_947 = (*(tint_symbol_81)).numbers.arr[x_34_save];
  (*(tint_symbol_81)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_34_save] = x_947;
  int const x_38 = temp;
  int const x_948 = *(j);
  *(j) = 0;
  *(j) = x_948;
  float3 const x_531 = float3(x_527[0], x_526[1], x_526[0]);
  int const x_949 = (*(tint_symbol_81)).numbers.arr[x_36_save];
  (*(tint_symbol_81)).numbers.arr[x_36_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_36_save] = x_949;
  QuicksortObject const x_950 = *(tint_symbol_81);
  tint_array_wrapper const tint_symbol_6 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_7 = {.numbers=tint_symbol_6};
  *(tint_symbol_81) = tint_symbol_7;
  *(tint_symbol_81) = x_950;
  float3 const x_532 = float3(x_528[0], x_528[1], x_528[0]);
  int const x_951 = (*(tint_symbol_81)).numbers.arr[x_34_save];
  (*(tint_symbol_81)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_34_save] = x_951;
  (*(tint_symbol_81)).numbers.arr[x_37] = x_38;
  return;
}

int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_82) {
  int param_3 = 0;
  int i_1 = 0;
  int j_1 = 0;
  int param_2 = 0;
  int param_1 = 0;
  int param = 0;
  int pivot = 0;
  float2 x_537 = 0.0f;
  float3 x_538 = 0.0f;
  int const x_952 = *(h);
  *(h) = 0;
  *(h) = x_952;
  int const x_41 = *(h);
  int const x_953 = *(l);
  *(l) = 0;
  *(l) = x_953;
  int const x_42_save = x_41;
  int const x_954 = (*(tint_symbol_82)).numbers.arr[x_42_save];
  (*(tint_symbol_82)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_82)).numbers.arr[x_42_save] = x_954;
  int const x_43 = (*(tint_symbol_82)).numbers.arr[x_42_save];
  int const x_955 = param_3;
  param_3 = 0;
  param_3 = x_955;
  float3 const x_534 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[2]);
  int const x_956 = param_1;
  param_1 = 0;
  param_1 = x_956;
  pivot = x_43;
  int const x_45 = *(l);
  int const x_957 = *(h);
  *(h) = 0;
  *(h) = x_957;
  int const x_958 = j_1;
  j_1 = 0;
  j_1 = x_958;
  float3 const x_535 = float3(x_534[1], x_534[2], x_534[1]);
  int const x_959 = *(l);
  *(l) = 0;
  *(l) = x_959;
  i_1 = as_type<int>((as_type<uint>(x_45) - as_type<uint>(as_type<int>(1u))));
  int const x_49 = *(l);
  float3 const x_536 = float3(x_534[0], x_534[2], x_535[0]);
  j_1 = 10;
  QuicksortObject const x_960 = *(tint_symbol_82);
  tint_array_wrapper const tint_symbol_8 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_9 = {.numbers=tint_symbol_8};
  *(tint_symbol_82) = tint_symbol_9;
  *(tint_symbol_82) = x_960;
  while (true) {
    int const x_961 = pivot;
    pivot = 0;
    pivot = x_961;
    int const x_962 = param_1;
    param_1 = 0;
    param_1 = x_962;
    int const x_55 = j_1;
    int const x_963 = pivot;
    pivot = 0;
    pivot = x_963;
    x_537 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
    QuicksortObject const x_964 = *(tint_symbol_82);
    tint_array_wrapper const tint_symbol_10 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_11 = {.numbers=tint_symbol_10};
    *(tint_symbol_82) = tint_symbol_11;
    *(tint_symbol_82) = x_964;
    int const x_56 = *(h);
    int const x_965 = *(h);
    *(h) = 0;
    *(h) = x_965;
    int const x_966 = param;
    param = 0;
    param = x_966;
    int const x_967 = j_1;
    j_1 = 0;
    j_1 = x_967;
    x_538 = float3(x_534[0], x_537[1], x_534[2]);
    int const x_968 = param;
    param = 0;
    param = x_968;
    if ((x_55 <= as_type<int>((as_type<uint>(x_56) - as_type<uint>(as_type<int>(1u)))))) {
    } else {
      break;
    }
    int const x_60 = j_1;
    int const x_969 = (*(tint_symbol_82)).numbers.arr[x_42_save];
    (*(tint_symbol_82)).numbers.arr[x_42_save] = 0;
    (*(tint_symbol_82)).numbers.arr[x_42_save] = x_969;
    int const x_61_save = x_60;
    int const x_970 = *(h);
    *(h) = 0;
    *(h) = x_970;
    float3 const x_539 = float3(x_537[0], x_535[2], x_537[0]);
    int const x_971 = param_1;
    param_1 = 0;
    param_1 = x_971;
    int const x_62 = (*(tint_symbol_82)).numbers.arr[x_61_save];
    QuicksortObject const x_972 = *(tint_symbol_82);
    tint_array_wrapper const tint_symbol_12 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_13 = {.numbers=tint_symbol_12};
    *(tint_symbol_82) = tint_symbol_13;
    *(tint_symbol_82) = x_972;
    int const x_63 = pivot;
    float2 const x_540 = float2(float3(1.0f, 2.0f, 3.0f)[1], x_534[2]);
    int const x_973 = i_1;
    i_1 = 0;
    i_1 = x_973;
    int const x_974 = *(l);
    *(l) = 0;
    *(l) = x_974;
    float3 const x_541 = float3(x_534[1], x_534[0], x_534[1]);
    int const x_975 = pivot;
    pivot = 0;
    pivot = x_975;
    if ((x_62 <= x_63)) {
      float3 const x_542 = float3(x_541[2], x_541[0], x_541[0]);
      int const x_976 = param_3;
      param_3 = 0;
      param_3 = x_976;
      int const x_67 = i_1;
      int const x_977 = pivot;
      pivot = 0;
      pivot = x_977;
      float2 const x_543 = float2(x_539[0], x_541[1]);
      int const x_978 = i_1;
      i_1 = 0;
      i_1 = x_978;
      int const x_979 = param;
      param = 0;
      param = x_979;
      i_1 = as_type<int>((as_type<uint>(x_67) + as_type<uint>(as_type<int>(1u))));
      int const x_980 = *(l);
      *(l) = 0;
      *(l) = x_980;
      float3 const x_544 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1], x_540[0]);
      int const x_70 = i_1;
      float2 const x_545 = float2(x_537[1], x_538[0]);
      int const x_981 = param;
      param = 0;
      param = x_981;
      param = x_70;
      int const x_982 = param;
      param = 0;
      param = x_982;
      float2 const x_546 = float2(x_545[0], x_545[0]);
      int const x_983 = i_1;
      i_1 = 0;
      i_1 = x_983;
      int const x_72 = j_1;
      param_1 = x_72;
      int const x_984 = param_3;
      param_3 = 0;
      param_3 = x_984;
      swap_i1_i1_(&(param), &(param_1), tint_symbol_82);
      int const x_985 = param_1;
      param_1 = 0;
      param_1 = x_985;
    }
    QuicksortObject const x_986 = *(tint_symbol_82);
    tint_array_wrapper const tint_symbol_14 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_15 = {.numbers=tint_symbol_14};
    *(tint_symbol_82) = tint_symbol_15;
    *(tint_symbol_82) = x_986;
    {
      int const x_987 = *(h);
      *(h) = 0;
      *(h) = x_987;
      int const x_74 = j_1;
      int const x_988 = *(h);
      *(h) = 0;
      *(h) = x_988;
      float3 const x_547 = float3(x_539[0], x_541[2], x_541[2]);
      int const x_989 = (*(tint_symbol_82)).numbers.arr[x_61_save];
      (*(tint_symbol_82)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_82)).numbers.arr[x_61_save] = x_989;
      int const x_990 = param;
      param = 0;
      param = x_990;
      j_1 = as_type<int>((as_type<uint>(1) + as_type<uint>(x_74)));
      int const x_991 = param_1;
      param_1 = 0;
      param_1 = x_991;
      float3 const x_548 = float3(x_541[1], x_541[2], x_541[0]);
      int const x_992 = (*(tint_symbol_82)).numbers.arr[x_61_save];
      (*(tint_symbol_82)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_82)).numbers.arr[x_61_save] = x_992;
    }
  }
  int const x_76 = i_1;
  int const x_993 = (*(tint_symbol_82)).numbers.arr[x_42_save];
  (*(tint_symbol_82)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_82)).numbers.arr[x_42_save] = x_993;
  float2 const x_549 = float2(x_534[0], x_534[1]);
  QuicksortObject const x_994 = *(tint_symbol_82);
  tint_array_wrapper const tint_symbol_16 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_17 = {.numbers=tint_symbol_16};
  *(tint_symbol_82) = tint_symbol_17;
  *(tint_symbol_82) = x_994;
  int const x_995 = *(h);
  *(h) = 0;
  *(h) = x_995;
  i_1 = as_type<int>((as_type<uint>(1) + as_type<uint>(x_76)));
  int const x_996 = param_1;
  param_1 = 0;
  param_1 = x_996;
  int const x_79 = i_1;
  int const x_997 = j_1;
  j_1 = 0;
  j_1 = x_997;
  float2 const x_550 = float2(x_534[0], x_534[0]);
  int const x_998 = param_1;
  param_1 = 0;
  param_1 = x_998;
  param_2 = x_79;
  float2 const x_551 = float2(x_534[1], x_536[0]);
  int const x_999 = pivot;
  pivot = 0;
  pivot = x_999;
  int const x_81 = *(h);
  float2 const x_552 = float2(x_550[0], x_549[1]);
  int const x_1000 = *(h);
  *(h) = 0;
  *(h) = x_1000;
  param_3 = x_81;
  int const x_1001 = i_1;
  i_1 = 0;
  i_1 = x_1001;
  float2 const x_553 = float2(x_549[1], x_552[0]);
  int const x_1002 = *(h);
  *(h) = 0;
  *(h) = x_1002;
  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_82);
  int const x_1003 = *(l);
  *(l) = 0;
  *(l) = x_1003;
  float2 const x_554 = float2(x_536[2], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_1004 = param_1;
  param_1 = 0;
  param_1 = x_1004;
  int const x_83 = i_1;
  int const x_1005 = param;
  param = 0;
  param = x_1005;
  float2 const x_555 = float2(x_534[1], x_534[0]);
  int const x_1006 = j_1;
  j_1 = 0;
  j_1 = x_1006;
  return x_83;
}

void quicksort_(thread QuicksortObject* const tint_symbol_83) {
  int param_4 = 0;
  int h_1 = 0;
  int p = 0;
  int l_1 = 0;
  int top = 0;
  tint_array_wrapper stack = {};
  int param_5 = 0;
  l_1 = 0;
  int const x_1007 = param_5;
  param_5 = 0;
  param_5 = x_1007;
  h_1 = 9;
  tint_array_wrapper const x_1008 = stack;
  tint_array_wrapper const tint_symbol_18 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_18;
  stack = x_1008;
  float2 const x_556 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_1009 = param_5;
  param_5 = 0;
  param_5 = x_1009;
  top = -1;
  int const x_1010 = p;
  p = 0;
  p = x_1010;
  int const x_93 = top;
  float2 const x_557 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[0]);
  int const x_1011 = p;
  p = 0;
  p = x_1011;
  int const x_94 = as_type<int>((as_type<uint>(x_93) + as_type<uint>(as_type<int>(1u))));
  int const x_1012 = top;
  top = 0;
  top = x_1012;
  float2 const x_558 = float2(x_556[1], x_557[1]);
  int const x_1013 = param_4;
  param_4 = 0;
  param_4 = x_1013;
  top = x_94;
  int const x_1014 = h_1;
  h_1 = 0;
  h_1 = x_1014;
  float3 const x_559 = float3(x_557[1], x_557[0], x_557[0]);
  int const x_1015 = param_4;
  param_4 = 0;
  param_4 = x_1015;
  int const x_95 = l_1;
  QuicksortObject const x_1016 = *(tint_symbol_83);
  tint_array_wrapper const tint_symbol_19 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_20 = {.numbers=tint_symbol_19};
  *(tint_symbol_83) = tint_symbol_20;
  *(tint_symbol_83) = x_1016;
  float3 const x_560 = float3(x_559[1], x_559[0], x_557[0]);
  int const x_96_save = x_94;
  tint_array_wrapper const x_1017 = stack;
  tint_array_wrapper const tint_symbol_21 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_21;
  stack = x_1017;
  float3 const x_561 = float3(x_556[1], x_556[1], x_556[1]);
  int const x_1018 = l_1;
  l_1 = 0;
  l_1 = 0;
  stack.arr[x_96_save] = x_95;
  int const x_1019 = param_5;
  param_5 = 0;
  param_5 = x_1019;
  int const x_97 = top;
  int const x_1020 = param_4;
  param_4 = 0;
  param_4 = x_1020;
  float3 const x_562 = float3(float3(1.0f, 2.0f, 3.0f)[2], x_558[1], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_1021 = stack.arr[x_96_save];
  stack.arr[x_96_save] = 0;
  stack.arr[x_96_save] = x_1021;
  int const x_98 = as_type<int>((as_type<uint>(x_97) + as_type<uint>(1)));
  int const x_1022 = stack.arr[x_96_save];
  stack.arr[x_96_save] = 0;
  stack.arr[x_96_save] = x_1022;
  float3 const x_563 = float3(x_559[0], x_559[2], x_556[1]);
  top = x_98;
  int const x_1023 = param_4;
  param_4 = 0;
  param_4 = x_1023;
  int const x_99 = h_1;
  int const x_1024 = param_4;
  param_4 = 0;
  param_4 = x_1024;
  float3 const x_564 = float3(x_558[0], x_561[0], x_558[1]);
  int const x_1025 = l_1;
  l_1 = 0;
  l_1 = x_1025;
  int const x_100_save = x_98;
  int const x_1026 = param_5;
  param_5 = 0;
  param_5 = x_1026;
  float2 const x_565 = float2(x_564[2], x_564[2]);
  int const x_1027 = p;
  p = 0;
  p = x_1027;
  stack.arr[x_100_save] = x_99;
  while (true) {
    float3 const x_566 = float3(x_563[0], x_563[0], x_563[0]);
    int const x_1028 = h_1;
    h_1 = 0;
    h_1 = x_1028;
    tint_array_wrapper const x_1029 = stack;
    tint_array_wrapper const tint_symbol_22 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_22;
    stack = x_1029;
    int const x_106 = top;
    tint_array_wrapper const x_1030 = stack;
    tint_array_wrapper const tint_symbol_23 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_23;
    stack = x_1030;
    float2 const x_567 = float2(x_558[0], x_564[2]);
    int const x_1031 = param_4;
    param_4 = 0;
    param_4 = x_1031;
    if ((x_106 >= as_type<int>(0u))) {
    } else {
      break;
    }
    QuicksortObject const x_1032 = *(tint_symbol_83);
    tint_array_wrapper const tint_symbol_24 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_25 = {.numbers=tint_symbol_24};
    *(tint_symbol_83) = tint_symbol_25;
    *(tint_symbol_83) = x_1032;
    float3 const x_568 = float3(x_559[1], x_559[0], x_563[1]);
    int const x_1033 = param_4;
    param_4 = 0;
    param_4 = x_1033;
    int const x_108 = top;
    float3 const x_569 = float3(x_565[0], x_567[1], x_565[0]);
    int const x_1034 = h_1;
    h_1 = 0;
    h_1 = x_1034;
    float2 const x_570 = float2(x_556[0], x_556[0]);
    int const x_1035 = p;
    p = 0;
    p = x_1035;
    top = as_type<int>((as_type<uint>(x_108) - as_type<uint>(as_type<int>(1u))));
    int const x_1036 = p;
    p = 0;
    p = x_1036;
    int const x_110_save = x_108;
    int const x_1037 = stack.arr[x_96_save];
    stack.arr[x_96_save] = 0;
    stack.arr[x_96_save] = x_1037;
    int const x_111 = stack.arr[x_110_save];
    tint_array_wrapper const x_1038 = stack;
    tint_array_wrapper const tint_symbol_26 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_26;
    stack = x_1038;
    float3 const x_571 = float3(x_559[1], x_559[0], x_564[1]);
    int const x_1039 = l_1;
    l_1 = 0;
    l_1 = x_1039;
    h_1 = x_111;
    tint_array_wrapper const x_1040 = stack;
    tint_array_wrapper const tint_symbol_27 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_27;
    stack = x_1040;
    float2 const x_572 = float2(x_562[1], x_561[1]);
    int const x_1041 = p;
    p = 0;
    p = x_1041;
    int const x_112 = top;
    int const x_1042 = param_4;
    param_4 = 0;
    param_4 = x_1042;
    int const x_1043 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1043;
    float2 const x_573 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
    top = as_type<int>((as_type<uint>(x_112) - as_type<uint>(1)));
    int const x_1044 = param_5;
    param_5 = 0;
    param_5 = x_1044;
    float3 const x_574 = float3(x_570[1], x_565[0], x_570[1]);
    int const x_1045 = h_1;
    h_1 = 0;
    h_1 = x_1045;
    int const x_114_save = x_112;
    float2 const x_575 = float2(x_564[1], x_564[2]);
    int const x_1046 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1046;
    int const x_115 = stack.arr[x_114_save];
    int const x_1047 = p;
    p = 0;
    p = x_1047;
    float3 const x_576 = float3(x_573[1], x_573[1], x_565[0]);
    int const x_1048 = param_5;
    param_5 = 0;
    param_5 = x_1048;
    l_1 = x_115;
    int const x_1049 = top;
    top = 0;
    top = x_1049;
    int const x_118 = l_1;
    param_4 = x_118;
    int const x_1050 = stack.arr[x_110_save];
    stack.arr[x_110_save] = 0;
    stack.arr[x_110_save] = x_1050;
    float2 const x_577 = float2(x_569[1], x_569[2]);
    int const x_120 = h_1;
    float2 const x_578 = float2(x_558[0], float3(1.0f, 2.0f, 3.0f)[1]);
    param_5 = x_120;
    int const x_1051 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1051;
    int const x_121 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_83);
    float2 const x_579 = float2(x_567[0], x_568[0]);
    int const x_1052 = param_5;
    param_5 = 0;
    param_5 = x_1052;
    p = x_121;
    int const x_1053 = param_4;
    param_4 = 0;
    param_4 = x_1053;
    int const x_122 = p;
    int const x_1054 = h_1;
    h_1 = 0;
    h_1 = x_1054;
    float2 const x_580 = float2(x_568[1], x_568[1]);
    int const x_1055 = l_1;
    l_1 = 0;
    l_1 = x_1055;
    int const x_1056 = h_1;
    h_1 = 0;
    h_1 = x_1056;
    int const x_124 = l_1;
    int const x_1057 = stack.arr[x_110_save];
    stack.arr[x_110_save] = 0;
    stack.arr[x_110_save] = x_1057;
    int const x_1058 = h_1;
    h_1 = 0;
    h_1 = x_1058;
    float2 const x_582 = float2(x_567[1], x_573[0]);
    int const x_1059 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1059;
    if ((as_type<int>((as_type<uint>(x_122) - as_type<uint>(as_type<int>(1u)))) > x_124)) {
      int const x_1060 = param_4;
      param_4 = 0;
      param_4 = x_1060;
      int const x_128 = top;
      float2 const x_583 = float2(x_571[1], x_556[1]);
      int const x_1061 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1061;
      tint_array_wrapper const x_1062 = stack;
      tint_array_wrapper const tint_symbol_28 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_28;
      stack = x_1062;
      float2 const x_584 = float2(x_569[2], x_569[1]);
      float3 const x_585 = float3(x_580[1], x_577[0], x_577[0]);
      int const x_130 = l_1;
      int const x_1063 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1063;
      float2 const x_586 = float2(x_564[0], x_585[0]);
      int const x_1064 = param_5;
      param_5 = 0;
      param_5 = x_1064;
      int const x_131_save = as_type<int>((as_type<uint>(1) + as_type<uint>(x_128)));
      int const x_1065 = stack.arr[x_110_save];
      stack.arr[x_110_save] = 0;
      stack.arr[x_110_save] = x_1065;
      float3 const x_587 = float3(x_566[1], x_566[1], x_563[0]);
      int const x_1066 = param_5;
      param_5 = 0;
      param_5 = x_1066;
      stack.arr[x_131_save] = x_130;
      int const x_132 = top;
      int const x_1067 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1067;
      float2 const x_588 = float2(x_575[1], x_575[0]);
      int const x_1068 = stack.arr[x_131_save];
      stack.arr[x_131_save] = 0;
      stack.arr[x_131_save] = x_1068;
      int const x_133 = as_type<int>((1u + as_type<uint>(x_132)));
      int const x_1069 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1069;
      float3 const x_589 = float3(x_576[2], x_588[1], x_576[2]);
      int const x_1070 = h_1;
      h_1 = 0;
      h_1 = x_1070;
      top = x_133;
      tint_array_wrapper const x_1071 = stack;
      tint_array_wrapper const tint_symbol_29 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_29;
      stack = x_1071;
      int const x_134 = p;
      float2 const x_590 = float2(x_576[0], x_573[1]);
      int const x_1072 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1072;
      int const x_136_save = x_133;
      int const x_1073 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1073;
      stack.arr[x_136_save] = as_type<int>((as_type<uint>(x_134) - as_type<uint>(as_type<int>(1u))));
      int const x_1074 = stack.arr[x_96_save];
      stack.arr[x_96_save] = 0;
      stack.arr[x_96_save] = x_1074;
      float2 const x_591 = float2(x_569[2], x_569[1]);
      int const x_1075 = stack.arr[x_136_save];
      stack.arr[x_136_save] = 0;
      stack.arr[x_136_save] = x_1075;
    }
    int const x_1076 = stack.arr[x_96_save];
    stack.arr[x_96_save] = 0;
    stack.arr[x_96_save] = x_1076;
    float2 const x_592 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[1]);
    QuicksortObject const x_1077 = *(tint_symbol_83);
    tint_array_wrapper const tint_symbol_30 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_31 = {.numbers=tint_symbol_30};
    *(tint_symbol_83) = tint_symbol_31;
    *(tint_symbol_83) = x_1077;
    int const x_137 = p;
    int const x_1078 = stack.arr[x_114_save];
    stack.arr[x_114_save] = 0;
    stack.arr[x_114_save] = x_1078;
    float3 const x_593 = float3(x_571[2], x_556[0], x_556[1]);
    int const x_1079 = p;
    p = 0;
    p = x_1079;
    float3 const x_594 = float3(x_563[2], x_563[0], x_575[0]);
    int const x_1080 = stack.arr[x_114_save];
    stack.arr[x_114_save] = 0;
    stack.arr[x_114_save] = x_1080;
    int const x_139 = h_1;
    int const x_1081 = top;
    top = 0;
    top = x_1081;
    float3 const x_595 = float3(x_560[2], x_568[0], x_560[0]);
    int const x_1082 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1082;
    int const x_1083 = p;
    p = 0;
    p = x_1083;
    if ((as_type<int>((1u + as_type<uint>(x_137))) < x_139)) {
      int const x_1084 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1084;
      float2 const x_596 = float2(x_592[1], x_582[0]);
      int const x_1085 = l_1;
      l_1 = 0;
      l_1 = x_1085;
      int const x_143 = top;
      int const x_1086 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1086;
      float3 const x_597 = float3(x_562[1], x_560[1], x_560[1]);
      int const x_144 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
      int const x_1087 = param_5;
      param_5 = 0;
      param_5 = x_1087;
      top = x_144;
      int const x_1088 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1088;
      int const x_145 = p;
      int const x_1089 = param_5;
      param_5 = 0;
      param_5 = x_1089;
      float3 const x_599 = float3(x_560[2], x_560[0], x_568[0]);
      int const x_1090 = p;
      p = 0;
      p = x_1090;
      float3 const x_600 = float3(x_556[0], x_580[0], x_580[0]);
      int const x_1091 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1091;
      int const x_147_save = x_144;
      int const x_1092 = stack.arr[x_110_save];
      stack.arr[x_110_save] = 0;
      stack.arr[x_110_save] = x_1092;
      float2 const x_601 = float2(x_563[0], x_563[1]);
      stack.arr[x_147_save] = as_type<int>((1u + as_type<uint>(x_145)));
      tint_array_wrapper const x_1093 = stack;
      tint_array_wrapper const tint_symbol_32 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_32;
      stack = x_1093;
      int const x_148 = top;
      int const x_1094 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1094;
      float2 const x_602 = float2(x_565[1], x_599[1]);
      tint_array_wrapper const x_1095 = stack;
      tint_array_wrapper const tint_symbol_33 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_33;
      stack = x_1095;
      int const x_149 = as_type<int>((as_type<uint>(x_148) + as_type<uint>(as_type<int>(1u))));
      int const x_1096 = stack.arr[x_147_save];
      stack.arr[x_147_save] = 0;
      stack.arr[x_147_save] = x_1096;
      top = x_149;
      int const x_1097 = param_4;
      param_4 = 0;
      param_4 = x_1097;
      int const x_150 = h_1;
      int const x_1098 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1098;
      int const x_1099 = stack.arr[x_96_save];
      stack.arr[x_96_save] = 0;
      stack.arr[x_96_save] = x_1099;
      stack.arr[x_149] = x_150;
      int const x_1100 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1100;
      float3 const x_603 = float3(x_568[1], x_564[0], x_564[0]);
      int const x_1101 = l_1;
      l_1 = 0;
      l_1 = x_1101;
    }
    int const x_1102 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1102;
    {
      int const x_1103 = l_1;
      l_1 = 0;
      l_1 = x_1103;
      float2 const x_604 = float2(x_563[2], x_564[0]);
      QuicksortObject const x_1104 = *(tint_symbol_83);
      tint_array_wrapper const tint_symbol_34 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      QuicksortObject const tint_symbol_35 = {.numbers=tint_symbol_34};
      *(tint_symbol_83) = tint_symbol_35;
      *(tint_symbol_83) = x_1104;
    }
  }
  int const x_1105 = h_1;
  h_1 = 0;
  h_1 = x_1105;
  return;
}

void main_1(constant buf0& x_188, thread QuicksortObject* const tint_symbol_84, thread float4* const tint_symbol_85, thread float4* const tint_symbol_86) {
  float3 color = 0.0f;
  int i_2 = 0;
  float2 uv = 0.0f;
  float2 const x_717 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_717;
  i_2 = 0;
  QuicksortObject const x_721 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_36 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_37 = {.numbers=tint_symbol_36};
  *(tint_symbol_84) = tint_symbol_37;
  *(tint_symbol_84) = x_721;
  if (true) {
    QuicksortObject const x_722 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_38 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_39 = {.numbers=tint_symbol_38};
    *(tint_symbol_84) = tint_symbol_39;
    *(tint_symbol_84) = x_722;
    float2 const x_431 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[0]);
    int const x_158 = i_2;
    float2 const x_723 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_723;
    float3 const x_725 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_725;
    float2 const x_432 = float2(x_431[1], x_431[1]);
    QuicksortObject const x_726 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_40 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_41 = {.numbers=tint_symbol_40};
    *(tint_symbol_84) = tint_symbol_41;
    *(tint_symbol_84) = x_726;
  }
  QuicksortObject const x_756 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_42 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_43 = {.numbers=tint_symbol_42};
  *(tint_symbol_84) = tint_symbol_43;
  *(tint_symbol_84) = x_756;
  float2 const x_446 = float2(float2(0.0f, 0.0f)[0], float2(0.0f, 0.0f)[0]);
  int const x_757 = i_2;
  i_2 = 0;
  i_2 = x_757;
  quicksort_(tint_symbol_84);
  QuicksortObject const x_758 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_44 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_45 = {.numbers=tint_symbol_44};
  *(tint_symbol_84) = tint_symbol_45;
  *(tint_symbol_84) = x_758;
  float4 const x_184 = *(tint_symbol_85);
  float2 const x_759 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_759;
  float2 const x_447 = float2(float2(0.0f, 0.0f)[1], float2(0.0f, 0.0f)[1]);
  float2 const x_760 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_760;
  float2 const x_185 = float2(x_184[0], x_184[1]);
  float3 const x_448 = float3(x_185[1], x_446[1], x_446[1]);
  QuicksortObject const x_761 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_46 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_47 = {.numbers=tint_symbol_46};
  *(tint_symbol_84) = tint_symbol_47;
  *(tint_symbol_84) = x_761;
  float2 const x_762 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_762;
  float2 const x_191 = x_188.resolution;
  QuicksortObject const x_763 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_48 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_49 = {.numbers=tint_symbol_48};
  *(tint_symbol_84) = tint_symbol_49;
  *(tint_symbol_84) = x_763;
  float3 const x_449 = float3(x_184[1], float3(1.0f, 2.0f, 3.0f)[2], x_184[3]);
  float3 const x_764 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_764;
  float2 const x_192 = (x_185 / x_191);
  QuicksortObject const x_765 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_50 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_51 = {.numbers=tint_symbol_50};
  *(tint_symbol_84) = tint_symbol_51;
  *(tint_symbol_84) = x_765;
  float2 const x_450 = float2(x_447[0], x_185[1]);
  float3 const x_766 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  float3 const x_767 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_767;
  color = x_766;
  uv = x_192;
  color = float3(1.0f, 2.0f, 3.0f);
  float3 const x_768 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_768;
  float3 const x_451 = float3(x_185[0], x_185[1], x_446[1]);
  QuicksortObject const x_769 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_52 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_53 = {.numbers=tint_symbol_52};
  *(tint_symbol_84) = tint_symbol_53;
  *(tint_symbol_84) = x_769;
  int const x_770 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_770;
  int const x_201 = (*(tint_symbol_84)).numbers.arr[0u];
  QuicksortObject const x_771 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_54 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_55 = {.numbers=tint_symbol_54};
  *(tint_symbol_84) = tint_symbol_55;
  *(tint_symbol_84) = x_771;
  int const x_772 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_772;
  float const x_206 = color[0];
  float const x_773 = color[0];
  color[0] = 0.0f;
  color[0] = x_773;
  float2 const x_452 = float2(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_774 = i_2;
  i_2 = 0;
  i_2 = x_774;
  QuicksortObject const x_775 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_56 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_57 = {.numbers=tint_symbol_56};
  *(tint_symbol_84) = tint_symbol_57;
  *(tint_symbol_84) = x_775;
  float3 const x_453 = float3(x_451[0], x_450[0], x_450[1]);
  color[0] = (x_206 + float(x_201));
  float2 const x_776 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_776;
  float2 const x_777 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_777;
  float2 const x_454 = float2(x_184[1], x_184[1]);
  float const x_210 = uv[0];
  float2 const x_455 = float2(x_192[1], x_192[0]);
  float const x_778 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_778;
  QuicksortObject const x_779 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_58 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_59 = {.numbers=tint_symbol_58};
  *(tint_symbol_84) = tint_symbol_59;
  *(tint_symbol_84) = x_779;
  if ((x_210 > 0.25f)) {
    int const x_780 = i_2;
    i_2 = 0;
    i_2 = x_780;
    int const x_781 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_781;
    float3 const x_456 = float3(float2(0.0f, 0.0f)[1], x_448[1], x_448[1]);
    float const x_782 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_782;
    int const x_216 = (*(tint_symbol_84)).numbers.arr[1];
    QuicksortObject const x_783 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_60 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_61 = {.numbers=tint_symbol_60};
    *(tint_symbol_84) = tint_symbol_61;
    *(tint_symbol_84) = x_783;
    float2 const x_457 = float2(x_454[0], x_454[0]);
    float2 const x_784 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_784;
    QuicksortObject const x_785 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_62 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_63 = {.numbers=tint_symbol_62};
    *(tint_symbol_84) = tint_symbol_63;
    *(tint_symbol_84) = x_785;
    float2 const x_458 = float2(float3(1.0f, 2.0f, 3.0f)[2], float2(0.0f, 0.0f)[1]);
    int const x_786 = i_2;
    i_2 = 0;
    i_2 = x_786;
    float const x_219 = color[0];
    float const x_787 = color[0];
    color[0] = 0.0f;
    color[0] = x_787;
    float3 const x_788 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_788;
    float3 const x_789 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_789;
    float3 const x_459 = float3(x_454[1], x_454[1], x_447[1]);
    float const x_790 = color[0];
    color[0] = 0.0f;
    color[0] = x_790;
    color[0] = (float(x_216) + x_219);
    int const x_791 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_791;
  }
  float const x_792 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_792;
  float const x_793 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_793;
  float const x_223 = uv[0];
  float const x_794 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_794;
  float3 const x_460 = float3(x_453[2], x_453[1], x_453[1]);
  float2 const x_795 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_795;
  float const x_796 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_796;
  float2 const x_461 = float2(float2(0.0f, 0.0f)[1], float2(0.0f, 0.0f)[1]);
  float const x_797 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_797;
  if ((x_223 > 0.5f)) {
    float const x_798 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_798;
    float2 const x_462 = float2(x_446[0], x_446[0]);
    float const x_799 = color[0];
    color[0] = 0.0f;
    color[0] = x_799;
    float const x_800 = color[0];
    color[0] = 0.0f;
    color[0] = x_800;
    float3 const x_463 = float3(x_453[0], x_453[2], x_461[1]);
    float const x_801 = color[0];
    color[0] = 0.0f;
    color[0] = x_801;
    int const x_230 = (*(tint_symbol_84)).numbers.arr[2u];
    float const x_802 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_802;
    float const x_803 = color[0];
    color[0] = 0.0f;
    color[0] = x_803;
    int const x_804 = (*(tint_symbol_84)).numbers.arr[2u];
    (*(tint_symbol_84)).numbers.arr[2u] = 0;
    (*(tint_symbol_84)).numbers.arr[2u] = x_804;
    float2 const x_464 = float2(x_450[1], x_191[0]);
    float const x_805 = color[1];
    color[1] = 0.0f;
    color[1] = x_805;
    float const x_234 = color[1];
    int const x_806 = (*(tint_symbol_84)).numbers.arr[2u];
    (*(tint_symbol_84)).numbers.arr[2u] = 0;
    (*(tint_symbol_84)).numbers.arr[2u] = x_806;
    float2 const x_465 = float2(x_463[0], x_185[0]);
    float const x_807 = color[0];
    color[0] = 0.0f;
    color[0] = x_807;
    int const x_808 = i_2;
    i_2 = 0;
    i_2 = x_808;
    float2 const x_466 = float2(x_455[1], float2(0.0f, 0.0f)[1]);
    int const x_809 = i_2;
    i_2 = 0;
    i_2 = x_809;
    color[1] = (float(x_230) + x_234);
    float const x_810 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_810;
  }
  int const x_811 = i_2;
  i_2 = 0;
  i_2 = x_811;
  float2 const x_467 = float2(x_191[0], x_191[0]);
  float const x_812 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_812;
  float const x_238 = uv[0];
  float3 const x_813 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_813;
  float const x_814 = color[0];
  color[0] = 0.0f;
  color[0] = x_814;
  if ((x_238 > 0.75f)) {
    float const x_815 = color[0];
    color[0] = 0.0f;
    color[0] = x_815;
    int const x_245 = (*(tint_symbol_84)).numbers.arr[3];
    float const x_816 = color[0];
    color[0] = 0.0f;
    color[0] = x_816;
    QuicksortObject const x_817 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_64 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_65 = {.numbers=tint_symbol_64};
    *(tint_symbol_84) = tint_symbol_65;
    *(tint_symbol_84) = x_817;
    float3 const x_468 = float3(x_467[0], x_467[0], x_467[0]);
    float const x_818 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_818;
    float const x_819 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_819;
    float const x_249 = color[2];
    float3 const x_820 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_820;
    float3 const x_469 = float3(x_467[0], x_191[1], x_467[1]);
    float const x_821 = color[2];
    color[2] = 0.0f;
    color[2] = x_821;
    int const x_822 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_822;
    float2 const x_470 = float2(float2(0.0f, 0.0f)[0], float2(0.0f, 0.0f)[1]);
    float const x_823 = color[2];
    color[2] = 0.0f;
    color[2] = x_823;
    color[2] = (x_249 + float(x_245));
    float2 const x_824 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_824;
    float2 const x_471 = float2(x_470[1], x_470[1]);
  }
  float const x_825 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_825;
  float3 const x_472 = float3(x_454[0], x_454[1], x_454[1]);
  int const x_254 = (*(tint_symbol_84)).numbers.arr[4];
  float const x_826 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_826;
  float3 const x_827 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_827;
  float3 const x_473 = float3(x_446[1], x_453[0], x_453[0]);
  int const x_828 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_828;
  float2 const x_474 = float2(x_191[0], x_184[2]);
  float const x_829 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_829;
  float const x_257 = color[1];
  float const x_830 = color[1];
  color[1] = 0.0f;
  color[1] = x_830;
  float2 const x_475 = float2(x_467[0], x_450[0]);
  float const x_831 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_831;
  float const x_832 = color[0];
  color[0] = 0.0f;
  color[0] = x_832;
  float2 const x_476 = float2(x_451[2], x_460[1]);
  color[1] = (x_257 + float(x_254));
  float3 const x_477 = float3(float2(0.0f, 0.0f)[0], x_472[0], float2(0.0f, 0.0f)[1]);
  float const x_833 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_833;
  float const x_834 = color[0];
  color[0] = 0.0f;
  color[0] = x_834;
  float2 const x_478 = float2(x_472[0], x_472[1]);
  float const x_835 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_835;
  float const x_261 = uv[1];
  int const x_836 = i_2;
  i_2 = 0;
  i_2 = x_836;
  float3 const x_479 = float3(float2(0.0f, 0.0f)[1], x_454[1], float2(0.0f, 0.0f)[0]);
  int const x_837 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_837;
  float const x_838 = color[1];
  color[1] = 0.0f;
  color[1] = x_838;
  float3 const x_480 = float3(x_446[0], x_446[0], float2(0.0f, 0.0f)[1]);
  float const x_839 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_839;
  if ((x_261 > 0.25f)) {
    float2 const x_481 = float2(x_447[0], x_480[2]);
    float3 const x_840 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_840;
    int const x_267 = (*(tint_symbol_84)).numbers.arr[5u];
    float const x_841 = color[0];
    color[0] = 0.0f;
    color[0] = x_841;
    int const x_842 = i_2;
    i_2 = 0;
    i_2 = x_842;
    int const x_843 = i_2;
    i_2 = 0;
    i_2 = x_843;
    float const x_270 = color[0];
    float const x_844 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_844;
    float3 const x_482 = float3(x_455[0], x_475[1], x_455[1]);
    QuicksortObject const x_845 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_66 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_67 = {.numbers=tint_symbol_66};
    *(tint_symbol_84) = tint_symbol_67;
    *(tint_symbol_84) = x_845;
    float const x_846 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_846;
    int const x_847 = i_2;
    i_2 = 0;
    i_2 = x_847;
    float3 const x_483 = float3(x_184[3], x_184[3], x_192[0]);
    float const x_848 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_848;
    color[0] = (float(x_267) + x_270);
    float3 const x_484 = float3(x_454[1], x_450[0], x_454[1]);
    float const x_849 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_849;
  }
  float const x_850 = color[0];
  color[0] = 0.0f;
  color[0] = x_850;
  float3 const x_485 = float3(x_467[0], x_450[1], x_450[0]);
  float const x_851 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_851;
  int const x_852 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_852;
  float const x_274 = uv[1];
  int const x_853 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_853;
  if ((x_274 > 0.5f)) {
    float const x_854 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_854;
    float2 const x_486 = float2(x_480[1], x_455[1]);
    float const x_855 = color[1];
    color[1] = 0.0f;
    color[1] = x_855;
    float2 const x_487 = float2(x_449[2], x_449[1]);
    float const x_856 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_856;
    int const x_280 = (*(tint_symbol_84)).numbers.arr[6u];
    float const x_857 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_857;
    int const x_858 = i_2;
    i_2 = 0;
    i_2 = x_858;
    int const x_859 = (*(tint_symbol_84)).numbers.arr[4];
    (*(tint_symbol_84)).numbers.arr[4] = 0;
    (*(tint_symbol_84)).numbers.arr[4] = x_859;
    float2 const x_488 = float2(x_473[2], x_473[1]);
    float const x_283 = color[1];
    float2 const x_860 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_860;
    float const x_861 = color[0];
    color[0] = 0.0f;
    color[0] = x_861;
    float2 const x_489 = float2(x_475[1], x_475[0]);
    int const x_862 = (*(tint_symbol_84)).numbers.arr[6u];
    (*(tint_symbol_84)).numbers.arr[6u] = 0;
    (*(tint_symbol_84)).numbers.arr[6u] = x_862;
    int const x_863 = (*(tint_symbol_84)).numbers.arr[6u];
    (*(tint_symbol_84)).numbers.arr[6u] = 0;
    (*(tint_symbol_84)).numbers.arr[6u] = x_863;
    float2 const x_490 = float2(x_480[2], x_480[2]);
    QuicksortObject const x_864 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_68 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_69 = {.numbers=tint_symbol_68};
    *(tint_symbol_84) = tint_symbol_69;
    *(tint_symbol_84) = x_864;
    color[1] = (float(x_280) + x_283);
    float const x_865 = color[0];
    color[0] = 0.0f;
    color[0] = x_865;
    float2 const x_491 = float2(float3(1.0f, 2.0f, 3.0f)[1], x_454[0]);
    float const x_866 = color[1];
    color[1] = 0.0f;
    color[1] = x_866;
  }
  float2 const x_492 = float2(x_455[1], x_455[1]);
  float const x_867 = color[0];
  color[0] = 0.0f;
  color[0] = x_867;
  float const x_287 = uv[1];
  QuicksortObject const x_868 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_70 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_71 = {.numbers=tint_symbol_70};
  *(tint_symbol_84) = tint_symbol_71;
  *(tint_symbol_84) = x_868;
  float2 const x_493 = float2(x_475[0], x_475[1]);
  float const x_869 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_869;
  float const x_870 = color[1];
  color[1] = 0.0f;
  color[1] = x_870;
  float3 const x_494 = float3(x_191[0], x_191[1], x_191[1]);
  int const x_871 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_871;
  if ((x_287 > 0.75f)) {
    float3 const x_872 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_872;
    float const x_873 = color[0];
    color[0] = 0.0f;
    color[0] = x_873;
    float3 const x_495 = float3(x_192[1], x_192[0], x_192[1]);
    float3 const x_874 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_874;
    int const x_293 = (*(tint_symbol_84)).numbers.arr[7];
    float const x_875 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_875;
    float3 const x_496 = float3(x_475[0], x_467[1], x_467[0]);
    float const x_876 = color[1];
    color[1] = 0.0f;
    color[1] = x_876;
    float2 const x_497 = float2(x_477[0], x_461[1]);
    int const x_877 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_877;
    float const x_878 = color[1];
    color[1] = 0.0f;
    color[1] = x_878;
    float3 const x_498 = float3(x_478[0], x_478[1], x_478[0]);
    float const x_879 = color[0];
    color[0] = 0.0f;
    color[0] = x_879;
    float const x_296 = color[2];
    float const x_880 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_880;
    float2 const x_499 = float2(x_184[0], x_184[1]);
    float const x_881 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_881;
    float const x_882 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_882;
    float const x_883 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_883;
    float3 const x_500 = float3(x_499[1], x_499[1], x_494[2]);
    float const x_884 = color[2];
    color[2] = 0.0f;
    color[2] = x_884;
    color[2] = (float(x_293) + x_296);
    float const x_885 = color[1];
    color[1] = 0.0f;
    color[1] = x_885;
    float2 const x_501 = float2(x_453[0], x_453[2]);
    float const x_886 = color[0];
    color[0] = 0.0f;
    color[0] = x_886;
  }
  int const x_887 = i_2;
  i_2 = 0;
  i_2 = x_887;
  float2 const x_502 = float2(x_451[1], x_192[1]);
  float2 const x_888 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_888;
  int const x_301 = (*(tint_symbol_84)).numbers.arr[8];
  int const x_889 = i_2;
  i_2 = 0;
  i_2 = x_889;
  float2 const x_503 = float2(x_185[0], x_451[2]);
  int const x_890 = (*(tint_symbol_84)).numbers.arr[8];
  (*(tint_symbol_84)).numbers.arr[8] = 0;
  (*(tint_symbol_84)).numbers.arr[8] = x_890;
  float const x_891 = color[1];
  color[1] = 0.0f;
  color[1] = x_891;
  float2 const x_504 = float2(x_453[1], float2(0.0f, 0.0f)[0]);
  float const x_892 = color[0];
  color[0] = 0.0f;
  color[0] = x_892;
  float3 const x_505 = float3(x_504[0], x_504[1], x_504[0]);
  float const x_893 = color[2];
  color[2] = 0.0f;
  color[2] = x_893;
  float const x_304 = color[2];
  float const x_894 = color[0];
  color[0] = 0.0f;
  color[0] = x_894;
  float2 const x_506 = float2(x_493[0], x_492[0]);
  int const x_895 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_895;
  float const x_896 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_896;
  float2 const x_507 = float2(x_461[0], x_447[0]);
  float const x_897 = color[1];
  color[1] = 0.0f;
  color[1] = x_897;
  color[2] = (x_304 + float(x_301));
  float2 const x_898 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_898;
  float const x_899 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_899;
  float3 const x_508 = float3(x_461[1], x_461[0], x_506[1]);
  float const x_900 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_900;
  float const x_308 = uv[0];
  float const x_901 = color[1];
  color[1] = 0.0f;
  color[1] = x_901;
  float3 const x_509 = float3(x_503[1], x_503[0], x_448[2]);
  float const x_902 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_902;
  float const x_310 = uv[1];
  float const x_903 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_903;
  float const x_904 = color[2];
  color[2] = 0.0f;
  color[2] = x_904;
  float3 const x_510 = float3(float3(1.0f, 2.0f, 3.0f)[1], x_485[1], x_485[2]);
  float const x_905 = color[2];
  color[2] = 0.0f;
  color[2] = x_905;
  int const x_906 = i_2;
  i_2 = 0;
  i_2 = x_906;
  float2 const x_511 = float2(x_485[2], x_485[1]);
  float3 const x_907 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_907;
  float const x_908 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_908;
  float3 const x_512 = float3(x_455[1], x_455[1], x_455[1]);
  int const x_909 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_909;
  if ((fabs((x_308 - x_310)) < 0.25f)) {
    float const x_910 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_910;
    QuicksortObject const x_911 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_72 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_73 = {.numbers=tint_symbol_72};
    *(tint_symbol_84) = tint_symbol_73;
    *(tint_symbol_84) = x_911;
    float3 const x_513 = float3(x_505[2], x_505[0], x_448[0]);
    int const x_912 = (*(tint_symbol_84)).numbers.arr[8];
    (*(tint_symbol_84)).numbers.arr[8] = 0;
    (*(tint_symbol_84)).numbers.arr[8] = x_912;
    int const x_317 = (*(tint_symbol_84)).numbers.arr[9u];
    float3 const x_514 = float3(x_474[1], x_474[1], x_474[1]);
    float const x_913 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_913;
    float const x_320 = color[0];
    float const x_914 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_914;
    float2 const x_515 = float2(x_502[0], x_502[1]);
    float const x_915 = color[0];
    color[0] = 0.0f;
    color[0] = x_915;
    float3 const x_916 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_916;
    float2 const x_516 = float2(x_452[0], x_452[0]);
    float2 const x_917 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_917;
    float const x_918 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_918;
    float3 const x_517 = float3(float2(0.0f, 0.0f)[0], float2(0.0f, 0.0f)[0], float2(0.0f, 0.0f)[1]);
    color[0] = (float(x_317) + x_320);
    float const x_919 = color[0];
    color[0] = 0.0f;
    color[0] = x_919;
    float3 const x_518 = float3(x_480[1], x_508[0], x_480[0]);
    float const x_920 = color[0];
    color[0] = 0.0f;
    color[0] = x_920;
  }
  float const x_921 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_921;
  float3 const x_325 = color;
  float const x_922 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_922;
  float3 const x_519 = float3(x_447[0], x_446[0], x_446[1]);
  float3 const x_326 = normalize(x_325);
  float const x_923 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_923;
  QuicksortObject const x_924 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_74 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_75 = {.numbers=tint_symbol_74};
  *(tint_symbol_84) = tint_symbol_75;
  *(tint_symbol_84) = x_924;
  QuicksortObject const x_925 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_76 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_77 = {.numbers=tint_symbol_76};
  *(tint_symbol_84) = tint_symbol_77;
  *(tint_symbol_84) = x_925;
  float const x_926 = color[1];
  color[1] = 0.0f;
  color[1] = x_926;
  float2 const x_520 = float2(x_506[1], x_519[1]);
  float const x_927 = color[1];
  color[1] = 0.0f;
  color[1] = x_927;
  float4 const x_330 = float4(x_326[0], x_326[1], x_326[2], 1.0f);
  float const x_928 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_928;
  float3 const x_521 = float3(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[1], x_520[1]);
  float const x_929 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_929;
  *(tint_symbol_86) = x_330;
  QuicksortObject const x_930 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_78 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_79 = {.numbers=tint_symbol_78};
  *(tint_symbol_84) = tint_symbol_79;
  *(tint_symbol_84) = x_930;
  float3 const x_522 = float3(x_330[3], x_330[1], x_493[0]);
  float const x_931 = color[0];
  color[0] = 0.0f;
  color[0] = x_931;
  return;
}

main_out tint_symbol_inner(constant buf0& x_188, float4 gl_FragCoord_param, thread float4* const tint_symbol_87, thread QuicksortObject* const tint_symbol_88, thread float4* const tint_symbol_89) {
  *(tint_symbol_87) = gl_FragCoord_param;
  main_1(x_188, tint_symbol_88, tint_symbol_87, tint_symbol_89);
  main_out const tint_symbol_80 = {.x_GLF_color_1=*(tint_symbol_89)};
  return tint_symbol_80;
}

fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_188 [[buffer(0)]]) {
  thread float4 tint_symbol_90 = 0.0f;
  thread QuicksortObject tint_symbol_91 = {};
  thread float4 tint_symbol_92 = 0.0f;
  main_out const inner_result = tint_symbol_inner(x_188, gl_FragCoord_param, &(tint_symbol_90), &(tint_symbol_91), &(tint_symbol_92));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}

