import * as env from 'env';

function asmFunc(imports) {
 var Math_imul = Math.imul;
 var Math_fround = Math.fround;
 var Math_abs = Math.abs;
 var Math_clz32 = Math.clz32;
 var Math_min = Math.min;
 var Math_max = Math.max;
 var Math_floor = Math.floor;
 var Math_ceil = Math.ceil;
 var Math_trunc = Math.trunc;
 var Math_sqrt = Math.sqrt;
 var env = imports.env;
 var setTempRet0 = env.setTempRet0;
 var i64toi32_i32$HIGH_BITS = 0;
 function dummy() {
  
 }
 
 function $0() {
  
 }
 
 function $1() {
  
 }
 
 function $2() {
  
 }
 
 function $3() {
  
 }
 
 function $4() {
  var $0_1 = 0;
  block : {
   $0_1 = 1;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $5() {
  var i64toi32_i32$0 = 0, $0_1 = 0, $0$hi = 0;
  block : {
   i64toi32_i32$0 = 0;
   $0_1 = 2;
   $0$hi = i64toi32_i32$0;
   break block;
  }
  i64toi32_i32$0 = $0$hi;
  i64toi32_i32$HIGH_BITS = i64toi32_i32$0;
  return $0_1 | 0;
 }
 
 function $6() {
  var $0_1 = Math_fround(0);
  block : {
   $0_1 = Math_fround(3.0);
   break block;
  }
  return Math_fround($0_1);
 }
 
 function $7() {
  var $0_1 = 0.0;
  block : {
   $0_1 = 4.0;
   break block;
  }
  return +$0_1;
 }
 
 function $8() {
  
 }
 
 function $9() {
  block : {
   dummy();
   break block;
  }
 }
 
 function $10() {
  block : {
   dummy();
   break block;
  }
 }
 
 function $11() {
  var $0_1 = 0;
  block : {
   dummy();
   $0_1 = 2;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $12() {
  var $0_1 = 0, $1_1 = 0, $3_1 = 0;
  block : {
   $null_Name_ : while (1) {
    $0_1 = 3;
    break block;
   };
  }
  return $0_1 | 0;
 }
 
 function $13() {
  var $0_1 = 0, $1_1 = 0, $3_1 = 0;
  block : {
   $null_Name_ : while (1) {
    dummy();
    $0_1 = 4;
    break block;
   };
  }
  return $0_1 | 0;
 }
 
 function $14() {
  var $0_1 = 0;
  block : {
   $null_Name_ : while (1) {
    dummy();
    $0_1 = 5;
    break block;
   };
  }
  return $0_1 | 0;
 }
 
 function $15() {
  var $0_1 = 0;
  block : {
   $0_1 = 9;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $16() {
  
 }
 
 function $17() {
  var $0_1 = 0;
  block : {
   $0_1 = 8;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $18() {
  var $0_1 = 0;
  block : {
   $0_1 = 9;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $19() {
  
 }
 
 function $20() {
  var $0_1 = 0;
  block : {
   $0_1 = 10;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $21() {
  var $0_1 = 0;
  block : {
   $0_1 = 11;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $22() {
  var i64toi32_i32$0 = 0, $0_1 = 0, $0$hi = 0;
  block : {
   i64toi32_i32$0 = 0;
   $0_1 = 7;
   $0$hi = i64toi32_i32$0;
   break block;
  }
  i64toi32_i32$0 = $0$hi;
  i64toi32_i32$HIGH_BITS = i64toi32_i32$0;
  return $0_1 | 0;
 }
 
 function $23() {
  var $0_1 = 0, $1_1 = 0;
  block : {
   $0_1 = 2;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $24($0_1, $1_1) {
  $0_1 = $0_1 | 0;
  $1_1 = $1_1 | 0;
  var $3_1 = 0, $5_1 = 0;
  block : {
   if ($0_1) {
    $3_1 = 3;
    break block;
   } else {
    $5_1 = $1_1
   }
   $3_1 = $5_1;
  }
  return $3_1 | 0;
 }
 
 function $25($0_1, $1_1) {
  $0_1 = $0_1 | 0;
  $1_1 = $1_1 | 0;
  var $4_1 = 0, $5_1 = 0;
  block : {
   if ($0_1) {
    $5_1 = $1_1
   } else {
    $4_1 = 4;
    break block;
   }
   $4_1 = $5_1;
  }
  return $4_1 | 0;
 }
 
 function $26($0_1, $1_1) {
  $0_1 = $0_1 | 0;
  $1_1 = $1_1 | 0;
  var $2_1 = 0, $3_1 = 0, $4_1 = 0;
  block : {
   $2_1 = 5;
   break block;
  }
  return $2_1 | 0;
 }
 
 function $27($0_1, $1_1) {
  $0_1 = $0_1 | 0;
  $1_1 = $1_1 | 0;
  var $2_1 = 0, $3_1 = 0, $4_1 = 0;
  block : {
   $2_1 = $0_1;
   $3_1 = 6;
   break block;
  }
  return $3_1 | 0;
 }
 
 function $28() {
  var $0_1 = 0;
  block : {
   $0_1 = 7;
   break block;
  }
  return $0_1 | 0;
 }
 
 function f($0_1, $1_1, $2_1) {
  $0_1 = $0_1 | 0;
  $1_1 = $1_1 | 0;
  $2_1 = $2_1 | 0;
  return -1 | 0;
 }
 
 function $29() {
  var $0_1 = 0;
  block : {
   $0_1 = 12;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $30() {
  var $0_1 = 0;
  block : {
   $0_1 = 13;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $31() {
  var $0_1 = 0;
  block : {
   $0_1 = 14;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $32() {
  var $0_1 = 0;
  block : {
   $0_1 = 20;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $33() {
  var $0_1 = 0;
  block : {
   $0_1 = 21;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $34() {
  var $0_1 = 0;
  block : {
   $0_1 = 22;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $35() {
  var $0_1 = 0;
  block : {
   $0_1 = 23;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $36() {
  var $1_1 = 0;
  block : {
   $1_1 = 17;
   break block;
  }
  return $1_1 | 0;
 }
 
 function $37() {
  var $1_1 = 0;
  block : {
   $1_1 = 1;
   break block;
  }
  return $1_1 | 0;
 }
 
 function $38() {
  var $0_1 = 0;
  block : {
   $0_1 = 1;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $39() {
  var $0_1 = Math_fround(0);
  block : {
   $0_1 = Math_fround(1.7000000476837158);
   break block;
  }
  return Math_fround($0_1);
 }
 
 function $40() {
  var i64toi32_i32$0 = 0, $0_1 = 0, $0$hi = 0;
  block : {
   i64toi32_i32$0 = 0;
   $0_1 = 30;
   $0$hi = i64toi32_i32$0;
   break block;
  }
  i64toi32_i32$0 = $0$hi;
  i64toi32_i32$HIGH_BITS = i64toi32_i32$0;
  return $0_1 | 0;
 }
 
 function $41() {
  var $0_1 = 0;
  block : {
   $0_1 = 30;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $42() {
  var $0_1 = 0;
  block : {
   $0_1 = 31;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $43() {
  var $0_1 = 0;
  block : {
   $0_1 = 32;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $44() {
  var $0_1 = 0;
  block : {
   $0_1 = 33;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $45() {
  var $0_1 = Math_fround(0);
  block : {
   $0_1 = Math_fround(3.4000000953674316);
   break block;
  }
  return Math_fround($0_1);
 }
 
 function $46() {
  var $0_1 = 0;
  block : {
   $0_1 = 3;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $47() {
  var $0_1 = 0, $0$hi = 0, i64toi32_i32$1 = 0;
  block : {
   $0_1 = 45;
   $0$hi = 0;
   break block;
  }
  i64toi32_i32$1 = $0$hi;
  i64toi32_i32$HIGH_BITS = i64toi32_i32$1;
  return $0_1 | 0;
 }
 
 function $48() {
  var $0_1 = 0;
  block : {
   $0_1 = 44;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $49() {
  var $0_1 = 0;
  block : {
   $0_1 = 43;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $50() {
  var $0_1 = 0;
  block : {
   $0_1 = 42;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $51() {
  var $0_1 = 0;
  block : {
   $0_1 = 41;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $52() {
  var $0_1 = 0;
  block : {
   $0_1 = 40;
   break block;
  }
  return $0_1 | 0;
 }
 
 function $53() {
  var $0_1 = 0;
  block : {
   dummy();
   $0_1 = 8;
   break block;
  }
  return 1 + $0_1 | 0 | 0;
 }
 
 function $54() {
  var $0_1 = 0;
  block : {
   block0 : {
    $0_1 = 8;
    break block;
   }
  }
  return 1 + $0_1 | 0 | 0;
 }
 
 function $55() {
  var $0_1 = 0, $1_1 = 0;
  block : {
   $0_1 = 8;
   break block;
  }
  return 1 + $0_1 | 0 | 0;
 }
 
 function $56() {
  var $0_1 = 0;
  block : {
   $0_1 = 8;
   break block;
  }
  return 1 + $0_1 | 0 | 0;
 }
 
 function $57() {
  var $0_1 = 0;
  block : {
   $0_1 = 8;
   break block;
  }
  return 1 + $0_1 | 0 | 0;
 }
 
 function $58() {
  var $0_1 = 0;
  block : {
   $0_1 = 8;
   break block;
  }
  return 1 + $0_1 | 0 | 0;
 }
 
 function legalstub$5() {
  var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0;
  i64toi32_i32$0 = $5() | 0;
  i64toi32_i32$1 = i64toi32_i32$HIGH_BITS;
  $0_1 = i64toi32_i32$0;
  $0$hi = i64toi32_i32$1;
  i64toi32_i32$2 = i64toi32_i32$0;
  i64toi32_i32$0 = 0;
  i64toi32_i32$3 = 32;
  i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0;
  if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) {
   i64toi32_i32$0 = 0;
   $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0;
  } else {
   i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0;
   $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0;
  }
  setTempRet0($7_1 | 0);
  i64toi32_i32$0 = $0$hi;
  return $0_1 | 0;
 }
 
 function legalstub$22() {
  var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0;
  i64toi32_i32$0 = $22() | 0;
  i64toi32_i32$1 = i64toi32_i32$HIGH_BITS;
  $0_1 = i64toi32_i32$0;
  $0$hi = i64toi32_i32$1;
  i64toi32_i32$2 = i64toi32_i32$0;
  i64toi32_i32$0 = 0;
  i64toi32_i32$3 = 32;
  i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0;
  if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) {
   i64toi32_i32$0 = 0;
   $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0;
  } else {
   i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0;
   $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0;
  }
  setTempRet0($7_1 | 0);
  i64toi32_i32$0 = $0$hi;
  return $0_1 | 0;
 }
 
 function legalstub$40() {
  var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0;
  i64toi32_i32$0 = $40() | 0;
  i64toi32_i32$1 = i64toi32_i32$HIGH_BITS;
  $0_1 = i64toi32_i32$0;
  $0$hi = i64toi32_i32$1;
  i64toi32_i32$2 = i64toi32_i32$0;
  i64toi32_i32$0 = 0;
  i64toi32_i32$3 = 32;
  i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0;
  if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) {
   i64toi32_i32$0 = 0;
   $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0;
  } else {
   i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0;
   $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0;
  }
  setTempRet0($7_1 | 0);
  i64toi32_i32$0 = $0$hi;
  return $0_1 | 0;
 }
 
 function legalstub$47() {
  var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0;
  i64toi32_i32$0 = $47() | 0;
  i64toi32_i32$1 = i64toi32_i32$HIGH_BITS;
  $0_1 = i64toi32_i32$0;
  $0$hi = i64toi32_i32$1;
  i64toi32_i32$2 = i64toi32_i32$0;
  i64toi32_i32$0 = 0;
  i64toi32_i32$3 = 32;
  i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0;
  if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) {
   i64toi32_i32$0 = 0;
   $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0;
  } else {
   i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0;
   $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0;
  }
  setTempRet0($7_1 | 0);
  i64toi32_i32$0 = $0$hi;
  return $0_1 | 0;
 }
 
 return {
  "type_i32": $0, 
  "type_i64": $1, 
  "type_f32": $2, 
  "type_f64": $3, 
  "type_i32_value": $4, 
  "type_i64_value": legalstub$5, 
  "type_f32_value": $6, 
  "type_f64_value": $7, 
  "as_block_first": $8, 
  "as_block_mid": $9, 
  "as_block_last": $10, 
  "as_block_value": $11, 
  "as_loop_first": $12, 
  "as_loop_mid": $13, 
  "as_loop_last": $14, 
  "as_br_value": $15, 
  "as_br_if_cond": $16, 
  "as_br_if_value": $17, 
  "as_br_if_value_cond": $18, 
  "as_br_table_index": $19, 
  "as_br_table_value": $20, 
  "as_br_table_value_index": $21, 
  "as_return_value": legalstub$22, 
  "as_if_cond": $23, 
  "as_if_then": $24, 
  "as_if_else": $25, 
  "as_select_first": $26, 
  "as_select_second": $27, 
  "as_select_cond": $28, 
  "as_call_first": $29, 
  "as_call_mid": $30, 
  "as_call_last": $31, 
  "as_call_indirect_func": $32, 
  "as_call_indirect_first": $33, 
  "as_call_indirect_mid": $34, 
  "as_call_indirect_last": $35, 
  "as_local_set_value": $36, 
  "as_local_tee_value": $37, 
  "as_global_set_value": $38, 
  "as_load_address": $39, 
  "as_loadN_address": legalstub$40, 
  "as_store_address": $41, 
  "as_store_value": $42, 
  "as_storeN_address": $43, 
  "as_storeN_value": $44, 
  "as_unary_operand": $45, 
  "as_binary_left": $46, 
  "as_binary_right": legalstub$47, 
  "as_test_operand": $48, 
  "as_compare_left": $49, 
  "as_compare_right": $50, 
  "as_convert_operand": $51, 
  "as_memory_grow_size": $52, 
  "nested_block_value": $53, 
  "nested_br_value": $54, 
  "nested_br_if_value": $55, 
  "nested_br_if_value_cond": $56, 
  "nested_br_table_value": $57, 
  "nested_br_table_value_index": $58
 };
}

var retasmFunc = asmFunc({
  "env": env,
});
export var type_i32 = retasmFunc.type_i32;
export var type_i64 = retasmFunc.type_i64;
export var type_f32 = retasmFunc.type_f32;
export var type_f64 = retasmFunc.type_f64;
export var type_i32_value = retasmFunc.type_i32_value;
export var type_i64_value = retasmFunc.type_i64_value;
export var type_f32_value = retasmFunc.type_f32_value;
export var type_f64_value = retasmFunc.type_f64_value;
export var as_block_first = retasmFunc.as_block_first;
export var as_block_mid = retasmFunc.as_block_mid;
export var as_block_last = retasmFunc.as_block_last;
export var as_block_value = retasmFunc.as_block_value;
export var as_loop_first = retasmFunc.as_loop_first;
export var as_loop_mid = retasmFunc.as_loop_mid;
export var as_loop_last = retasmFunc.as_loop_last;
export var as_br_value = retasmFunc.as_br_value;
export var as_br_if_cond = retasmFunc.as_br_if_cond;
export var as_br_if_value = retasmFunc.as_br_if_value;
export var as_br_if_value_cond = retasmFunc.as_br_if_value_cond;
export var as_br_table_index = retasmFunc.as_br_table_index;
export var as_br_table_value = retasmFunc.as_br_table_value;
export var as_br_table_value_index = retasmFunc.as_br_table_value_index;
export var as_return_value = retasmFunc.as_return_value;
export var as_if_cond = retasmFunc.as_if_cond;
export var as_if_then = retasmFunc.as_if_then;
export var as_if_else = retasmFunc.as_if_else;
export var as_select_first = retasmFunc.as_select_first;
export var as_select_second = retasmFunc.as_select_second;
export var as_select_cond = retasmFunc.as_select_cond;
export var as_call_first = retasmFunc.as_call_first;
export var as_call_mid = retasmFunc.as_call_mid;
export var as_call_last = retasmFunc.as_call_last;
export var as_call_indirect_func = retasmFunc.as_call_indirect_func;
export var as_call_indirect_first = retasmFunc.as_call_indirect_first;
export var as_call_indirect_mid = retasmFunc.as_call_indirect_mid;
export var as_call_indirect_last = retasmFunc.as_call_indirect_last;
export var as_local_set_value = retasmFunc.as_local_set_value;
export var as_local_tee_value = retasmFunc.as_local_tee_value;
export var as_global_set_value = retasmFunc.as_global_set_value;
export var as_load_address = retasmFunc.as_load_address;
export var as_loadN_address = retasmFunc.as_loadN_address;
export var as_store_address = retasmFunc.as_store_address;
export var as_store_value = retasmFunc.as_store_value;
export var as_storeN_address = retasmFunc.as_storeN_address;
export var as_storeN_value = retasmFunc.as_storeN_value;
export var as_unary_operand = retasmFunc.as_unary_operand;
export var as_binary_left = retasmFunc.as_binary_left;
export var as_binary_right = retasmFunc.as_binary_right;
export var as_test_operand = retasmFunc.as_test_operand;
export var as_compare_left = retasmFunc.as_compare_left;
export var as_compare_right = retasmFunc.as_compare_right;
export var as_convert_operand = retasmFunc.as_convert_operand;
export var as_memory_grow_size = retasmFunc.as_memory_grow_size;
export var nested_block_value = retasmFunc.nested_block_value;
export var nested_br_value = retasmFunc.nested_br_value;
export var nested_br_if_value = retasmFunc.nested_br_if_value;
export var nested_br_if_value_cond = retasmFunc.nested_br_if_value_cond;
export var nested_br_table_value = retasmFunc.nested_br_table_value;
export var nested_br_table_value_index = retasmFunc.nested_br_table_value_index;
