//-------------------------------------------------------------------------------------------------------
// 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 = -12255;
b = -1354;
c = 13036;
d = -13724;
e = 23643;
f = -7329;
g = 62810;
h = 1739;
obj0.a = -40496;
obj0.b = -10392;
obj0.c = -61821;
obj0.d = 24082;
obj0.e = -7318;
ary[0] = -13434;
ary[1] = -50920;
ary[100] = 5156;
if(((((-42446 <= g) ? (-64926 | -708) : (a | e)) * (obj0.b | obj0.b)) >= (((-30379 ^ d) | (-10121 - 56108)) | ((-51709 <= d) & (obj0.a < 21446))))) {
} else {
  d = ((c | (b - (e * 6828))) < (f + ((43803 + 60847) ^ (-591 | obj0.e))));
  c = ((d | f) | ((-53316 ^ (28255 - a)) * obj0.d));
}
obj0.d = (((e ^ d) | -61555) - ((b ^ f) - obj0.c));
obj0.d = c;
c = 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');
})();
