//-------------------------------------------------------------------------------------------------------
// 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 = 7247;
b = -10703;
c = 23921;
d = -27469;
e = 25647;
f = 48377;
g = -26784;
h = -16552;
obj0.a = 14890;
obj0.b = -1196;
obj0.c = -45880;
obj0.d = 33257;
obj0.e = 36182;
ary[0] = -53398;
ary[1] = 51735;
ary[100] = 57729;
if(((-65105 | (a ^ (-11323 ? obj0.c : f))) != (g - c))) {
  if(((h & -13676) == ((+ obj0.c) & ((d * a) - (25321 <= -65054))))) {
    obj0.d = a;
  } else {
    if(((obj0.d - h) == ((obj0.d <= (28349 ^ f)) | (- 59006)))) {
      g = 60364;
    } else {
      obj0.a = ((obj0.c - (b | e)) == (39041 * (- (h * 31528))));
      a = ((49418 + obj0.a) ? (((-59226 == 44789) ^ (e + 51486)) & (d < e)) : (((obj0.c >= 52078) ? (f + 45977) : (obj0.e ? obj0.b : -49589)) * obj0.d));
      a = g;
    }
    h = 19146;
  }
  obj0.b = f;
  if(((((-8308 | -59268) + a) + ((-5505 != d) ^ (-46791 + f))) <= (((obj0.b & 54980) >= obj0.e) | -8160))) {
  } else {
    obj0.d = d;
  }
} else {
  obj0.d = ((-44213 | (h ^ obj0.a)) == ((+ (e + -42358)) & g));
  if((((- -39412) + e) >= (((c - 52134) | -51213) - h))) {
    a = (- (((-31938 >= 58770) & d) * ((obj0.c - 55706) & (obj0.e & obj0.d))));
    if(((a ^ (obj0.c - h)) < (d - (f - 59971)))) {
      obj0.c = f;
      d = a;
      a = ((((59891 ? h : 32579) * (39749 - -19392)) ^ d) - ((! (-30518 - g)) - (! (obj0.b | g))));
    } else {
      obj0.c = obj0.d;
    }
    b = obj0.c;
  } else {
  }
}
obj0.e = ((obj0.e * (obj0.a++ )) ^ ((obj0.b & (-48127 * 26978)) * f));
obj0.a = ((obj0.a - ((145 ? -43151 : -6823) & (c + -16937))) & (((+ obj0.e) | a) - (e | (42000 - -44182))));
if(((((obj0.a >= 2359) ^ (g * -596)) | ((obj0.a + -16432) | obj0.b)) == ((obj0.a * (++ d)) - ((-47551 * b) ^ (34059 * 24871))))) {
  if(((obj0.e + obj0.d) == (((- 3007) + (obj0.a * 54487)) + b))) {
    if((((f & -19425) & (29905 * (e | obj0.b))) <= (g * (++ d)))) {
    } else {
      obj0.b = ((((b & -39080) + b) | ((f ^ d) ^ (h | obj0.e))) & ((d + obj0.e) ^ ((c ? 49025 : -43177) & (32826 ^ g))));
    }
    b = (+ (((e - 21197) ^ h) | ((obj0.a * d) ^ 39940)));
  } else {
    if(((((24039 + -5007) + (obj0.e + -35165)) ^ ((-59605 < f) ^ 25304)) == (obj0.b ^ ((d++ ) + (+ obj0.e))))) {
      b = (((obj0.a | (d ? 23753 : obj0.e)) - obj0.d) | (((g * 47216) + (+ -42451)) - ((+ 51074) * (-53137 + 53957))));
      obj0.e = (+ (48296 & obj0.b));
      h = -4803;
    } else {
      obj0.b = (++ b);
      f = ((((obj0.d - g) - (obj0.c ? -31414 : c)) | (! g)) + (((-24502 | 59134) & (-61070 | obj0.a)) | ((e | c) + (44859 >= obj0.b))));
      f = ((obj0.b & ((obj0.c != obj0.e) ? b : (28071 | obj0.d))) >= (c * obj0.e));
    }
  }
} else {
  if(((h & obj0.b) > (obj0.b | -26549))) {
    obj0.a = ((b & f) * (((48949 | 13998) > d) ^ ((-43685 * a) != (10868 | f))));
    h = ((40432 - ((-58135 == c) ? h : (c ^ 58068))) | ((38023 + d) & c));
    if(((35886 * (47755 * (obj0.e * -46025))) != (28232 + (+ obj0.a)))) {
      b = (((- obj0.c) - (+ (30516 ? 48788 : b))) & (h & (c * (g - f))));
    } else {
    }
  } else {
  }
  obj0.d = ((((obj0.d * -11648) + (++ obj0.c)) & ((-53407 > g) ? a : (obj0.e - -6139))) + ((obj0.d ^ (28940 ^ obj0.e)) | obj0.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');
})();
