#include <metal_stdlib>

using namespace metal;
struct BST {
  int data;
  int leftIndex;
  int rightIndex;
};
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct tint_array_wrapper {
  BST arr[10];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void makeTreeNode_struct_BST_i1_i1_i11_i1_(thread BST* const tree, thread int* const data) {
  int const x_165 = *(data);
  (*(tree)).data = x_165;
  (*(tree)).leftIndex = -1;
  (*(tree)).rightIndex = -1;
  return;
}

void insert_i1_i1_(constant buf0& x_16, thread int* const treeIndex, thread int* const data_1, thread tint_array_wrapper* const tint_symbol_4) {
  int baseIndex = 0;
  BST param = {};
  int param_1 = 0;
  int x_170 = 0;
  BST param_2 = {};
  int param_3 = 0;
  baseIndex = 0;
  while (true) {
    int const x_175 = baseIndex;
    int const x_176 = *(treeIndex);
    if ((x_175 <= x_176)) {
    } else {
      break;
    }
    int const x_179 = *(data_1);
    int const x_180 = baseIndex;
    int const x_182 = (*(tint_symbol_4)).arr[x_180].data;
    if ((x_179 <= x_182)) {
      int const x_187 = baseIndex;
      int const x_189 = (*(tint_symbol_4)).arr[x_187].leftIndex;
      if ((x_189 == -1)) {
        int const x_194 = baseIndex;
        int const x_195 = *(treeIndex);
        (*(tint_symbol_4)).arr[x_194].leftIndex = x_195;
        float const x_198 = x_16.injectionSwitch.x;
        float const x_200 = x_16.injectionSwitch.y;
        if ((x_198 < x_200)) {
          int const x_204 = *(treeIndex);
          BST const x_206 = (*(tint_symbol_4)).arr[x_204];
          param = x_206;
          int const x_207 = *(data_1);
          param_1 = x_207;
          makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
          BST const x_209 = param;
          (*(tint_symbol_4)).arr[x_204] = x_209;
        }
        float const x_212 = x_16.injectionSwitch.x;
        float const x_214 = x_16.injectionSwitch.y;
        if ((x_212 < x_214)) {
          return;
        }
      } else {
        int const x_218 = baseIndex;
        int const x_220 = (*(tint_symbol_4)).arr[x_218].leftIndex;
        baseIndex = x_220;
        continue;
      }
    } else {
      float const x_222 = x_16.injectionSwitch.x;
      float const x_224 = x_16.injectionSwitch.y;
      if ((x_222 < x_224)) {
        int const x_229 = baseIndex;
        int const x_231 = (*(tint_symbol_4)).arr[x_229].rightIndex;
        x_170 = x_231;
      } else {
        int const x_232 = baseIndex;
        int const x_234 = (*(tint_symbol_4)).arr[x_232].rightIndex;
        x_170 = x_234;
      }
      int const x_235 = x_170;
      if ((x_235 == -1)) {
        int const x_240 = baseIndex;
        int const x_241 = *(treeIndex);
        (*(tint_symbol_4)).arr[x_240].rightIndex = x_241;
        int const x_243 = *(treeIndex);
        BST const x_245 = (*(tint_symbol_4)).arr[x_243];
        param_2 = x_245;
        int const x_246 = *(data_1);
        param_3 = x_246;
        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
        BST const x_248 = param_2;
        (*(tint_symbol_4)).arr[x_243] = x_248;
        return;
      } else {
        int const x_250 = baseIndex;
        int const x_252 = (*(tint_symbol_4)).arr[x_250].rightIndex;
        baseIndex = x_252;
        continue;
      }
      return;
    }
    float const x_254 = x_16.injectionSwitch.x;
    float const x_256 = x_16.injectionSwitch.y;
    if ((x_254 > x_256)) {
      return;
    }
  }
  return;
}

int search_i1_(thread int* const target, thread tint_array_wrapper* const tint_symbol_5) {
  int index = 0;
  BST currentNode = {};
  int x_261 = 0;
  index = 0;
  while (true) {
    int const x_266 = index;
    if ((x_266 != -1)) {
    } else {
      break;
    }
    int const x_269 = index;
    BST const x_271 = (*(tint_symbol_5)).arr[x_269];
    currentNode = x_271;
    int const x_273 = currentNode.data;
    int const x_274 = *(target);
    if ((x_273 == x_274)) {
      int const x_278 = *(target);
      return x_278;
    }
    int const x_279 = *(target);
    int const x_281 = currentNode.data;
    if ((x_279 > x_281)) {
      int const x_287 = currentNode.rightIndex;
      x_261 = x_287;
    } else {
      int const x_289 = currentNode.leftIndex;
      x_261 = x_289;
    }
    int const x_290 = x_261;
    index = x_290;
  }
  return -1;
}

void main_1(constant buf0& x_16, thread tint_array_wrapper* const tint_symbol_6, thread float4* const tint_symbol_7) {
  int treeIndex_1 = 0;
  BST param_4 = {};
  int param_5 = 0;
  int param_6 = 0;
  int param_7 = 0;
  int param_8 = 0;
  int param_9 = 0;
  int param_10 = 0;
  int param_11 = 0;
  int param_12 = 0;
  int param_13 = 0;
  int param_14 = 0;
  int param_15 = 0;
  int param_16 = 0;
  int param_17 = 0;
  int param_18 = 0;
  int param_19 = 0;
  int param_20 = 0;
  int param_21 = 0;
  int param_22 = 0;
  int param_23 = 0;
  int count = 0;
  int i = 0;
  int result = 0;
  int param_24 = 0;
  treeIndex_1 = 0;
  BST const x_91 = (*(tint_symbol_6)).arr[0];
  param_4 = x_91;
  param_5 = 9;
  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
  BST const x_93 = param_4;
  (*(tint_symbol_6)).arr[0] = x_93;
  int const x_95 = treeIndex_1;
  treeIndex_1 = as_type<int>((as_type<uint>(x_95) + as_type<uint>(1)));
  int const x_97 = treeIndex_1;
  param_6 = x_97;
  param_7 = 5;
  insert_i1_i1_(x_16, &(param_6), &(param_7), tint_symbol_6);
  int const x_99 = treeIndex_1;
  treeIndex_1 = as_type<int>((as_type<uint>(x_99) + as_type<uint>(1)));
  int const x_101 = treeIndex_1;
  param_8 = x_101;
  param_9 = 12;
  insert_i1_i1_(x_16, &(param_8), &(param_9), tint_symbol_6);
  int const x_103 = treeIndex_1;
  treeIndex_1 = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
  int const x_105 = treeIndex_1;
  param_10 = x_105;
  param_11 = 15;
  insert_i1_i1_(x_16, &(param_10), &(param_11), tint_symbol_6);
  int const x_107 = treeIndex_1;
  treeIndex_1 = as_type<int>((as_type<uint>(x_107) + as_type<uint>(1)));
  int const x_109 = treeIndex_1;
  param_12 = x_109;
  param_13 = 7;
  insert_i1_i1_(x_16, &(param_12), &(param_13), tint_symbol_6);
  int const x_111 = treeIndex_1;
  treeIndex_1 = as_type<int>((as_type<uint>(x_111) + as_type<uint>(1)));
  int const x_113 = treeIndex_1;
  param_14 = x_113;
  param_15 = 8;
  insert_i1_i1_(x_16, &(param_14), &(param_15), tint_symbol_6);
  int const x_115 = treeIndex_1;
  treeIndex_1 = as_type<int>((as_type<uint>(x_115) + as_type<uint>(1)));
  int const x_117 = treeIndex_1;
  param_16 = x_117;
  param_17 = 2;
  insert_i1_i1_(x_16, &(param_16), &(param_17), tint_symbol_6);
  int const x_119 = treeIndex_1;
  treeIndex_1 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(1)));
  int const x_121 = treeIndex_1;
  param_18 = x_121;
  param_19 = 6;
  insert_i1_i1_(x_16, &(param_18), &(param_19), tint_symbol_6);
  int const x_123 = treeIndex_1;
  treeIndex_1 = as_type<int>((as_type<uint>(x_123) + as_type<uint>(1)));
  int const x_125 = treeIndex_1;
  param_20 = x_125;
  param_21 = 17;
  insert_i1_i1_(x_16, &(param_20), &(param_21), tint_symbol_6);
  int const x_127 = treeIndex_1;
  treeIndex_1 = as_type<int>((as_type<uint>(x_127) + as_type<uint>(1)));
  int const x_129 = treeIndex_1;
  param_22 = x_129;
  param_23 = 13;
  insert_i1_i1_(x_16, &(param_22), &(param_23), tint_symbol_6);
  count = 0;
  i = 0;
  while (true) {
    int const x_135 = i;
    if ((x_135 < 20)) {
    } else {
      break;
    }
    int const x_138 = i;
    param_24 = x_138;
    int const x_139 = search_i1_(&(param_24), tint_symbol_6);
    result = x_139;
    int const x_140 = i;
    switch(x_140) {
      case 2:
      case 5:
      case 6:
      case 7:
      case 8:
      case 9:
      case 12:
      case 13:
      case 15:
      case 17: {
        int const x_150 = result;
        int const x_151 = i;
        if ((x_150 == x_151)) {
          int const x_155 = count;
          count = as_type<int>((as_type<uint>(x_155) + as_type<uint>(1)));
        }
        break;
      }
      default: {
        int const x_144 = result;
        if ((x_144 == -1)) {
          int const x_148 = count;
          count = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
        }
        break;
      }
    }
    {
      int const x_157 = i;
      i = as_type<int>((as_type<uint>(x_157) + as_type<uint>(1)));
    }
  }
  int const x_159 = count;
  if ((x_159 == 20)) {
    *(tint_symbol_7) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_7) = float4(0.0f, 0.0f, 1.0f, 1.0f);
  }
  return;
}

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

