//-------------------------------------------------------------------------------------------------------
// 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 = -25462;
b = 859;
c = 42883;
d = -62018;
e = -7389;
f = -22034;
g = 36540;
h = -28683;
obj0.a = -42244;
obj0.b = -56123;
obj0.c = -8923;
obj0.d = 38685;
obj0.e = -49387;
ary[0] = -8893;
ary[1] = -24695;
ary[100] = -18118;
if(((((43946 != -1580) ? e : (63277 ? 35120 : 56543)) + ((25348 * obj0.c) < (h ? -13831 : -10399))) > (obj0.c + (b & h)))) {
  obj0.a = obj0.e;
  if(((((obj0.b & 51724) == a) | -42999) != (obj0.b & e))) {
    if((((+ 61572) & ((+ 38887) ^ (+ obj0.a))) == (((+ 51258) | (-3858 * obj0.b)) * ((obj0.d + 40821) & (-18800 * 41975))))) {
      obj0.a = ((((37989 ^ a) + a) - obj0.a) + ((a ^ obj0.e) * 22180));
      b = (((! (-32565 & -38154)) ^ (obj0.e - (obj0.d ? 42920 : -37894))) < ((obj0.d * b) - (g + g)));
    } else {
    }
    if((((a + (g | obj0.e)) ^ (e | (obj0.e - 40377))) != (((6307 == obj0.e) ? (h ? c : 44964) : (26174 ? -1958 : obj0.a)) & ((g ? b : 34676) + (-14390 + a))))) {
      obj0.c = (((b - (+ f)) - (b & (-52707 - 11784))) * (g + ((-59186 - -35178) ^ (g < 13687))));
      obj0.b = g;
      obj0.d = ((obj0.d - ((a - a) & (h * obj0.a))) | (((-54705 * f) + (h ^ 22969)) ^ ((++ h) - a)));
    } else {
      obj0.c = ((b | g) ^ (c | ((-33611 - obj0.b) - (-12191 + a))));
      obj0.d = ((f + obj0.a) >= (a ^ ((! d) - (g & -38032))));
      d = -21646;
    }
  } else {
    if(((30156 * obj0.c) <= (obj0.e - (g | (h | -56134))))) {
      b = ((((e + obj0.d) * (-37568 ? 34725 : -58037)) + ((-26254 - 44910) + (obj0.a < -62343))) ? ((h & obj0.b) | obj0.c) : ((b & obj0.e) + ((-10716 != a) ? f : h)));
      c = b;
    } else {
    }
    a = ((h ^ (-37282 ^ (-15429 ? -52446 : obj0.b))) == ((b++ ) & a));
    f = ((((1051 * b) - (obj0.e <= -13906)) + ((obj0.d >= obj0.a) ? obj0.c : (f ^ -41145))) ^ ((obj0.a++ ) - -37131));
  }
  if((((obj0.c - e) & -41741) >= (((obj0.c > f) ? (obj0.b + 50554) : (28512 ? 10210 : g)) + (50866 + obj0.c)))) {
    if(((b * e) >= (a + b))) {
      obj0.d = d;
    } else {
      obj0.c = obj0.b;
      d = (((obj0.c + (g ^ d)) - g) & (((obj0.c ? a : a) == b) & (++ d)));
      obj0.a = ((obj0.b + ((5711 ^ 38745) <= (d ? a : b))) ^ (obj0.b & c));
    }
  } else {
    if(((((-7776 & 12839) ^ 49417) | ((-39876 ^ 27374) ^ d)) >= (g - (- g)))) {
      obj0.b = f;
      f = ((a + ((16792 ? h : 55804) + (48867 + 22368))) * (d - -43699));
    } else {
      c = (- ((g | (- -8013)) & (h ^ b)));
    }
    if(((obj0.c | ((-59096 + e) >= (-4315 * -45388))) < ((obj0.d | (-46274 + 5616)) & (e * (obj0.d | obj0.e))))) {
      obj0.e = ((((-4933 - b) + (c <= 57836)) - ((24022 | obj0.e) < obj0.d)) - ((- e) | ((d - -38574) * (7953 - obj0.a))));
    } else {
    }
    obj0.d = ((((obj0.a <= d) + (-52223 ? -29735 : b)) + (c + (obj0.a <= d))) & (16274 - (- (-26433 * 15111))));
  }
} else {
  h = ((d - obj0.a) - (43692 - -25302));
  if(((obj0.b | obj0.e) > (((28581 ? 37459 : 11719) | obj0.d) - ((-18807 != f) ? a : (-474 ? f : 53872))))) {
    if(((((8035 ^ -39859) < (obj0.b ^ -44008)) | ((+ -1846) + (+ -41738))) > ((obj0.b ^ h) ^ (d > g)))) {
    } else {
      a = (+ (obj0.c * ((obj0.b >= obj0.e) ? obj0.c : obj0.c)));
    }
    obj0.d = -2638;
  } else {
    obj0.d = obj0.e;
    c = (+ (((-48285 < -63083) & c) + ((b + -53372) <= obj0.e)));
    if(((((-37347 + obj0.b) + f) + g) < (obj0.b * -63434))) {
      obj0.b = a;
      f = g;
    } else {
      h = obj0.e;
    }
  }
  if(((((obj0.a - 36792) | d) + ((obj0.a++ ) | (10843 + -56954))) <= ((30529 | obj0.d) * (b + (- obj0.e))))) {
  } else {
  }
}
if((((48704 - (obj0.e & f)) - -46277) <= (((e ^ f) * b) | ((-53892 <= obj0.e) ? (c ? obj0.e : obj0.e) : (++ e))))) {
  obj0.e = f;
  if((((obj0.d ^ (- f)) * 46980) != (c - (obj0.a | h)))) {
    obj0.a = (((obj0.b & (-19512 - obj0.c)) * ((h ^ d) - b)) ^ (((obj0.d * 11723) > -14748) ^ h));
    c = obj0.b;
    if(((((-6929 * obj0.c) <= d) + (e + b)) < (obj0.b & b))) {
      obj0.c = ((((8429 * a) | b) & ((-37623 > -44683) ? (c == f) : (obj0.e - obj0.a))) * (((19469 * obj0.a) < (+ b)) * (+ e)));
      obj0.b = ((g ^ obj0.b) | (((32562 - obj0.c) * (b >= h)) & (obj0.c & (-58923 | g))));
      d = ((obj0.a * obj0.d) ? (((e * h) | obj0.d) & (19675 + 58101)) : (g | (d - (h * -53942))));
    } else {
      h = 3836;
    }
  } else {
    obj0.e = -29535;
    if(((((27659 + obj0.a) * b) * ((obj0.d++ ) ^ (e & a))) < (((! h) | (obj0.d ^ obj0.e)) * -3820))) {
      h = e;
      h = (((a - (-15861 != 58097)) + ((18764 * obj0.c) + (-28461 ? obj0.b : obj0.a))) | (a * 36657));
    } else {
    }
  }
  if(((e | ((obj0.e == -13282) ? d : (37792 ^ a))) < (g * f))) {
    if(((h ^ ((d == d) ? (obj0.c ^ g) : (+ obj0.c))) == (((h - -55779) + (obj0.c & 10457)) | a))) {
      obj0.c = d;
      a = obj0.c;
      a = ((((b * 46359) <= obj0.c) + (obj0.c * (59310 < 23008))) >= (-56929 - (g & (4248 == 23401))));
    } else {
    }
    e = (((h | obj0.e) + g) - (((d ^ -64831) + e) ^ ((e <= obj0.c) != (-40754 ? 25188 : 21584))));
    e = e;
  } else {
  }
} else {
  obj0.a = (((obj0.d + obj0.c) | ((-5673 < -25068) ^ (-42487 - 1846))) - (h * obj0.a));
  if(((obj0.c | obj0.a) >= (((h != 45552) ^ (e | a)) + d))) {
  } else {
  }
}
if(((((d ^ -60396) + obj0.d) - (+ (-25606 | -15626))) != (f - a))) {
} else {
  e = ((((c | a) >= (a & -4497)) | ((g <= g) ? (obj0.e ^ f) : (g & g))) ^ (g - -43499));
}
e = ((((-34880 ? g : 36607) + (g == obj0.b)) - ((d * obj0.d) & (c + obj0.d))) + ((e | obj0.a) | (e++ )));
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');
})();
