//-------------------------------------------------------------------------------------------------------
// 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 obj0 = 1;
  var obj3 = new Object();
  var d = -1020164136;
  var __loopvar0 = 0;
  while((((obj0.length * (d || 1315703523.1) + (obj3.length-- )) < Math.exp(1))) && __loopvar0 < 3) {
    __loopvar0++;
  }
})();

(function(){
  var ary = new Array(10);
  var f = 1;
  var g = -2.15674217037325E+18;
  switch(Math.sqrt((f++ ))) {
    case (~ (g-- )): 
      break;
    case 1: 
      break;
  }
  WScript.Echo("ary[11] = " + (ary[11]|0));;
})();

WScript.Echo(Math.abs(Math.log("     1234")-7.1180162044653334));
(function(){
  var c = -2147483648;

  for(var __loopvar0 = 0; c < (c &= 1) && __loopvar0 < 3; __loopvar0++) {
  }
})();

(function() {
function makeArrayLength(x) { if(x < 1 || x > 4294967295 || x != x || isNaN(x) || !isFinite(x)) return 1; else return Math.floor(x); };
function func4() { return 19/10.5; }
var ary = new Array(10);
var obj0 = new Object();
var obj1 = new Object();
var a;
var b;
var c;
var d;
var e;
a = 47333;
b = -136373;
c = 36447;
d = 114405;
e = -108426.5;
obj0.a = 61145;
obj0.b = -29924.5;
obj0.length = -60152;
obj1.a = 30053.5;
obj1.b = -56468;
obj1.length = -109682;
ary.length = makeArrayLength(48576.5);
ary[0] = 100477;
ary[1] = 139604.5;
ary[100] = 126474;
obj1.b = func4((obj0.length = (Math.exp(1) / ((1 ? ary[((142594.5 >= 0 ? 142594.5 : 0))] : (obj1.a + (-63775.5 + 1))) == 0 ? 1 : (1 ? ary[((142594.5 >= 0 ? 142594.5 : 0))] : (obj1.a + (-63775.5 + 1)))))));
WScript.Echo("ary.length = " + (ary.length));

})();

(function() {
function makeArrayLength(x) { if(x < 1 || x > 4294967295 || x != x || isNaN(x) || !isFinite(x)) return 1; else return Math.floor(x); };
 
var ary = new Array(10);
var obj0 = new Object();
var obj1 = new Object();
var a;
var b;
var c;
var d;
var e;
a = 110697;
b = -96845.5;
c = 5943;
d = 25019.5;
e = 5322.5;
obj0.a = 41966.5;
obj0.b = -88228;
obj0.length = 103325;
obj1.a = -124253.5;
obj1.b = -49960;
obj1.length = -147460.5;
ary.length = makeArrayLength(131505);
ary[0] = 10081.5;
ary[1] = 120447;
ary[100] = -20342;
 
a ^= ((obj1.b /= (obj0.a -= -48715.5)) + (1 + ((d |= Math.log((ary.length= makeArrayLength(ary[((((65395.5 * -43852) & (obj0.a ^= ((1 <= 1) / (-4998.5 == 0 ? 1 : -4998.5)))) >= 0 ? ((65395.5 * -43852) & (obj0.a ^= ((1 <= 1) / (-4998.5 == 0 ? 1 : -4998.5)))) : 0))])))) ? 1 : 1)));
 
WScript.Echo("ary[1] = " + (ary[1]));
WScript.Echo("ary[100] = " + (ary[100]));
WScript.Echo("length is  " + (ary.length));
WScript.Echo('done');
})();
 
(function () {
    function func3() { return -10.5; }
    var obj1 = new Object();
    obj1.b = 41485;
    if (((Math.sin((1 >= 1)) / ((1 & (1 == 1)) == 0 ? 1 : (1 & (1 == 1)))) * func3(obj1.b))) {
    }
})();

