//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

(function() {
var ary = new Array(10);
var obj0 = new Object();
var a;
var b;
var c;
var d;
var e;
var f;
var g;
var h;
a = -14942;
b = -52978;
c = -48439;
d = -22723;
e = 57806;
f = 65226;
g = -62312;
h = 2750;
obj0.a = -15523;
obj0.b = 12464;
obj0.c = 45896;
obj0.d = 5168;
obj0.e = -9716;
ary[0] = -15637;
ary[1] = -44656;
ary[100] = -5386;
d = ((((40446 != 65142) ? h : e) + ((-50385 >= obj0.d) ? 60667 : b)) ^ (d - ((obj0.e * obj0.e) | (50080 * 20905))));
obj0.c = obj0.b;
if(((obj0.c | -53944) < (f - ((-25353 ? 351 : 54666) == obj0.c)))) {
  if(((((38372 ? 61185 : 39262) < b) & (obj0.b++ )) >= (a + 213))) {
    if((((f & a) ^ ((41680 * -17750) ^ (-52959 < 22704))) == (e + ((-52129 | e) | (f - obj0.b))))) {
      f = (! ((+ -35040) | ((h | 61008) | (-37962 < -23709))));
      obj0.d = c;
    } else {
      c = ((((obj0.e < 39126) >= a) | ((48749 == d) ? (++ obj0.c) : (36878 * e))) - (((28667 >= 16744) ? (obj0.c & -52970) : (f <= -46192)) + g));
      obj0.a = (((e - (g != -28652)) & -31182) ^ (((42304 | -48590) | (! -19376)) * ((-65316 + obj0.e) - e)));
    }
    if(((c - obj0.c) >= ((obj0.a * (obj0.d - obj0.b)) + ((obj0.d ^ g) | 9075)))) {
      obj0.b = obj0.d;
    } else {
      obj0.b = d;
      a = obj0.d;
    }
  } else {
  }
  if(((a + ((54874 + a) & (9745 == -34124))) != (obj0.b - ((-25616 | 43860) * (e * 8074))))) {
    if(((g & (! obj0.a)) != (f * d))) {
      c = (((obj0.a + obj0.a) | (obj0.e <= obj0.c)) * ((obj0.a & 17420) * d));
      b = ((f ^ obj0.e) | ((obj0.b * (g ^ 35868)) * a));
      obj0.b = ((f * obj0.c) - (g * -50469));
    } else {
    }
    e = ((((! a) ^ obj0.e) & ((-33031 - g) & (h - -21646))) ? (((3920 <= 14787) ? (b | 12616) : c) + b) : (obj0.a * ((obj0.c - g) == 34312)));
  } else {
    c = ((obj0.c - (d + (++ f))) + ((h - obj0.d) - (+ (d ? 24324 : -25924))));
  }
} else {
  if((((c++ ) * ((-48773 != g) ? -64087 : 13045)) < ((17098 ^ (b & obj0.b)) * (obj0.c | h)))) {
    if(((f * ((-57481 < obj0.b) ? (e - -14602) : (d == g))) == (obj0.d + (+ (obj0.c * obj0.b))))) {
      obj0.c = ((((-33848 > d) ? (g | g) : (f & g)) - (f | (c & -57181))) + (obj0.e ^ ((d + -36683) * (a ? -49851 : -49524))));
      b = ((((-17063 + f) ^ (5134 + obj0.a)) - a) - (obj0.d - ((-23467 | c) | (-64271 + 27444))));
      h = ((c - ((f * obj0.a) & (-63165 * -37914))) + (obj0.b - (a * (- f))));
    } else {
      obj0.e = ((obj0.b | obj0.d) > (38365 & 13516));
    }
    if((((e & g) ^ (c & (++ obj0.e))) != (obj0.e + ((64822 - g) & d)))) {
      obj0.d = ((((h == obj0.b) + (a + 62265)) - ((-59901 >= 52288) ? b : g)) + (((7276 + f) - (-18532 & f)) | (h ^ (f - obj0.a))));
    } else {
    }
  } else {
    obj0.e = (((-56618 ^ (- -47196)) * (-27427 ^ (+ obj0.b))) + (g & (-40486 == -44674)));
    if((((+ h) ^ ((obj0.b * obj0.b) - (d * e))) == (-41268 | ((-56185 - obj0.d) * (obj0.e | c))))) {
    } else {
      obj0.a = (((d + e) * obj0.a) ^ (obj0.c ^ ((-26487 ^ -35911) ^ (57165 - 38678))));
      c = g;
      h = c;
    }
    if(((a + a) <= ((+ (42843 ^ obj0.e)) * ((58875 < c) ? (+ 16044) : obj0.a)))) {
    } else {
      d = obj0.c;
    }
  }
}
if(((((8263 ^ 21247) - d) | ((-34969 & -47952) * f)) < (b - (g * (b ? obj0.b : e))))) {
} else {
  b = (+ ((g - (18520 | 2724)) ^ d));
}
WScript.Echo("a = " + (a>>3));
WScript.Echo("b = " + (b>>3));
WScript.Echo("c = " + (c>>3));
WScript.Echo("d = " + (d>>3));
WScript.Echo("e = " + (e>>3));
WScript.Echo("f = " + (f>>3));
WScript.Echo("g = " + (g>>3));
WScript.Echo("h = " + (h>>3));
WScript.Echo("obj0.a = " + (obj0.a>>3));
WScript.Echo("obj0.b = " + (obj0.b>>3));
WScript.Echo("obj0.c = " + (obj0.c>>3));
WScript.Echo("obj0.d = " + (obj0.d>>3));
WScript.Echo("obj0.e = " + (obj0.e>>3));
WScript.Echo("ary[0] = " + (ary[0]>>3));
WScript.Echo("ary[1] = " + (ary[1]>>3));
WScript.Echo("ary[100] = " + (ary[100]>>3));
WScript.Echo('done');
})();
