//-------------------------------------------------------------------------------------------------------
// 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 = 47567;
b = -22595;
c = 20996;
d = 45062;
e = 29318;
f = -52629;
g = -21436;
h = -11743;
obj0.a = 32297;
obj0.b = 447;
obj0.c = -49538;
obj0.d = -51747;
obj0.e = -60644;
ary[0] = -61175;
ary[1] = 35145;
ary[100] = -21845;
if(((((-24886 * obj0.b) & (-28590 + g)) + ((-28796 ^ h) | (2566 - g))) <= ((++ obj0.e) * (26353 - (+ 64874))))) {
  f = obj0.b;
} else {
  if(((((c + e) * (d ? 19986 : 31692)) + a) == ((b & a) & g))) {
    if((((-51089 - (47121 ? obj0.e : obj0.e)) & obj0.d) != (obj0.a & g))) {
      h = ((obj0.a - f) + ((39406 + (60708 ? obj0.d : -41094)) & obj0.c));
    } else {
      c = (((d * (+ obj0.b)) + (-3722 ^ -41982)) & (((b - 48913) + (25478 <= 33633)) ^ (d++ )));
    }
    obj0.a = (((e++ ) - h) ? (((obj0.c * obj0.d) - c) - (obj0.c > (! 44057))) : ((obj0.a ^ (-60451 ^ obj0.e)) & obj0.c));
  } else {
    if(((f & obj0.d) != ((b == (- -23344)) * (14129 ^ (-8604 >= obj0.b))))) {
      obj0.b = (((- a) & (h - (64818 ? c : -50372))) * (c - ((g ^ 55057) == (c ? obj0.e : 48832))));
    } else {
      obj0.c = obj0.e;
      d = ((((6306 <= obj0.a) - (obj0.d + -8543)) + ((++ e) >= (46712 | -41452))) * ((a == (58492 > h)) | a));
    }
    d = (++ f);
    if(((((e >= -59549) ? (obj0.a + obj0.a) : (f & -21329)) - b) <= ((b & (h & h)) * (obj0.e ^ (14774 ^ -19103))))) {
    } else {
    }
  }
  if(((((g > obj0.d) ? (54828 * obj0.d) : (f ? obj0.a : -48438)) | ((! f) & (obj0.b ? -37837 : 30357))) <= (g ^ ((+ a) & b)))) {
    if(((d ^ b) <= (((obj0.e <= 41448) ? (obj0.b - 30324) : (-45591 - g)) - ((f * 21964) | obj0.e)))) {
      obj0.b = ((54456 + ((d ^ b) - 22474)) - (h | obj0.d));
    } else {
    }
    h = (+ ((d++ ) & ((e & -12613) >= (28950 * c))));
    if((((h++ ) - ((-6855 < -7889) | (obj0.c * 47844))) < ((obj0.b * (-19071 & -42901)) - obj0.d))) {
    } else {
    }
  } else {
  }
  obj0.a = c;
}
if(((e + (g + (-38954 + e))) <= (a ^ 62304))) {
  if((((! (10042 | 16129)) | (-45367 + a)) > (((10234 != d) ? (++ c) : (obj0.c & -38317)) * ((obj0.a * b) | (59671 ^ -54606))))) {
  } else {
    if(((obj0.e + ((g >= -44557) ? (-29024 ^ 2768) : (59664 & -2308))) == (h & (h + (52368 - -20786))))) {
    } else {
      e = obj0.b;
      h = obj0.b;
    }
    if((((+ (38356 + e)) * ((4327 & 21749) ^ obj0.c)) <= ((! 13605) | ((-23907 - -17753) * (f + obj0.a))))) {
      obj0.e = ((((obj0.d & -4566) * (obj0.e & 25848)) * h) > ((61461 * obj0.a) - obj0.a));
      obj0.a = (((+ g) - e) + (obj0.d ^ ((obj0.c ^ f) - (-26300 ? b : obj0.c))));
      g = ((((-28965 != obj0.b) + (-11779 < e)) - ((g ? 23795 : 52194) == -56240)) ^ (((! obj0.e) & f) - (h | (c + -38261))));
    } else {
      obj0.a = ((obj0.a | (-10530 * (obj0.a | 52773))) ? (-44651 * 49283) : (((g + g) + (a ^ -34365)) | ((h > -16684) ? b : f)));
      g = 26196;
    }
    h = a;
  }
  if(((obj0.c * f) <= (c * f))) {
  } else {
    f = ((obj0.a + 29828) | (((38319 ? 1648 : 24828) | obj0.e) * ((-25520 <= 22107) ? (obj0.e - obj0.d) : 5227)));
  }
} else {
  e = e;
  if((((obj0.b ^ obj0.e) & obj0.c) != (((4218 > 28985) ? obj0.e : -44019) * e))) {
    if((((obj0.a ^ obj0.c) - ((h ^ 36815) ^ a)) == ((obj0.c | (a <= g)) * g))) {
    } else {
    }
    if(((((-51324 - c) != obj0.c) & 1418) != (((! 38083) & (-20099 * obj0.e)) | ((! obj0.c) < f)))) {
      obj0.d = obj0.c;
      d = (+ (d + ((-15448 <= 38566) + e)));
    } else {
      obj0.c = ((41964 | obj0.c) >= (((37215 == h) + (39906 & 64008)) + ((41528 != a) ? (23897 & -36093) : (-26702 != -22053))));
      c = 41991;
      obj0.d = obj0.b;
    }
  } else {
    if(((obj0.e - (-46787 - (obj0.d - -27654))) <= (b - obj0.d))) {
      e = h;
      obj0.d = ((c ^ e) ^ (obj0.a | h));
      c = g;
    } else {
      c = -30955;
      d = h;
      obj0.e = b;
    }
    obj0.a = ((((obj0.c & g) ^ (d ^ 4653)) ^ (f ^ (-13345 & obj0.d))) >= (h - h));
  }
}
if(((d & (g++ )) > (-52748 ^ obj0.d))) {
  obj0.a = ((((obj0.a ? 47860 : 21386) + (- obj0.e)) - (a & c)) ^ ((obj0.e++ ) ^ a));
  d = g;
} else {
  obj0.a = obj0.c;
}
obj0.e = (((-3913 - obj0.d) | d) & (((obj0.e - -45624) ^ (g ^ 36004)) * obj0.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');
})();
