function asmFunc(global, env, buffer) {
 "use asm";
 var HEAP8 = new global.Int8Array(buffer);
 var HEAP16 = new global.Int16Array(buffer);
 var HEAP32 = new global.Int32Array(buffer);
 var HEAPU8 = new global.Uint8Array(buffer);
 var HEAPU16 = new global.Uint16Array(buffer);
 var HEAPU32 = new global.Uint32Array(buffer);
 var HEAPF32 = new global.Float32Array(buffer);
 var HEAPF64 = new global.Float64Array(buffer);
 var Math_imul = global.Math.imul;
 var Math_fround = global.Math.fround;
 var Math_abs = global.Math.abs;
 var Math_clz32 = global.Math.clz32;
 var Math_min = global.Math.min;
 var Math_max = global.Math.max;
 var Math_floor = global.Math.floor;
 var Math_ceil = global.Math.ceil;
 var Math_sqrt = global.Math.sqrt;
 var abort = env.abort;
 var i64toi32_i32$HIGH_BITS = 0;
 function $0() {
  
 }
 
 function $1(x, y) {
  x = x | 0;
  y = y | 0;
  return x + y | 0 | 0;
 }
 
 function $2(x, y) {
  x = x | 0;
  y = y | 0;
  return (x | 0) / (y | 0) | 0 | 0;
 }
 
 function __wasm_fetch_high_bits() {
  return i64toi32_i32$HIGH_BITS | 0;
 }
 
 return {
  empty: $0, 
  add: $1, 
  div_s: $2, 
  __wasm_fetch_high_bits: __wasm_fetch_high_bits
 };
}


      var __array_buffer = new ArrayBuffer(65536)
      var HEAP32 = new Int32Array(__array_buffer);
      var HEAPF32 = new Float32Array(__array_buffer);
      var HEAPF64 = new Float64Array(__array_buffer);
    ;

      function f32Equal(a, b) {
         var i = new Int32Array(1);
         var f = new Float32Array(i.buffer);
         f[0] = a;
         var ai = f[0];
         f[0] = b;
         var bi = f[0];

         return (isNaN(a) && isNaN(b)) || a == b;
      }

      function f64Equal(a, b) {
         var i = new Int32Array(2);
         var f = new Float64Array(i.buffer);
         f[0] = a;
         var ai1 = i[0];
         var ai2 = i[1];
         f[0] = b;
         var bi1 = i[0];
         var bi2 = i[1];

         return (isNaN(a) && isNaN(b)) || (ai1 == bi1 && ai2 == bi2);
      }
    ;
var asmModule = asmFunc({
 Math: Math, 
 Int8Array: Int8Array, 
 Int16Array: Int16Array, 
 Int32Array: Int32Array, 
 Uint8Array: Uint8Array, 
 Uint16Array: Uint16Array, 
 Uint32Array: Uint32Array, 
 Float32Array: Float32Array, 
 Float64Array: Float64Array, 
 Infinity: Infinity, 
 NaN: NaN
}, {
 abort: function abort() {
  unreachable();
  console_log();
 }
 , 
 print: function print() {}
}, __array_buffer);

    function i64Equal(actual_lo, actual_hi, expected_lo, expected_hi) {
       return actual_lo == (expected_lo | 0) && actual_hi == (expected_hi | 0);
    }
  ;
function check1() {
 var wasm2asm_i32$0 = 0;
 asmModule.empty();
 wasm2asm_i32$0 = 1;
 return wasm2asm_i32$0 | 0;
}

if (!check1()) fail1();
function check2() {
 return (asmModule.add(1 | 0, 1 | 0) | 0 | 0) == (2 | 0) | 0;
}

if (!check2()) fail2();
