//-------------------------------------------------------------------------------------------------------
// 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 = 61104;
b = 51841;
c = 38960;
d = 8441;
e = -1192;
f = -23542;
g = -38320;
h = -62505;
obj0.a = 14215;
obj0.b = -302;
obj0.c = 39815;
obj0.d = -34947;
obj0.e = 55570;
ary[0] = 47627;
ary[1] = 7810;
ary[100] = -46709;
d = obj0.c;
b = d;
if(((g + (obj0.d - h)) > (((e >= b) | obj0.b) - (- (obj0.a++ ))))) {
  if(((((- -54518) * (obj0.b ? obj0.a : 35910)) * e) < (obj0.a ^ ((h | obj0.a) + obj0.b)))) {
    obj0.c = -47937;
    if(((((-6091 < 24324) ? -35284 : (d * -59204)) - -22504) > (((obj0.a | e) < (++ obj0.a)) * obj0.a))) {
      g = ((((h ? -13001 : -21149) < obj0.d) ^ e) * (obj0.b ^ e));
      b = obj0.c;
    } else {
      g = c;
      c = b;
    }
    if(((((d + obj0.b) + h) & (obj0.c ^ (-46075 - b))) >= (((-33869 > obj0.a) + (- c)) * (a != obj0.a)))) {
      obj0.a = ((((obj0.a == obj0.b) ? obj0.c : obj0.c) - ((obj0.c + e) + (f ? c : obj0.a))) + ((+ (g ? e : -20379)) + (obj0.e > (-39051 ? -13512 : -48597))));
      c = -102;
    } else {
      g = (((+ (obj0.a ^ 63362)) * (++ obj0.b)) | (obj0.a - (+ f)));
      g = g;
    }
  } else {
    obj0.b = ((((53028 >= -9262) ? h : (g * obj0.c)) & h) + ((a + e) + (d | b)));
  }
  a = (- ((obj0.a - obj0.e) * (53128 * (+ 50951))));
  d = obj0.b;
} else {
}
if(((g - ((++ c) - h)) >= (d | obj0.c))) {
  obj0.a = ((((20462 + obj0.b) > (-62533 ? g : -36719)) & c) | ((h ^ obj0.a) * (a | h)));
} else {
}
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');
})();
