//-------------------------------------------------------------------------------------------------------
// 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 = 35930;
b = 59891;
c = -4328;
d = -7175;
e = -32845;
f = -52766;
g = 57386;
h = -41313;
obj0.a = -40659;
obj0.b = -4318;
obj0.c = 30329;
obj0.d = 1586;
obj0.e = 279;
ary[0] = 17834;
ary[1] = 57843;
ary[100] = -59875;
if((((c * (b + f)) ^ b) < (40836 * obj0.b))) {
} else {
  if(((a * obj0.c) <= ((obj0.d ^ 15702) & ((-19459 != obj0.c) ? (- h) : e)))) {
    if(((((e ^ a) - obj0.d) - ((c ? 32931 : obj0.d) != obj0.e)) > (-58620 ^ obj0.e))) {
      f = 44656;
      b = f;
    } else {
      obj0.e = g;
    }
  } else {
    if(((obj0.b - ((b > obj0.e) ? (h | f) : obj0.c)) == (((1 & obj0.e) & 19701) | (- 14218)))) {
    } else {
    }
    if((((b * (obj0.e != -13923)) ^ (c ^ (43353 ? f : -42671))) != (((obj0.c + 27953) + obj0.c) ^ (a & d)))) {
      b = e;
      obj0.d = d;
    } else {
      e = obj0.d;
      obj0.b = obj0.e;
    }
    if(((((-49461 >= e) ? (e * 6898) : (13008 ? obj0.a : b)) + f) > (((-14879 <= 26096) ? (-34941 | d) : (d | obj0.b)) * d))) {
      obj0.d = b;
      obj0.d = (((obj0.c - obj0.e) & (obj0.e & (-1069 ? obj0.c : 12822))) + ((e ^ obj0.c) ^ ((-27525 * -28616) <= (h | obj0.e))));
    } else {
      g = ((obj0.a & obj0.b) - ((g >= obj0.e) - d));
    }
  }
}
obj0.d = 13663;
if(((b | ((obj0.c != 5164) + (obj0.c++ ))) > (30748 + (d - (a + obj0.a))))) {
  a = ((-42645 * (- g)) >= ((h ^ e) | ((-21113 | -6267) < (obj0.b & -57811))));
} else {
  if(((((-64704 * a) ^ (-37801 + -41925)) | (obj0.a + g)) > (h - a))) {
    if(((18003 ^ (a - obj0.e)) <= (obj0.a - obj0.d))) {
      b = e;
    } else {
      c = ((-7934 | h) + (a + (a++ )));
    }
  } else {
    if(((((obj0.e + obj0.e) * -21309) - g) != (((56461 > d) ? c : obj0.b) ^ h))) {
    } else {
      g = (((+ (-35915 == 43262)) | g) ^ (9444 | (obj0.c == (f ^ e))));
    }
    if(((obj0.e - (h | b)) <= (b - -16384))) {
      g = ((c * obj0.a) | (((14293 ? f : obj0.e) ^ (- obj0.b)) + (e - g)));
      c = (((obj0.e * (g - 29194)) - (158 - obj0.b)) * (obj0.a & (! obj0.a)));
    } else {
    }
  }
  if(((obj0.b + e) >= (((h ? -8040 : f) + (g < obj0.d)) - obj0.a))) {
    if((((- (obj0.b ? 16269 : b)) | ((-61959 - a) & g)) != (((27213 & f) & (obj0.d - obj0.b)) * -31930))) {
      obj0.e = g;
      d = ((obj0.a - ((obj0.b - 43618) * (g * -12604))) ? (c * obj0.c) : (obj0.d ^ obj0.d));
      b = (++ e);
    } else {
      b = d;
      obj0.c = (+ (d * d));
      b = ((g - (+ obj0.e)) >= ((obj0.e >= obj0.d) * ((h & h) * (d * -51779))));
    }
  } else {
    e = (- ((-63200 * (h - obj0.b)) ^ b));
  }
}
f = ((((27866 ? 53268 : 12947) - (obj0.c - d)) - obj0.e) - ((obj0.e * (obj0.a++ )) * ((obj0.b == e) ? (! obj0.c) : b)));
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');
})();