(function() {
function makeArrayLength(x) { if(x < 1 || x > 4294967295 || x != x || isNaN(x) || !isFinite(x)) return 1; else return Math.floor(x); };
function func() { return -1; }
var ary = new Array(10);
var obj0 = new Object();
var obj1 = new Object();
var a;
var b;
var c;
var d;
var e;
a = -29352;
b = 133253.5;
c = -28414;
d = 64342;
e = -59978.5;
obj0.a = -14451;
obj0.b = -111340;
obj0.length = -8681.5;
obj1.a = 9182;
obj1.b = -75781;
obj1.length = 81832;
ary.length = makeArrayLength(69142.5);
ary[0] = 46710;
ary[1] = 104455.5;
ary[100] = -51496.5;
;
;
;
;
;
;
obj1.b *= (obj0.a ^= (Math.atan((1 >= 1)) / ((obj0.b= (Math.atan(obj0.b))) == 0 ? 1 : (obj0.b= (Math.atan(obj0.b))))));
;
;
;
;
;
;
;
;
;
;
;
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("obj0.a = " + (obj0.a>>3));
WScript.Echo("obj0.b = " + (obj0.b>>3));
WScript.Echo("obj0.length = " + (obj0.length>>3));
WScript.Echo("obj1.a = " + (obj1.a>>3));
WScript.Echo("obj1.b = " + (obj1.b>>3));
WScript.Echo("obj1.length = " + (obj1.length>>3));
WScript.Echo("ary.length = " + (ary.length>>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');
})();

(function() {
function makeArrayLength(x) { if(x < 1 || x > 4294967295 || x != x || isNaN(x) || !isFinite(x)) return 1; else return Math.floor(x); };
function func() { return -1; }
var ary = new Array(10);
var obj0 = new Object();
var obj1 = new Object();
var a;
var b;
var c;
var d;
var e;
a = -150473;
b = -99096;
c = -110517.5;
d = -51014.5;
e = 20982.5;
obj0.a = 103859;
obj0.b = -134672;
obj0.length = 25696.5;
obj1.a = -17132;
obj1.b = 13572;
obj1.length = 77310.5;
ary.length = makeArrayLength(-51381.5);
ary[0] = -4621;
ary[1] = -14242.5;
ary[100] = 30492;
;
;
for(var __loopvar0 = 0; d < ((obj0.length /= (a ^= (1 + (1 + (b= ((65406.5 * -1)))))))) && __loopvar0 < 3; d++ + __loopvar0++) {
;
}
;
;
;
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("obj0.a = " + (obj0.a>>3));
WScript.Echo("obj0.b = " + (obj0.b>>3));
WScript.Echo("obj0.length = " + (obj0.length>>3));
WScript.Echo("obj1.a = " + (obj1.a>>3));
WScript.Echo("obj1.b = " + (obj1.b>>3));
WScript.Echo("obj1.length = " + (obj1.length>>3));
WScript.Echo("ary.length = " + (ary.length>>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');
})();

(function () {
    function makeArrayLength(x) { if (x < 1 || x > 4294967295 || x != x || isNaN(x) || !isFinite(x)) return 1; else return Math.floor(x); };
    function func() { return -10.5; }

    var ary = new Array(10);
    var obj0 = new Object();
    var obj1 = new Object();
    var a;
    var b;
    var c;
    var d;
    var e;
    a = -6502;
    b = 131148.5;
    c = 31628.5;
    d = 57801;
    e = 32432;
    obj0.a = -108711.5;
    obj0.b = -63039;
    obj0.length = -93989;
    obj1.a = -48284;
    obj1.b = 17930.5;
    obj1.length = 39465.5;
    ary.length = makeArrayLength(114548.5);

    if ((d -= (e = ((obj1.a = (((a = (Math.atan((obj1.length *= (obj1.a -= (obj1.b += (Math.exp(1) + (1 + func((obj0.length |= Math.asin((!1)))))))))))) ? 1 : 1))))))) {
    }

})();

(function () {
    function makeArrayLength(x) { if (x < 1 || x > 4294967295 || x != x || isNaN(x) || !isFinite(x)) return 1; else return Math.floor(x); };
    var ary = new Array(10);
    var obj1 = new Object();

    a = 28594.5;
    a = ((a = Math.sin((Math.acos(((1 / (2 == 0 ? 1 : 2)) * (ary.length = makeArrayLength(Math.exp(a))) + 1)) ? 1 : 1))) ? 1 : 1);

})();

function wallDistance(theta) {
    var data = [];
    face = [];
    var x = playerPos[0], y = playerPos[1];
    var deltaX, deltaY;
    var distX, distY;
    var stepX, stepY;
    var mapX, mapY
    var atX = Math.floor(x), atY = Math.floor(y);
    var thisRow = -1;
    var thisSide = -1;
    var lastHeight = 0;
    for (var i = 0; i < samples; i++) {
        theta += pi / (3 * samples) + 2 * pi;
        theta %= 2 * pi;
        mapX = atX, mapY = atY;
        deltaX = 1 / Math.cos(theta);
        deltaY = 1 / Math.sin(theta);
        if (deltaX > 0) {
            stepX = 1;
            distX = (mapX + 1 - x) * deltaX;
        }
        else {
            stepX = -1;
            distX = (x - mapX) * (deltaX *= -1);
        }
        if (deltaY > 0) {
            stepY = 1;
            distY = (mapY + 1 - y) * deltaY;
        }
        else {
            stepY = -1;
            distY = (y - mapY) * (deltaY *= -1);
        }
        for (var j = 0; j < 20; j++) {
            if (distX < distY) {
                mapX += stepX;
                if (arena[mapX][mapY]) {
                    if (thisRow != mapX || thisSide != 0) {
                        if (i > 0) {
                            data.push(i);
                            data.push(lastHeight);
                        }
                        data.push(i);
                        data.push(distX);
                        thisSide = 0;
                        thisRow = mapX;
                        face.push(1 + stepX);
                    }
                    lastHeight = distX;
                    break;
                }
                distX += deltaX;
            }
            else {
                mapY += stepY;
                if (arena[mapX][mapY]) {
                    if (thisRow != mapY || thisSide != 1) {
                        if (i > 0) {
                            data.push(i);
                            data.push(lastHeight);
                        }
                        data.push(i);
                        data.push(distY);
                        thisSide = 1;
                        thisRow = mapY;
                        face.push(2 + stepY)
                    }
                    lastHeight = distY;
                    break;
                }
                distY += deltaY;
            }
        }
    }
    data.push(i);
    data.push(lastHeight);
    return data;
}

(function () {
    b = 4.5;
    e = 3.5;
    b = Math.cos(1) * ((-53298.5 + (1 ^ e)) + 1);
})();

// Among other things, verify that code to create an array literal can be cloned.
function animateLogo() {
if (document.all)
{
 yBase = window.document.body.offsetHeight/4;
 xBase = window.document.body.offsetWidth/4;
}
else if (document.layers)
{
 yBase = window.innerHeight/4;
 xBase = window.innerWidth/4;
}
if (document.all)
{
 for ( i = 0 ; i < starsDiv.all.length ; i++ )
 {step=3;
  starsDiv.all[i].style.top = Ypos + yBase*Math.cos((currStep + i*4)/12)*Math.cos(0.7+currStep/200);
  starsDiv.all[i].style.left = Xpos + xBase*Math.sin((currStep + i*3)/10)*Math.sin(8.2+currStep/400);
  for (ai=0; ai < Clrs.length; ai++)
    {
     var c=Math.round(Math.random()*[ai]);
    }
    starsDiv.all[i].style.background=Clrs[c];
 }
}
else if (document.layers)
{
 for ( j = 0 ; j < 14 ; j++ ) //number of NS layers!
 {step = 4;
  var templayer="a"+j
  document.layers[templayer].top = Ypos + yBase*Math.sin((currStep + j*4)/12)*Math.cos(0.7+currStep/200);
  document.layers[templayer].left = Xpos + xBase*Math.sin((currStep + j*3)/10)*Math.sin(8.2+currStep/400);
  for (aj=0; aj < Clrs.length; aj++)
    {
     var c=Math.round(Math.random()*[aj]);
    }
    document.layers[templayer].bgColor=Clrs[c]; 
 }
}
currStep+= step;
setTimeout("animateLogo()", 10);
}

// command line: -forcenative 
(function() {
function makeArrayLength(x) { if(x < 1 || x > 4294967295 || x != x || isNaN(x) || !isFinite(x)) return 1; else return Math.floor(x); };
function func() { return -1; }
var ary = new Array(10);
var obj0 = new Object();
var obj1 = new Object();
var a;
var b;
var c;
var d;
var e;
a = 54487.5;
b = 25226;
c = -34789.5;
d = 166087.5;
e = -125923;
obj0.a = 92602;
obj0.b = -119826;
obj0.length = 55006.5;
obj1.a = -13927;
obj1.b = 75056.5;
obj1.length = 100360.5;
ary.length = makeArrayLength(15114.5);
ary[0] = -33305;
ary[1] = 84634;
ary[100] = 108277;
;
;
c &= 1;
;
;
;
;
;
;
;
d |= (Math.atan((a &= (obj1.b ^= (a -= (Math.pow(1, 1) * (obj0.b ^= (1 + (c + 1)))))))) ? 1 : 1);
;
;
;
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("obj0.a = " + (obj0.a>>3));
WScript.Echo("obj0.b = " + (obj0.b>>3));
WScript.Echo("obj0.length = " + (obj0.length>>3));
WScript.Echo("obj1.a = " + (obj1.a>>3));
WScript.Echo("obj1.b = " + (obj1.b>>3));
WScript.Echo("obj1.length = " + (obj1.length>>3));
WScript.Echo("ary.length = " + (ary.length>>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');
})();

// command line: -forcenative 
(function() {
function makeArrayLength(x) { if(x < 1 || x > 4294967295 || x != x || isNaN(x) || !isFinite(x)) return 1; else return Math.floor(x); };
function func() { return -1; }
var ary = new Array(10);
var obj0 = new Object();
var obj1 = new Object();
var a;
var b;
var c;
var d;
var e;
a = -114614.5;
b = -33898;
c = 55731.5;
d = -113346.5;
e = 111120.5;
obj0.a = 8338;
obj0.b = -73710;
obj0.length = -26025.5;
obj1.a = 148256.5;
obj1.b = 106595.5;
obj1.length = 81614;
ary.length = makeArrayLength(-10030.5);
ary[0] = -69050;
ary[1] = -15435;
ary[100] = -129514;
;
;
;
;
;
for(var __loopvar0 = 0; d < (1) && __loopvar0 < 3; d++ + __loopvar0++) {
;
  if((Math.exp(1) < Math.atan2(c, (c |= (obj0.length= (d)))))) {
  } else {
  }
;
;
;
;
  e *= (obj0.length &= (0 ? 1 : (obj0.b *= (obj0.a -= Math.pow((e ^= (c += 1)), 1)))));
}
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("obj0.a = " + (obj0.a>>3));
WScript.Echo("obj0.b = " + (obj0.b>>3));
WScript.Echo("obj0.length = " + (obj0.length>>3));
WScript.Echo("obj1.a = " + (obj1.a>>3));
WScript.Echo("obj1.b = " + (obj1.b>>3));
WScript.Echo("obj1.length = " + (obj1.length>>3));
WScript.Echo("ary.length = " + (ary.length>>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');
})();

(function() {
var obj0 = new Object();
var obj1 = new Object();
var a;
var b;
var d;
var e;
a = -14405;
b = -10980;
d = -34279.5;
e = 136355;
obj0.length = 59721;
obj1.b = -51651.5;
obj1.length = 115175.5;

for(var __loopvar0 = 0; d < (1) && __loopvar0 < 3; d++ + __loopvar0++) {
  for(var __loopvar2 = 0; obj0.length < ((obj1.b &= (obj1.length += (e = undefined)))) && __loopvar2 < 3; obj0.length++ + __loopvar2++) {
  }

  a /= Math.tan((b *= (Math.pow(1, 1) / ((e ? 1 : 1.1) == 0 ? 1 : (e ? 1 : 1.1)))));
}


WScript.Echo("a = " + (a>>3));
WScript.Echo("b = " + (b>>3));
})();

(function() {
function makeArrayLength(x) { if(x < 1 || x > 4294967295 || x != x || isNaN(x) || !isFinite(x)) return 1; else return Math.floor(x); };
function func() { return -1; }
var ary = new Array(10);
var obj0 = new Object();
var obj1 = new Object();
var a;
var b;
var c;
var d;
var e;
a = 17246.5;
b = 88746;
c = -12814;
d = 87805;
e = 156024.5;
obj0.a = -186678.5;
obj0.b = -106410.5;
obj0.length = -40567;
obj1.a = 126386.5;
obj1.b = -16130.5;
obj1.length = 94440.5;
ary.length = makeArrayLength(53112);
ary[0] = 67520.5;
ary[1] = 40962.5;
ary[100] = 131893.5;
if(1) {
;
;
;
;
;
;
  b = -42371.5;
;
;
;
} else {
;
;
  for(var __loopvar3 = 0; c < (1) && __loopvar3 < 3; c++ + __loopvar3++) {
;
    obj1.length = (obj0.b -= (127787.5 * -1 + (obj0.a & (-19839 * b))));
  }
;
;
;
;
}
;
;
;
;
;
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("obj0.a = " + (obj0.a>>3));
WScript.Echo("obj0.b = " + (obj0.b>>3));
WScript.Echo("obj0.length = " + (obj0.length>>3));
WScript.Echo("obj1.a = " + (obj1.a>>3));
WScript.Echo("obj1.b = " + (obj1.b>>3));
WScript.Echo("obj1.length = " + (obj1.length>>3));
WScript.Echo("ary.length = " + (ary.length>>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');
})();

(function(){
  var obj2 = new Object();
  var __loopvar2 = 0;
  do {
    __loopvar2++;
    obj2.a =(obj2.length ? ary[(((((shouldBailout ? (ary[Math.tan((Math.tan(1) * obj0.a))] = "somestring") : undefined ), Math.tan((Math.tan(1) * obj0.a))) >= 0 ? Math.tan((Math.tan(1) * obj0.a)) : 0)) & 0XF)] : 1);
  } while((1) && __loopvar2 < 3)
})();


(function(){
  function makeArrayLength(x) { if(x < 1 || x > 4294967295 || x != x || isNaN(x) || !isFinite(x)) return 1; else return Math.floor(x); };;
  function leaf(x) { return x; };
  var obj0 = new Object();
  var obj1 = new Object();
  var func0 = function(){
    var obj3 = obj0;
    obj1.length =2;
    obj3 = obj0;
    return ((((obj0.prop0 == (obj0.length++ )) <= (++ e)) ? (462909354.1 - ((b < -1325095916.9) ? (~ obj0.prop1) : ary[(((a >= 0 ? a : 0)) & 0XF)])) : ((obj0.length++ ) * -957412392)) & (f32[(d) % 256] * (leaf() + (leaf() * (Math.sin(Math.atan(b)) + leaf(leaf(obj1.prop1, -722221186.9), (i32[(2.44179711322675E+18) % 256] * (-149 % -97) + leaf(-1056278838.9, obj0.prop0, obj1.length))))))));
  }
  var func1 = function(p0){
    e = (ary[(0)] >> ary[(4)]);
    obj0.prop1 = -512025235.9;
    var obj3 = obj0;
    return ui16[(ui8[((obj1.length >>= b)) % 256]) % 256];
  }
  var func2 = function(){
    obj1.prop1 = ary[(14)];
    a =obj1.prop0;
    e = ((Math.asin((obj0.prop0 = (2.29371962947709E+17 > e))) >= (b !== func1(((e++ ) / (2 == 0 ? 1 : 2)), 0, Math.acos(-6.32293685406367E+17), (obj1.prop0 ? -1011954510 : obj1.length), (obj1.length ? 9.12969481789448E+17 : obj0.prop1)))) ? (d++ ) : -941847512);
    return Math.exp(ary[(8)]);
  }
  obj0.method0 = func0;
  obj1.method0 = func1;
  var ary = new Array(10);
  var i8 = new Array(256);
  var i16 = new Array(256);
  var i32 = new Array(256);
  var ui8 = new Array(256);
  var ui16 = new Array(256);
  var ui32 = new Array(256);
  var f32 = new Array(256);
  var f64 = new Array(256);
  var floatary = [-1.5,-0.5,-0,1.5,12.987,12.123,100.33,8.8,5.5,44.66,42.24,124.07,-0.99,56.65,42.24];
  var intfloatary = [1,4,-1,-6,-0,+0,55,-100,2.56,-3.14,6.6,42,2.3,67,1.97,-24,77.99];
  var intary = [4,66,767,-100,-0,1213,34,42,55,-123,567,77,-234,88,11,-66];
  var a = 224;
  var b = -1059472204;
  var c = 946939544.1;
  var d = 37;
  var e = -1048034477;
  obj0.prop0 = 1450002983;
  obj0.prop1 = -1280711662.9;
  obj0.length = 1073741823;
  obj1.prop0 = -976330677;
  obj1.prop1 = 156;
  obj1.length = -999393295;
  ary[0] = -260657129;
  ary[1] = -13307072;
  ary[2] = -608807715.9;
  ary[3] = -1;
  ary[4] = -1188423735;
  ary[5] = -1542739277.9;
  ary[6] = 1403265704;
  ary[7] = 105;
  ary[8] = 1073741823;
  ary[9] = -78;
  ary[10] = -1073741824;
  ary[11] = -1645310231;
  ary[12] = 4.96953748161668E+17;
  ary[13] = -1.7163061760139E+18;
  ary[14] = -2.55658334989691E+18;
  ary[ary.length-1] = -209;
  ary.length = makeArrayLength(-2147483648);
  WScript.Echo("obj1.prop1 = " + (obj1.prop1|0));;
  var __loopvar0 = 0;
  LABEL0: 
  while((((obj1.prop0 < i16[(Math.cos(-1065588944)) % 256]) ? ui16[(Math.cos((a !== obj1.prop0))) % 256] : (Math.atan((1073741823 * ((obj0.prop1 && 6.97725933354122E+18) + obj1.prop0))) !== ((obj1.length >= c) ? ary[(14)] : (+ obj0.prop1))))) && __loopvar0 < 3) {
    __loopvar0++;
    (function(p0, p1, p2){
      for(var __loopvar2 = 0; __loopvar2 < 3; ++__loopvar2) {
      }
      WScript.Echo("p2 = " + (p2|0));;
      WScript.Echo("obj0.length = " + (obj0.length|0));;
    })(((721857301.1 <= (((1522965146.1 < 2001375822.1) != (- 8.81397484323213E+18)) ? e : ui8[(Math.acos(-756014254)) % 256])) ? 2 : (((! 7.16283463889696E+18) <= -1705971892) ? (b += (func1() > (~ 0))) : (((obj1.prop1 ? -987096626 : -1543458729) <= ary[(16)]) ? (e += (a -= obj1.method0(c, obj1.length, e, 1073741823, obj0.prop0, obj0.length))) : (obj1.prop0 <<= (obj1.prop1 % c))))), -948434224, func1(Math.cos(Math.sqrt((++ obj0.length))), ((ary[(((-210 >= 0 ? -210 : 0)) & 0XF)] >>> Math.tan((obj0.length >>>= (obj1.length ? obj0.prop0 : 191)))) >= (a &= a)), (((a >>= (obj0.length /= obj1.prop1)) * -1 - Math.acos(obj1.method0())) >= Math.sin(d)), Math.atan2(((Math.sqrt(c) * (-4.63639296090995E+18 ? 148 : obj0.prop0) + obj1.method0()) > (obj0.prop0 ^= obj0.method0(4.48703410737741E+18, -1.30397033644573E+17, a))), ((ui32[(-1035377937) % 256] != i8[(b) % 256]) ? ((-1275803726.9 ? 831262752 : -203831820) && (1287689878 / (-718560558 == 0 ? 1 : -718560558))) : f64[(ui32[(obj1.prop1) % 256]) % 256])), func1((ui32[(func2()) % 256] | obj0.length), i16[((e++ )) % 256], func0((ui8[(e) % 256] == (71 ? -1.70494071922283E+18 : obj1.length))), (- ary[(10)])), Math.sin(((obj1.method0() == ((e === obj0.length) * f64[(-584704168.9) % 256] - Math.sin(8.9974446218233E+18))) ? d : ary[(3)]))), Math.exp((((((! obj1.prop1) * (e + f64[(3.7182076078122E+18) % 256])) === ary[(5)]) * (obj1.prop0 >>>= ui16[(e) % 256]) + (obj0.prop0 += (obj0.prop0 < obj0.prop0))) !== 630763374.1)), ary[(((i16[((~ (obj0.prop0 >>= (obj0.prop0 <= obj0.length)))) % 256] >= 0 ? i16[((~ (obj0.prop0 >>= (obj0.prop0 <= obj0.length)))) % 256] : 0)) & 0XF)]);
  }
  (function(){
    switch(Math.atan(func1((obj0.method0((-174 >= b), -193, obj0.prop1, (c <<= func2(obj1.prop1, 244)), (-1261252673 * (Math.cos(obj0.prop1) + (-1637155114.9 == 1819882695)))) & (e *= (1.77861130995468E+18 != d))), -28629422, Math.cos((i32[(obj1.prop0) % 256] != (obj1.prop1 || -8.82427461742083E+18))), ((b -= (obj1.prop0 < -459477946.9)) !== ((-1282344551.9 <= obj0.prop0) ? func2() : Math.abs(obj1.length))), (+ obj0.method0((183 ? obj0.prop1 : 2.88225483714917E+18), (- -8.55308478390483E+18), (-1987321713 << d), ui8[(obj0.prop1) % 256], a, func0())), (((e ? obj1.prop0 : obj1.prop1) === ary[(12)]) !== Math.sin(i32[(c) % 256]))))) {
      case ((obj0.length <<= Math.pow((b >= -1851257143.9), -994181783)) / (((((+ b) === (-276682275 ? b : d)) ? obj0.method0((obj1.prop0 ? b : b), func1(209, -2147483648, -1073741824, -1048210434, 880478131.1, obj1.length), (b ? 1 : obj1.prop1)) : (obj0.prop1 <<= -1056022212)) * (+ func1()) + c) == 0 ? 1 : ((((+ b) === (-276682275 ? b : d)) ? obj0.method0((obj1.prop0 ? b : b), func1(209, -2147483648, -1073741824, -1048210434, 880478131.1, obj1.length), (b ? 1 : obj1.prop1)) : (obj0.prop1 <<= -1056022212)) * (+ func1()) + c))): 
        obj1.method0((obj1.length /= ary[(8)]), (((obj0.prop1 <<= (++ b)) <= (ary[(((Math.sin(45931851.1) >= 0 ? Math.sin(45931851.1) : 0)) & 0XF)] >> ary[(9)])) ? (ary[((((c *= (~ -2147483648)) >= 0 ? (c *= (~ -2147483648)) : 0)) & 0XF)] / ((obj1.prop1 ^= func2((-1977829384 ? -1070086673 : c), (obj1.prop1 ^= (308604767.1 != obj0.prop1)), ary[(14)], ary[(((81 >= 0 ? 81 : 0)) & 0XF)], (obj1.length ? obj1.prop1 : -1), ary[(((a >= 0 ? a : 0)) & 0XF)])) == 0 ? 1 : (obj1.prop1 ^= func2((-1977829384 ? -1070086673 : c), (obj1.prop1 ^= (308604767.1 != obj0.prop1)), ary[(14)], ary[(((81 >= 0 ? 81 : 0)) & 0XF)], (obj1.length ? obj1.prop1 : -1), ary[(((a >= 0 ? a : 0)) & 0XF)])))) : Math.tan(ui32[(obj1.method0()) % 256])), (((Math.pow((obj0.length /= func0(-5.60579404151639E+18)), ((i8[(2147483647) % 256] * e - (185 == -4.25370259912885E+18)) * obj0.method0(obj0.length, -1026437042, obj0.prop0, 1209681199, obj0.length, -2) - -49)) != func2()) ? (((c = (-1 & -6)) ^ (a === -102)) * (((-2 < -580790792) ? (b >= 1311290946.1) : (1249029302 ? obj0.prop0 : obj0.prop0)) - Math.abs((799143204 ? obj0.length : d)))) : (obj1.length * (-- c) + Math.abs((-2.09913367005336E+18 ? obj1.length : 727784391)))) * 205 + 997140912.1), (b %= Math.log((((+ -57) === (obj1.prop0 ^= (-408485595.9 > obj1.prop1))) ? ((-228 !== obj0.prop1) ? (d++ ) : 2) : obj0.prop1))), (Math.acos(Math.abs((-- obj0.length))) == f32[((((obj1.length++ ) * (i32[(-109) % 256] * (-1020466330 > e) - (6.47480150088909E+18 ? obj1.prop0 : b)) + -990323359) >>> ((-995479186 !== -2) ? Math.tan(e) : ary[(2)]))) % 256]), func1(((((obj0.prop1 < obj0.prop1) ? (d = (-- obj1.length)) : (obj1.prop0 === c)) > (a * (obj1.prop1 *= func2(2.226205600311E+17, c, c, obj0.length, 1073741823, c)) - (554741724 ? obj0.prop1 : 1142288835.1))) ? func1(ary[(15)], (c * (c + func2(-43)))) : ary[((((-996975865 === -1805568671) >= 0 ? (-996975865 === -1805568671) : 0)) & 0XF)]), obj0.length, (b >= obj0.length), (a += func0()), f32[(2.76083422429091E+18) % 256]));
        break;
      case Math.sin(1095855078): 
        var __loopvar2 = 0;
        do {
          __loopvar2++;
          var __loopvar3 = 0;
          LABEL0: 
          while((d) && __loopvar3 < 3) {
            __loopvar3++;
            b %=-1431353014.9;
            WScript.Echo("obj1.prop0 = " + (obj1.prop0|0));;
          }
          obj1.prop1 <<=ary[(10)];
          switch((ui16[(-1) % 256] === ary[((((((-103018001 === obj0.length) !== (obj0.prop0 ? 2.7092047062084E+18 : obj1.length)) ? Math.acos(func2()) : ((obj0.prop0 > 1) ? a : Math.acos(d))) >= 0 ? (((-103018001 === obj0.length) !== (obj0.prop0 ? 2.7092047062084E+18 : obj1.length)) ? Math.acos(func2()) : ((obj0.prop0 > 1) ? a : Math.acos(d))) : 0)) & 0XF)])) {
            case ary[(18)]: 
              c = ((d |= ((obj1.length -= (d == -1073741824)) === f64[(obj1.prop1) % 256])) >= func1(i16[((obj1.prop0 >>= (2.04204845037839E+18 / (obj1.prop1 == 0 ? 1 : obj1.prop1)))) % 256], 872356200, ((-1995983418.9 > func0()) / (f64[(Math.log(158)) % 256] == 0 ? 1 : f64[(Math.log(158)) % 256]))));
              break;
            default:
              e &=obj0.method0((obj1.prop1 = (c <<= (((199 / (1456639649.1 == 0 ? 1 : 1456639649.1)) * (ary[(((-1 >= 0 ? -1 : 0)) & 0XF)] + Math.sqrt(1666311372))) * (2147483647 >= c) - (0 * func1() + d)))), (obj0.prop0-- ), (obj0.length * (((c = (-966165854 ? obj0.prop1 : d)) >= obj1.prop0) ? i32[(-37) % 256] : ((obj1.prop1 ^= (b ? -1069669658 : -7.57515240685517E+18)) === (i8[(1) % 256] * (e - -1041810240)))) - (obj0.length++ )), (ary[((((-- obj1.prop1) >= 0 ? (-- obj1.prop1) : 0)) & 0XF)] * e - 896471373.1));
              break;
            case (((((e <<= obj1.prop1) === (-520591455.9 == obj1.length)) ? (~ func0(1765644552, -22, c)) : (i16[(1073741823) % 256] * (ui32[(1) % 256] - (e ? -1 : -1312946924)))) <= Math.acos((func0(obj0.length, d, c, -43, obj0.prop1) * (f64[(1073741823) % 256] + -2.11151983580703E+18)))) || (~ i32[(ary[((((obj1.length - c) >= 0 ? (obj1.length - c) : 0)) & 0XF)]) % 256])): 
              obj0 = obj1;
              break;
            case f32[(((obj1.prop1 = func2(obj0.method0(875764424.1, -1073741824, obj0.prop0, -187, obj1.prop0, e))) * func2() - c)) % 256]: 
              continue ;
              break;
            case (obj1.length * (obj1.method0(1571381675) >= obj0.method0((++ a))) - (d ^= (((b ? obj0.length : -1712743729) <= Math.atan2(-1155481809.9, -1003694407)) ? 253 : f64[((obj1.prop1 >>= (c ^= (obj0.prop1 >>>= a)))) % 256]))): 
              continue ;
              break;
            case (ary[(((f32[(obj0.prop0) % 256] >= 0 ? f32[(obj0.prop0) % 256] : 0)) & 0XF)] > ((e ^= ary[(((((e ? -1 : c) * ((923819696 || obj0.prop1) - 3.34693363415318E+18)) >= 0 ? ((e ? -1 : c) * ((923819696 || obj0.prop1) - 3.34693363415318E+18)) : 0)) & 0XF)]) == (~ ((+ a) * ((obj1.length & obj0.prop1) + func1()))))): 
              break ;
              break;
            case func0(c, obj0.method0(), (a * ((-7.19990017584934E+18 % ary[(((obj0.length >= 0 ? obj0.length : 0)) & 0XF)]) + obj1.length)), func0((ui8[((obj0.length &= (Math.cos(obj0.length) * 2))) % 256] !== 244), ((-- obj1.prop1) !== (func1(obj0.prop0, obj1.prop1, 102, 4.29590174246168E+18, -1.78563193163597E+18) > i8[(c) % 256])), (obj1.prop0 >>>= f32[((func1() * ((d * obj1.prop0) - (obj1.prop1 %= (! a))))) % 256]), (((obj1.prop1 += (obj0.prop1 > 345351040.1)) > ary[(4)]) ? (f32[(obj0.prop1) % 256] * func0(-943691530, 1, obj1.prop0, -2.64129072103374E+18, obj1.prop1, 6.84496840238113E+18) - (-3.99437328451809E+18 ? obj0.prop1 : -2147483648)) : func0())), ui16[((-- e)) % 256]): 
              continue ;
              break;
          }
          obj1.prop0 >>>=(((ui16[((++ obj0.prop0)) % 256] !== (ui16[(175) % 256] * ((d %= ((obj0.prop0 ? 0 : a) * (-1.92946969806217E+18 ? obj1.prop0 : -256) - (1604963733 >> 580337882.1))) - ui32[(obj0.prop1) % 256]))) ? (((- -968881012) == (9.09391613298989E+18 != -25539871.9)) ? (obj0.prop0 *= (-942502361 % 1415806909.1)) : (obj0.length *= -1037434083)) : ui16[(((124 * (-6.133068204284E+18 ? obj1.prop1 : obj1.prop1) + ((-1073741824 * a - func0(1, 2.95736358120959E+18, obj0.length, 136, a, 2)) * (-768539922.9 - (e = 1)))) === ary[(((a >= 0 ? a : 0)) & 0XF)])) % 256]) < obj0.prop1);
        } while((obj1.prop1) && __loopvar2 < 3)
        break;
      case f32[(Math.exp(f64[(ary[(((Math.exp(obj1.length) >= 0 ? Math.exp(obj1.length) : 0)) & 0XF)]) % 256])) % 256]: 
        (function(p0, p1, p2){
          var __loopvar3 = 0;
          LABEL0: 
          do {
            __loopvar3++;
          } while(((b == e)) && __loopvar3 < 3)
          var obj3 = obj1;
        })();
        break;
      case Math.sin(obj0.method0(func2(f32[((! obj0.prop1)) % 256], obj0.prop1, Math.cos((obj0.prop1 <= -1024030730.9)), Math.acos((c !== -951595035)), func2(Math.sqrt(obj0.prop0), -2, Math.log(8.08714743100592E+18), f64[(obj1.prop0) % 256], (b = (a <= obj0.prop0))), (++ obj1.prop1)), ary[(18)], Math.tan(-253), ((ui32[(30) % 256] === func0(obj0.prop0)) ? -7.29279014394245E+18 : ary[(2)]), (obj0.prop0++ ), (e * ((b-- ) - ((-- d) << 1906210804.1))))): 
        (function(){
          var a = Math.atan(Math.sin((i16[(1790421356.1) % 256] === (((+ obj1.prop1) * obj1.method0(2.0201138024617E+18, c, obj1.prop0, 48, a, obj1.length) + ui16[(obj0.prop1) % 256]) != (obj0.prop0 ? 739066106.1 : c)))));
          function func3 (p0){
            obj1 = obj0;
            var obj3 = obj0;
            obj0 = obj3;
            var b = func2((b >>>= (e * (ary[(6)] - (obj3.length &= (a > p0))))), func2(obj3.prop0, (~ d), (ary[(15)] || i32[((++ obj3.length)) % 256]), a, (obj1.length |= (func2(-1019850240, -218448024.9, -2147483648) != (obj0.length > 549632028)))));
            var obj4 = obj3;
            return a;
          }
        })(i8[((ary[(17)] >= (Math.pow(i32[(1114824210.1) % 256], ary[(12)]) * -1072096560 - -1012857020))) % 256], ((c == func2(((obj0.prop1 <<= c) * (-1149617692.9 + (obj0.prop0 = func2()))), (obj1.length %= (c *= (obj0.prop0 ? obj1.prop0 : -1575149313.9))), (((obj0.prop0 !== -946245056) * 2 + (-1417094166 && -1065060387)) == obj1.length), ary[((((c-- ) >= 0 ? (c-- ) : 0)) & 0XF)], (a >>= Math.atan2(-1030066157, obj0.length)))) ? ui8[((i32[(obj0.prop1) % 256] !== d)) % 256] : ((ui8[(((b / (659215035.1 == 0 ? 1 : 659215035.1)) * (i8[(obj0.length) % 256] * ((-975423036 != -999222099) + (obj1.prop0 ? obj0.prop0 : c))) + -943986825)) % 256] * (ary[((((9.05802120453706E+18 == 1767310873) >= 0 ? (9.05802120453706E+18 == 1767310873) : 0)) & 0XF)] - (obj0.method0() * (e ? -965522753 : obj1.length) + d))) == ui32[(((obj1.prop1 <= 1.50339229987226E+18) ? (obj1.prop0 = i8[(d) % 256]) : (obj1.prop0-- ))) % 256])), Math.asin(obj0.length));
        break;
      default:
        function func4 (p0){
          switch((((((obj0.prop0-- ) * (obj1.prop0 - (d >>= func1()))) != (obj1.length = f64[(p0) % 256])) ? (-- e) : (((p0 >>>= Math.sin(e)) > Math.pow(obj0.prop0, c)) ? ((3.55311305110484E+16 != 0) ? (b | 182376366) : (-- obj1.prop0)) : (i16[(7.08784322819272E+18) % 256] !== (! d)))) === func2(Math.cos(((obj0.length = a) && (- e)))))) {
            case -1141031478.9: 
              WScript.Echo("b = " + (b|0));;
              break;
            case obj0.method0(): 
              var obj3 = obj0;
              break;
            case i32[(Math.asin(Math.sqrt(ary[(8)]))) % 256]: 
              WScript.Echo("e = " + (e|0));;
              break;
            case (-- a): 
              WScript.Echo("obj1.length = " + (obj1.length|0));;
              break;
            case -949849419: 
              WScript.Echo("obj0.prop0 = " + (obj0.prop0|0));;
              break;
          }
          return -1452214628.9;
        }
        break;
    }
    d = (d++ );
    LABEL0: 
    for(var __loopvar1 = 0; __loopvar1 < 3; ++__loopvar1) {
      switch(ary[(5)]) {
        case i16[(1434690215) % 256]: 
          function func5 (){
            return e;
          }
          break;
        default:
          obj0.prop0 *=(ary[(((((++ e) != ((e > __loopvar1) ? func0(d, obj0.prop0, obj0.prop0, -1068272579) : obj1.prop1)) >= 0 ? ((++ e) != ((e > __loopvar1) ? func0(d, obj0.prop0, obj0.prop0, -1068272579) : obj1.prop1)) : 0)) & 0XF)] != (((a &= (+ b)) == Math.pow((obj0.prop0 ? e : -1266855518), ui8[(20) % 256])) ? (-1062517725 == 142) : ((ary[(9)] === obj0.prop0) ? ((obj1.prop1 ? obj0.prop0 : d) == (obj1.prop1 == obj1.prop0)) : i16[((110192216.1 >> d)) % 256])));
          break;
      }
      try {
        obj0 = obj1;
        var __loopvar3 = 0;
        LABEL1: 
        LABEL2: 
        do {
          __loopvar3++;
        } while((((-50059215 != b) * obj1.prop1 + (e < __loopvar1))) && __loopvar3 < 3)
        (function(p0, p1, p2){
          var d = (obj0.prop0 %= ((-2 > i32[(p0) % 256]) * -1173429929 - ary[(((Math.log(ui8[(obj1.length) % 256]) >= 0 ? Math.log(ui8[(obj1.length) % 256]) : 0)) & 0XF)]));
          b = ((((b++ ) === (f32[(-1054417757.9) % 256] * (Math.sin(p2) + (1073741823 ? c : 0)))) ? (((b >> -1054715546) != i16[(1775604883.1) % 256]) ? ui16[(ary[(17)]) % 256] : (ui32[(6.45289523005423E+18) % 256] <= -1270690683)) : (obj0.length++ )) * (func0((p1 -= i8[((__loopvar1 ? obj0.prop0 : __loopvar1)) % 256]), ary[(0)], ui8[((p1 * Math.abs(c) + (obj1.prop1 ? a : 423919159))) % 256]) - func0((-5.02633009747416E+18 <= ((a != 874652396.1) ? (-1399088674 ^ 117) : p1)), ui32[(((++ c) + ary[(((obj0.prop1 >= 0 ? obj0.prop1 : 0)) & 0XF)])) % 256], (Math.asin((p1 = (- a))) >> 426753756), ((ui16[(__loopvar1) % 256] !== p2) ? (obj0.method0(p1, -1067157503, obj0.length, -255723402.9) == (obj1.method0(p2, 22853197, -6.45866473208472E+18, obj1.length, p0) * func0(-7.17606771249796E+18, -7.19898296069452E+17, 1176879362, -1209896330.9, obj0.length, -252) - (0 ? -1052732909 : 165))) : ary[(((b >= 0 ? b : 0)) & 0XF)]))));
          var obj3 = obj1;
        })();
        try {
          var a = (((ary[(((-2147483648 >= 0 ? -2147483648 : 0)) & 0XF)] <= obj1.length) ? obj0.length : func0()) < ui16[((ary[(15)] == (- Math.atan(-887280833.9)))) % 256]);
        } catch(ex) {
          obj1 = obj0;
          a = (c = (obj0.method0() <= Math.log(1423218998.1)));
        } finally {
          var obj3 = obj0;
          WScript.Echo("e = " + (e|0));;
          c =(d++ );
          obj3.prop0 = (! (obj3.method0(ary[((((-- obj3.prop1) >= 0 ? (-- obj3.prop1) : 0)) & 0XF)], 1313694475) | (c-- )));
        }
        break ;
      } catch(ex) {
        function func6 (p0,p1,p2,p3){
          var obj3 = obj1;
          obj1.prop1 = func0(((obj1.length < (obj1.prop0 = obj3.method0(967345550.1))) >= (Math.tan(Math.cos(1408461332.1)) * (obj3.prop1 - ((obj3.prop0 != d) ? (obj0.length = (-1732414300 * b)) : (1073741823 > obj0.prop0))))), ary[(3)], (p2 -= (((__loopvar1 == -1000256011) ? obj1.prop0 : obj1.prop0) == (! p3))), (((obj3.prop0-- ) != Math.atan(Math.cos(82))) ? Math.exp((~ obj3.prop1)) : obj1.prop0));
          return -6.66197292676943E+17;
        }
      } finally {
      }
      continue LABEL0;
      var __loopvar2 = 0;
      LABEL1: 
      do {
        __loopvar2++;
        var obj3 = obj1;
      } while((Math.sqrt((obj0.prop0 ? -2147483648 : 2092282057.1))) && __loopvar2 < 3)
    }
    var a = (Math.abs((! ary[(((-7.8543224616198E+18 >= 0 ? -7.8543224616198E+18 : 0)) & 0XF)])) * Math.abs(((obj0.length /= (obj0.prop0 >> -1)) * (! (++ obj0.prop1)) + (0 * func2() + func0(obj0.length, e, -1004987436, -992541225)))) - (obj1.prop1-- ));
    function func7 (){
      obj0 = obj1;
      return (++ c);
    }
  })();
  (function(){
    if((func1(481549912, (obj0.prop0++ ), func1(-6.40055501781618E+18, Math.tan(b), func2(), (d++ ))) > (-1073741824 * 1853744040 - ((~ -2) !== ary[(((Math.sqrt(6.95919147063823E+18) >= 0 ? Math.sqrt(6.95919147063823E+18) : 0)) & 0XF)])))) {
    }
    else {
      var __loopvar2 = 0;
      LABEL0: 
      do {
        __loopvar2++;
      } while((((c ? 67 : -1057558012) * (obj0.prop1 - (b++ )))) && __loopvar2 < 3)
      var a = ary[(18)];
      obj1.method0(((((ui8[(b) % 256] != Math.cos(210301864.1)) ? Math.abs((-1972964350 < -1069726144)) : ((obj0.prop1 >> 411541022.1) && (-1035214775 >= -2120153150))) | Math.tan((a = 178))) * ((((ui32[(e) % 256] <= (- -3.49085947431267E+18)) ? a : i16[(Math.atan2(e, obj0.prop1)) % 256]) * (Math.abs((a = i8[(c) % 256])) + Math.acos((-1578151851.9 * (((b-- ) * (e * (-969373745 != a) - (a >>= ary[(2)])) - f64[(e) % 256]) + (e *= ((obj1.length++ ) * (((+ obj0.prop1) * (obj0.length /= (-7.5227774620165E+18 * 118)) - (a / (-1680247619.9 == 0 ? 1 : -1680247619.9))) - ary[(((116 >= 0 ? 116 : 0)) & 0XF)])))))))) + obj1.method0(((a !== (obj0.prop0 /= (obj0.prop0 >>> -129))) ? ((d <= -3.47089753653811E+18) * ((289307999 < obj1.prop1) + (-3.99765606315112E+18 ? obj1.prop1 : obj0.prop1))) : ((1 <= -1.64525640515612E+18) ? func1() : Math.atan2(e, obj1.prop0))), (++ a), (obj0.prop1 ^= ary[(0)]), ((a * (obj0.prop1 != obj0.prop1) + Math.log(1)) >>> i8[(Math.asin(-127)) % 256]), (((obj1.length != e) >= (- -84548919)) ? obj1.method0(Math.sqrt(d), (+ obj0.prop0), (obj1.prop0-- ), 1758179544.1, (a-- ), obj0.method0()) : ((369295985.1 * -3.62661798607518E+18) < (-1 << obj1.length))), (i16[(ary[(4)]) % 256] * ((((obj0.prop0 !== 2023984127.1) * ((e-- ) * ((- a) - d)) - (-117 != obj1.length)) < f64[(-2.97486435176575E+18) % 256]) + (obj1.prop1 *= (2 > 174180482.1))))))));
      LABEL0: 
      LABEL1: 
      for(var __loopvar2 = 0; a < ((obj0.length ^= (obj1.prop0 = Math.abs(-1030691975)))) && __loopvar2 < 3; a++ + __loopvar2++) {
        break LABEL1;
        switch((b >>>= d)) {
          default:
            continue ;
            break;
        }
        function func8 (){
          obj0 = obj1;
          return 519866426;
        }
        break ;
        if(((((++ obj0.length) === (obj0.prop1 == (1403040287 || -1010986124))) ? (obj1.prop1 = ((obj0.prop1 = (ary[(16)] * -998708469 + -513006315.9)) <= (obj1.prop1 = (a &= (obj1.length &= ary[(((e >= 0 ? e : 0)) & 0XF)]))))) : -6.10872400898999E+17) >= ary[(15)])) {
          obj0 = obj0;
          WScript.Echo("obj1.length = " + (obj1.length|0));;
          WScript.Echo("obj1.length = " + (obj1.length|0));;
          var a = (++ c);
        }
        else {
        }
      }
      WScript.Echo("e = " + (e|0));;
    }
    LABEL0: 
    for(var __loopvar1 = 0; obj0.prop1 < ((- obj1.length)) && __loopvar1 < 3; obj0.prop1++ + __loopvar1++) {
      break LABEL0;
      break ;
      if((Math.acos((! ((-77 ? a : e) === ary[(3)]))) === ((+ i16[((d++ )) % 256]) * (i32[((+ ary[(18)])) % 256] + Math.atan2(((obj1.prop0 >= -1073741824) <= (obj0.prop1 = (b >= -1571927982))), a))))) {
        LABEL1: 
        for(var __loopvar3 = 0; e < (__loopvar3) && __loopvar3 < 3; e++ + __loopvar3++) {
          WScript.Echo("obj0.prop1 = " + (obj0.prop1|0));;
          obj0 = obj0;
          break ;
          e = ((i8[(((a >= 186) ? (i16[(obj0.prop1) % 256] * ((obj1.length - obj0.length) + func0())) : (a |= ary[(12)]))) % 256] >= (((obj1.length++ ) != func2(d, __loopvar3, obj1.prop1)) ? (-8.20634218580724E+18 == ary[(16)]) : ((obj1.length = (b <<= (b /= (e &= ui32[(1937757902) % 256])))) <= (-116 == e)))) ? Math.log(Math.log(((~ d) <= -1993899356))) : obj0.method0(118251182, obj1.prop0, ary[(((Math.pow(-1022044665, Math.log(-81)) >= 0 ? Math.pow(-1022044665, Math.log(-81)) : 0)) & 0XF)], 11, (((obj0.length < __loopvar1) ? (c >= -1073741824) : (obj1.prop1-- )) === ((b %= (++ obj1.prop0)) !== (1111204882.1 ? obj0.prop0 : -82))), (i16[(0) % 256] >= Math.abs((-- b)))));
          continue ;
        }
        obj0.length = ((obj0.prop1 = (((+ -7.68325083442381E+18) > obj1.method0()) ? (i16[(obj0.prop1) % 256] >= -953029132) : (-- d))) > (obj0.prop1 *= Math.sin(((obj0.prop1 |= (d <= 1607775565)) < -226686303))));
        LABEL1: 
        LABEL2: 
        for(var __loopvar3 = 0; __loopvar3 < 3; ++__loopvar3) {
          WScript.Echo("d = " + (d|0));;
          var a = Math.atan2((((ary[(9)] !== b) ? -6.37866988959448E+18 : Math.sin((-604750952 ? -1318102862 : obj1.prop1))) ^ (1642207917 !== ((__loopvar3 === 0) ? __loopvar1 : ui16[(obj1.prop1) % 256]))), (a += Math.asin(((obj1.prop1 === e) << func0(e, obj1.length, obj1.length, -1, 865117601.1)))));
          var b = (f32[((((236731162.1 >= -2) ? ary[(4)] : ui32[(2) % 256]) / (((-947615398 < 1.96348473844403E+18) ? (obj0.prop0 % e) : (e != obj0.length)) == 0 ? 1 : ((-947615398 < 1.96348473844403E+18) ? (obj0.prop0 % e) : (e != obj0.length))))) % 256] !== ary[(1)]);
          obj1 = obj0;
        }
      }
      else {
        obj1 = obj0;
        (function(){
          a = obj0.length;
        })(((((f32[(-1) % 256] * ((-979221775 >= d) + ary[(11)])) < (b /= (obj0.prop0 <<= (obj0.length * a)))) >= func1(((1 > -206) && -955651382), Math.cos(obj1.method0(obj1.prop0, a, -157, -1140542518.9)), i8[((-1215081184.9 !== -7.07980159681987E+18)) % 256], ((-1024463081 >= __loopvar1) ? (ary[(((obj0.length >= 0 ? obj0.length : 0)) & 0XF)] * (ary[(((359509529 >= 0 ? 359509529 : 0)) & 0XF)] - ((~ -436079907.9) * (obj1.method0(e, 653565008, -8.44992169990002E+18, -1904361093.9) * (-4.5211702957015E+18 ^ -74) - func0(obj0.prop1, c)) - func1()))) : ary[(4)]), ((-80 === obj0.prop1) ? obj1.prop1 : e), -975850808)) ? (obj1.prop0 - ary[((((a-- ) >= 0 ? (a-- ) : 0)) & 0XF)]) : Math.cos((Math.pow(obj0.method0(-1.71482061678811E+17, -1222630370, 762315907.1, b, 743591906, b), (+ -989410796)) ^ (c++ )))), (obj1.prop1 = Math.log(3.75799959831573E+18)), func2((b *= ui16[(-2) % 256]), (((Math.pow(285756377, e) == Math.atan2(b, 6.36899005999897E+18)) ? ((c + b) < (obj0.prop0 = (obj1.prop0-- ))) : ary[((((obj0.prop1 >> -7.70526969862791E+18) >= 0 ? (obj0.prop1 >> -7.70526969862791E+18) : 0)) & 0XF)]) >= ary[(((func1() >= 0 ? func1() : 0)) & 0XF)])));
        if((((((-952662530 ? d : b) < (obj1.prop0 % -1051628973)) ? (i16[(c) % 256] * (Math.sqrt(-225) - Math.log(1073741823))) : (obj1.prop1 <<= b)) || (((obj1.length != obj1.length) ? (d > 2147483647) : func2()) != (obj0.prop0-- ))) <= Math.atan(ary[(12)]))) {
          a <<=(((((obj1.prop1 === c) ? (-2147483648 <= -557927352.9) : d) > (Math.abs(29) + ui8[(c) % 256])) < (! ((-- obj0.prop1) * (obj1.prop0 = (-421649596 == c)) + ui8[(d) % 256]))) ? (-- obj0.length) : i16[((- obj0.method0(116))) % 256]);
          WScript.Echo("a = " + (a|0));;
          obj1.prop0 *=1;
          obj1 = obj1;
          var obj3 = obj0;
        }
        else {
          WScript.Echo("__loopvar1 = " + (__loopvar1|0));;
          obj1.length = (((((6.74709723169044E+18 - __loopvar1) | Math.acos(__loopvar1)) < ((obj1.prop1 > 2.91036382259779E+18) ? (849726482.1 < 101591866.1) : (! obj0.prop1))) ? obj0.method0(obj1.length) : (a /= __loopvar1)) && obj0.method0((__loopvar1 > f32[(obj1.method0()) % 256]), (e %= b)));
          WScript.Echo("a = " + (a|0));;
        }
      }
      var a = ((c *= (((obj0.length === obj1.prop1) ? Math.sin(-45) : __loopvar1) < (obj0.length = (-977904355 >> c)))) - (- 2.0277089667751E+18));
    }
    var __loopvar1 = 0;
    LABEL0: 
    LABEL1: 
    while(((obj1.prop1-- )) && __loopvar1 < 3) {
      __loopvar1++;
      obj0 = obj1;
      d = (ui8[(ary[(3)]) % 256] >= obj1.prop0);
    }
    obj1.length = (d-- );
  })(func2(((((-1067227267 >= -1027082505) ? d : (obj0.prop0 ? -1072196695 : obj1.length)) == -943222787.9) ? -150 : ((obj1.prop1 |= obj1.prop1) >= ((~ e) === (-999511236 === a)))), 63, Math.sqrt((c / (i16[(Math.pow(c, b)) % 256] == 0 ? 1 : i16[(Math.pow(c, b)) % 256]))), Math.asin(ary[(7)]), (obj0.prop0 <<= (- intfloatary[(10)]))), (obj1.prop1-- ));
  (function(p0, p1){
    obj0.method0(p0, (-- p0));
    function func9 (p0,p1,p2){
      var __loopvar2 = 0;
      LABEL0: 
      LABEL1: 
      while((Math.sin((d /= ary[(((-988059996 >= 0 ? -988059996 : 0)) & 0XF)]))) && __loopvar2 < 3) {
        __loopvar2++;
        (function(p0, p1, p2){
          obj0 = obj0;
          var obj3 = obj0;
          obj1.prop0 = (obj0.prop1 *= (Math.exp(((-1769621353.9 < obj0.prop1) ? 243 : i32[(-1319212850) % 256])) ^ func1(((p2 === -1695396338) * ((obj3.length |= (-2133135492.9 !== 1073741823)) * Math.exp(627629710.1) - (p1 |= -51)) + func1()), (-960931229 * (obj1.prop1 >> c) - (++ a)), Math.asin(ary[(((p2 >= 0 ? p2 : 0)) & 0XF)]), Math.tan(ary[(((0 >= 0 ? 0 : 0)) & 0XF)]))));
          c =((((p1 ^= (obj1.length / (698086295 == 0 ? 1 : 698086295))) === ((~ -1869037740) === a)) ? ((~ Math.asin(2)) * func1((-1073741824 || obj0.prop1), 1.06845659695301E+18, (d ? 0 : p0), (-1040199787 * 8.62364694012946E+18)) + ary[(((Math.log(p1) >= 0 ? Math.log(p1) : 0)) & 0XF)]) : obj3.method0(((c < p2) ? ui32[(b) % 256] : func0()))) === 1366227785.1);
        })();
        var obj3 = obj0;
        p0 = (-994353022.9 != (ary[(9)] * (((0 == -1) >= (+ p0)) ? ((-96 >>> e) * (ary[(5)] + 189)) : (func1() !== (-5.60790224555438E+18 ? obj1.prop0 : obj1.prop0))) - (p0 = ((p1 < p0) ? (a >>>= (~ p1)) : i16[(-946547381) % 256]))));
        try {
          obj1 = obj0;
          var a = ((((ui8[(-303354047.9) % 256] * (obj1.prop1 - (d = obj3.prop0))) !== ((-104 == -864249864.9) ? p0 : (1 * -943073818))) ? ary[(((func2((obj1.length ? -148 : -1039877123), ary[(18)], ui8[(-1072772254) % 256], 1073741823, (obj0.length * 6.10840684132677E+18)) >= 0 ? func2((obj1.length ? -148 : -1039877123), ary[(18)], ui8[(-1072772254) % 256], 1073741823, (obj0.length * 6.10840684132677E+18)) : 0)) & 0XF)] : (~ (obj3.prop0 *= (! 2147483647)))) || 2);
          var b = (ary[(((obj0.method0(ary[(16)], obj1.prop0, func2(), a, func2(b), (d = (obj1.prop1-- ))) >= 0 ? obj0.method0(ary[(16)], obj1.prop0, func2(), a, func2(b), (d = (obj1.prop1-- ))) : 0)) & 0XF)] < (c >>>= (c += (obj0.prop1 = (obj0.length == -990421716)))));
          obj3.length %=obj3.length;
        } catch(ex) {
          break ;
          var obj4 = obj1;
          var a = i32[(-809200259) % 256];
          var b = (ary[(3)] == i16[(ary[(5)]) % 256]);
          var c = (d &= (ui32[(ary[(18)]) % 256] * ((- obj4.length) * (func0(a, obj3.prop0, obj1.length) < (b = (1073741823 ? p2 : -641049321))) - ((! 658884705) != (p0++ ))) + f64[(i8[(obj4.prop1) % 256]) % 256]));
        } finally {
          obj3 = obj1;
          obj0.length = Math.tan(((((p2 !== obj0.prop0) * (p0 + (obj3.length == -1073741824))) > ((-940245976 !== -1054813083) && ary[(((p2 >= 0 ? p2 : 0)) & 0XF)])) != (((p0 += Math.exp(-2)) < (obj0.length = (1208029091 ? 10 : 30))) ? ((2147483647 ? obj1.prop0 : obj1.prop1) >>> obj1.method0(obj3.prop1, obj1.prop0)) : ((32 ? obj0.length : 190) <= (obj1.prop1 ? 2.38303659651394E+18 : p1)))));
        }
      }
      obj1 = obj1;
      obj1 = obj1;
      (function(){
        switch(func0(ary[(((ary[((((-1 / (obj1.prop1 == 0 ? 1 : obj1.prop1)) >= 0 ? (-1 / (obj1.prop1 == 0 ? 1 : obj1.prop1)) : 0)) & 0XF)] >= 0 ? ary[((((-1 / (obj1.prop1 == 0 ? 1 : obj1.prop1)) >= 0 ? (-1 / (obj1.prop1 == 0 ? 1 : obj1.prop1)) : 0)) & 0XF)] : 0)) & 0XF)], -1060011353, (((- ary[(8)]) * ((((-234 - a) * ((169 >>> -1283874722) - ui16[(obj0.length) % 256])) * ((0 * ((b++ ) - (-- obj1.prop1))) + ((b < obj0.prop1) * (a ? obj0.length : -1033087839) + (obj1.prop0 | 2010318500.1)))) - ((-987423750 !== p0) ? (-1029534526 !== 543789253.1) : (obj1.length >= obj0.prop0)))) * (2147483647 >= ary[(1)]) - (p0 &= ((! -2.91449780243755E+17) || (p1 ? -138 : -4.8904366627297E+18)))))) {
          case Math.pow(((obj0.method0() < ary[(((f32[(p2) % 256] >= 0 ? f32[(p2) % 256] : 0)) & 0XF)]) >= (a >>= ((p2 ? 1073741823 : obj0.prop0) * e - b))), obj1.method0()): 
            WScript.Echo("p0 = " + (p0|0));;
            break;
          default:
            var obj3 = obj0;
            break;
          case ((ui16[(((1 ? obj0.prop1 : b) * i8[(-1035030665) % 256] + (p2 = ui8[(-1.24602550489001E+18) % 256]))) % 256] === e) ? (((p2 = c) > ary[((((ui8[(2147483647) % 256] * (-1.0512070764212E+18 ? p1 : obj1.prop0) + ((1134031066.1 > p1) * (((c ? p1 : e) * (a > 261935016) - obj1.prop0) - ary[(12)]))) >= 0 ? (ui8[(2147483647) % 256] * (-1.0512070764212E+18 ? p1 : obj1.prop0) + ((1134031066.1 > p1) * (((c ? p1 : e) * (a > 261935016) - obj1.prop0) - ary[(12)]))) : 0)) & 0XF)]) ? Math.atan2(ary[(((obj1.length >= 0 ? obj1.length : 0)) & 0XF)], -135) : ((++ b) && p1)) : Math.atan2(13, ((! (-242 ? p0 : obj0.prop1)) * ((-935125640.9 ? obj0.length : p1) != (b * (func0(a, p2, p1, 2068787343, 1456593425.1) + Math.atan(a)))) + ary[((((~ a) >= 0 ? (~ a) : 0)) & 0XF)]))): 
            var a = ((Math.exp(((-199 ? obj0.prop1 : -61461501.9) == d)) === (p0 = 6.94505678311111E+18)) > ((((((- a) * ((obj0.prop1 <= b) - (e ^= obj1.method0()))) * (obj0.prop1 = (++ obj0.prop1)) - (++ p1)) === func1(p1, -1499213284, obj1.prop0, -967822085)) - -28) * (p0 + (obj0.prop1 -= a))));
            break;
          case obj0.method0(ary[(((-1073741824 >= 0 ? -1073741824 : 0)) & 0XF)], ((p2 = ((655902114.1 !== b) ? func0(-200, obj0.prop0, -44) : (++ b))) != func0()), ((p1 = d) * -1026089973 - (+ ary[((((b = (-1023856060 ? p1 : -963178387)) >= 0 ? (b = (-1023856060 ? p1 : -963178387)) : 0)) & 0XF)])), (! ((obj1.length * (i32[(p2) % 256] + func0(obj1.prop0, -1691792184.9, p2, e, p2, a))) ^ ((obj1.prop0 > d) ? f64[(p0) % 256] : (p1 ? -1880743957 : -1028655167)))), p2, -17): 
            var a = (+ (obj1.method0(-880796752, (- (+ -1392582057.9)), (++ obj0.prop1), (obj0.method0(1165425512.1, a, -1001787279) == ((! obj0.length) * (81 === p1) + i8[(-7.34308707516873E+18) % 256]))) * ui8[(ary[(((1.05574503372445E+18 >= 0 ? 1.05574503372445E+18 : 0)) & 0XF)]) % 256] + (((p0 < -1011726209) > (p1 >>= obj1.length)) ? i16[((p0 !== -1988187984.9)) % 256] : -7.30947695610263E+18)));
            break;
        }
        var __loopvar3 = 0;
        while((((((! -1.322900410936E+18) * (p0 & p0) - a) * (-26 ? p1 : -460472436) + ((obj0.prop0 %= (obj0.length === e)) * (obj0.prop1 - ary[(((p2 >= 0 ? p2 : 0)) & 0XF)]))) * (p1 == obj0.prop0) - ary[(12)])) && __loopvar3 < 3) {
          __loopvar3++;
          obj0 = obj0;
          obj0.prop1 = (+ (++ e));
        }
      })(ary[(0)], (Math.sqrt(ui8[(ary[((((c %= Math.cos(194)) >= 0 ? (c %= Math.cos(194)) : 0)) & 0XF)]) % 256]) >= (ary[(((-231 >= 0 ? -231 : 0)) & 0XF)] == (Math.sqrt((p1-- )) | (-- obj0.prop0)))), obj0.prop1, 2147483647);
      return ary[(14)];
    }
    var c = d;
    var d = -341000236;
    WScript.Echo("obj0.prop0 = " + (obj0.prop0|0));;
  })(Math.exp((a |= e)), func0((7.45302926350348E+18 * (b - 1)), ((f64[(Math.pow(a, -1068034847.9)) % 256] * (Math.log((obj0.length !== -60657985.9)) - (obj1.prop0 ^= 468166318.1))) + ((obj0.prop1 += -1269895899.9) <= i8[((ui16[(obj0.prop0) % 256] * ((obj0.prop0 << -4.86392952292254E+18) + obj0.method0()))) % 256])), b), obj1.prop1, (- ((obj1.prop1 += (e /= ary[(((74 >= 0 ? 74 : 0)) & 0XF)])) >= Math.atan2((+ -4.84273530293486E+18), obj0.method0(func2(1841633388.1, obj0.prop0, obj0.prop1, -391948773), (a *= func1(7.81581537170058E+17, 5.98377441291508E+18)))))), (! f64[((c &= (obj1.length && ary[(((-1592896550.9 >= 0 ? -1592896550.9 : 0)) & 0XF)]))) % 256]));
  obj0 = obj1;
  WScript.Echo("a = " + (a|0));;
  WScript.Echo("b = " + (b|0));;
  WScript.Echo("c = " + (c|0));;
  WScript.Echo("d = " + (d|0));;
  WScript.Echo("e = " + (e|0));;
  WScript.Echo("obj0 = " + (obj0|0));;
  WScript.Echo("obj1 = " + (obj1|0));;
  WScript.Echo("obj0.prop0 = " + (obj0.prop0|0));;
  WScript.Echo("obj0.prop1 = " + (obj0.prop1|0));;
  WScript.Echo("obj0.length = " + (obj0.length|0));;
  WScript.Echo("obj1.prop0 = " + (obj1.prop0|0));;
  WScript.Echo("obj1.prop1 = " + (obj1.prop1|0));;
  WScript.Echo("obj1.length = " + (obj1.length|0));;
  WScript.Echo("ary[0] = " + (ary[0]|0));;
  WScript.Echo("ary[1] = " + (ary[1]|0));;
  WScript.Echo("ary[2] = " + (ary[2]|0));;
  WScript.Echo("ary[3] = " + (ary[3]|0));;
  WScript.Echo("ary[4] = " + (ary[4]|0));;
  WScript.Echo("ary[5] = " + (ary[5]|0));;
  WScript.Echo("ary[6] = " + (ary[6]|0));;
  WScript.Echo("ary[7] = " + (ary[7]|0));;
  WScript.Echo("ary[8] = " + (ary[8]|0));;
  WScript.Echo("ary[9] = " + (ary[9]|0));;
  WScript.Echo("ary[10] = " + (ary[10]|0));;
  WScript.Echo("ary[11] = " + (ary[11]|0));;
  WScript.Echo("ary[12] = " + (ary[12]|0));;
  WScript.Echo("ary[13] = " + (ary[13]|0));;
  WScript.Echo("ary[14] = " + (ary[14]|0));;
  WScript.Echo("ary[ary.length-1] = " + (ary[ary.length-1]|0));;
  WScript.Echo("ary.length = " + (ary.length|0));;
})();
