//-------------------------------------------------------------------------------------------------------
// 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 = 493;
b = -15611;
c = -28904;
d = -15391;
e = 13119;
f = -24057;
g = -12653;
h = -853;
obj0.a = 31385;
obj0.b = -58490;
obj0.c = 63353;
obj0.d = -62037;
obj0.e = 44564;
ary[0] = -35422;
ary[1] = -47151;
ary[100] = -15876;
h = obj0.e;
if(((obj0.d & d) <= ((obj0.a | (- 30119)) - -43392))) {
  f = b;
  if((((e & (-65365 & 47115)) & ((e != 20956) ? (44131 == -63783) : (g++ ))) <= (obj0.c & (! (57265 * -2192))))) {
    if((((c - (1754 + b)) | g) <= (57283 - (b ^ a)))) {
      obj0.b = obj0.b;
    } else {
    }
    f = obj0.a;
    if((((c ^ (54193 | obj0.a)) + ((-6803 < -19717) ? d : (f ^ -57234))) < (((36646 - h) - (-37483 ? -52717 : 6343)) | (obj0.e <= (d ^ obj0.a))))) {
    } else {
      obj0.e = -48108;
    }
  } else {
    c = ((h & c) & (((64158 | g) * f) - g));
    if(((((c ^ -41898) - (-8210 | e)) - a) >= (((-6805 & obj0.d) - (b & -669)) - (! (b & e))))) {
      obj0.e = ((obj0.d ^ f) | ((g + (49173 | obj0.e)) ^ (h++ )));
      obj0.a = a;
    } else {
      obj0.e = ((((c > obj0.c) < -4599) & ((56458 ^ g) | (a * obj0.d))) + (((-18205 == b) - (d * -25006)) - (++ e)));
    }
    a = obj0.c;
  }
  b = obj0.d;
} else {
  if(((((obj0.b - obj0.c) + (! -46138)) - a) == ((a <= obj0.a) - h))) {
    h = obj0.a;
    if(((c ^ obj0.a) == ((obj0.c & (d ^ 43666)) * (obj0.b ^ b)))) {
      obj0.b = ((((obj0.a & 27444) == b) ^ (b & (! 19912))) - (((58382 ^ 37779) + c) ^ obj0.d));
    } else {
      obj0.a = ((obj0.a + obj0.b) ? (obj0.e | ((b == -64817) ? b : obj0.a)) : (((6866 ? e : f) & c) | ((-2093 - obj0.d) ^ (13439 * 6411))));
      obj0.a = ((obj0.c | -32282) ? ((++ e) ^ ((39400 ^ e) > (-959 > 58525))) : ((a <= f) - (c - f)));
      b = b;
    }
  } else {
    d = ((47319 & g) | (((37894 | 10309) - (48773 + 60826)) | obj0.e));
    obj0.a = (((obj0.e ^ (-53953 + -52469)) & -63826) ? (19848 | ((obj0.a++ ) + b)) : (e ^ ((6237 * obj0.b) - obj0.d)));
    if(((obj0.c + (! obj0.c)) < ((obj0.d <= (b == 22540)) * ((12001 ? obj0.a : c) + (obj0.c | obj0.c))))) {
      obj0.d = ((((52976 ? 34949 : 55605) & d) + ((obj0.a > f) ? (obj0.e >= -63279) : (! -42135))) & (h ^ (f & h)));
      obj0.b = ((((13470 * 18336) + (56656 & 5502)) ^ g) ? (((27868 > obj0.b) <= obj0.d) - g) : (((obj0.a ^ b) | obj0.e) & d));
      obj0.c = ((e & obj0.e) + ((obj0.b & (50428 | obj0.d)) ^ ((+ 3155) + (-34962 & obj0.e))));
    } else {
      obj0.e = h;
      g = c;
      obj0.a = f;
    }
  }
  if(((16054 - (g != (19648 ^ obj0.c))) == (((34090 > g) ? (-18907 & -1958) : (f++ )) | (+ (obj0.a ? -30135 : 60421))))) {
    c = 51513;
  } else {
    e = (- ((-39838 * -38897) + g));
  }
}
d = f;
e = ((((f >= b) ? (h ? 29242 : e) : a) ^ ((-38485 != obj0.c) ? 28243 : (h ^ c))) ? (((d ^ obj0.d) | (-14096 ? -63339 : -19359)) | (++ c)) : (((+ -23008) | obj0.e) + (g + (obj0.c > e))));
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');
})();
