//-------------------------------------------------------------------------------------------------------
// 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 = 11067;
b = -56546;
c = 63733;
d = -19513;
e = 11389;
f = -15232;
g = 23604;
h = 60104;
obj0.a = 46659;
obj0.b = -9548;
obj0.c = 52887;
obj0.d = -7924;
obj0.e = -65410;
ary[0] = -52681;
ary[1] = -2328;
ary[100] = 46810;
if(((d - g) > ((b ^ (52087 ? -39815 : -45795)) + (h & (obj0.b ? -41675 : f))))) {
  d = ((c - ((55181 < b) ? (d & 52547) : (d >= b))) ^ ((h - e) - f));
} else {
  b = ((((-52942 != f) ? (10738 - -46665) : obj0.c) - (obj0.a - h)) & (h - ((obj0.b >= -48851) ? -22483 : h)));
  if((((e | (47077 ^ -5033)) * (+ a)) < (((g ? -17789 : 24284) + (-18527 >= h)) - (+ 1080)))) {
    if(((obj0.c + ((f ? -39652 : h) * g)) != (((b | -25135) + -23624) | (d < (obj0.d - obj0.e))))) {
      g = ((obj0.b & obj0.c) & (obj0.d - ((-8039 | -14268) * (h ^ -12284))));
      h = ((((-44188 > obj0.d) ? (44193 * a) : g) | obj0.c) - ((b - (obj0.a * b)) + (f | obj0.b)));
      obj0.d = d;
    } else {
    }
    if((((obj0.d + obj0.e) - h) > (c + c))) {
      d = ((b * obj0.e) + ((58788 - b) + ((- e) | (g == obj0.b))));
      f = f;
    } else {
      d = -60631;
      g = ((-52307 + ((31675 | -39577) | (obj0.e - obj0.a))) ^ (((11646 >= h) >= h) ^ a));
      obj0.e = (((a++ ) + (59411 - b)) | ((b - (h <= obj0.e)) & (obj0.e++ )));
    }
  } else {
    if((((51184 & 24061) ^ ((-38599 < c) ? g : (! c))) < (b - (obj0.b + (12045 | -29958))))) {
    } else {
      obj0.b = d;
      b = (++ obj0.b);
    }
  }
}
c = -16187;
obj0.e = e;
if(((((h > obj0.e) & (-63312 - b)) - obj0.c) < (f - ((obj0.d ^ b) * (47520 & -53185))))) {
  obj0.d = (obj0.d++ );
  if((((++ obj0.b) + (-52761 ^ (f ^ a))) > ((obj0.d | (obj0.e * -24515)) & ((34980 > obj0.b) ^ (1688 + c))))) {
  } else {
  }
  a = ((((a | -18860) & (31132 & -5207)) | (c & g)) * (((obj0.b ^ 6460) > f) | (e > (-54581 | b))));
} else {
  if(((e | ((+ 60624) | (3569 - -53697))) == (obj0.d | h))) {
    if(((g ^ (! (-27460 * g))) != (obj0.b + b))) {
      obj0.c = (((obj0.a + a) & (! d)) ^ (((6548 <= -44751) ? f : (obj0.c + d)) - ((-40899 != -63845) ? (obj0.d ^ -5483) : (obj0.a >= -44376))));
      obj0.e = ((((62609 ? -8788 : 23233) | obj0.a) + ((b | d) ^ (b ^ 25095))) | (((22228 != -62025) & (obj0.c | 60099)) & 55638));
    } else {
      c = ((((h <= 39378) ? (-22339 + -17861) : (+ 47765)) | 51669) * (((obj0.c != obj0.b) ? g : (62285 & e)) ^ obj0.a));
    }
    obj0.d = 64690;
    if(((obj0.c - f) <= (((b * -25930) | d) - (obj0.c - obj0.d)))) {
    } else {
      obj0.a = -10275;
      f = 63978;
      b = obj0.c;
    }
  } 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');
})();
