//-------------------------------------------------------------------------------------------------------
// 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 = -46435;
b = 60754;
c = -61665;
d = 14127;
e = 7800;
f = -15401;
g = -19078;
h = 4507;
obj0.a = -23511;
obj0.b = -41404;
obj0.c = 7065;
obj0.d = 12574;
obj0.e = 42463;
ary[0] = -32104;
ary[1] = -14029;
ary[100] = 26331;
d = ((((g > obj0.b) ? (obj0.b ^ h) : (+ obj0.a)) & 29205) ? (g ^ obj0.a) : ((obj0.d ^ e) + ((obj0.e | -33206) & (obj0.d & 45406))));
if(((-43163 ^ a) == (d - ((-10009 != 30799) - (c + a))))) {
  if(((((obj0.e ? -39841 : -7762) <= g) ^ ((g >= obj0.e) | (a | obj0.d))) < (c | ((31152 - e) & (c * b))))) {
    obj0.b = ((obj0.e + (-47811 | f)) * (g - ((obj0.c & f) ^ -61232)));
    if(((obj0.b & (d & (-64667 + c))) < (((+ obj0.e) ^ (-61997 | obj0.a)) | f))) {
      obj0.d = (((+ b) | ((obj0.e * a) | (-2669 > 36832))) * ((++ b) * obj0.d));
    } else {
      obj0.d = obj0.a;
      e = (((! obj0.e) - obj0.b) & (24413 ^ g));
    }
    if(((((- obj0.a) - -53766) * (- (f > obj0.d))) != ((! (55543 + obj0.e)) ^ ((-34402 + a) ^ obj0.b)))) {
    } else {
      d = ((5241 - 1894) | (57657 & ((obj0.b * g) | (h * f))));
    }
  } else {
    if(((obj0.b * (e <= (d ^ c))) < (((-32272 <= e) + obj0.b) - ((obj0.d | -9955) ^ c)))) {
    } else {
      obj0.c = obj0.d;
      obj0.d = (((obj0.a + a) | e) - (c * (- (-10828 <= -60139))));
      g = obj0.b;
    }
    obj0.d = 53359;
    if(((((13017 <= 23468) ? -43088 : f) - ((-18678 < b) ? e : e)) != ((++ e) * ((h + c) + a)))) {
    } else {
      obj0.e = -59453;
      obj0.c = (((+ (obj0.d | f)) - ((! obj0.c) ^ (-13114 ^ -23842))) + (((63991 & g) ^ (47122 ? 50161 : 37549)) | ((obj0.a | f) - (++ g))));
    }
  }
  if(((-27987 * ((b ^ 63158) & b)) == (obj0.c - e))) {
  } else {
    f = obj0.b;
    if(((obj0.b & obj0.a) <= ((b + (-4195 | -32923)) ^ ((63841 ? -41670 : e) & obj0.d)))) {
      d = ((((++ f) == c) & ((h < 37559) ? (obj0.b | obj0.d) : obj0.b)) > (b - (+ d)));
      g = ((((obj0.d >= obj0.e) | obj0.b) - e) ? (obj0.e ^ f) : (((-48716 > g) | 27123) & b));
    } else {
    }
  }
  b = 46414;
} else {
  if(((((obj0.a <= -35250) ? (-36176 ? e : obj0.c) : (obj0.d <= -12840)) ^ ((a & b) & 41551)) == ((b > (58086 ^ -13170)) ^ g))) {
  } else {
    if(((((! 22018) > (! 5328)) + (e ^ (obj0.d < obj0.e))) < (((-48716 != -33861) ? -20948 : (a & d)) & obj0.d))) {
      obj0.c = obj0.d;
      obj0.b = g;
      h = obj0.b;
    } else {
      f = (++ obj0.a);
      obj0.c = b;
      g = b;
    }
  }
  obj0.d = (! (-56495 | ((-46711 + -55180) != (h & obj0.c))));
  a = obj0.b;
}
a = ((((32707 + 41689) ^ (46324 != obj0.b)) - obj0.d) | (obj0.a * (++ obj0.e)));
obj0.a = h;
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');
})();
