//-------------------------------------------------------------------------------------------------------
// 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 = -63083;
b = -59717;
c = 60602;
d = 54624;
e = 43254;
f = -5164;
g = 40810;
h = 21498;
obj0.a = 60443;
obj0.b = -39347;
obj0.c = 15355;
obj0.d = 1387;
obj0.e = 9306;
ary[0] = 33025;
ary[1] = -9031;
ary[100] = -5785;
if(((((obj0.d + 7240) * (-65115 | obj0.a)) | (d & (260 & 13937))) >= ((obj0.e * (33480 & -29073)) | (a & -19757)))) {
  if((((h * (h * obj0.a)) * (! (obj0.b != 49949))) != (((obj0.b >= obj0.d) ? f : (h ^ f)) - ((c - -20218) >= (9741 | obj0.c))))) {
    c = obj0.a;
    f = (((obj0.c - obj0.a) & ((-25010 & h) + (-26681 == b))) == (c & ((-48347 | -56372) * (+ obj0.e))));
  } else {
    f = h;
    if((((b - e) ^ c) == (b | ((-16846 ^ -4741) - (obj0.d != -26280))))) {
    } else {
    }
    obj0.b = obj0.c;
  }
} else {
  if(((d & (52150 | c)) == ((h ^ (h ^ c)) ^ f))) {
    obj0.b = d;
  } else {
    h = ((obj0.c & obj0.d) | (((23489 + b) * obj0.a) | (obj0.c + a)));
    obj0.b = (((+ (-20647 ^ 50704)) & ((-7428 == 57510) ? e : a)) + (((-28251 ? -6423 : -42594) & (e ? -23209 : 55216)) - h));
  }
}
if(((d - 52233) >= (((-29206 + 59557) | b) | 51405))) {
  if(((47561 & ((+ obj0.d) | -21512)) <= (e * f))) {
    g = ((obj0.e ^ (++ c)) != ((obj0.c + 51791) * e));
    c = ((a * ((d++ ) < obj0.a)) + (f - b));
    f = (+ (-54962 & (b - (+ -12241))));
  } else {
    if(((40132 - (obj0.a - (35715 & 43356))) > ((++ obj0.b) - e))) {
      f = obj0.a;
      obj0.b = (((obj0.c * g) * obj0.e) * (c & ((28187 * 4047) * b)));
    } else {
    }
  }
  if((((g++ ) * ((10962 ^ 56518) + (++ g))) != (c | e))) {
    d = obj0.d;
  } else {
    c = ((((-29697 - c) != -26225) + ((-17819 - e) | obj0.c)) < (d | ((-3388 == -36357) ? f : (c * obj0.a))));
    a = d;
    obj0.a = 27729;
  }
  obj0.d = g;
} else {
  if((((d ^ obj0.e) - 47239) != (((+ c) * (41460 ? obj0.d : obj0.a)) & f))) {
    if(((obj0.d * ((-56626 * obj0.e) != (d - d))) != (b ^ f))) {
      c = 42046;
    } else {
      f = e;
      a = ((((c + obj0.c) & d) - ((-52890 * obj0.e) | 17168)) - (b * ((obj0.d ^ 22558) ^ (- obj0.e))));
      f = (++ e);
    }
    if(((g ^ b) < ((17191 + obj0.e) | ((3230 ? h : obj0.a) | c)))) {
      b = ((((a < g) ? (-39120 & obj0.d) : (+ -46217)) - (obj0.d & a)) < (h | obj0.c));
      a = (((- (obj0.e - 41726)) | (obj0.d - obj0.d)) - (d - obj0.c));
      obj0.e = obj0.a;
    } else {
    }
  } else {
  }
  e = obj0.b;
  e = c;
}
h = obj0.e;
d = h;
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');
})();
