//-------------------------------------------------------------------------------------------------------
// 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 = 13698;
b = -18475;
c = 11313;
d = 63368;
e = 59902;
f = -37327;
g = 12929;
h = 64240;
obj0.a = 22827;
obj0.b = -14766;
obj0.c = 20309;
obj0.d = -13759;
obj0.e = -42654;
ary[0] = 20744;
ary[1] = -14561;
ary[100] = 45789;
if(((-41690 + (- 51486)) != ((obj0.e + (b <= c)) | obj0.b))) {
  d = (+ (g ^ b));
  d = obj0.b;
  b = ((h - ((-1138 <= -56544) ? obj0.a : (-48283 + obj0.c))) & (((f - e) * obj0.a) | obj0.a));
} else {
}
obj0.a = b;
d = obj0.d;
if(((((45648 == 1074) ? 5653 : (++ f)) - (obj0.a + (-28026 * obj0.e))) < ((obj0.c == (-39710 ^ -27013)) & (a & (-32559 * f))))) {
  if(((obj0.d | h) >= (-4685 - h))) {
    if(((obj0.b & 6307) == (obj0.a & d))) {
      f = b;
      b = a;
      h = obj0.e;
    } else {
      obj0.b = 8457;
    }
    if(((g & ((-17106 & f) * b)) != (((a != -34533) ? (64493 <= a) : (obj0.c & 48422)) | obj0.c))) {
      b = (((e ^ (b ? a : 6227)) & ((obj0.c < 51056) & obj0.a)) ^ ((! (45597 | obj0.c)) ^ obj0.e));
      obj0.a = obj0.d;
      a = ((((obj0.a != 35389) ? (g * 58169) : (b + 60121)) - ((f ^ 21897) ^ (obj0.c & 19697))) - (((c + obj0.c) | (36748 ^ -23821)) + obj0.c));
    } else {
      obj0.d = obj0.d;
      e = 22014;
    }
  } else {
    h = ((obj0.e * ((60834 | obj0.a) - c)) < (obj0.b ^ obj0.e));
  }
} else {
  if(((((17350 * 12901) + f) | ((e * obj0.e) * g)) < (((obj0.b | -15720) >= obj0.e) + -56564))) {
  } else {
    a = ((d + (+ obj0.d)) + ((f & f) + 46512));
    obj0.e = ((c - (h++ )) + (((35715 | obj0.b) * (32436 ? obj0.c : -4519)) + obj0.b));
  }
  h = (((g <= c) - g) + (h ^ ((obj0.a == -7376) + (54272 != 47895))));
}
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');
})();
