//-------------------------------------------------------------------------------------------------------
// 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 = 59571;
b = -32165;
c = -36727;
d = 58795;
e = 51966;
f = -5562;
g = -18571;
h = -52762;
obj0.a = -34712;
obj0.b = -16990;
obj0.c = 51112;
obj0.d = 34531;
obj0.e = 39510;
ary[0] = 28973;
ary[1] = 59613;
ary[100] = 50944;
obj0.d = ((((-12151 ? 38778 : -60114) * (f ^ -35961)) - f) * ((h ^ b) & (d + (f + 48063))));
if(((f - a) != (((-51271 - h) + (+ -64055)) * a))) {
  if(((f - ((-3988 & obj0.c) + (! g))) <= (((b & -49381) & h) ^ ((45195 > -38606) ? e : (! -28186))))) {
  } else {
    obj0.e = ((((obj0.b > -6680) + 51213) * c) & ((+ (e - -28922)) | obj0.b));
  }
  if(((((e - -13328) < (13057 | f)) | (obj0.a ^ (21919 + 47678))) < (e ^ ((- f) <= (e - 63747))))) {
    if(((-34415 + ((++ obj0.a) ^ (27514 - c))) != (((58810 == f) ? c : c) ^ f))) {
      obj0.b = d;
      obj0.d = h;
      d = ((((c & 22764) + d) - (obj0.e++ )) > (b + (- 14346)));
    } else {
      f = ((e + ((-63944 - 13698) + d)) * ((d++ ) - (h | (-824 ? 48820 : obj0.e))));
    }
  } else {
    if(((obj0.d | d) != ((obj0.b - (f ? obj0.a : -33281)) & ((5110 <= 20459) ? e : (g & d))))) {
    } else {
      obj0.b = obj0.e;
      obj0.b = ((f & ((obj0.a & -6359) | (b + h))) & (d ^ (c == (obj0.c++ ))));
    }
    obj0.b = e;
    obj0.e = e;
  }
} else {
  a = (((f < (38975 ? 21176 : 60286)) ^ obj0.b) ^ (obj0.a * ((g * 4139) > g)));
  if((((3124 | g) + ((-16168 != h) ? (obj0.d & 56146) : c)) != ((- (g | -21863)) ^ obj0.a))) {
    if(((((35888 & -18881) | obj0.a) + a) > (((b | e) > (17025 ^ f)) + d))) {
      f = ((obj0.b ^ ((e ? obj0.d : e) - (32378 ? e : d))) ? (-48315 ^ (a | (h | obj0.b))) : (((++ a) + (47977 + -37606)) + ((obj0.c++ ) * (-46660 * -35793))));
      c = obj0.b;
    } else {
      obj0.a = h;
      obj0.d = e;
      obj0.b = ((obj0.d & c) ^ (obj0.e - ((obj0.a++ ) | f)));
    }
    if(((((a ^ a) * (-13000 + 57307)) | (a >= g)) > ((++ obj0.d) | (++ obj0.d)))) {
      h = ((f * 10119) ^ ((g - b) - obj0.c));
      e = ((47770 + obj0.a) | (((obj0.a * a) < (obj0.d + obj0.e)) ^ ((f + -55969) & (g ^ 56717))));
    } else {
      obj0.c = ((a | (g + (obj0.d == 56447))) ^ (obj0.a * (obj0.b < (obj0.a + a))));
      b = ((((a * d) | (-24215 + 30123)) - ((29259 == 33198) ? c : (16337 * -33864))) ^ (d & e));
    }
  } else {
    if(((g | (b - (a++ ))) <= ((obj0.d & 28683) | ((d + e) | c)))) {
      obj0.b = d;
      obj0.d = ((obj0.d - (39397 * h)) <= ((obj0.c <= a) + ((obj0.d + 62241) * obj0.d)));
      e = (((- obj0.d) - (++ h)) | (obj0.d ^ ((61797 ? 1542 : g) + 27394)));
    } else {
    }
  }
  c = c;
}
if(((obj0.b & (d - (b > h))) < (d & (b + (++ f))))) {
  b = obj0.d;
  obj0.b = (+ (obj0.a * (b * (-18383 ^ d))));
  if((((c++ ) | (+ (obj0.c ? obj0.d : obj0.b))) < (-2733 + g))) {
  } else {
    obj0.b = 31178;
    if((((obj0.c + (obj0.d - -34857)) + d) >= (obj0.a | ((-25329 >= -24360) > (g & 27295))))) {
    } else {
      obj0.d = obj0.d;
    }
  }
} else {
  e = 33727;
  c = obj0.b;
}
if(((((45046 ? -41140 : h) + b) * ((obj0.e ^ c) ^ d)) < (((-42514 + obj0.a) + c) + -55758))) {
} else {
  if(((obj0.e + ((- -7448) - (obj0.b & -54781))) == (15608 | (obj0.a * f)))) {
    d = obj0.d;
    a = obj0.b;
  } else {
    d = (((! (37345 + g)) & (++ obj0.e)) ^ (obj0.e - ((-10170 - -46721) - (-16103 - 1082))));
    if(((((-19336 - a) + (-25920 ? d : -40573)) + ((obj0.a ? -10311 : 7424) - (e++ ))) > (obj0.e & obj0.b))) {
    } else {
      obj0.b = (+ (obj0.c ^ (obj0.e != 33669)));
      a = (+ ((++ f) | obj0.c));
      a = obj0.a;
    }
  }
}
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');
})();
