//-------------------------------------------------------------------------------------------------------
// 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 = -37680;
b = 12024;
c = -56652;
d = -20891;
e = -44183;
f = 2299;
g = -6840;
h = 52926;
obj0.a = -37971;
obj0.b = -24128;
obj0.c = 23106;
obj0.d = 28163;
obj0.e = -7731;
ary[0] = -20696;
ary[1] = 13248;
ary[100] = 33625;
if((((c * (d ? 13591 : obj0.d)) + b) == (((-3563 & 12798) + (obj0.d ^ 7060)) - e))) {
  if(((a ^ obj0.a) != (((- -58854) ^ (-57280 + -1682)) * e))) {
    if(((10704 & (+ h)) <= (b | (obj0.c - obj0.a)))) {
      d = ((((-64250 ^ obj0.b) * (-62456 - b)) + (-53663 + d)) == (obj0.d * f));
    } else {
      a = ((((55809 * a) | (50430 >= c)) - (h * (obj0.d * a))) ^ (((c ^ 34543) + g) * ((a != obj0.a) ? obj0.a : (obj0.a ^ obj0.a))));
      obj0.d = -11964;
    }
    if(((((51578 <= 12003) ? (b ? a : g) : obj0.d) ^ g) < (((obj0.e * b) & (! obj0.c)) ^ (obj0.d + (d * -17721))))) {
      obj0.e = obj0.d;
      obj0.c = ((((f | 63985) ^ (b + obj0.d)) | f) == (((23957 * 19445) ^ (5414 * obj0.b)) | (20302 & (56193 * -20495))));
      a = (((obj0.c & (e - 42326)) - ((obj0.d++ ) + obj0.e)) & (((e * -22804) <= d) ^ (obj0.e + b)));
    } else {
      obj0.d = obj0.c;
    }
    g = c;
  } else {
    if(((((29164 == obj0.b) ? f : -23859) + ((obj0.a ^ -43720) - obj0.e)) <= (a | (- (++ d))))) {
      obj0.e = b;
    } else {
      h = ((((obj0.c++ ) - (3121 & obj0.d)) + d) != (((-11382 == obj0.c) ? (h & b) : (a + obj0.c)) ^ (+ (-46352 + d))));
    }
  }
  if((((a | (-27873 != obj0.a)) - e) < (((a > d) ? (f * -8963) : obj0.d) + obj0.c))) {
  } else {
    f = (++ obj0.b);
    if(((e ^ obj0.b) < (((obj0.b >= 4828) * obj0.a) | ((-23771 <= -45525) ? (obj0.a & obj0.c) : 48883)))) {
      c = h;
      c = -25062;
    } else {
      obj0.d = ((d + (h > (58182 | 22258))) > ((e + (3079 ? f : -33428)) + ((a - -14146) <= d)));
      g = (obj0.e++ );
      b = obj0.e;
    }
    obj0.d = h;
  }
  if(((((38145 - h) + (obj0.b ? 33503 : 20542)) + e) == (obj0.e + ((c - 43839) + e)))) {
    obj0.d = ((f ^ d) ? (((obj0.b ? 34588 : -10994) - (37604 | obj0.e)) & ((3820 & -5302) - obj0.d)) : ((++ e) & ((obj0.a - 5712) + f)));
  } else {
    if((((obj0.d++ ) & e) == (((f != obj0.c) ^ (c | -635)) | d))) {
      g = ((((obj0.d > obj0.c) ? (-53880 ? a : -31930) : (e ? 15039 : 51419)) | (c * (26861 & obj0.b))) - (((1574 == -3418) ? (obj0.c + e) : (d * -6267)) - obj0.e));
    } else {
      b = ((obj0.b & g) | (c ^ ((g != -27813) ? obj0.a : (57494 | a))));
      obj0.c = f;
      f = (((g | (+ d)) * ((-4625 >= -33028) ? (-28100 ^ obj0.a) : (55136 * 41956))) | (((31511 + -48122) + (51361 ? -17423 : obj0.c)) * obj0.e));
    }
    if(((((e & 35692) ^ a) | obj0.a) <= (f + ((obj0.d - -33931) + (obj0.a++ ))))) {
    } else {
      obj0.b = ((((58443 - g) - g) ^ obj0.e) | (((d ? -64952 : a) & (-60148 ^ 12344)) * (c & 65069)));
    }
    if(((((a == -28234) ? (obj0.e > obj0.c) : -21673) & ((-40626 != 47052) ? (b | a) : (+ 52620))) == (((-27931 != h) ? obj0.d : a) - ((28426 & g) & (+ -39511))))) {
    } else {
      c = obj0.e;
      f = (+ ((-26874 * (-11135 | obj0.c)) * obj0.c));
    }
  }
} else {
}
if(((b ^ ((-35344 != -17232) ? -31690 : obj0.e)) != ((obj0.a * g) * ((-49662 * obj0.a) ^ b)))) {
  c = 38879;
  if(((g + e) == ((63763 | obj0.b) * c))) {
    obj0.d = ((((- 6283) | g) + obj0.b) & ((! 20493) | obj0.a));
    g = ((a & g) + ((obj0.e - a) | 1331));
  } else {
    if(((((-55361 ? 13513 : -502) & a) ^ obj0.e) > ((+ (f++ )) ^ ((e - h) * (c - 37148))))) {
    } else {
      f = ((((f | f) >= (obj0.b ? a : g)) | obj0.c) ^ ((! 40179) & obj0.b));
    }
    if(((((++ obj0.e) * obj0.a) & ((b ^ 2410) == e)) <= (f + (3475 ^ e)))) {
      d = ((((obj0.d | a) - obj0.e) | (e * (c + 10044))) + (obj0.d * -55316));
      b = e;
    } else {
      g = ((((obj0.e > 28698) ? obj0.a : (-9102 ? -55705 : obj0.d)) ^ (e & (! 24655))) != (((14428 | 29068) & (c++ )) | (obj0.a ^ (-10277 + 25984))));
    }
  }
  if(((((-40755 ^ 15422) * (e ^ 4071)) ^ (f + (+ -13781))) >= ((a & (-39055 ^ -9340)) & ((-36760 < h) ? g : obj0.c)))) {
    obj0.b = ((((15835 + -10679) * obj0.d) ^ d) ^ (obj0.d + ((18752 | f) | obj0.e)));
    g = c;
  } else {
    if(((((-57265 & obj0.e) * e) * -30526) < ((b | 52194) + obj0.c))) {
      e = ((b - ((c <= -27819) ? (9628 - a) : (17869 | h))) ? (g - obj0.e) : (((-52757 & h) ^ (! a)) + ((a < obj0.c) ? obj0.a : (-47395 * -42887))));
    } else {
      g = (obj0.a++ );
    }
    if(((((17067 == f) ? (c != 40106) : (-37456 & 9401)) - ((60619 ? c : e) | (++ e))) > ((-31691 < (-23000 + 53557)) | ((53488 <= 6804) & (-50645 | 40204))))) {
    } else {
      obj0.b = f;
      a = 18670;
    }
    if(((obj0.d * (obj0.e - (++ obj0.b))) <= ((h + (3590 * obj0.e)) - ((obj0.d + f) + c)))) {
      a = ((a * g) ? ((-57502 & (obj0.a ^ b)) ^ h) : (((-53337 < 37429) ? (27177 ^ d) : (45350 - obj0.c)) + h));
    } else {
    }
  }
} else {
}
if(((((c ? c : obj0.a) & obj0.e) * (16212 | (d & 2263))) <= ((-35670 & (++ obj0.e)) ^ ((b != obj0.e) - obj0.a)))) {
} else {
  f = obj0.b;
}
b = ((((f == h) ? h : f) & ((35909 + 57721) < obj0.b)) | ((d - (h ^ obj0.e)) * (obj0.d ^ g)));
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');
})();
