//-------------------------------------------------------------------------------------------------------
// 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 = -9807;
b = -34583;
c = 55253;
d = -56002;
e = -2360;
f = 61166;
g = 19809;
h = -17072;
obj0.a = 3568;
obj0.b = 47848;
obj0.c = -31002;
obj0.d = 1954;
obj0.e = -21304;
ary[0] = 47326;
ary[1] = 59094;
ary[100] = -12886;
if(((f + obj0.a) < (-30904 * ((-17918 ^ h) < (c | obj0.a))))) {
  obj0.e = (((d >= obj0.d) | obj0.a) | (c * 60261));
  if(((((h < 20104) ? -35024 : (a != 56745)) + obj0.e) < (((obj0.c + 18333) * (22950 | obj0.a)) ^ obj0.c))) {
    b = (((d + (obj0.e * obj0.e)) & f) & (b + (obj0.b - (-54145 | obj0.e))));
    if(((c ^ (b == b)) < (obj0.e * obj0.a))) {
      a = ((((obj0.e < -39410) ? (obj0.e & h) : (obj0.e + obj0.d)) ^ (obj0.c & (h == obj0.e))) ? (e + a) : (f + g));
    } else {
    }
    h = d;
  } else {
    if(((obj0.d * (obj0.c - (-8553 - 56243))) > (((++ a) & obj0.b) - ((obj0.e ^ b) <= (obj0.d == 29185))))) {
      obj0.b = ((((60206 != 45775) ? obj0.e : (44849 <= 19396)) * f) <= (obj0.b - obj0.d));
      obj0.c = ((((-63176 + obj0.a) ^ (! a)) | (-24997 + f)) <= (((-37978 ^ d) & obj0.c) * 13951));
    } else {
      e = (++ f);
    }
  }
} else {
  if(((e + ((c ^ obj0.b) & b)) == (56196 + (obj0.a ^ h)))) {
    if(((((-28082 + d) - c) ^ ((obj0.e++ ) * e)) == (b & (d * (++ e))))) {
      c = ((obj0.e ^ d) | ((d < (b > obj0.a)) - obj0.c));
      a = c;
    } else {
      obj0.d = -40300;
      d = ((e ^ ((55503 == -16853) ? (- 25070) : obj0.e)) | (obj0.e & e));
    }
  } else {
    if((((obj0.a ^ f) * ((47450 ? obj0.b : -11903) ^ (h | h))) >= (e & ((obj0.a ? g : g) ^ (-22143 - 18969))))) {
    } else {
      g = 2439;
      obj0.c = obj0.b;
      obj0.c = obj0.e;
    }
    if(((60814 & ((25847 | 20595) * (-56334 | -10041))) == ((- (3404 ? -3380 : d)) * obj0.e))) {
      obj0.c = ((((-42913 ? 60355 : 64916) | (+ -54254)) ^ ((14324 ? a : -27231) - 24780)) - ((obj0.e & (44226 - -4020)) - ((obj0.d >= a) ? e : (-40044 & d))));
      obj0.c = f;
    } else {
      obj0.d = (((-4218 & (++ g)) + ((! obj0.b) | d)) | (d & f));
    }
  }
  if(((((46484 & -15530) + (h | -55050)) | (obj0.c | -25248)) > (c & obj0.c))) {
    if(((obj0.a + obj0.d) > ((g & (61002 + g)) + obj0.e))) {
      f = ((-55638 * h) * (((e >= 15473) ? obj0.a : h) | c));
      c = (((obj0.a + (f ? obj0.b : 51135)) ^ obj0.a) - (14258 | -65443));
    } else {
      obj0.a = e;
      obj0.a = ((c & ((b - 31081) - (h * 11692))) * (((h ? 2110 : 22770) + obj0.e) + ((49132 ^ -14621) - (c | a))));
    }
    if(((((29727 > obj0.b) ? (obj0.a >= -39107) : (g * -63743)) | ((c - obj0.c) & f)) == (f - c))) {
      e = (((17003 * obj0.b) + c) - (((a > obj0.e) ? (-57253 + -23974) : (44146 - obj0.e)) ^ (a | (-16470 + obj0.d))));
      b = ((((obj0.c ? -44691 : g) | (++ obj0.c)) * ((b < 60740) ? (g | 30308) : obj0.a)) - (f + (! c)));
    } else {
      obj0.c = ((obj0.a * ((-31573 == e) ? (64703 & g) : (-1234 * c))) ? (f & g) : (-65044 - f));
      obj0.d = ((obj0.a & (! obj0.d)) - (-41525 * f));
      h = d;
    }
  } else {
    c = (((obj0.d * (3362 + h)) + c) != (((f & obj0.d) + e) - ((3318 | -1631) + (-53386 >= -118))));
    if(((obj0.b - ((+ obj0.b) + h)) <= (e * ((obj0.d + -34173) - (49743 - -6718))))) {
      f = d;
      d = ((b - h) * (h + (e + (obj0.e * obj0.a))));
      obj0.a = (((a >= (-25103 - 37458)) + (+ obj0.a)) + ((-51939 + (obj0.d ? 63114 : obj0.d)) - a));
    } else {
      h = ((obj0.d + (e >= (f ? -4059 : g))) < (obj0.b * (e * obj0.b)));
      f = obj0.d;
      b = ((obj0.b * ((f + 51111) * 34972)) >= (((obj0.e != 17338) ? e : -27149) & ((e - 24928) + (48257 * 18160))));
    }
  }
}
if(((g - 47675) == (((++ d) & (54694 == 13269)) | ((+ c) - e)))) {
  h = ((((obj0.d++ ) ^ (obj0.c ^ 9225)) & (- (-62234 | obj0.a))) + (f + ((a ^ -35298) + 29134)));
} else {
}
if(((((d >= f) ? (obj0.d * -20269) : (64661 ? obj0.b : 20376)) * ((-35916 < -35339) ^ obj0.e)) < (c - (d - obj0.c)))) {
  if(((((-51639 >= d) ? -50465 : (63912 | c)) * (++ obj0.d)) != (((h <= -51191) ? (63370 ? -50559 : 60106) : (7817 ^ g)) & -39341))) {
  } else {
    if(((c & (! (-58306 > -13309))) > (((-349 + -27764) < (-29222 & g)) | obj0.e))) {
      a = a;
    } else {
      c = obj0.c;
      a = (((++ f) - ((51803 >= obj0.a) ? g : (-4130 < -36155))) - (((obj0.c ? 45862 : obj0.c) & e) - (12231 + (-62738 * e))));
    }
    f = (((obj0.c & (h ? 59938 : e)) - (obj0.b ^ (-23520 ? c : obj0.d))) ? ((++ obj0.c) + (obj0.c + h)) : (((e - c) >= (50780 ? b : obj0.e)) ^ d));
  }
  d = ((((e * 30180) + -28678) - ((e ^ d) * obj0.e)) + (((obj0.d <= 25510) ? (-28633 + -55621) : -32558) - ((10287 & 34496) & (54974 != -56878))));
} else {
}
if(((((obj0.a | -41814) - a) ^ ((obj0.b < obj0.e) ? (54507 - obj0.e) : f)) != ((e & -47537) & obj0.d))) {
} else {
  if(((d * ((obj0.a >= obj0.c) ? (-36395 * -35902) : obj0.c)) >= (obj0.b + f))) {
    h = (((+ (-5828 <= -290)) & ((-54082 > 62699) ^ f)) + (((39771 | 48201) * (obj0.c * 64161)) * ((obj0.d <= obj0.e) * (b ? f : -26612))));
    if(((obj0.a + ((-16518 ? -36726 : -16115) * obj0.b)) >= (h - ((obj0.d < 34721) ? (b ? obj0.e : 33681) : b)))) {
    } else {
      obj0.e = (! ((obj0.a + a) * ((d > obj0.b) ? c : (f | 28444))));
      obj0.c = ((obj0.e & ((-45224 > g) ? (29864 | -45656) : (obj0.b ? obj0.e : h))) * (a | g));
      b = ((((42048 ? -16471 : 53186) ^ (a & -47098)) * ((obj0.a++ ) - (g * 30395))) + (((c | 29421) ^ (f + -21583)) & obj0.d));
    }
  } else {
    if((((e++ ) * obj0.b) > ((f <= (-31612 ? g : -44900)) & ((c | -4579) & b)))) {
      obj0.a = ((f | (g | h)) * ((a ^ (-15533 ? b : h)) ^ ((32610 * obj0.a) | (h - d))));
      obj0.c = obj0.b;
    } else {
      e = (((+ (b + obj0.c)) & ((obj0.b | b) ^ 10071)) + (((30240 ^ obj0.a) == obj0.a) - d));
      obj0.c = ((g & (obj0.e + obj0.e)) & ((-53787 > (e ^ obj0.e)) | (f & (c == h))));
    }
  }
  e = (((obj0.e ^ (46056 + h)) - -28111) * ((! (-22051 ? d : g)) + ((c & a) >= c)));
  obj0.c = 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');
})();
