diff --git a/.gitignore b/.gitignore index c2527a5b..98059a56 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,6 @@ content/editor.js content/turtlebits.js content/welcome.css content/worker.js +content/.well-known .DS_Store +/content/editor.js diff --git a/Documentation/Flowcharts/Open XML files with this link to edit.url b/Documentation/Flowcharts/Open XML files with this link to edit.url new file mode 100644 index 00000000..7284392f --- /dev/null +++ b/Documentation/Flowcharts/Open XML files with this link to edit.url @@ -0,0 +1,5 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,11 +[InternetShortcut] +IDList= +URL=https://www.draw.io/ diff --git a/Documentation/Flowcharts/Save Function/Pencilcode_Save.png b/Documentation/Flowcharts/Save Function/Pencilcode_Save.png new file mode 100644 index 00000000..4af90ea3 Binary files /dev/null and b/Documentation/Flowcharts/Save Function/Pencilcode_Save.png differ diff --git a/Documentation/Flowcharts/Save Function/Pencilcode_Save.xml b/Documentation/Flowcharts/Save Function/Pencilcode_Save.xml new file mode 100644 index 00000000..75e774f9 --- /dev/null +++ b/Documentation/Flowcharts/Save Function/Pencilcode_Save.xml @@ -0,0 +1 @@ +5Vxbk5s2FP41nkkessNNgB/33nTSZKdO2uZRBtkmi5EjxHrdX18JEAYkO941IK+bmczig8Di6DvfuQmP7Ovl8z2Bq8UfOETxyDLC55F9M7IsE4wN9odLNoXEs+1CMCdRWA7aCibRv6gUltfNsyhEaWMgxTim0aopDHCSoIA2ZJAQvG4Om+G4+a0rOEeSYBLAWJb+HYV0UUh9YGzlv6FovhDfbBrlmSkMHucEZ0n5fSPLnuX/itNLKO5Vjk8XMMTrmsi+HdnXBGNaHC2fr1HMdSvUVlx3t+NsNW+CEnrIBVZxwROMs/LRr3GMCRPdoFmURDTCCdPl5chyY3bDqyk75c75kSz5E4Xsug/s/4Rm/IkNuoCU/VnA1Qqx21gGzmjKVpYfFef5IZtdSgI+x2KlEJHv/ZCRVYzK2/8VofXFj1Qe9YXAZC5GXeOEEhzHiCjH3hOEkmq+mLAlVY674pophn1dZMtpAqM4H5gvH90IyFD0zIcv6DJmApMdpuzrH1GhT/smwQkbeTWL4rglSlcwiJI5E4Dtp694xQQfmHbsq/UiomjC5Pyr1szimAw/ITKLc+gsojBkj8KXpL34JR7YWDa9mqgEwz3CS0TJhg15bhpgabcCpuutEZjCthd1AxADYWl48+rOW/CxgxJ/aiy6kk5RyKyy/IgJXeA5TmB8u5Ve5aaG+A2MpvLRc0T/4eILUH76Ls4wWGxqp/jH7+UNfiBKNyUdwYxirujqez/hfE3MfZpOcUaCcvYl5VFI5qgc5RQi/lx7V4OgGNLoqclGx+jWluz8gaCUm2QKnzi+pxmlOJFWYKtfcwcQazqvY5sTnx+gIJAMgZ2Z+sABRjeIrTC6aSK4DllLAVm3A8T6Z4ZYR0aspwuxjuyZ4ih4ZKLbJ/4MlvFuRvCS/f39Z4bI5j2fRJZ7GZjfiHnzmLvjNJ/dPEopIrmHYkrigHB/ZtzLXhUGID5JK8o89IofrggOuMW81AqQGQLkqaxg7Ho2dPuxgvGBVjDuwAqExdWW6jM+M8vwZMsYa+Ny2TS+Izkg6ULhNXXXNFydqtR94YEBNG6bulTuSRqfFG7zMuAR8rv3ctz4kQe4CebjvqwTHtO2XesCL6fZywllNkOu2q2G3nhqdOZWQSsSVDCK2RejyAg/O0YZy/g2bW2U0kvsbe6hj+G1awNd2h1LaM7JYbJCQQTjnB04g7xpfrDtA/nB74IfBkoVO4WkqcgHTW2YNOWM8B4xIEKKqjKHApTHRsMhRP5MCU438NF01hE4jSY4HVcBTqAAp9MFOP3zd14Ctw0sa0sVxUqejfdSqdfpPN/IL70kBG5qA1Y4Smhau/MDF2xNC3jNRFN8vjt0/P7hrr9vODso5ruFRfXgh9kmkGzzhlcD1ihX3M8sIvyILSBjibs37pLBkC65mm7/SalG2lMkpaKqosGFy1npR17soguUozjlt1zwzkJZ88orXW8O1lXDoYS1q4K13xes5TCpJ2e+29uYDUxfdF5pEQhuoNrShWpLpujBiKR/tWprAFlykfYaJsL1iT56SRRFX7bsDKWIMGPtkjdCgPzQUfGGb01tt6OSuDluukMPKHjDU/BG1cw/qqJiD8wSrYKs1T1NWDKeu6/Iviwo3Qim3xFVVj1BAFqLd1wcKXRRs6ZPOIB8yBUMHrMVO8BJvJEwcIqG4jT9q+cp7KSvDqqisn52ybKqrSo2O2hwBHI1cvjuUe8hjUrlvjaVy+2MyzxCz30v38mzJhHNA3UXLjklJNN0lT+rwRih05h9GEqpEm1B0Kp+tN1XzO5K6i67dZMs4FXLWRZL+hSFzWIXV4izaX7mgF0vXahL2sPiDMjBthwa6kjdrZ5Z2D8lFrblAGLwvNK4cEyvrvMPxoWxlTwgErHn4qH/MKuhr71vySX7G4zSKhPKUt6/N9YwqVIkwdpvsKAiUpO93Az64WaxxjI330Hm6cLT4mVHKy2f2+5CW9HVsLU1jWy5zjSJ5sm31WUSckgqmp+naMxOa8f2kMmbLacSQzmxboE5yF6zV7XbHKO5vKKzvat/1h4/Hu/vt5nW3vFHF0rAcHsVNRKbAj/CU2ggtle1hd5WCOO0NniYLlDEMD3ll04/pV2N2/4VnQrH0oVfR05Hv61CSNE3FoVPEO1jV9IwddaWq7ZVW2r78tXOub1dJQDaAK227XRiNvVocoHXn/A8Sm4iGON5D7Ad5tUSCbaH1vK6gK17PGwDvIyCl0C4W5gqkh5XH0zlpCffipzjlP0toDraWyl9bWSgB62OfyBaO4kM5NBLhm8SXvI31EfV+791UO7o5oJ9ynkVA9bUodoIK2Qvy25+mY6A9nvChamUV+3La1rLCszWjQolSDd6TcqiWLO37SkVL0MAbbVWRy4a5OzztsourqWv7ALkavX55dRAQW5AW7tGzOacc2rX1JhTA3mf5cs8ZxPLO9Vxon5R4oVD/WJ70SzDufAM4PuWDayxYwo1/sJNvrQs6e6Y/85p7i9jHl9mBOdGf66C/vS9YKPYUXEm2a1kQIfmC51kt/1Ux1+c8Q62Lwuc1AsUQFEpP69suI1uWxWn9uXTXbkm9n/y6Y6In4716Y4xbvr0QVy6mP6hLl1k6F25dE9GzwDcqPGlT1dRKfS0caMnu/wOevuv90xatK+tTuvKddrPaD3ivzcTMIXSLjedDVSXFRsqRAFP0UXw/X4ckXf8TqrTDakERZxGSCVmUwPun+VvrzFpkmMYlhjuOmEYposL2q/LDNnF9bxzRrKCgjUiWabgMi94k7B1Wj8OoISt0Q1s2cftLxgXod/2Z6Lt2/8A \ No newline at end of file diff --git a/Documentation/Flowcharts/Signup&Login/Signup&Login.png b/Documentation/Flowcharts/Signup&Login/Signup&Login.png new file mode 100644 index 00000000..f058e958 Binary files /dev/null and b/Documentation/Flowcharts/Signup&Login/Signup&Login.png differ diff --git a/Documentation/Flowcharts/Signup&Login/Signup&Login.xml b/Documentation/Flowcharts/Signup&Login/Signup&Login.xml new file mode 100644 index 00000000..2d2a2992 --- /dev/null +++ b/Documentation/Flowcharts/Signup&Login/Signup&Login.xml @@ -0,0 +1 @@ +5Vtdk5s2FP01nqQPuwOID/txd5NNO5Mmmbrbdh9lkIEEIyrE2ttfXwkkviRvvDFgT+wXQAghrs49ujpXnoG7ze4DgVn0Ow5QMrOMYDcD72aWZdrAYAde8lyVeI5XFYQkDkSlpmAZ/4dEoXguLOIA5Z2KFOOExlm30MdpinzaKYOE4G232hon3bdmMERKwdKHiVr6dxzQqCqdO0ZT/iuKw0i+2TTEnRX0v4UEF6l438wC6/JX3d5A2Zaon0cwwNtWEXg/A3cEY1qdbXZ3KOG2lWarnrvfc7fuN0EpPeQBW3SDPstPRwGzhLjEhEY4xClM3jelt+XnId6Awa58vIl9cR7RTcJOTXaKdjH9hxdfO+LqUd5JKXlu3eKXj6KBr4jSZwEHWFDMipo+fMQ4E21UveZd3fvdoijHBfFFLUsgCZIQiVqgtjnDMsIbxDrDqhCUQBo/dVuHAlRhXa8xLDsRttXbWbz6CSaFaPQLQXnOij7iME7Z8bagFKfKcDTG5t+9jWKKlhksv2jLfK9r9HWcJHc4waR8FqznPvLZ2NzmlOBvqHVnNXdsx6gN+YQIRbuXTakaST4gsSx83RaX28Zx6ipRy2lc43izupcEX6DC15kIvkCB7z3BG07ASex/49/yxHtu3fFKMdpef+XQJkXKD7BsipFrwtkxb2ibDQLn9RlHh/tvwTnvNqncQV4q48sIM+OnGcE+d6DX+gQyAwd5Op9YuB6A7jg+UV9/zynmAzjFXBmsRzaXjuwoZstNWp5xEkdxVEfxjnSU8tEbQuBzq0KG45TmrZa/8IIGBZY376BAju79gfXtl6sDV0u8DUqq/jaYqT/8IBjJWKyFo0/4kvhWA6PFRHzrKKaHKU6fN7jIW1TKH0grOmVkliSIlLzLSThHkPhRh1lLXsbp2zclxb4p6zU06yb8uCLsLNSXxGvebob8GCZ4myLy9hc1WonwZlW8npXXa+TqI5XAW6yMoSIVw+n6o46VHQ0r11R9zJia4JKcx1Odx9wzOoN7j6d4Tw6f0I1PYwZ/FbTHhhTTgBcYXbZ3JwyzTWd66I4Lz4UGnvZE8Fyo8IzwtlwHvuPcGo6A0YnCXrOLUeBpQGqPBNLL0jJMKYu1EDyZmiFf3oLwMg7Th+wmDZaMan8akq2jgUlY1lasKsWhihfYybLwufnWBWvkfrDwa6pF8aJjXFvHDoalCb+MIazrjU0P5j5yMNvUMP7cJnF0ksnNVGe3FmYtQ+g7e9gB7fhKI8DFqrxzgOQ5AC7trs97xoQ+b6mL7HsYJ6Uy9vH8TGUZp7SVq9hq9Bn/jFQtnf7byhnphuvKuDZsSXzjal2gF/p9T+vq15cz715tzH2xflftap6W3cfrdc6M1kfb6xQxqaxeRoSpxduxOurBvq5mHH7j0heNEEFlR1mTUZzymKjMIPAV/pAh0UTxZi9PYAFH4dO5hk4XA9CpzNFfCJo1gtRkcq5GkXrIAkjRQ47IEtER1kssoJ8Htg6/c2sF3IFC+v56CUypSoHxp/9zArBGsgJTKaoazWr5k2hWNZfKValu/8JYmhUYPydwRhEs0GlWeyLY4bcwqGnxzwlfZnEOPimReGcwDOaeqVA4iXFtWY4w4OvWESOF4ra6bv6EthON5kt7HU4/lGCqqEa+/GfVK4HR1SsdXbp4NL3SUq07wTYeYz9NTZ3g0KmYL7PUlXFt2j2R+UrmLseVP0ynu7XABS/LGWY/mwsOkjN2vY+q0xTdzxlG7bBUih19/89eDf0s8Hd0sPJD2OpLX47t7MfKDww0UHcbVYzKeByt4zTm+yZYX28O2SX0RyldX3HqpwXf9m7QCPKPYYuBDJX7QXFB8zjgKg6u7vNT1smc+Pyjqu36fBbvt/2lIFmCRPN/yW2m/VqfCUxDWeuuuzWqX/cDQSit+4sJDFFZrwdyWontLbx2J54Up6g3S4minE1pXKUC75zm6s8SmleWsWfiw2zaWifl3wKiOAhYD4fJczg9sclUp7OFZqEzyO4noIr3nbwQzx+zQ5Epxj9pwqPewXCKhAdQZaM6OXSm9nLACe1lX3jIBHQSkXvklHWw8S87XNDafqpsiXx5ewaHYmdw+f84mSRBhHn3kCuxaWRmu8fCjk5mNjWs8gN5khn/a4v8+10VTTX/cQTv/wc= \ No newline at end of file diff --git a/Documentation/Flowcharts/runAction/runAction b/Documentation/Flowcharts/runAction/runAction new file mode 100644 index 00000000..8ed145b6 --- /dev/null +++ b/Documentation/Flowcharts/runAction/runAction @@ -0,0 +1 @@ +5Vxbk5s2FP41nkkfssP98rjrbJLO9LLNpmn3UQaBSTByhbB3++srgWQbJG+8G0A2TSYtCAlLR5++c9ERM3u+evyAwXr5K4phPrOM+HFmv5tZlunYBv0fK3lqSnzXbwpSnMW80r7gPvsX8kLeLq2yGJatigShnGTrdmGEigJGpFUGMEbbdrUE5e1fXYMUSgX3Ecjl0r+ymCyb0sA19uUfYZYuxS+bBn+yANG3FKOq4L83s+yk/tM8XgHxLl6/XIIYbQ+K7NuZPccIkeZq9TiHOZOtEFvT7v2Rp7t+Y1iQUxo4vBvkSQwdxlQS/BZhskQpKkB+uy+9qYcH2QsMehehVRbx6yVZ5fTSpJfwMSN/s+Irl989iCcFwU8Hj9jtA3/BV0jIE4cDqAiiRfs+/ILQmr9DHiYfeYkqHPGRWBw4AKeQ17KbIjbGg2ZcNB8gWkHaGVoBwxyQbNNGA+CgSnf19oKlF1y2ajnzvmxAXvGXzvMs+kaLPlUF/e9NRQgqpMnYi5qNervMCLxfg3qAW7ry2iJPsjyfoxzhuq2dBBGM6MzclASjb/DgySJwHdd4TowbiAl8fFZE4qnHkcxXusNvt/tlYwqwLw+WjGj2I0L1JgxeWwavqwu8tgTeBrSgrkVZM2e0xyYYUaDFNVnP2KR7/1SMyG4wqy5upEmjHLhml2uMIliWLwY6NGMX+iqgh55vA28YoO9QPQbSgwkj3ZWR7utCuishnUL3OiIZKt781DtwkwR6aoaO/XBhDMTQljEicIVBdyDR39DgYD6A8gF6GzA7pt+Fc31zB3FGhwfxEBj3ZYyHujBuyrbIA7W1p0swCuGbpi7p+5Lwf05Y55YQQ1atrDtPX7vMilRo0lp/dk3DJVotqrMlHd9tk04gk06o4JywB84Jj5gr70GWM+vkCIvDR2adxKha1E9OMLj7kFObm23XHZGbvXPjZmtYIhCrvsUE2lxCM/if8bBS/NpMPdGbLhOvMdxkcEuvVihmlFzSvlpezshhgelVyq7oAO6aiiz4pbANX0vPIzkzbpueHZVNaCt4xzT7IJ5weJT7+mCucN01wlx23svvYfcyHPKgE3gKR3RrLJk8xuBunbpTYUUL6WoIp8qoHsF0kVTn8BK2tPGG7KhkTD3WOzPCUdlkZcasZUk9KhQma3eVlV+aJj1qzCRJrCMOjbfw3L40ptPWmK6KblyVxjT64Bt/yhpT8Mh5IN+SQ1YNeMsl2r5JQF7CIUKBY4C4ozI9hVM+nMqU3XLdKnNgVFsKVAe6UG07Z6ExtUrf1rf9a6m1abmGUQZytC0g7lUl6ojx+f54MT7bnbRCDM4KvHKgqgQb+D5rzLiupcf2gqs1rY+K/Kl3RUk9yyB2VNAOrIXtDaMod4k/YyhKZ2qbvS0Ue32jmDe9Qxn92d0E7qw4PoNhl3Sa5cZbdSZn143TqEgRYSFo3WT0DLFr7LK/qhXg1X96IvfOrnE4ZmKPa0pSu+wl0Mrs8eRl4WqLpNjyJtALk3tKOhBy+wijisDpZfkYIstsFOq3poz7UMa9o20f3pbd0RylcxTD2w0dxWSyfcydJhwFwLKXOe09TUdh4zjaLHVHBvXwTr450xZiUUpfW5qs6M2knXzTNsfz8p1jmcf3VRRBGJ9dNk+XfF3TGZF8R9gkGHQHzFGkAmskUzkZ+B5s2N5XRC3hjF0gtrxXqCT170d0bHndlRqj1E5IMVhdqB3RDYGYyhSRwRzAKRvCwtlrxUW0pQO7gx8Bkw2EwcXp9s4addNrjMHTQYU1Cx+VB2/uRKHsThTKFAri/YkNREj9WH3n+fr0ounya2NbQrbtAxHMS7omd6jM2MEICT4EZ6BIa5ycI7N1c99M5UkeVfJb0AezyfGWETwkjTa6qzrJps1G92QbfdLboCrpe9qCja5sz9c5txHa5xSBHEMQczOqqA9BXJTDZAvbRewdmdZVELDi0DFN31Mk+BsDuU+ePWVkK5wFjciWnYUIFBHMr4t4nkOAhba82MCiY3VwHX4X18FA3oE3wub/qbju3Qn2VOZs77h+lTnrGG0ImGKG+zI3vcEjGBoNIdXEesNsh790Yr3OMTTT4Amnx/yOboPACJ+t7z9f/8eBI/sp7JQDKOCnqvhIYaCg3Ve7KePsRNpW200JA/97fCvMq759Fm+E8zra7AhPsR3vaUvT9GT3MKrNBwrliz2p47md1S8yysYIJfo6PD6dakaRO+hrs4v9MzLVxhG1pY065DTNevuxQI173ZMXPRJl+G3KCMU5xgPKULkXfag7f8pus6+wQvVh1pfttj/XMWCJZHQgBZUuvb7KQUnmS2qswc/ZSkbyZShB3+4gWnX4RrWR3osSlE/zTVoJCkS3UN67r3Wy9PUcfdJIMirxa7OpRW+6ipF/6eEqh0VKV+CFKcjuLpah4hNzIBUp3jFN9Co8Qo3olT3CvYoU3yq5TI3odTdixzxmE5zRGYPeg8i+wjPpf3PkVbHGbijQtO3ncxyk4OSLGxiO30HGj0UbfdnT+qOCFVuRZNlalwYq6tMSvJhatBe6VrshHNMada3KGrwZp2W8g0lW1Dtr9P3Xp3yJ4lN9iOUt/XdPqqT5+B5g8KETsYYF24NGFSmbz1ygZDd7tJMljlifmw+KQyy/+67Ca/Y9jPr1X5hx8bWUa/2OmS/Da80pRDDKc4iVdT9gCItdfxEGKVTWe6ASQ1tesflewZHXPfFKMVxUaV2pg0jS5M4eQK4NrQIVsINDXlRS0LIde/udu7/7XFPXW8s4Am1EUZjk9UfQl1kc09EKxErwVID4ePzc8FuItU90t3YgfgFg6e3+k+0Noey/i2/f/gc= \ No newline at end of file diff --git a/Documentation/Flowcharts/runAction/runAction.png b/Documentation/Flowcharts/runAction/runAction.png new file mode 100644 index 00000000..eb141c8c Binary files /dev/null and b/Documentation/Flowcharts/runAction/runAction.png differ diff --git a/Documentation/controller.js.txt b/Documentation/controller.js.txt new file mode 100644 index 00000000..9b6b2e42 --- /dev/null +++ b/Documentation/controller.js.txt @@ -0,0 +1,7 @@ +This top section ("down to var model = window.pencilcode.model = {") is loading in all the other files of Pencilcode and getting ready for using them in the rest of the file. + +model is being built as a nulled out object which will later be filled out + +The rest of these functions will be commented inline, anything that should be noted across the entire file will be put in this file. + +view.on is from the view.js file, it sets up event listeners generally as on click functionality \ No newline at end of file diff --git a/Documentation/editor-main.js.txt b/Documentation/editor-main.js.txt new file mode 100644 index 00000000..22f55e6c --- /dev/null +++ b/Documentation/editor-main.js.txt @@ -0,0 +1,7 @@ +'use strict' - + forces strict usage, limits some common code bloopers by throwing exceptions + Prevents use of "unsafe" actions via throwing exceptions + Disables confusing/poorly thought out features of JS + +require('controller'); + Starts the application by including the main file of Pencilcode. \ No newline at end of file diff --git a/Gruntfile.js b/Gruntfile.js index d027e2b5..68d26d97 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -346,6 +346,9 @@ module.exports = function(grunt) { // "build", for development, builds code without running tests. grunt.registerTask('build', ['browserify:dist', 'uglify', 'less', 'builddate']); + // "build", for development, builds code without running tests, in debug mode. + grunt.registerTask('build-debug', + ['browserify:dist', 'concat', 'less', 'builddate']); // default target: compile editor code and uglify turtlebits.js, and test it. grunt.registerTask('default', ['build', 'test']); diff --git a/README.md b/README.md index 1c9dd350..31e971fe 100644 --- a/README.md +++ b/README.md @@ -1,49 +1,30 @@ + How To Build and Test PencilCode ================================ [![Build Status](https://travis-ci.org/PencilCode/pencilcode.png?branch=master)](https://travis-ci.org/PencilCode/pencilcode) -First install the prerequisites: git, nodejs, and grunt. Next, be sure you're in your home directory. Then: - -
-git clone https://github.com/PencilCode/pencilcode.git
-cd pencilcode
-npm install
-grunt
-grunt devserver
-
-On Windows Subsystem for Linux (WSL) *only*: - -
-git clone https://github.com/cacticouncil/pencilcode.git
-cd pencilcode
-npm install --no-shrinkwrap
-grunt
-grunt devserver
-
- -Development can be done on Linux, Mac, or Windows. -The prerequisites are a standard node.js development environment -which is very widely used, plus grunt (you'll need to -`npm install -g grunt-cli`). Prerequisites ------------- +There are three prerequisites: git, node.js, and grunt. Instructions are noted by operating system. -First, you need git, which is easy. On Linux, -just `sudo apt-get install git` or `sudo yum install git-core` -if you don't have it. - -Second, you need node.js (which is the `node` and `npm` binaries) -and `grunt` (which is the build tool popular in the node.js community). -The Ubuntu and Debian packages for node.js are pretty old, so don't -just apt-get install the packages. Get and build the latest `node` and -`npm` and `grunt` binaries as follows: +__Linux:__ -(For Linux:) +1. Git - +`sudo apt-get install git` on Debian/Ubuntu +`sudo yum install git-core` on CentOS / Redhat / Fedora +2. Node.js - +Some modern systems have recent enough tools to install node.js via the package manager. Here is how you'd do so on Ubuntu (native or under WSL): +
+sudo apt-get install npm git
+sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10
+sudo npm install -g grunt-cli
+
+If you are not sure, it is recommended you get and build the latest `node`, `npm`, and `grunt` binaries as follows:
 mkdir -p /tmp/nodejs && cd /tmp/nodejs
-wget -N http://nodejs.org/dist/v0.12.7/node-v0.12.7.tar.gz # http://nodejs.org/dist/node-latest.tar.gz
+wget -N http://nodejs.org/dist/v7.4.0/node-v7.4.0.tar.gz # http://nodejs.org/dist/node-latest.tar.gz
 tar xzvf node-*.tar.gz && cd `ls -d node-v*`
 ./configure --prefix=$HOME/local
 make install
@@ -53,19 +34,18 @@ npm install -g grunt-cli
 
Zsh users should change `bashrc` to `zshrc` in the above code. -(For Windows Subsystem for Linux:) +__Mac:__ -
-sudo apt-get install npm git
-sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10
-sudo npm install -g grunt-cli
-
- -(For Mac:) +1. On the Mac, git comes from Apple (you can get it as part of the +[Command line tools for XCode](https://developer.apple.com/downloads/index.action?q=xcode#)), +and if you'd rather not build it, node.js can be installed from +http://nodejs.org/download/. +You will still need to `sudo npm install -g grunt-cli`. +2. You'll need to install node.js as well:
 mkdir -p /tmp/nodejs && cd /tmp/nodejs
-curl http://nodejs.org/dist/v0.12.7/node-v0.12.7.tar.gz > node-latest.tar.gz
+curl http://nodejs.org/dist/v7.4.0/node-v7.4.0.tar.gz > node-latest.tar.gz
 tar xzvf node-*.tar.gz && cd `ls -d node-v*`
 ./configure --prefix=$HOME/local
 make install
@@ -74,23 +54,25 @@ source ~/.profile
 npm install -g grunt-cli
 
-The above drops all the built binaries into `~/local/bin` so you -don't need root. +The above drops all the built binaries into `~/local/bin` so you don't need root. -On the Mac, git comes from Apple (you can get it as part of the -[Command line tools for XCode](https://developer.apple.com/downloads/index.action?q=xcode#)), -and if you'd rather not build it, node.js can be installed from -http://nodejs.org/download/. -You will still need to `sudo npm install -g grunt-cli`. +__Windows:__ + +1. Git can be installed from here: http://git-scm.com/download/win -On Windows, git can be installed from here: -http://git-scm.com/download/win and node.js can be installed -from here: http://nodejs.org/download/. Windows development -is untested, but if you try it, let me know. +2. Node.js v7.x can be installed from here: http://nodejs.org/download/ -Because node.js does not work on cygwin, when I work with node.js -on a Windows box, I just run it with debian under a vbox instance -https://www.virtualbox.org/. + +Building and Running +--------------------- +To clone the repository, build, and run, execute these commands: +
+git clone https://github.com/PencilCode/pencilcode.git
+cd pencilcode
+npm install
+grunt
+grunt devserver
+
How To Experiment with PencilCode diff --git a/Step1_Download Node.js.URL b/Step1_Download Node.js.URL new file mode 100644 index 00000000..5086a018 --- /dev/null +++ b/Step1_Download Node.js.URL @@ -0,0 +1,6 @@ +[InternetShortcut] +URL=https://nodejs.org/en/download/current/ +IDList= +HotKey=0 +IconFile=C:\Users\exlted\AppData\Local\Mozilla\Firefox\Profiles\s32xppaq.default\shortcutCache\+I5_7JpOJ20L+FgHHv8EMg==.ico +IconIndex=0 diff --git a/Step2.txt b/Step2.txt new file mode 100644 index 00000000..459d064a --- /dev/null +++ b/Step2.txt @@ -0,0 +1,2 @@ +Install the Node file you just downloaded then run Step 3 + diff --git a/Step3_Initial_Install.bat b/Step3_Initial_Install.bat new file mode 100644 index 00000000..41f4ccd9 --- /dev/null +++ b/Step3_Initial_Install.bat @@ -0,0 +1 @@ +npm install -g grunt -cli diff --git a/Step4_Setup.bat b/Step4_Setup.bat new file mode 100644 index 00000000..b66c116a --- /dev/null +++ b/Step4_Setup.bat @@ -0,0 +1 @@ +npm install \ No newline at end of file diff --git a/StepFinal_Run_Server.bat b/StepFinal_Run_Server.bat new file mode 100644 index 00000000..70aa704d --- /dev/null +++ b/StepFinal_Run_Server.bat @@ -0,0 +1 @@ +grunt devserver \ No newline at end of file diff --git a/StepTest_Test.bat b/StepTest_Test.bat new file mode 100644 index 00000000..cd325a3a --- /dev/null +++ b/StepTest_Test.bat @@ -0,0 +1 @@ +grunt \ No newline at end of file diff --git a/content/builddate.txt b/content/builddate.txt new file mode 100644 index 00000000..bb505474 --- /dev/null +++ b/content/builddate.txt @@ -0,0 +1 @@ +Thursday, March 16th, 2017, 12:53:09 EDT \ No newline at end of file diff --git a/content/editor.css b/content/editor.css new file mode 100644 index 00000000..0e6e7b83 --- /dev/null +++ b/content/editor.css @@ -0,0 +1 @@ +*{box-sizing:border-box}.tooltipster-default{box-sizing:content-box}.tooltipster-shadow{border-radius:5px;background-color:#eeeeee;box-shadow:0 0 14px rgba(0,0,0,0.3);color:#2c2c2c}.tooltipster-shadow .tooltipster-content{font-family:'Arial',sans-serif;font-size:14px;line-height:16px}body{margin:0;padding:0;font-size:24px;font-family:Lato,Verdana,Helvetica,sans-serif;line-height:28px;font-weight:400;overflow:hidden;position:fixed;height:100%;width:100%}#overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.1);display:none;z-index:4}body.modal #overlay{display:block}#overlay .dialog{position:absolute;right:12px;top:68px;min-width:320px;display:table;margin:auto;border:none;background-color:#fff;box-shadow:0 0 7px #000;color:#000;border-radius:8px;font-family:inherit;font-size:18px;line-height:21px;padding:12px;text-align:center;overflow:hidden}#overlay .dialog.center{left:0;right:0;bottom:25vh;top:0;width:320px}#overlay .dialog.leftopts{right:50%;top:90px;min-width:215px}#overlay .dialog label.tooltipstered:hover{border:1px dotted #696969}#overlay .dialog label.tooltipstered{border:1px solid transparent;padding-right:5px}#guidepane{position:absolute;background:#1e90ff;width:50%;right:-50%;bottom:0;top:56px;z-index:2}#guidepane .guidetitle{padding:0 20px;color:#87ceeb;letter-spacing:2px}#guidepane .guidepreview{position:absolute;left:16px;right:0;bottom:0;top:28px;height:auto;width:auto;background:whitesmoke}#guidepane .guidepreview iframe{height:100%;width:100%;border:0}.framed #overlay .dialog{top:12px}#overlay .prompt{padding:8px}#overlay .info{padding:3px;color:red}#overlay .content{display:inline-block;padding:3px}#overlay .field{text-align:right;padding:3px;white-space:nowrap}.username{text-transform:lowercase}#overlay .fieldlink{display:block;text-align:left;font-size:70%;line-height:100%}#overlay .switchuser{text-decoration:none;font-size:90%}#overlay .switchuser:hover{text-decoration:underline}#overflow{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}#notification{position:absolute;top:12px;left:0;display:none;z-index:2;background-color:#ffd700;box-shadow:0 0 7px gray;color:#000;border-radius:8px;font-family:inherit;padding:3px 32px}#notification a:active{outline:2px dotted red}#top{position:absolute;top:0;left:0;right:0;width:100%;height:56px;table-layout:auto;overflow:visible;max-height:56px;border-spacing:0}#topleft,#topright{padding:0 12px;height:56px;vertical-align:middle}#topleft{overflow:hidden}#topright{text-align:right;overflow:visible;width:1%}#topright button,#overlay button{border:none;background-color:#fff;-moz-appearance:none !important;box-shadow:0 0 7px gray;font-size:16px;margin:5px;display:inline-block;line-height:24px;vertical-align:middle;height:28px;padding:2px 8px;color:#222;border-radius:8px;font-family:inherit}#topright button#save,#topright li#save2{padding-left:28px;background-image:url("/image/dpencil-16.png");background-repeat:no-repeat;background-position:8px center}#topright li#save2:hover{background-image:url("/image/dgpencil-16.png")}#topright button#save[disabled],#topright li#save2[disabled]{background-image:url("/image/dgpencil-16.png")}#topright button[disabled],#overlay button[disabled]{box-shadow:0 0 7px #a9a9a9;color:gray}#topright button:not([disabled]):hover,#overlay button:not([disabled]):hover,#overlay .zeroclipboard-is-hover{box-shadow:0 0 7px #000;color:black}#topright button.splitmenu{padding-right:28px;position:relative}#splitscreen>.splitscreenicon{display:block;height:16px;width:19px;background-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMTAiIHk9IjEiIHdpZHRoPSI4IiBoZWlnaHQ9IjE0IiBzdHJva2U9IiMzMzMiIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMiIvPjxwYXRoIGQ9Ik0wLDIgTDYsMiBNMCw2IEw4LDYgTTAsMTAgTDYsMTAgTTAsMTQgTDcsMTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIyIi8+PC9zdmc+")}#topright button .droparrow{position:absolute;right:0;top:0;height:28px;width:20px;padding:2px;line-height:24px;vertical-align:middle;border-left:1px solid darkgray;display:inline-block;color:#222;margin:0}#topright button .droparrow ul{list-style-type:none;display:none;position:absolute;left:-70px;border:0;white-space:nowrap;z-index:200;background:white;text-align:left;top:0;padding:0;margin:0;box-shadow:0 0 7px gray}#topright button .droparrow:active ul,#topright button .droparrow ul:hover{display:block}#topright button .droparrow ul li{padding:2px 8px}#topright button .droparrow ul li[disabled]{color:silver}#topright button .droparrow ul li:hover:not([disabled]){color:#eee;background:dodgerblue}#topright button .droparrow ul li:active:not([disabled]){color:white}#overlay a.quiet{color:blue;text-decoration:none}#overlay a.quiet:hover{text-decoration:underline}#filename[contentEditable]:hover{box-shadow:0 0 3px #a0522d}#owner,#filename,#folder{display:inline-block;vertical-align:middle;color:#8b4513;max-width:90%;max-height:56px;overflow:hidden;word-break:break-all;white-space:normal;border:0}#filename{padding:3px 2px 2px 2px}#owner{color:#000}#folder{margin:0 12px}.helplink{cursor:help}.helplink:hover{text-decoration:underline;color:blue}.panebox{overflow:hidden;position:absolute;top:56px;bottom:0}.framed .panebox{top:0}.panetitle{position:absolute;top:0;height:28px;width:100%;background:#1e90ff;padding:0;color:#87ceeb;letter-spacing:2px;border-left:1px solid #fff;border-right:1px solid #fff}.panetitle a{color:inherit;text-decoration:none;display:block}.panetitle a b{font-family:Courier New,monospace;font-size:34px;line-height:30px;font-weight:700;vertical-align:top}.panetitle a span{text-decoration:none}.panetitle a:hover{color:#fff}.panetitle a:active{color:red}.panetitle a:hover span{text-decoration:underline;color:#fff}.panetitle a:hover span[alt]:before{content:attr(alt)}.panetitle a:hover span[alt] span{display:none}.panetitle .blockicon,.panetitle .codeicon{display:inline-block;background-repeat:no-repeat;background-position:center;width:32px;height:28px;vertical-align:bottom;opacity:.6}.panetitle a:hover .blockicon,.panetitle a:hover .codeicon{vertical-align:bottom;opacity:1}.panetitle .blockicon{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAcCAYAAAAAwr0iAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAADBSURBVEjH7ZdbDoUwCETZl4tjaV0a96dGJQO0FVsT7yT8GMucvimJCK0M+iYAbT7ArukAjxtbAGcNz6Uj2MkKsQxg/66HnsWWNh0VQ4DAXEPcFV8AVFIGUUCSYvwbRe3KBgG8pCXB/MgzAJAVLwSoC2IqwHUvrgb4r4E3AcgEALF2QXQU40QZR3HjZSSZ5hAAXaEOGFOHmq5jr4GC6DIPARCE1SAqPh4bgVaD1mrJLMmyATzz1CnwALrfBXcK0V6AH0gNYFHIcN57AAAAAElFTkSuQmCC")}.panetitle .codeicon{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAcCAYAAAAAwr0iAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAACOSURBVEjH7ZY9DsAgCIU9V7eejKO/bh3AUhEiDLzExQT8+FEZAEbmkhsLUh0a7d+N614zjpA4rzQAAAKT4piLXACzw40AUwgLgBrJT5rpC9gM4Kh1A+wDaDW0AvAesgKQA4C2ACKi17KgArC7TwEAwl/tDJTogRK3oB+iBqjyHecOJOkj2dGh9KTSAUrpAUQvT3cWdmdvAAAAAElFTkSuQmCC")}.pane{position:absolute;top:28px;bottom:0;width:100%;background:#f5f5f5;border-left:1px solid #fff;border-right:1px solid #fff}.back{left:-50%;width:50%}.left{left:0;width:50%;z-index:1}.right{left:50%;width:50%;z-index:0}.rightpal{left:50vw;box-sizing:content-box;border-left:35px solid #dcdcdc}.ace_search.right{left:auto;width:60%;max-width:400px}#middle{z-index:3;display:none}body.modal #middle{visibility:hidden}#middle,.vcenter{position:absolute;top:50%;right:50%;margin-right:-28px}#middle.rightedge{right:38px}.framed #middle,.framed .vcenter{margin-top:-28px}.hcenter{margin:-50%}#run,#stop{border:0;background-color:rgba(255,255,255,0.7);opacity:.7;box-shadow:0 0 7px gray;color:#1e90ff;border-radius:20px;padding:10px;margin:0;display:inline-block}#run.quiet{box-shadow:none;opacity:.6;padding:0;margin:10px;border-radius:8px;background-color:transparent}#run:hover,#stop:hover,#run.quiet:hover{box-shadow:0 0 7px #000;opacity:.9;padding:10px;margin:0;border-radius:20px;background-color:rgba(255,255,255,0.8)}#run.pressed:hover,#stop.pressed:hover{box-shadow:0 0 14px #000;opacity:1}#run .triangle{width:0;height:0;font-size:0;line-height:0;border-bottom:19px solid transparent;border-top:19px solid transparent;border-left:36px solid #1e90ff;margin:-1px -4px -1px 4px}#run .reload{width:36px;height:36px;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZlcnNpb249JzEuMScgd2lkdGg9JzM2JyBoZWlnaHQ9JzM2Jz48cGF0aCBkPSdNMjksMTEuNSBhMTMsMTMgMCAxLDAgMCwxMycgZmlsbD0nbm9uZScgc3Ryb2tlPSdkb2RnZXJibHVlJyBzdHJva2Utd2lkdGg9JzknLz48cGF0aCBkPSdNMTgsMTggbDE3LDAgbDAsLTE3IHonIGZpbGw9J2RvZGdlcmJsdWUnLz48L3N2Zz4=");background-position:center;opacity:.6}#run:hover .reload{opacity:1}#stop .square{width:0;height:0;font-size:0;line-height:0;border:14px solid #1e90ff;margin:4px 4px}body,.panetitle,#owner{user-select:none;-webkit-user-select:none;-moz-user-select:none;cursor:default}#owner:hover{text-decoration:underline}#folder:hover{border-radius:3px;box-shadow:0 0 6px #000}.editor{position:absolute;top:0;height:100%;left:0;width:100%;background-color:#fff;overflow:visible}.htmlmark:before,.cssmark:before,.jsmark:before{color:#8bf;font-size:60px;font-family:Arial,sans-serif;font-weight:700;pointer-events:none;opacity:.5;transition:opacity .3s;z-index:3;position:absolute;display:table;margin:auto;top:7px;bottom:0;text-align:center;right:6%}.htmlmark:hover:before,.cssmark:hover:before,.jsmark:hover:before{opacity:.15}.jsmark:before{content:'JS'}.htmlmark:before{content:'HTML'}.cssmark:before{content:'CSS'}#pencildoc .ace_editor{font-family:"Source Code Pro",Monaco,"Bitstream Vera Sans Mono","Lucida Console",Terminal,monospace;font-weight:500;line-height:121%}.debugerror{position:absolute;background:rgba(255,0,0,0.7);z-index:1}.debugtrace{position:absolute;background:#afeeee}.debugfocus{position:absolute;background:#ff0;z-index:2}div.guttermouseable{background-position:right;background-repeat:repeat-y;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAABCAYAAAAW/mTzAAAAEElEQVQIW2P8/5/hPwMaAAA38gL/hSCOCgAAAABJRU5ErkJggg==")}body#pencildoc #diigolet-csm{display:none !important}.fullscreen img{vertical-align:top;margin:2px 2px 3px 5px;opacity:.6}.fullscreen:hover img{opacity:1}.closeblocks{font-size:26px;font-weight:700;font-family:sans-serif;position:absolute;right:0;top:0;line-height:15px;padding:0 1px 2px;color:#87ceeb;z-index:2000;cursor:pointer}.blockmenu{position:absolute;top:-28px;height:28px;right:0;width:100%;padding:0 17px;color:#eee;background:#0D47A1;z-index:300}.blockmenuarrow{float:right;font-size:67%}.blockmenupopup{width:100%;position:absolute;left:0;top:28px;background:#fff;color:#0d47a1;border:1px solid #0d47a1;border-top:none;font-size:20px}.blockmenuitem[checked]:before{position:absolute;left:2px;font-size:75%;content:"\2713"}.blockmenuitem{padding:1px 17px;white-space:nowrap;overflow:hidden}.blockmenuitem:hover{color:white;background:#0D47A1}.droplet-dropdown-item{font-size:15px;line-height:1.3}.droplet-palette-wrapper{cursor:default;box-shadow:0 0 6px gray}.droplet-palette-wrapper:hover .closeblocks{color:#1e90ff}.droplet-palette-wrapper .closeblocks:hover{background:#1e90ff;color:#fff}.droplet-palette-wrapper .closeblocks:active{color:red;background:#1e90ff}.gear{display:none}.panebox.left .gear{display:inline-block;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARBAMAAADJQ1rJAAAAFVBMVEUAAAD///////////////////////9Iz20EAAAABnRSTlMAr++f37+5/Na4AAAATElEQVQI12MAArM0AQYICEsLgLLU0hRAFHOSW1pamlMyAwNbGgQwMIilpQlACKa0RAYGxrQkoMK0BNwEQh1CL9w8hB0wezHcIgZ2HwD3DBrdizr+iAAAAABJRU5ErkJggg==");background-repeat:no-repeat;background-position:center;width:21px;opacity:.6}.langmenu:hover,.langmenu:hover .gear{color:#fff;opacity:1}.thumb-toggle:hover,.thumb-toggle:hover .fa{color:#fff;opacity:1}.preview{height:100%;overflow:hidden;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAMAAADzN3VRAAAABlBMVEXS8OD///9kZDOcAAAAI0lEQVR42u3OIQ4AAAzCQPj/p7EYksmRUHeuoDXcEXvwVgkB3egCQVh7Ml4AAAAASUVORK5CYII=");background-position:center;border-left:1px dashed gainsboro}.preview iframe{height:100%;width:100%;border:none;margin:0;padding:0}.directory{height:100%;padding:10px;overflow:auto}.directory-searchable{padding-top:20px}.directory .column{display:inline-block;float:left;margin-top:12px}.directory .item{display:inline-block;float:left;clear:left;text-decoration:none;color:#222;cursor:pointer;width:154px}.directory .item div{margin:0;max-height:154px;padding:2px 0}.directory .item div span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.directory .item div .caption{text-align:center}.directory .item div .thumbnail{background-color:#eeeeee;width:100px;height:100px;margin-top:16px;margin-left:27px;border:1px #ccc solid;border-radius:4px;padding:2px}.directory .item:hover{text-decoration:underline;color:blue}.directory .item:hover div .thumbnail{padding:0;border-width:2px;border-color:#1679FF}.directory .item:hover span:not(.caption){display:table;text-decoration:underline;position:relative;background-color:#f5f5f5;padding-right:6px}.directory .create{color:#1e90ff}.directory .create div .thumbnail{border-style:dashed}.loading,#notification.loading{padding:0;box-shadow:0 0 7px gray;width:32px;height:32px;border-radius:16px;background-position:center;background-repeat:no-repeat;opacity:.7;background-color:#fff;background-image:url("data:image/gif;base64,R0lGODlhIAAgAPQBALe3t6enp3t7e9fX1/n5+ejo6JeXl4WFhcjIyMfHx4aGhpiYmOfn5/j4+Jubm9jY2IODg6ioqLi4uP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJBwABACwAAAAAIAAgAAAF/2AgjiNRAMshrMKxAAUpzyKBLGyuLwNNF7jVIQJAGBGAiGq1iPlEg+VrQC1Yr4WbsOdDCCPU8ACLBSwRNG8LIQ6TsdEVd1RQHdjt6htrd4pwd3lue1dxCyMDK2B5KDkvbwQAcn8CC0ZtSzqVWASdOIcFK0VHAwhSeFotVp2daidrR0ZnM2oLrKwqjZaxEStoab63BL0pAhGxWodPn8JeS6NHvk8BasKJLNBGk0/X1jnZanM03bfXosjST9XlQsZHAGaV08y3zp/w+L0Cv7TBt8SSBODDN4tEJCHCCOQKZWwgPBa7BjTyx+paDEAO4WXS4QKAsE9QmGREsdFFhAVgWE8FnBOEiMMIMGPKXDBF3wESdVq8lMkTJs0gAvyEbOEySc+eQPmRUFMJ3lGeQAGoY2Hy6clMSn8AbfHz50Ye00gM2KpJSNawUE5yHDKAwJMQACH5BAkHAAQALAAAAAAgACAAAAT/kMhJBzBHaHEMYA0ljlJibGhqJCEpMqfWAUBiA0GmGYw7JTrPYEgsmmQDX0IWSBSfQwYDoEuQlpyaDVqUMga6JIWROdjO3Kj3W+5NYtqzk7uWggWGn6Ypv8V2H3VTGmInZn1AKRsHA4IneQx7iEFzRxyCWIMCkxpWIlg8dRkXeHEJAZ0uWAl1qBgCATQ0iXk+j2sNSzqxsgCpShoNwsIDKLyyhD4ExQLDxMa9vgJiLszODcx70b+qwc7MGcc0GbUuj9e6j9Fw3ZvXrtLRVBoALXp41w2jkbDRqDIABiSYxyEfsx6GZAVYmEPRjnwNHklg5oEhw1eL6uXDQi2GxY8XRjVeI4NnDBOQFldAbPPpJMoAHkaGubLBwEuYA4Yl2uTjDgebHw3YxKGDkTICMFB0EMpUxw43RwlYcrjIU9QxF5zuCECNRAQAIfkEBQcACQAsAAAAACAAIAAABP8wyUkLMEdocQwoVChOg7GdqDGMY2FqXQDMM7YZICsNGRcgwOBgOLjAVizE5hdsEomAHmKk5ACa2CcR0UNOCpnDFevUEsM5yYtGBpqfXIFhUvXMmoGXxmO2aJAmYjRXUSgbB08FiiZzBRoygwA3CEMIL4gDiopVfgKRhQJTIVUHmpoZRnY0ARqiIlUfpqw2qjMZczqMpn49kDStOgmcplWPkX/BAxq7xQK+M8g6ygLMJ5AB2MA6w5rTe9jgt8G6xByB4NgvrqOtu7OSzugBUq97BPenno5y8qwwlAMswShwryCnBOf69TCEo2BBRhLq9Muz0BkChwXheXlhoF/HARhDQ/KQUwGGR5AhHYLhkCYijI7gDKRU2YXKjXQyZxKIE2rbIQNAUWIscSRYAhcnOgDYMu9Gy2A8DZ1QYbRF06QenoaIAAAh+QQJBwACACwAAAAAHgAgAAAEv1DIORu98uE9Ef8gswVAGYCoUCJsy14eWq5ufabkDNS1luo0HuJBjI2AQR6RyHEgAaPhkilDSacZiQME9XWmD+gkQL5NxBywV1Amb1MZrLZthoMnDjp8MhXN2xJGIQyEfgJ5gHsChYR4ZIoUjAyCkJGMPymScGgbkoYYDm+HHJ4feTuDmhuhDw2uCHUSrg2XTQCzuAK4s4VrFw4Iuxa6wq6fI7sVxXsBubLCkA6trsTOlQIHAUPXFw+i3B8A33ARACH5BAkHAAcALAAAAAAgACAAAAT/8MhJRzAiZ2XCIFQoSominaiRgGNYYFoXzDOcGUU7JZoSAMBgMBEwCRQJHSAmbAISUKImKeIdZ05hFAowUieFDS0L3G5NitwERsNmzdGuwLC7tbEGox0uFVAxPndFKD18GHRhc4IxCQMDCTBIWwNLApQZgl5VG1COjiYAgHcwXyFWAJ6Oh3ZtaDoHh6mXRjI0GaWblqmVrLaWrwMZsla9HbfAwqnEcwbNFxkAr1bDJ80qj646sbtHogUE4Fa4dQKoqQGK0ODrpCzkaQUFnqDBAgHr67SNj5ED8f9WcgDCx47QjX8ID0mot4IggT43EiD8V2nAmiPfHOKbiHCACTpgQNBo3MhRHho1E+qlGUmgpEdhI6wgGclRjh8dL+d8IIgQ0gaLr170CLDPERE9OF5VsGHwBlClFFqG0tMNAMoREQAAIfkEBQcABgAsAAAAACAAIAAABP/QyEkLWCJntUChYDghmGaaCyKKRbktQRwsrrB8q4RonAz8QEBAsVGtdhmYLBBsuowgZG8ZazaJggGosKEurVeBAicpKb1M8A8BSI6S6AW2C0TYEYGM1kBUoOcnCgB3d0QLBlw2XhopAwMkGoOEeQIFlDRLWFBvYoR2RAB9NKMlmxRIAZ4YZgMEBANDYjkGGAqeeVgArq4DGaZRvoRtGq27BHqzvQKew3rGx1nJesImxbu+s0iO28NECM+rs6vbjm0cAgHPSL86GQDkA6vmzwSlIVLwA6CJ1q4FWI0elVCQb9iHVfRanOCRL54NCcq+0YPEyENBZGXEFEhYoKNHj+REEBiq0GejsY8oO24rCUIZwV0pY4rECEyMLgIxUYbCtkJfEgQ5O1IkOAuRCz8IHtkRMudG0QkOF55YsOdphQuAOHiYFQEAIfkECQcAAgAsAAAAACAAHgAABbugII4jQZ7ig66kyb5wijp0Hd9koO+BgwuAF2+HCsIcw6QOwAz8aMrhTwR4IKDRAHMLcJ5UQIKY0WM5uFsfyecQuwHqF9r4dYsRpCD+hM4LIHZiI3QrcyM+AYF7hCx9JAiBbDiMJA+BU5iZmjFge5swCKGhnyuioV6kIgGmnqkCrK0sDDcIVqIjYCcMu7MvD7+/oy+8vJQCwMioKA/EzbvI0DfOzdDAsSzM0wzVua/S09Wf4L/GmdckvSQhACH5BAkHAAAALAAAAAAgACAAAAX/ICCO5BAoQqoqwdCQcCwmqGrbivTKcGHghqCwljIMeKNBLZeQBAPQqIGYQCZSikRjWwgYomCvSiIbYAvbdOIbBteqpAJKka4P2O1orUD6KdB1W055YUVJKVqBDRJEAgp4YD8CcD8Gig2SN45gEp1zAAUpLoE1BgkJA04qUJ2dAaISjoqScCRXjq2tKWIBgbe1MLcGuapTk4GVSAB+xK8qo2mIyrfNNtBbospmAtXPgdlI292iBeXl0lYp3SgJ5uXJSH6nTRLOPwHuBb88twHzTZVi/clHa8eIW1n+UQs1KZ+cIqgGrMGiMIEzPpUcKtFEsSIKAyLEOSygSsWwihbBTS1zNEDjgJcwXyqMJQDkiIcKWrqLyVPivDl8SmDRWaAnz1OMVNrCIqGcUZ4n0JUpFfFpySzKQGViIWFeJ2NFgmYVkYmjobEynMQYljUEACH5BAUHAAkALAAAAAAgACAAAAT/MMlJCzBHaH1CoWA4DcZmngciikXJBcggX9lmfKs01MZA/EACyYDZqFYIDiLIJBADAZfgCBpwCk2mAQotTkGFzAGbBZK43BpOUjr4yr9BFN3VGEYaQBYRMB22dFEaRyUGTS0nGx2BGXcFg0xhdjEDCDUCgS4WAmMFZE6DIUmcgXklHp6eo1Qgo4BpAkUIqZ6FOQltdFICA7SPXzmjXAAAfUa+GgO3VgLEzsaDyLzLec7FJrO0ocHVzxzNvrY5bdYXnKe+ANuiGgHlheqdtDWsEqMH5erg0akyPJQIpOQz9qFQPxk7EnEAgKBcIx15CiBEaM4GDAQYnbmg0obSxIkYREOGdGangpiPIEWqBCBmDUROHlOqzEhPxD0AKGdihFaPQsJYOBHODFDDza0EiDgYKBfl0o2jI3YpjKUMKhgafpa6DBEBACH5BAkHAAIALAIAAAAeACAAAAW7oCCOZCk6gKmurOA8bSw+SADJuEjsj5PLu11KNFQ9gsgksrhiKJ/I3ohRejCu0CfC4VNdv6sAIsjgNr9gFgIQ6HrRVJWb6y7B47/3l5knwfskXQh/gAFtU2h5hotuhDEwAouGjQ+VkDmShzOWlziZbpydMQ6ZJKGiMZIiAQIAoQhVrS1dkKewLXxGr6wmAL65JpwIw8TEv8e8KgiWxc3Hvjg0zcXPyS1i08a/JMAm2WvdmDF4gN7lLAQsIQAh+QQJBwAIACwCAAAAHgAgAAAE/xDJKQswR2hxDCgEJY6DsZ2oMYQjVZjaESRDPSRBphlFKw06Q6JABBGOx1Js0ErEPkUickpI6BKiwTJapE4LOmYlcxhwu94puYcwlc/o9BEsMEg0UG4CppmlnQJYdXB8KWlkCIFcQDs0NzAHXgAaQDZFVyOABlSTAgEqNgOdWE14SAM5HAChSnY+baoJFwYwjjYapD6atAGfuKyUrwhanga9voHAAmI+xMe9MKuhuMKAz8jSNiauPm7XMKA2o7o712RlNglWpiKAMtd9AtLq6kGr6nzXyAV19P46KDjoS3UgkSd/9JDF8KCvFqwDABDSA0CxIkV4dcZwkKjOosdjOjTYDHuC0KPJVIHabZgx0WRFPrkoMBIoyyUAlCl9vDhh7BtPka/2BAyoQpgIAhYwnOiwSlgEACH5BAUHAAYALAAAAAAgACAAAAT/0MhJC1hKaKEWKFQoTsOynegyjGNhakoAIPSABJm2gKw05AtEYUgsIl6KFQsB+xSfQwIBkEOMBjAhFCol/DTKSSGTHAy2xa50zOFJTAqE2YyOqgnsBUUDmM8tLzoId1JMAkomKn5mOSgCO4SJEwJ9i0ByNkgFd1gCPGV+VSKGC4QZF4+LABpWI4aDagGPp4uSPYl3TDmVc6w9BoacJzM0cmC/ncIbxMXHPclqnXzFNL49hgNqqxwCAdQIGXo9ZAHZXi+J37ICraM6C/DwZBJx36IhhjEB+/AaARLdvm17hOnIhn0IA7wAAecbAiqOYCREOA9gwGIAMuI40WEiP2sGRF7MyEiyJACPCNFVIGOyJcp9Odz4aNKSJEoMICkYelRTY8JA7UbliFEzZaOgLQI9WvCz0SOZvwxGPBHkFwtATnlCDREBADs=")}.protractor-label{padding:15px}.panetitle-extra{float:right}.droplet-toggle-button{text-decoration:none;color:inherit;cursor:pointer}.droplet-toggle-button:hover{text-decoration:underline;color:#fff}.gadget{position:fixed;z-index:3;border-radius:8px;border-bottom-right-radius:0;overflow:hidden;box-shadow:0 0 7px #000}.gadget .topbar{width:100%;height:36px;margin:0;padding-top:8px;padding-left:10px;background:#f5f5f5;overflow:hidden;cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.gadget .topbar button{position:relative;z-index:1;margin:0;padding:2px 8px;height:28px;background:#fff;border:0;border-top-right-radius:8px;border-top-left-radius:8px;box-shadow:0 0 7px gray;font-size:18px;text-decoration:none}.gadget .closer{position:absolute;top:0;right:0;color:#1e90ff;padding:3px 15px;float:right;cursor:pointer;height:36px}.gadget .closer:after{content:'\2715'}.gadget .closer:hover{background:#1e90ff;color:#fff;box-shadow:0 0 7px #000}.gadget .sizer{position:absolute;z-index:1000;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 20px 20px;border-color:transparent transparent #1e90ff;cursor:nwse-resize}.gadget .body{box-shadow:0 0 7px gray;position:absolute;top:36px;bottom:0;width:100%}.gadget.minimized{height:auto;width:auto;box-shadow:0 0 7px gray}.gadget.minimized .topbar{padding:0;height:auto}.gadget.minimized .closer{display:none}.gadget.minimized .sizer{border-width:0 0 10px 10px;cursor:default}.hpanelbox{position:absolute;top:0;left:0;right:0;bottom:0}.hpanel{position:relative;top:0;left:0;height:100%;width:100%;border-top:7px solid #cdf;cursor:row-resize}.hpanel:nth-of-type(1){border-top:none}.hoverlay{cursor:row-resize;position:fixed;top:0;left:0;right:0;bottom:0;z-index:999999}#pencildoc .droplet-palette-element{background-color:#fffde7}#pencildoc .droplet-palette-header{border:0;background-color:#fffde7}#pencildoc .droplet-palette-group-header{font-family:Lato,Verdana,Helvetica,sans-serif;font-size:16px;line-height:22px;padding-left:3px;color:#696969}#pencildoc .droplet-palette-group-header:not(.droplet-palette-group-header-selected):hover{background-color:#fff}#pencildoc .droplet-palette-group-header:active{color:#000}#pencildoc .droplet-palette-header-row{height:22px}#pencildoc .droplet-palette-group-header-selected:hover{font-weight:400}#pencildoc .droplet-palette-group-header-selected{font-weight:400;color:#000}#pencildoc .ace_gutter,#pencildoc .droplet-gutter{background-color:#f5f5f5}.droplet-palette-scroller::-webkit-scrollbar{width:13px;height:13px}.droplet-palette-scroller::-webkit-scrollbar-thumb{background-color:#fff59d;border:2px solid #fffde7}.droplet-palette-scroller:hover::-webkit-scrollbar-thumb{background-color:#fdd835;border:2px solid #fffde7}.texttoggle,.blocktoggle{position:absolute;width:32px;height:42px;background-color:#fffde7;bottom:25%;border-bottom-right-radius:5px;border-top-right-radius:5px;overflow:hidden;white-space:nowrap;transition:right .3s,width .3s;font-size:12px;font-family:Lato,Verdana,Helvetica,sans-serif;font-weight:400;line-height:100%;box-shadow:0 0 6px gray;cursor:default}.texttoggle .slide,.blocktoggle .slide{display:inline-block;position:absolute;top:6px;right:6px;bottom:6px;width:75px;text-align:right}.texttoggle .info,.blocktoggle .info{display:inline-block;white-space:normal;width:50px;text-align:center;vertical-align:top;padding:3px}.texttoggle{right:-32px}.texttoggle .slide:after{content:url(/image/textmode.png)}.texttoggle .info:before{content:'click for text'}.texttoggle:hover{width:80px;right:-80px}.textonly .blocktoggle,.notoggletab .texttoggle,.notoggletab .blocktoggle{display:none}.blocktoggle{left:0;z-index:257}.blocktoggle .slide:after{content:url(/image/blockmode.png)}.blocktoggle:hover{width:80px}.blocktoggle .info:before{content:'click for blocks'}#pencildoc .droplet-palette-canvas{background-color:#fffde7}.droplet-palette-group-header.blue{border-left:10px solid #8fbfef}.droplet-palette-group-header-selected.blue{background-color:#8fbfef}.droplet-palette-group-header.green{border-left:10px solid #8cec79}.droplet-palette-group-header-selected.green{background-color:#8cec79}.droplet-palette-group-header.orange{border-left:10px solid #efcf8f}.droplet-palette-group-header-selected.orange{background-color:#efcf8f}.droplet-palette-group-header.violet{border-left:10px solid #bfa6f2}.droplet-palette-group-header-selected.violet{background-color:#bfa6f2}.droplet-palette-group-header.red{border-left:10px solid #f2a6a6}.droplet-palette-group-header-selected.red{background-color:#f2a6a6}.droplet-palette-group-header.yellow{border-left:10px solid #ecec79}.droplet-palette-group-header-selected.yellow{background-color:#ecec79}.droplet-palette-group-header.quantumlightblue{border-left:10px solid #81d4fa}.droplet-palette-group-header-selected.quantumlightblue{background-color:#81d4fa}.droplet-palette-group-header.quantumpink{border-left:10px solid #F8BBD0}.droplet-palette-group-header-selected.quantumpink{background-color:#F8BBD0}.droplet-palette-group-header.quantumpurple{border-left:10px solid #CE93D8}.droplet-palette-group-header-selected.quantumpurple{background-color:#CE93D8}.droplet-palette-group-header.quantumdeeppurple{border-left:10px solid #B39DDB}.droplet-palette-group-header-selected.quantumdeeppurple{background-color:#B39DDB}.droplet-palette-group-header.quantumindigo{border-left:10px solid #9FA8DA}.droplet-palette-group-header-selected.quantumindigo{background-color:#9FA8DA}.droplet-palette-group-header.quantumcyan{border-left:10px solid #80DEEA}.droplet-palette-group-header-selected.quantumcyan{background-color:#80DEEA}.droplet-palette-group-header.quantumteal{border-left:10px solid #80CBC4}.droplet-palette-group-header-selected.quantumteal{background-color:#80CBC4}.droplet-palette-group-header.quantumlightgreen{border-left:10px solid #C5E1A5}.droplet-palette-group-header-selected.quantumlightgreen{background-color:#C5E1A5}.droplet-palette-group-header.quantumlime{border-left:10px solid #E6EE9C}.droplet-palette-group-header-selected.quantumlime{background-color:#E6EE9C}.droplet-palette-group-header.quantumyellow{border-left:10px solid #FFF59D}.droplet-palette-group-header-selected.quantumyellow{background-color:#FFF59D}.droplet-palette-group-header.quantumorange{border-left:10px solid #FFCC80}.droplet-palette-group-header-selected.quantumorange{background-color:#FFCC80}.droplet-palette-group-header.quantumdeeporange{border-left:10px solid #FFAB91}.droplet-palette-group-header-selected.quantumdeeporange{background-color:#FFAB91}.search-file{position:relative;color:#aaa;font-size:16px;z-index:3}.search-results{padding-top:30px}.search-file input[type="text"]{display:block;margin:0;width:100%;font-family:sans-serif;font-size:10px;box-shadow:none;border-radius:none;padding:10px;border:none;border-bottom:solid 2px #c9c9c9;transition:border .3s;color:#a9a9a9;text-indent:32px}.search-file input[type="text"]:focus{border-bottom:solid 2px dodgerblue;font-size:15px;outline:none;color:dodgerblue;padding:7px}.search-file .fa-search{position:absolute;top:7px;left:10px}.search-file input[type="text"]:focus+.fa-search{color:dodgerblue}.thick-bar{padding-left:12px;padding-right:12px}.blue-bar-icons-list{margin:0;list-style:none;display:inline-flex} \ No newline at end of file diff --git a/content/lib/droplet.js b/content/lib/droplet.js index 3263c200..633c5b0c 100644 --- a/content/lib/droplet.js +++ b/content/lib/droplet.js @@ -63400,6 +63400,7 @@ hook('mousedown', 1, function(point, event, state) { this.dumpNodeForDebug(hitTestResult, line); } if (hitTestResult != null) { + this.blockFrom = "editor"; this.clickedBlock = hitTestResult; this.clickedBlockPaletteEntry = null; this.setCursor(this.clickedBlock.start.next); @@ -63973,6 +63974,7 @@ hook('mousedown', 6, function(point, event, state) { entry = ref3[j]; hitTestResult = this.hitTest(palettePoint, entry.block, this.paletteView); if (hitTestResult != null) { + this.blockFrom = "palette"; this.clickedBlock = entry.block; this.clickedPoint = point; this.clickedBlockPaletteEntry = entry; @@ -65880,11 +65882,39 @@ hook('mousedown', 10, function() { }); Editor.prototype.endDrag = function() { + this.draggingBlock.start.next._value; + var WhereDropped = "Dropped into Palette, "; + if (this.lastHighlight == null) { + WhereDropped = "Dropped into Palette, "; + } + else if (this.lastHighlight.type == "document") { + WhereDropped = "Dropped into top of Editor, "; + } + else if (this.lastHighlight.type == "socket") { + WhereDropped = "Dropped into Socket, " + } + else { + WhereDropped = "Dropped into Editor, "; + } + var node = this.draggingBlock.start; + var blockString = "[' " + while(node.next != null){ + if(node.type === "text"){ + blockString += node._value + " "; + } + node = node.next; + } + blockString += "'], " + WhereDropped; + //this.blockFrom = "palette"; + blockString += "Taken from " + this.blockFrom; + console.log(blockString); + $.get('/log/' + "BlockDropped", blockString); if (this.cursorAtSocket()) { this.setCursor(this.cursor, function(x) { return x.type !== 'socketStart'; }); } + var val = this.draggingBlock.start.next._value; this.draggingBlock = null; this.draggingOffset = null; this.lastHighlight = null; diff --git a/content/lib/font-awesome.css b/content/lib/font-awesome.css new file mode 100644 index 00000000..2af3612b --- /dev/null +++ b/content/lib/font-awesome.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/fonts/fontawesome-webfont.eot?v=4.3.0');src:url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'),url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'),url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'),url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'),url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-genderless:before,.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"} \ No newline at end of file diff --git a/content/lib/pc_py_wrapper.js b/content/lib/pc_py_wrapper.js index e7fea0cf..6389f2b9 100644 --- a/content/lib/pc_py_wrapper.js +++ b/content/lib/pc_py_wrapper.js @@ -17,11 +17,13 @@ var $builtinmodule = function (name) { // The doc string cannot be added in code as is usually done in Python, so we set it manually here. mod.__doc__ = "This module provides implemention of the Pencil Code internal functions in Python."; + mod.Window = window + // Sk.builtin.func creates a Python function out of a JS function mod.addalemon = new Sk.builtin.func(function (data) { // Check arguments: func name, arguments passed, min number, max number Sk.builtin.pyCheckArgs("dumps", arguments, 1, 1); - return data.v + " with a lemon"; // Data comes in as a Python string; we have to use the value (v) in JS + return Sk.ffi.remapToJs(data) + " with a lemon"; }); //MOVE @@ -29,57 +31,41 @@ var $builtinmodule = function (name) { mod.fd = new Sk.builtin.func(function (sprite, distance) { Sk.builtin.pyCheckArgs("fd", arguments, 2, 2); if (sprite/* turtle */ === Sk.builtin.none.none$) { - return fd(distance.v); + return fd(Sk.ffi.remapToJs(distance)); } - return sprite.fd(distance.v); + return sprite.fd(Sk.ffi.remapToJs(distance)); }); mod.bk = new Sk.builtin.func(function (sprite, distance) { Sk.builtin.pyCheckArgs("bk", arguments, 2, 2); if (sprite === Sk.builtin.none.none$) { - return bk(distance.v); - } - return sprite.bk(distance.v); - }); - - mod.rt = new Sk.builtin.func(function (sprite, angle) { - Sk.builtin.pyCheckArgs("rt", arguments, 2, 2); - if (sprite === Sk.builtin.none.none$) { - return rt(angle.v); + return bk(Sk.ffi.remapToJs(distance)); } - return sprite.rt(angle.v); - }); - - mod.lt = new Sk.builtin.func(function (sprite, angle) { - Sk.builtin.pyCheckArgs("lt", arguments, 2, 2); - if (sprite === Sk.builtin.none.none$) { - return lt(angle.v); - } - return sprite.lt(angle.v); + return sprite.bk(Sk.ffi.remapToJs(distance)); }); mod.ra = new Sk.builtin.func(function (sprite, radius, angle) { Sk.builtin.pyCheckArgs("rt", arguments, 2, 3); if (sprite === Sk.builtin.none.none$) { - return rt((radius).v, angle.v); + return rt(Sk.ffi.remapToJs(radius), Sk.ffi.remapToJs(angle)); } - return sprite.rt((radius).v, angle.v); + return sprite.rt(Sk.ffi.remapToJs(radius), Sk.ffi.remapToJs(angle)); }); mod.la = new Sk.builtin.func(function (sprite, radius, angle) { Sk.builtin.pyCheckArgs("lt", arguments, 2, 3); if (sprite === Sk.builtin.none.none$) { - return lt((radius).v, angle.v); + return lt(Sk.ffi.remapToJs(radius), Sk.ffi.remapToJs(angle)); } - return sprite.lt((radius).v, angle.v); + return sprite.lt(Sk.ffi.remapToJs(radius), Sk.ffi.remapToJs(angle)); }); mod.speed = new Sk.builtin.func(function (sprite, value) { Sk.builtin.pyCheckArgs("speed", arguments, 2, 2); if (sprite === Sk.builtin.none.none$) { - return speed(value.v); + return speed(Sk.ffi.remapToJs(value)); } - return sprite.speed(value.v); + return sprite.speed(Sk.ffi.remapToJs(value)); }); mod.home = new Sk.builtin.func(function (sprite) { @@ -93,49 +79,57 @@ var $builtinmodule = function (name) { mod.turnto = new Sk.builtin.func(function (sprite, value) { Sk.builtin.pyCheckArgs("turnto", arguments, 2, 3); if (sprite === Sk.builtin.none.none$) { - return turnto(value.v); + return turnto(Sk.ffi.remapToJs(value)); } - return sprite.turnto(value.v); + return sprite.turnto(Sk.ffi.remapToJs(value)); }); mod.moveto = new Sk.builtin.func(function (sprite, value1, value2) { Sk.builtin.pyCheckArgs("moveto", arguments, 3, 3); if (sprite === Sk.builtin.none.none$) { - return moveto(value1.v, value2.v); + return moveto(Sk.ffi.remapToJs(value1), Sk.ffi.remapToJs(value2)); } - return sprite.moveto(value1.v, value2.v); + return sprite.moveto(Sk.ffi.remapToJs(value1), Sk.ffi.remapToJs(value2)); }); mod.movexy = new Sk.builtin.func(function (sprite, value1, value2) { Sk.builtin.pyCheckArgs("movexy", arguments, 3, 3); if (sprite === Sk.builtin.none.none$) { - return movexy(value1.v, value2.v); + return movexy(Sk.ffi.remapToJs(value1), Sk.ffi.remapToJs(value2)); } - return sprite.movexy(value1.v, value2.v); + return sprite.movexy(Sk.ffi.remapToJs(value1), Sk.ffi.remapToJs(value2)); }); mod.jumpto = new Sk.builtin.func(function (sprite, value1, value2) { Sk.builtin.pyCheckArgs("jumpto", arguments, 3, 3); if (sprite === Sk.builtin.none.none$) { - return jumpto(value1.v, value2.v); + return jumpto(Sk.ffi.remapToJs(value1), Sk.ffi.remapToJs(value2)); } - return sprite.jumpto(value1.v, value2.v); + return sprite.jumpto(Sk.ffi.remapToJs(value1), Sk.ffi.remapToJs(value2)); }); mod.jumpxy = new Sk.builtin.func(function (sprite, value1, value2) { Sk.builtin.pyCheckArgs("jumpxy", arguments, 3, 3); if (sprite === Sk.builtin.none.none$) { - return jumpxy(value1.v, value2.v); + return jumpxy(Sk.ffi.remapToJs(value1), Sk.ffi.remapToJs(value2)); } - return sprite.jumpxy(value1.v, value2.v); + return sprite.jumpxy(Sk.ffi.remapToJs(value1), Sk.ffi.remapToJs(value2)); }); mod.pause = new Sk.builtin.func(function (sprite, value) { Sk.builtin.pyCheckArgs("pause", arguments, 2, 2); if (sprite === Sk.builtin.none.none$) { - return pause(value); + return pause(Sk.ffi.remapToJs(value)); } - return sprite.pause(value); + return sprite.pause(Sk.ffi.remapToJs(value)); + }); + + mod.getxy = new Sk.builtin.func(function (sprite) { + Sk.builtin.pyCheckArgs("getxy", arguments, 1, 1); + if (sprite === Sk.builtin.none.none$) { + return new Sk.ffi.remapToPy(getxy()); + } + return new Sk.ffi.remapToPy(sprite.getxy()); }); //Control @@ -144,56 +138,73 @@ var $builtinmodule = function (name) { mod.button = new Sk.builtin.func(function (sprite, buttonclick, callee) { Sk.builtin.pyCheckArgs("button", arguments, 3, 3); if (sprite === Sk.builtin.none.none$) { - return button(buttonclick.v, function () { Sk.misceval.callsim(callee); } ); + return button(Sk.ffi.remapToJs(buttonclick), function () { Sk.misceval.callsim(callee); } ); } - //return sprite.button(buttonclick.v, function () { Sk.misceval.callsim(callee); } ); + //return sprite.button(Sk.ffi.remapToJs(buttonclick), function () { Sk.misceval.callsim(callee); } ); }); - mod.click = new Sk.builtin.func(function (sprite, fn) { + mod.click = new Sk.builtin.func(function (sprite, func) { Sk.builtin.pyCheckArgs("click", arguments, 2, 2); if (sprite === Sk.builtin.none.none$) { - return click( function () { Sk.misceval.callsim(fn); } ); + return click(function(eventData){ + var data = [eventData.x, eventData.y]; + Sk.misceval.callsim(func, Sk.ffi.remapToPy(data)); } ); } //return sprite.click( function () { Sk.misceval.callsim(fn); } ); }); - mod.keydown = new Sk.builtin.func(function (sprite, key) { - Sk.builtin.pyCheckArgs("keydown", arguments, 2, 2); + mod.forever = new Sk.builtin.func(function (func) { + Sk.builtin.pyCheckArgs("forever", arguments, 1, 1); + return forever(function(){ Sk.misceval.callsim(func); } ); + }); + + mod.tick = new Sk.builtin.func(function (tps, func) { + Sk.builtin.pyCheckArgs("tick", arguments, 2, 2); + return tick(Sk.ffi.remapToJs(tps), function(){Sk.misceval.callsim(func)}); + }); + + mod.keydown = new Sk.builtin.func(function (sprite, key, func) { + Sk.builtin.pyCheckArgs("keydown", arguments, 3, 3); if (sprite === Sk.builtin.none.none$) { - return keydown(function () { Sk.misceval.callsim(key); }); + return keydown(Sk.ffi.remapToJs(key), function(){Sk.misceval.callsim(func)}); } //return sprite.keydown(function () { Sk.misceval.callsim(key); }); }); - mod.keyup = new Sk.builtin.func(function (sprite, key) { + mod.keyup = new Sk.builtin.func(function (sprite, key, func) { Sk.builtin.pyCheckArgs("keyup", arguments, 2, 2); if (sprite === Sk.builtin.none.none$) { - return keyup(function () { Sk.misceval.callsim(key); }); + return keyup(Sk.ffi.remapToJs(key), function () { Sk.misceval.callsim(func); }); } //return sprite.keyup(function () { Sk.misceval.callsim(key); }); }); + mod.pressed = new Sk.builtin.func(function (key) { + Sk.builtin.pyCheckArgs("pressed", arguments, 1, 1); + return Sk.ffi.remapToPy(pressed(Sk.ffi.remapToJs(key))); + }); + //Sound///////////// mod.play = new Sk.builtin.func(function (sprite, note) { Sk.builtin.pyCheckArgs("play", arguments, 2, 2); if (sprite === Sk.builtin.none.none$) { - return play(note.v); + return play(Sk.ffi.remapToJs(note)); } - return sprite.play(note.v); + return sprite.play(Sk.ffi.remapToJs(note)); }); //mod.tone3 = new Sk.builtin.func(function (a, b, c) { // Sk.builtin.pyCheckArgs("tone", arguments, 3, 3); - // return tone(a.v, b.v, c.v); + // return tone(Sk.ffi.remapToJs(a), Sk.ffi.remapToJs(b), Sk.ffi.remapToJs(c)); //}); mod.tone = new Sk.builtin.func(function (sprite, a, b, c) { Sk.builtin.pyCheckArgs("tone", arguments, 3, 4); if (sprite === Sk.builtin.none.none$) { - return tone(a.v, b.v, c.v); + return tone(Sk.ffi.remapToJs(a), Sk.ffi.remapToJs(b), Sk.ffi.remapToJs(c)); } - return sprite.tone(a.v, b.v, c.v); + return sprite.tone(Sk.ffi.remapToJs(a), Sk.ffi.remapToJs(b), Sk.ffi.remapToJs(c)); }); mod.silence = new Sk.builtin.func(function (sprite) { @@ -207,30 +218,30 @@ var $builtinmodule = function (name) { mod.say = new Sk.builtin.func(function (sprite, a) { Sk.builtin.pyCheckArgs("say", arguments, 2, 2); if (sprite === Sk.builtin.none.none$) { - return say(a.v); + return say(Sk.ffi.remapToJs(a)); } - return sprite.say(a.v); + return sprite.say(Sk.ffi.remapToJs(a)); }); // TEXT METHODS ///////////////////////////////////////////////////////// mod.write = new Sk.builtin.func(function (message) { Sk.builtin.pyCheckArgs("write", arguments, 1, 1); - return write(message.v); + return write(Sk.ffi.remapToJs(message)); }); mod.debug = new Sk.builtin.func(function (object) { Sk.builtin.pyCheckArgs("debug", arguments, 1, 1); - return debug(object.v); + return debug(Sk.ffi.remapToJs(object)); }); mod.type = new Sk.builtin.func(function (message) { Sk.builtin.pyCheckArgs("type", arguments, 1, 1); - return type(message.v); + return type(Sk.ffi.remapToJs(message)); }); mod.typebox = new Sk.builtin.func(function (color) { Sk.builtin.pyCheckArgs("typebox", arguments, 1, 1); - return typebox(color.v); + return typebox(Sk.ffi.remapToJs(color)); }); mod.typeline = new Sk.builtin.func(function () { @@ -240,7 +251,7 @@ var $builtinmodule = function (name) { mod.label = new Sk.builtin.func(function (name) { Sk.builtin.pyCheckArgs("label", arguments, 1, 1); - return label(name.v); + return label(Sk.ffi.remapToJs(name)); }); /*mod.await = new Sk.builtin.func(function (lambda_expression) { @@ -248,21 +259,38 @@ var $builtinmodule = function (name) { return await(lambda_expression.v); });*/ - mod.read = new Sk.builtin.func(function (prompt) { - Sk.builtin.pyCheckArgs("read", arguments, 1, 1); - return read(prompt.v); + mod.read = new Sk.builtin.func(function (prompt, func) { + Sk.builtin.pyCheckArgs("read", arguments, 2, 2); + if(func == Sk.builtin.none.none$) + { + return Sk.ffi.remapToPy(read(Sk.ffi.remapToJs(prompt))); + } + return Sk.ffi.remapToPy(read(Sk.ffi.remapToJs(prompt), function (w) { Sk.misceval.callsim(func, Sk.ffi.remapToPy(w)); })); }); - mod.readnum = new Sk.builtin.func(function (prompt) { - Sk.builtin.pyCheckArgs("readnum", arguments, 1, 1); - return readnum(prompt.v); + mod.readnum = new Sk.builtin.func(function (prompt, func) { + Sk.builtin.pyCheckArgs("readnum", arguments, 2, 2); + if(func == Sk.builtin.none.none$) + { + return Sk.ffi.remapToPy(readnum(Sk.ffi.remapToJs(prompt))); + } + return Sk.ffi.remapToPy(readnum(Sk.ffi.remapToJs(prompt), function (w) { Sk.misceval.callsim(func, Sk.ffi.remapToPy(w)); })); + }); + + mod.readstr = new Sk.builtin.func(function (prompt, func) { + Sk.builtin.pyCheckArgs("readstr", arguments, 2, 2); + if(func == Sk.builtin.none.none$) + { + return Sk.ffi.remapToPy(readstr(Sk.ffi.remapToJs(prompt))); + } + return Sk.ffi.remapToPy(readstr(Sk.ffi.remapToJs(prompt), function (w) { Sk.misceval.callsim(func, Sk.ffi.remapToPy(w)); })); }); //SPRITES///////////////// mod.Turtle = new Sk.builtin.func(function (value) { Sk.builtin.pyCheckArgs("Turtle", arguments, 1, 1); - return new Turtle(value.v); + return new Turtle(Sk.ffi.remapToJs(value)); }); mod.Sprite = new Sk.builtin.func(function () { @@ -272,7 +300,7 @@ var $builtinmodule = function (name) { // mod.Piano = new Sk.builtin.func(function (keys) { // Sk.builtin.pyCheckArgs("Piano", arguments, 1, 1); -// return new Piano(keys.v); +// return new Piano(Sk.ffi.remapToJs(keys)); // }); mod.Piano = new Sk.builtin.func(function () { Sk.builtin.pyCheckArgs("Piano", arguments, 0, 0); @@ -283,7 +311,25 @@ var $builtinmodule = function (name) { Sk.builtin.pyCheckArgs("Pencil", arguments, 0, 0); return new Pencil(); }); + + mod.copy = new Sk.builtin.func(function () { + Sk.builtin.pyCheckArgs("copy", arguments, 0, 0); + return new copy(); + }); + + mod.table = new Sk.builtin.func(function (rows, columns) { + Sk.builtin.pyCheckArgs("table", arguments, 2, 2); + return new table(Sk.ffi.remapToJs(rows), Sk.ffi.remapToJs(columns)); + }); + mod.cell = new Sk.builtin.func(function (sprite, rows, columns) { + Sk.builtin.pyCheckArgs("cell", arguments, 3, 3); + if(sprite === Sk.builtin.none.none$){ + return cell(Sk.ffi.remapToJs(rows), Sk.ffi.remapToJs(columns)); + } + return new sprite.cell(Sk.ffi.remapToJs(rows), Sk.ffi.remapToJs(columns)); + }); + //ART////// mod.hide = new Sk.builtin.func(function (sprite) { @@ -345,68 +391,121 @@ var $builtinmodule = function (name) { mod.pen = new Sk.builtin.func(function (sprite, color, size) { Sk.builtin.pyCheckArgs("pen", arguments, 3, 3); if (sprite === Sk.builtin.none.none$) { - return pen(color.v, size.v); + return pen(Sk.ffi.remapToJs(color), Sk.ffi.remapToJs(size)); } - return sprite.pen(color.v, size.v); + return sprite.pen(Sk.ffi.remapToJs(color), Sk.ffi.remapToJs(size)); }); mod.dot = new Sk.builtin.func(function (sprite, color, dia) { Sk.builtin.pyCheckArgs("dot", arguments, 3, 3); if (sprite === Sk.builtin.none.none$) { - return dot(color.v, dia.v); + return dot(Sk.ffi.remapToJs(color), Sk.ffi.remapToJs(dia)); } - return sprite.dot(color.v, dia.v); + return sprite.dot(Sk.ffi.remapToJs(color), Sk.ffi.remapToJs(dia)); }); mod.box = new Sk.builtin.func(function (sprite, color, size) { Sk.builtin.pyCheckArgs("box", arguments, 3, 3); if (sprite === Sk.builtin.none.none$) { - return box(color.v, size.v); + return box(Sk.ffi.remapToJs(color), Sk.ffi.remapToJs(size)); } - return sprite.box(color.v, size.v); + return sprite.box(Sk.ffi.remapToJs(color), Sk.ffi.remapToJs(size)); }); mod.fill = new Sk.builtin.func(function (sprite, color) { Sk.builtin.pyCheckArgs("dot", arguments, 2, 2); if (sprite === Sk.builtin.none.none$) { - return fill(color.v); + return fill(Sk.ffi.remapToJs(color)); } - return sprite.fill(color.v); + return sprite.fill(Sk.ffi.remapToJs(color)); + }); + + mod.img = new Sk.builtin.func(function (sprite, pic) { + Sk.builtin.pyCheckArgs("img", arguments, 2, 2); + if (sprite === Sk.builtin.none.none$) { + return img(Sk.ffi.remapToJs(pic)); + } + return new sprite.img(Sk.ffi.remapToJs(pic)); }); mod.wear = new Sk.builtin.func(function (sprite, color) { Sk.builtin.pyCheckArgs("wear", arguments, 2, 2); if (sprite === Sk.builtin.none.none$) { - return wear(color.v); + return wear(Sk.ffi.remapToJs(color)); } - return sprite.wear(color.v); + return sprite.wear(Sk.ffi.remapToJs(color)); }); mod.grow = new Sk.builtin.func(function (sprite, size) { Sk.builtin.pyCheckArgs("grow", arguments, 2, 2); if (sprite === Sk.builtin.none.none$) { - return grow(size.v); + return grow(Sk.ffi.remapToJs(size)); } - return sprite.grow(size.v); + return sprite.grow(Sk.ffi.remapToJs(size)); }); mod.drawon = new Sk.builtin.func(function (sprite, canvas) { Sk.builtin.pyCheckArgs("drawon", arguments, 2, 2); if (sprite === Sk.builtin.none.none$) { - return drawon(canvas.v); + return drawon(Sk.ffi.remapToJs(canvas)); } - return sprite.drawon(canvas.v); + return sprite.drawon(Sk.ffi.remapToJs(canvas)); }); - + + mod.arrow = new Sk.builtin.func(function (sprite, color, size) { + Sk.builtin.pyCheckArgs("arrow", arguments, 3, 3); + if (sprite === Sk.builtin.none.none$) { + return arrow(Sk.ffi.remapToJs(color), Sk.ffi.remapToJs(size)); + } + return sprite.arrow(Sk.ffi.remapToJs(color), Sk.ffi.remapToJs(size)); + }); + + mod.shown = new Sk.builtin.func(function (sprite) { + Sk.builtin.pyCheckArgs("shown", arguments, 1, 1); + if (sprite === Sk.builtin.none.none$) { + return Sk.ffi.remapToPy(shown()); + } + return Sk.ffi.remapToPy(shown()); + }); + + mod.hidden = new Sk.builtin.func(function (sprite) { + Sk.builtin.pyCheckArgs("hidden", arguments, 1, 1); + if (sprite === Sk.builtin.none.none$) { + return Sk.ffi.remapToPy(hidden()); + } + return Sk.ffi.remapToPy(hidden()); + }); + + mod.touches = new Sk.builtin.func(function (sprite, obj) { + Sk.builtin.pyCheckArgs("touches", arguments, 2, 2); + if (sprite === Sk.builtin.none.none$) { + return Sk.ffi.remapToPy(touches(Sk.ffi.remapToJs(obj))); + } + return Sk.ffi.remapTOPy(sprite.touches(Sk.ffi.remapToJs(obj))); + }); + + mod.inside = new Sk.builtin.func(function (sprite, obj) { + Sk.builtin.pyCheckArgs("inside", arguments, 2, 2); + if(Sk.ffi.remapToJs(obj) == "window") + if (sprite === Sk.builtin.none.none$) { + return Sk.ffi.remapToPy(inside(window)); + } + return Sk.ffi.remapToPy(sprite.inside(window)); + if (sprite === Sk.builtin.none.none$) { + return Sk.ffi.remap.Py(inside(Sk.ffi.remapToJs(obj))); + } + return Sk.ffi.remap.Py(sprite.inside(Sk.ffi.remapToJs(obj))); + }); + //Operators mod.min = new Sk.builtin.func(function (value1, value2) { Sk.builtin.pyCheckArgs("min", arguments, 1, 2); - return min(value1.v, value2.v); + return min(Sk.ffi.remapToJs(value1), Sk.ffi.remapToJs(value2)); }); mod.random = new Sk.builtin.func(function (value) { Sk.builtin.pyCheckArgs("random", arguments, 1, 1); - return random(value.v); + return Sk.ffi.remapToPy(random(Sk.ffi.remapToJs(value))); }); return mod; diff --git a/content/lib/pencilcode.py b/content/lib/pencilcode.py index dc1dfbfc..b3500b3f 100644 --- a/content/lib/pencilcode.py +++ b/content/lib/pencilcode.py @@ -1,7 +1,18 @@ import pencilcode_internal +normal = 'normal' +uniform = 'uniform' +position = 'position' +color = 'color' +colour = 'color' +gray = 'gray' +grey = 'gray' +window = "window" + # The SpriteObject class wraps a jQuery-turtle object so it can be used in Python. # This includes Turtle, Sprite, Piano, and Pencil objects. + + class SpriteObject(): def __init__(self, jsSpriteObject): self.jsSpriteObject = jsSpriteObject @@ -16,17 +27,17 @@ def fd(self, distance): def bk(self, distance): pencilcode_internal.bk(self.jsSpriteObject, distance) - def rt(self, angle): - pencilcode_internal.rt(self.jsSpriteObject, angle) + def rt(self, angle, radius=0): + pencilcode_internal.ra(self.jsSpriteObject, angle, radius) - def lt(self, angle): - pencilcode_internal.lt(self.jsSpriteObject, angle) - - def ra(self, radius, angle): - pencilcode_internal.ra(self.jsSpriteObject, radius, angle) - - def la(self, radius, angle): - pencilcode_internal.la(self.jsSpriteObject, radius, angle) + def lt(self, angle, radius=0): + pencilcode_internal.la(self.jsSpriteObject, angle, radius) + + def ra(self, angle, radius=0): + pencilcode_internal.ra(self.jsSpriteObject, angle, radius) + + def la(self, angle, radius=0): + pencilcode_internal.la(self.jsSpriteObject, angle, radius) def speed(self, value): pencilcode_internal.speed(self.jsSpriteObject, value) @@ -37,7 +48,7 @@ def home(self): def turnto(self, value): pencilcode_internal.turnto(self.jsSpriteObject, value) - def moveto(self, x, y): + def moveto(self, x, y = None): pencilcode_internal.moveto(self.jsSpriteObject, x, y) def movexy(self, x, y): @@ -51,6 +62,9 @@ def jumpxy(self, x, y): def pause(self, value): pencilcode_internal.sleep(self.jsSpriteObject, value) + + def getxy(self): + return pencilcode_internal.getxy(self.jsSpriteObject) ###################### ## Control Commands ## @@ -58,7 +72,7 @@ def pause(self, value): def button(self, buttonClick, callee): pass#pencilcode_internal.button(self.jsSpriteObject, buttonClick, callee) - def keydown(self, key): + def keydown(self, func, key = None): pass#pencilcode_internal.keydown(self.jsSpriteObject, key) def click(self, t): @@ -95,11 +109,14 @@ def box(self, a, b): def grow(self, a): pencilcode_internal.grow(self.jsSpriteObject,a) - def pen(self, color, size): - pencilcode_internal.pen(self.jsSpriteObject,color, size) - - def dot(self, color, size): - pencilcode_internal.dot(self.jsSpriteObject,color, size) + def pen(self, color=None, size=None): + pencilcode_internal.pen(self.jsSpriteObject,color, size) + + def dot(self, color=None, size=None): + pencilcode_internal.dot(self.jsSpriteObject,color,size) + + def arrow(self, color, size): + pencilcode_internal.arrow(self.jsSpriteObject, color, size) def fill(self, color): pencilcode_internal.fill(self.jsSpriteObject,color) @@ -109,7 +126,23 @@ def wear(self, name): def drawon(self, path): pencilcode_internal.drawon(self.jsSpriteObject,path) - + + #def cell(self, rows, columns): + # pencilcode_internal.cell(self.jsSpriteObject, rows, columns) + + def shown(self): + return pencilcode_internal.shown(self.jsSpriteObject) + + def hidden(self): + return pencilcode_internal.hidden(self.jsSpriteObject) + + def touches(self): + return pencilcode_internal.touches(self.jsSpriteObject, obj) + + def inside(self): + return pencilcode_internal.inside(self.jsSpriteObject, obj) + + #################### ## Sound Commands ## #################### @@ -139,18 +172,19 @@ def fd(value): def bk(value): pencilcode_internal.bk(None, value) -def rt(value): - pencilcode_internal.rt(None, value) +def rt(angle, radius = 0): + pencilcode_internal.ra(None, angle, radius) -def lt(value): - pencilcode_internal.lt(None, value) +def lt(angle, radius = 0): + pencilcode_internal.la(None, angle, radius) -# Fix the rest, Stevie! ;)# All Done Jem! :) -def ra(radius, angle): - pencilcode_internal.ra(None, radius, angle) +def ra(angle, radius=0): + pencilcode_internal.ra(None, angle, radius) -def la(radius, angle): - pencilcode_internal.la(None, radius, angle) +def la(angle, radius=0): + pencilcode_internal.la(None, angle, radius) + +# Fix the rest, Stevie! ;)# All Done Jem! :) def speed(value): pencilcode_internal.speed(None, value) @@ -161,7 +195,7 @@ def home(): def turnto(value): pencilcode_internal.turnto(None, value) -def moveto(x, y): +def moveto(x, y = None): pencilcode_internal.moveto(None, x, y) def movexy(x, y): @@ -173,6 +207,9 @@ def jumpto(x, y): def jumpxy(x, y): pencilcode_internal.jumpxy(None, x, y) +def getxy(): + return pencilcode_internal.getxy(None) + def pause(value): pencilcode_internal.sleep(None, value) @@ -206,12 +243,18 @@ def box(a, b): def grow(a): pencilcode_internal.grow(None,a) + +def img(pic): + return SpriteObject(pencilcode_internal.img(None, pic)) -def pen(color, size): +def pen(color=None, size=None): pencilcode_internal.pen(None,color, size) -def dot(color, size): - pencilcode_internal.dot(None,color, size) +def dot(color=None, size=None): + pencilcode_internal.dot(None,color,size) + +def arrow(color, size): + pencilcode_internal.arrow(None, color, size) def fill(color): pencilcode_internal.fill(None,color) @@ -221,18 +264,44 @@ def wear(name): def drawon(path): pencilcode_internal.drawon(None,path) - + +def shown(): + return pencilcode_internal.shown(None) + +def hidden(): + return pencilcode_internal.hidden(None) + +def touches(obj): + return pencilcode_internal.touches(None, obj) + +def inside(obj): + return pencilcode_internal.touches(None, obj) + ################### ## Text Commands ## ################### -def write(message): +def write(*args): + x = 0 + message = '' + for arg in args: + message = message + arg + ' ' + x += 1 + if x == 0: + raise AssertionError('Too few arguments passed in to write()') pencilcode_internal.write(message) def debug(object): pencilcode_internal.debug(object) -def type(message): +def type(*args): + x = 0 + message = '' + for arg in args: + message = message + arg + x += 1 + if x == 0: + raise AssertionError('Too few arguments passed in to type()') pencilcode_internal.type(message) def typebox(color): @@ -248,11 +317,14 @@ def await(lamda_exp): # TODO - this might be tricky pass -def read(prompt): - pencilcode_internal.read(prompt) +def read(prompt, func = None): + return pencilcode_internal.read(prompt, func) -def readnum(prompt): - pencilcode_internal.readnum(prompt) +def readnum(prompt, func = None): + return pencilcode_internal.readnum(prompt, func) + +def readstr(prompt, func = None): + return pencilcode_internal.readstr(prompt, func) #################### ## Sound Commands ## @@ -278,12 +350,21 @@ def say(a): def button(buttonClick, callee): pencilcode_internal.button(None, buttonClick, callee) -def keydown(key): - pencilcode_internal.keydown(None, key) +def keydown(func, key = None): + pencilcode_internal.keydown(None, key, func) + +def pressed(key): + return pencilcode_internal.pressed(key) def click(t): pencilcode_internal.click(None, t) +def forever(func): + pencilcode_internal.forever(func) + +def tick(tps, func): + pencilcode_internal.tick(tps, func) + ###################### ## Sprites ## ###################### @@ -298,7 +379,16 @@ def Piano(): def Pencil(): return SpriteObject(pencilcode_internal.Pencil()) - + +def copy(): + return SpriteObject(pencilcode_internal.copy()) + +def table(rows, columns): + return SpriteObject(pencilcode_internal.table(rows, columns)) + +def cell(rows, columns): + return SpriteObject(pencilcode_internal.cell(None, rows, columns)) + ###################### ## Operators ## ###################### @@ -309,3 +399,5 @@ def random(a): def min(a, b = None): return pencilcode_internal.min(a,b) + + diff --git a/content/lib/pencilcodeembed.js b/content/lib/pencilcodeembed.js index 36c28d83..b8def0be 100644 --- a/content/lib/pencilcodeembed.js +++ b/content/lib/pencilcodeembed.js @@ -164,6 +164,7 @@ this.iframe = document.createElement('iframe'); this.iframe.style.width = '100%'; this.iframe.style.height = '100%'; + this.iframe.setAttribute('allow', 'autoplay'); this.div.appendChild(this.iframe); this.updatedCode = code; diff --git a/content/src/FontLoader.js b/content/src/FontLoader.js index f370611b..b2ff0f29 100644 --- a/content/src/FontLoader.js +++ b/content/src/FontLoader.js @@ -13,8 +13,8 @@ if (isIE) { } } -/** - * FontLoader detects when web fonts specified in the "fontFamiliesArray" array were loaded and rendered. Then it +/**FontLoader detects when web fonts specified in the "fontFamiliesArray" array were loaded and rendered. + *Then it * notifies the specified delegate object via "fontLoaded" and "fontsLoaded" methods when specific or all fonts were * loaded respectively. The use of this functions implies that the insertion of specified web fonts into the * document is done elsewhere. @@ -275,9 +275,7 @@ FontLoader.prototype = { } }; -/** - * Size object - * +/** Instantiates a Size object * @param width * @param height * @constructor @@ -287,8 +285,7 @@ function Size(width, height) { this.height = height; } -/** - * Compares receiver object to passed in size object. +/** Compares receiver object to passed in size object. * * @param otherSize * @returns {boolean} @@ -297,8 +294,8 @@ Size.prototype.isEqual = function(otherSize) { return (this.width === otherSize.width && this.height === otherSize.height); }; -/** - * SizeWatcher observes size of an element and notifies when its size is changed. It doesn't use any timeouts +/** SizeWatcher observes size of an element and notifies when its size is changed. + *It doesn't use any timeouts * to check the element size, when change in size occurs a callback method immediately invoked. * * To watch for element's size changes the element, and other required elements are appended to a container element diff --git a/content/src/advisor.js b/content/src/advisor.js index b5dbb3d5..0790efef 100644 --- a/content/src/advisor.js +++ b/content/src/advisor.js @@ -1,14 +1,24 @@ //////////////////////////////////////////////////////////////////////////r // ERROR MESSAGE ADVISOR SUPPORT /////////////////////////////////////////////////////////////////////////// - +/** Counts how many backslashes are in a line and returns the number found +* @param {string} line +* @param {int} offset +* @return {int} returns the number of backslashes in the line starting offset from the begining of it +*/ function backslashCount(line, offset) { for (var j = offset - 1; j > 0; --j) { if (line.charAt(j) != '//') break; } return offset - j - 1; } - +/** Finds the matching quote for the quote that's passed in, starting at offset +* @param {string} line +* @param {char} quoteChar +* @param {int} offset +* @param {bool} backslashable +* @return {int} returns the last position in line that is the first matching quote. +*/ function findMatchingQuote(line, quoteChar, offset, backslashable) { while (true) { var location = line.indexOf(quoteChar, offset); @@ -21,7 +31,10 @@ function findMatchingQuote(line, quoteChar, offset, backslashable) { } } -// Scan a program, locating +/** Scan a program, locating the first mismatched quote within the lines passed in +* @param {string[]} lines +* @return {int} first line in lines that has a mismached quote +**/ function firstLineWithMismatchedQuote(lines) { var quoteChar = null; var quoteLine = -1; @@ -63,6 +76,12 @@ function firstLineWithMismatchedQuote(lines) { return null; } +/** Takes in an error message and provdes advice on how to fix the error +* @param {string} msg +* @param {int} line +* @param {string} program +* @return {undefined} +**/ function errorAdvice(msg, line, program) { var advice, m, msg, r; var lines = program.split('\n'), index = line - 1, text = ''; diff --git a/content/src/cache.js b/content/src/cache.js index e692a0e1..99769754 100644 --- a/content/src/cache.js +++ b/content/src/cache.js @@ -15,9 +15,7 @@ var model = window.pencilcode.cache = { clear: clearCache }; -/** - * Initialize the cache object to the given - * name only if it's not available already. +/** Initialize the cache object to the given name only if it's not available already. * * @param {string} name * @returns {undefined} @@ -28,8 +26,7 @@ function initializeCache(name) { } } -/** - * Delete the cache object mapped with the given name +/** Delete the cache object mapped with the given name * * @param {string} name * @returns {undefined} @@ -38,16 +35,14 @@ function deleteCache(name) { delete cache[name]; } -/** - * Ceear the complete cache +/** Ceear the complete cache * @returns {undefined} */ function clearCache(){ cache = window.pencilcode.cacheObj = {}; } -/** - * Return the cached value mapped with the given name and key +/** Return the cached value mapped with the given name and key * * @param {string} cacheName * @param {string} key @@ -60,8 +55,7 @@ function get(cacheName, key) { return null; } -/** - * Save the given value mapped with the given name and key +/** Save the given value mapped with the given name and key * * @param {type} cacheName * @param {type} key diff --git a/content/src/codescan.js b/content/src/codescan.js index 1c474962..649ab55b 100644 --- a/content/src/codescan.js +++ b/content/src/codescan.js @@ -4,6 +4,10 @@ // looking for object names and /////////////////////////////////////////////////////////////////////////// +/** Scans multiline quotes and comments and omits those parts of the code in coffeescript code +* @param {string} code +* @returns {string} filtered code +*/ function stripCSMultiline(code) { // Really simple heuristic for coffeescript: // Just scan the multiline quote and comment delimeters, and @@ -46,6 +50,10 @@ function stripCSMultiline(code) { return keep.join(''); } +/** Builds a list of objects in coffeescript code +* @param {string} code +* @returns {string[]} +*/ function coffeeObjects(code) { code = stripCSMultiline(code); var lines = code.split('\n'); @@ -64,6 +72,10 @@ function coffeeObjects(code) { return result; } +/** Builds a list of objects in JavaScript code +* @param {string} code +* @returns {string[]} +*/ function jsObjects(code) { var lines = code.split('\n'); var result = []; @@ -81,6 +93,11 @@ function jsObjects(code) { return result; } +/** Runs coffeeObjects/jsObjects on the passed in code based on the passed in language +* @param {string} language +* @param {string} code +* @returns {undefined} +*/ function scanObjects(language, code) { var objects; if (/coffee/.test(language)) { diff --git a/content/src/controller.js b/content/src/controller.js index 73f5d5dc..7c72675e 100644 --- a/content/src/controller.js +++ b/content/src/controller.js @@ -64,6 +64,7 @@ var model = window.pencilcode.model = { crossFrameContext: getCrossFrameContext() }; +//logs events to the internal event log function logEvent(name, data) { $.get('/log/' + name, data); } @@ -133,11 +134,13 @@ function nosaveowner() { return model.ownername === 'frame'; } +//Determines if the current model can be saved function cansave() { return specialowner() || !model.username || model.tempThumbnail || view.isPaneEditorDirty(paneatpos('left')); } +//Updates the controls at the top of the screen based on what's currently going on function updateTopControls(addHistory) { var m = modelatpos('left'); // Update visible URL and main title name. @@ -280,11 +283,13 @@ function updateTopControls(addHistory) { // Set up some logging event handlers. // +//logs an event when palettes get selected view.on('selectpalette', function(pane, palname) { if (!palname) { palname = 'default'; } logEvent('~selectpalette', {name: palname.replace(/\s/g, '').toLowerCase()}); }); +//logs an event when blocks get picked up view.on('pickblock', function(pane, blockid) { logEvent('~pickblock', { id: blockid }); }); @@ -295,6 +300,8 @@ view.on('pickblock', function(pane, blockid) { // an event handler function // +//view.on is from the view.js file, it sets up event listeners generally as on click functionality + view.on('help', function() { view.flashNotification('Ask a question.' + @@ -325,6 +332,7 @@ view.on('new', function() { directoryname = ''; } window.location.href = '/edit/' + directoryname + untitled; + overwriteProtected = true; }); }); @@ -472,6 +480,7 @@ view.on('changehtmlcss', function(pane) { view.on('run', runAction); +//Runs the code in the editor pane function runAction() { var doc = view.getPaneEditorData(paneatpos('left')); if (!doc) { @@ -646,11 +655,13 @@ guide.on('guideurl', function(guideurl) { readNewUrl.suppress = false; }); +//Creates a hash based on the guideurl passed in function guideHash(guideurl) { return guideurl ? '#guide=' + (/[&#%]/.test(guideurl) ? encodeURIComponent(guideurl) : encodeURI(guideurl)) : ''; } +//Updates the URL that's shown to the user function updateVisibleUrl(baseurl, guideurl, addHistory) { model.guideUrl = guideurl; view.setVisibleUrl(baseurl + guideHash(guideurl), addHistory); @@ -778,6 +789,34 @@ view.on('splitscreen', function() { view.setPreviewMode(!view.getPreviewMode()); }); +var overwriteProtected = true; + +//A function that shows an overwrite dialog. takes in two callback functions on whether "yes" or "no" is selected on the dialog +function showOverwriteDialog(opts, yes, no){ + if(opts === { }){ + var opts = { + close: { }, + validate: function(state) { return this.close; } + }; + } + + opts.content = + '
' + + '
If you continue with this action it will overwrite a pre existing file
' + + '

' + + '' + + ''; + opts.init = function(dialog) { + dialog.find('.ok').on('click', yes); + dialog.find('.cancel').on('click', no); + } + opts.retrieveState = function(){ + return this.done; + } + view.showDialog(opts); +} + +//The "base" save functino which calls other save functions in special cases function saveAction(forceOverwrite, loginPrompt, doneCallback) { if (nosaveowner()) { return; @@ -791,8 +830,9 @@ function saveAction(forceOverwrite, loginPrompt, doneCallback) { return; } var doc = view.getPaneEditorData(paneatpos('left')); - var filename = modelatpos('left').filename; - var thumbnailDataUrl = ''; + var filename = modelatpos('left').filename + view.flashNotification("Saving may take some time, please wait"); + var thumbnailDataUrl = ''; if (!doc) { // There is no editor on the left (or it is misbehaving) - do nothing. console.log("Nothing to save."); @@ -823,9 +863,50 @@ function saveAction(forceOverwrite, loginPrompt, doneCallback) { } // Attempt to save. view.flashNotification('', true); + if(newdata.data === "" || newdata.data === "\n"){ + view.flashNotification("Cannot save empty file"); + return; + } storage.saveFile( model.ownername, filename, newdata, forceOverwrite, model.passkey, false, function(status) { + if(status.overwrite){ + //Let user know continuing with this save will overwrite a file + //Give the the option to overwrite or not, maybe add ability to rename here? + var opts = { + close: { }, + validate: function(state) { return this.close; } + }; + var ok = function(e){ + if(!opts.close.cancel) + { + storage.saveFile(model.ownername, filename, newdata, forceOverwrite, model.passkey, false, function(status) { + if (status.needauth) { + logInAndSave(filename, newdata, forceOverwrite, noteclean, + loginPrompt, doneCallback); + } else { + if (!model.username) { + // If not yet logged in but we have saved (e.g., no password needed), + // then log us in. + model.username = model.ownername; + } + handleSaveStatus(status, filename, noteclean); + if (doneCallback) { + doneCallback(); + } + } + }, false); + opts.close = {cancel: true}; + var x = document.getElementsByClassName("ok"); + x[0].click(); + } + } + var cancel = function(e){ + view.flashNotification('Failed to Save'); + } + showOverwriteDialog(opts, ok, cancel); + return; + } if (status.needauth) { logInAndSave(filename, newdata, forceOverwrite, noteclean, loginPrompt, doneCallback); @@ -840,9 +921,10 @@ function saveAction(forceOverwrite, loginPrompt, doneCallback) { doneCallback(); } } - }); + }, overwriteProtected); // After a successful save, mark the file as clean and update mtime. function noteclean(mtime) { + overwriteProtected = false; view.flashNotification('Saved.'); view.notePaneEditorCleanData(paneatpos('left'), newdata); logCodeEvent('save', filename, newdata.data, @@ -861,8 +943,10 @@ function saveAction(forceOverwrite, loginPrompt, doneCallback) { view.flashThumbnail(thumbnailDataUrl); } } + } +//Creates a key based on the username and password passed in function keyFromPassword(username, p) { if (!p) { return ''; } if (/^[0-9]{3}$/.test(p)) { return p; } @@ -874,6 +958,7 @@ function keyFromPassword(username, p) { return key; } +//Used to check how complex a password is function letterComplexity(s) { var maxcount = 0, uniqcount = 0, dupcount = 0, last = null, count = {}, j, c; for (j = 0; j < s.length; ++j) { @@ -890,6 +975,7 @@ function letterComplexity(s) { return uniqcount && (uniqcount / (maxcount + dupcount)); } +//A more specialized save function which is called when you are not in a user's saved file, or when you choose to switch users from a user's saved file function signUpAndSave(options) { if (!options) { options = {}; } var doc = view.getPaneEditorData(paneatpos('left')); @@ -1089,7 +1175,73 @@ function signUpAndSave(options) { username, rename, $.extend({}, doc), forceOverwrite, key, false, function(status) { - if (status.needauth) { + if (status.overwrite){ + var opts = { + close: { }, + validate: function(state) { return this.close; } + }; + var ok = function(e){ + storage.saveFile(username, rename, $.extend({}, doc), forceOverwrite, key, false, function(status){ + if (status.needauth) { + state.update({ + disable: false, + info: 'Wrong password.' + }); + view.clearPane(paneatpos('right')); + } else if (status.newer) { + state.update({ + disable: false, + info: 'Did not overwrite newer file.' + }); + view.clearPane(paneatpos('right')); + } else if (status.transient) { + state.update({ + disable: false, + info: 'Network down.' + }); + view.clearPane(paneatpos('right')); + } else if (status.error) { + state.update({ + disable: false, + info: status.error + }); + view.clearPane(paneatpos('right')); + } else { + view.notePaneEditorCleanData(paneatpos('left'), doc); + storage.deleteBackup(mp.filename); + storage.deleteBackup(rename); + view.flashNotification('Saved.'); + var hostpath = username + '.' + window.pencilcode.domain + + '/edit/' + rename, + newurl = '//' + hostpath + + '#login=' + username + ':' + (key ? key : ''); + if (model.guideUrl) { + var guideurl = model.guideUrl; + newurl += '&guide=' + (/[&#%]/.test(guideurl) ? + encodeURIComponent(guideurl) : encodeURI(guideurl)); + } + if (location.host + location.pathname == hostpath) { + // If there is no change in URL, be careful to close the dialog. + // We don't do this always, because the 'new user' flow + // will do a 'history.back' when closing the dialog. + state.update({cancel: true}); + } + if (options.nohistory) { + window.location.replace(newurl); + } else { + window.location.href = newurl; + } + } + + }, false); + } + var cancel = function(e){ + view.flashNotification('Failed to Save'); + } + showOverwriteDialog(opts, ok, cancel); + return; + } + if (status.needauth) { state.update({ disable: false, info: 'Wrong password.' @@ -1159,6 +1311,7 @@ function signUpAndSave(options) { }); } +//A more specialized save function that coppies and saves the file off as a new file function saveAs() { if (!model.username) { signUpAndSave(); @@ -1187,6 +1340,49 @@ function saveAs() { model.username, newFilename, doc, true, model.passkey, false, function(m) { + if (m.overwrite){ + var opts = { + close: { }, + validate: function(state) { return this.close; } + }; + + var ok = function(e){ + storage.saveFile(model.username, newFilename, doc, true, model.passkey, false, function(m){ + if (m.needauth) { + signUpAndSave(); + return; + } + if (m.error) { + state.update({info: m.error, disable: true}); + return; + } + if (oldFilename != newFilename) { + storage.deleteBackup(oldFilename); + } + state.update({cancel: true}); + mp.filename = newFilename; + view.noteNewFilename(pp, newFilename); + view.notePaneEditorCleanData(pp, doc); + updateTopControls(false); + view.flashNotification('Saved as ' + newFilename); + view.setPrimaryFocus(); + logCodeEvent('save', newFilename, doc.data, + view.getPaneEditorBlockMode(pp), + view.getPaneEditorLanguage(pp)); + var oldmtime = mp.data.mtime || 0; + if (m.mtime) { + mp.data.mtime = Math.max(m.mtime, oldmtime); + } + + }, false); + } + var cancel = function(e){ + view.flashNotification('Failed to Save'); + } + + showOverwriteDialog(opts, ok, cancel); + return; + } if (m.needauth) { signUpAndSave(); return; @@ -1217,6 +1413,7 @@ function saveAs() { }); } +//A more specialized save function which is called when you are in a user's saved file function logInAndSave(filename, newdata, forceOverwrite, noteclean, loginPrompt, doneCallback) { if (!filename || !newdata || nosaveowner()) { @@ -1235,6 +1432,30 @@ function logInAndSave(filename, newdata, forceOverwrite, model.username, filename, newdata, forceOverwrite, model.passkey, false, function(m) { + if (m.overwrite){ + var opts = { + close: { }, + validate: function(state) { return this.close; } + }; + var ok = function(e){ + storage.saveFile(model.username, filename, newdata, forceOverwrite, model.passkey, false, function(m){ + if (m.needauth) { + state.update({info: 'Wrong password.', disable: false}); + return; + } + state.update({cancel: true}); + handleSaveStatus(m, filename, noteclean); + if (doneCallback) { + doneCallback(); + } + }, false); + } + var cancel = function(e){ + view.flashNotification('Failed to Save'); + } + showOverwriteDialog(opts, ok, cancel); + return; + } if (m.needauth) { state.update({info: 'Wrong password.', disable: false}); return; @@ -1249,6 +1470,7 @@ function logInAndSave(filename, newdata, forceOverwrite, }); } +//Checks to see if a special case needs to happen when saving (like if there is a newer save on the server or you don't have an active connection to the server and will only be backing up to local cookies) function handleSaveStatus(status, filename, noteclean) { if (status.newer) { view.flashNotification('Newer copy on network. ' + @@ -1286,12 +1508,14 @@ function handleSaveStatus(status, filename, noteclean) { } } +//Saves a cookie for the login information function saveLoginCookie() { cookie('login', (model.username || '') + ':' + (model.passkey || ''), { expires: 1, path: '/' }); } var requestedBlockMode = null; +//Changes the editor pane between text and block modes depending on what state they are set to function loadBlockMode() { var result = requestedBlockMode; if (result === null) { @@ -1306,6 +1530,7 @@ function loadBlockMode() { return result; } +//Updates the requested block mode to "on" function saveBlockMode(on) { requestedBlockMode = on; if (model.ownername != 'frame') { @@ -1313,6 +1538,7 @@ function saveBlockMode(on) { } } +//Loads the default metadata into the pane metadata function loadDefaultMeta() { if (model.ownername == 'frame') { return null; @@ -1325,6 +1551,7 @@ function loadDefaultMeta() { return null; } +//Updates the default metadata for loadDefaultMeta() function saveDefaultMeta(meta) { if (model.ownername == 'frame') { return; @@ -1344,6 +1571,7 @@ function saveDefaultMeta(meta) { } } +//Chooses a filename for new files based on what's saved in the directory function chooseNewFilename(dirlist) { if (!dirlist) { return 'unutitled'; } if (dirlist.length === 0) { return 'first';} @@ -1361,6 +1589,7 @@ function chooseNewFilename(dirlist) { view.on('link', handleDirLink); +//Handles links to direct files, loading them from the server and into the needful pane function handleDirLink(pane, linkname) { var base = model.pane[pane].filename; if (base === null) { return; } @@ -1445,6 +1674,7 @@ view.on('done', function() { doneWithFile(modelatpos('left').filename); }); +//Appears to handle the "back" action... somehow... function doneWithFile(filename) { if (!filename || !model.ownername) { if (window.location.href == @@ -1561,6 +1791,7 @@ view.on('rename', function(newname) { view.on('popstate', readNewUrl); +//Used to move a file (when in a user's saved file and logged out) function logInAndMove(filename, newfilename, completeRename) { if (!filename || !newfilename) { return; @@ -1596,6 +1827,7 @@ function logInAndMove(filename, newfilename, completeRename) { }); } +//Notes if a file (at position) is unsaved function noteIfUnsaved(position) { var m = modelatpos(position).data; if (m && m.unsaved) { @@ -1608,6 +1840,8 @@ function noteIfUnsaved(position) { } } +//Switches where the panes are in the model by moving each one a step left +//As there are 3 models, this means that back goes to right, right goes to left and left goes to back function rotateModelLeft(addHistory) { debug.bindframe(null); view.rotateLeft(); @@ -1618,6 +1852,8 @@ function rotateModelLeft(addHistory) { updateTopControls(addHistory); } +//Same as rotateModelLeft, but goes the other direction +//Back goes to left, left goes to right, and right goes to back function rotateModelRight(addHistory) { debug.bindframe(null); view.rotateRight(); @@ -1627,17 +1863,20 @@ function rotateModelRight(addHistory) { updateTopControls(addHistory); } +//Checks if the File passed in (candidate) is within the directory passed in (base) function isFileWithin(base, candidate) { if (base.length && !/\/%/.test(base)) { base += '/'; } return candidate.length > base.length && candidate.indexOf(base) === 0; } +//Checks for all possible cases of "false" that could be being passed around function falsish(s) { return !s || s == '0' || s == 'false' || s == 'none' || s == 'null' || s == 'off' || s == 'no'; } +//Determines what should be going on when a new URL is loaded function readNewUrl(undo) { if (readNewUrl.suppress) { return; @@ -1832,6 +2071,7 @@ function readNewUrl(undo) { loadFileIntoPosition('left', filename, isdir, isdir, afterLoad); } +//Loads data for "left" panel from the network function directNetLoad() { var pos = 'left'; var filename = modelatpos(pos).filename; @@ -1844,10 +2084,12 @@ view.on('netload', directNetLoad); var loadNumber = 0; +//Increments loadNumber function nextLoadNumber() { return ++loadNumber; } +//Clears out a model at the passed in position function cancelAndClearPosition(pos) { debug.bindframe(null); view.clearPane(paneatpos(pos), false); @@ -1859,6 +2101,7 @@ function cancelAndClearPosition(pos) { modelatpos(pos).running = false; } +//Checks to see if we can use instruments on this browser function instrumentCode(code, language) { try { if (language === 'javascript') { @@ -1892,6 +2135,7 @@ function instrumentCode(code, language) { return code; } +//runs the code at the passed in position in a program pane, internal function, called by other functions that are setup as callbacks on other actions function runCodeAtPosition(position, doc, filename, emptyOnly) { var m = modelatpos(position); if (!m.running) { @@ -1921,6 +2165,7 @@ function runCodeAtPosition(position, doc, filename, emptyOnly) { }, 1); } +//Determines whether we are sorting the directory by date or not by default function defaultDirSortingByDate() { if (!specialowner()) return false; try { @@ -1931,6 +2176,7 @@ function defaultDirSortingByDate() { } } +//Sets what method we are by default sorting the directory by function setDefaultDirSortingByDate(f) { try { if (f) { @@ -1942,6 +2188,7 @@ function setDefaultDirSortingByDate(f) { } } +//Creates a new file into the position that's passed in (generally left) function createNewFileIntoPosition(position, filename, text, meta) { var pane = paneatpos(position); var mpp = model.pane[pane]; @@ -1964,7 +2211,7 @@ function createNewFileIntoPosition(position, filename, text, meta) { logCodeEvent('new', filename, text, mode, view.getPaneEditorLanguage(pane)); } - +//Loads a file into the passed in position (generally left) function loadFileIntoPosition(position, filename, isdir, forcenet, cb) { var pane = paneatpos(position); var mpp = model.pane[pane]; @@ -2031,6 +2278,7 @@ function loadFileIntoPosition(position, filename, isdir, forcenet, cb) { } }; +//Gives information needed to sort the items passed in by date function sortByDate(a, b) { if (b.mtime != a.mtime) { return b.mtime - a.mtime; @@ -2038,6 +2286,7 @@ function sortByDate(a, b) { return sortByName(a, b); } +//Gives the information to sort the items passed in by name function sortByName(a, b) { var aName = a.name.toLowerCase(); var bName = b.name.toLowerCase(); @@ -2051,6 +2300,7 @@ function sortByName(a, b) { return 0; } +//Renders the directory in the passed in position function renderDirectory(position) { cache.clear(); var pane = paneatpos(position); @@ -2061,12 +2311,13 @@ function renderDirectory(position) { updateTopControls(false); } - +//Updates the sorting of a directory (generally a rendered directory) function updateSortResults(pane) { view.setPaneLinks(pane,getUpdatedLinksArray(pane)); updateTopControls(false); } +//Updates the items in a directory during a search of said directory function updateSearchResults(pane, search, cb) { search = search ? search.toLowerCase() : ''; var mpp = model.pane[pane]; @@ -2112,6 +2363,7 @@ function updateSearchResults(pane, search, cb) { } } +//Gets an array of links from the pane that's been passed in (generally a directory) function getUpdatedLinksArray(pane) { var mpp = model.pane[pane]; var m = mpp.data; @@ -2186,6 +2438,7 @@ function isEmptyDoc(doc) { (!doc.meta.css || !doc.data.css.trim())))); } +//Shortens a passed in URL function shortenUrl(url, cb) { var reqObj = { dataType: 'json', @@ -2216,6 +2469,7 @@ function shortenUrl(url, cb) { } } +//Adds a cookie into the browser function cookie(key, value, options) { // write if (value !== undefined) { diff --git a/content/src/debug.js b/content/src/debug.js index 104cae53..c36188fb 100644 --- a/content/src/debug.js +++ b/content/src/debug.js @@ -40,11 +40,18 @@ Error.stackTraceLimit = 20; // Remembers the targetWindow, and clears all logged debug records. // Calling bindframe also resets firstSessionId, so that callbacks // having to do with previous sessions are ignored. -function bindframe(w, p) { - if (!targetWindow && !w || targetWindow === w) return; +/** Resets the debugger state +* Remembers the targetWindow and clears all logged debug records. +* Calling bindframe also resets firstSessionId so that callbacks having to do with previous sessions are ignored +* @param {object} Window +* @param {object} Pane +* @returns {undefined} +*/ +function bindframe(Window, Pane) { + if (!targetWindow && !Window || targetWindow === Window) return; // Do not bind to nested subframes - only an immediate child frame. - if (targetWindow && p !== window) return; - targetWindow = w; + if (targetWindow && Pane !== window) return; + targetWindow = Window; cachedParseStack = {}; debugRecordsByDebugId = {}; debugRecordsByLineNo = {}; @@ -153,6 +160,9 @@ var debug = window.ide = { ////////////////////////////////////////////////////////////////////// // STUCK PROGRAM SUPPORT ////////////////////////////////////////////////////////////////////// +/** Detects whether the running program is stuck and throws errors when a program is determined to be stuck +* @returns {undefined} +*/ function detectStuckProgram() { stuckComplexity.lines += 1; if (stuckComplexity.lines % 100 != 1) return; @@ -204,12 +214,30 @@ var showPopupErrorMessage = function (msg) { center.innerHTML = msg; } +/** Reports SeeEval debug message +* @param {Unused} method +* @param {Unused} debugId +* @param {Unused} length +* @param {Unused} coordId +* @param {Unused} elem +* @param {Unused} args +* @returns {undefined} +*/ function reportSeeeval(method, debugId, length, coordId, elem, args){ currentDebugId += 1; record = {seeeval: true}; debugRecordsByDebugId[currentDebugId] = record; } +/** Reports appear debug message +* @param {function} method +* @param {int} debugId +* @param {Unused} length +* @param {int} coordId +* @param {object} elem +* @param {object[]} args +* @returns {undefined} +*/ function reportAppear(method, debugId, length, coordId, elem, args){ stuckComplexity.moves += 1; var recordD = debugRecordsByDebugId[debugId]; @@ -229,6 +257,15 @@ function reportAppear(method, debugId, length, coordId, elem, args){ } } +/** Reports SeeEval debug message +* @param {function} method +* @param {int} debugId +* @param {Unused} length +* @param {int} coordId +* @param {object} elem +* @param {Unused} args +* @returns {undefined} +*/ function reportResolve(method, debugId, length, coordId, elem, args){ var recordD = debugRecordsByDebugId[debugId]; if (recordD) { @@ -248,6 +285,10 @@ function reportResolve(method, debugId, length, coordId, elem, args){ // The error event is triggered when an uncaught exception occurs. // The err object is an exception or an Event object corresponding // to the error. +/** Reports the passed in error +* @param {string/object} err +* @returns {undefined} +*/ function reportError(err) { var line = editorLineNumberForError(err); var m = view.getPaneEditorData(view.paneid('left')); @@ -256,13 +297,20 @@ function reportError(err) { showDebugMessage(advice.message); } -function showDebugMessage(m) { +/** Shows the passed in debug message +* @param {string} message +* @returns {undefined} +*/ +function showDebugMessage(message) { var script = ( - '(' + showPopupErrorMessage.toString() + '(' + JSON.stringify(m) + '));'); + '(' + showPopupErrorMessage.toString() + '(' + JSON.stringify(message) + '));'); view.evalInRunningPane(view.paneid('right'), script, true); } - +/** collects the coordinates of the passed in element +* @param {object} elem +* @returns {undefined} +*/ function collectCoords(elem) { try { // TODO: when the element is not a turtle with the standard @@ -276,6 +324,10 @@ function collectCoords(elem) { } }; +/** Displays the protractor for the passed in record +* @param {object} record +* @returns {undefined} +*/ function displayProtractorForRecord(record) { // TODO: generalize this for turtles that are not in the main field. var origin = targetWindow.jQuery('#field').offset(); @@ -294,6 +346,10 @@ function displayProtractorForRecord(record) { // translate(tx, ty) rotate(rot) scale(sx, sy) rotate(twi) // (with each component optional). // This function quickly parses this form into a canonicalized object. +/** parses the transform from the turtle into a canonicalized object +* @param {string} transform +* @returns {undefined} +*/ function parseTurtleTransform(transform) { if (transform === 'none') { return {tx: 0, ty: 0, rot: 0, sx: 1, sy: 1, twi: 0}; @@ -311,14 +367,20 @@ function parseTurtleTransform(transform) { return {tx:tx, ty:ty, rot:rot, sx:sx, sy:sy, twi:twi}; } -// Highlights the given line number as a line being traced. +/** Highlights the given line number as a line being traced. +* @param {int} line +* @returns {undefined} +*/ function traceLine(line) { view.markPaneEditorLine( view.paneid('left'), line, 'guttermouseable', true); view.markPaneEditorLine(view.paneid('left'), line, 'debugtrace'); } -// Unhighlights the given line number as a line no longer being traced. +/** Unhighlights the given line number as a line no longer being traced. +* @param {int} line +* @returns {undefined} +*/ function untraceLine(line) { view.clearPaneEditorLine(view.paneid('left'), line, 'debugtrace'); } @@ -335,6 +397,10 @@ function untraceLine(line) { // },... // ] // Fields that are unknown are present but with value undefined or null. +/** Parses an Error or ErrorEvent into a specified JSON structure +* @param {string/object} err +* @returns {undefined} +*/ function parsestack(err) { var parsed = [], lines, j, line; // This code currently only works on Chrome. @@ -375,6 +441,10 @@ function parsestack(err) { // Returns the (1-based) line number for an error object, if any; // or returns null if none can be figured out. +/** Returns a 1-based line number for an error object, returns null if not able to be figured out +* @param {object} error +* @returns {int} +*/ function editorLineNumberForError(error) { if (!error || !targetWindow) return null; if (!(error instanceof targetWindow.Error)) { @@ -422,7 +492,6 @@ function editorLineNumberForError(error) { ////////////////////////////////////////////////////////////////////// // PARSE ERROR HIGHLIGHTING ////////////////////////////////////////////////////////////////////// - view.on('parseerror', function(pane, err) { if (err.loc) { // The markPaneEditorLine function uses 1-based line numbering. @@ -439,7 +508,6 @@ view.on('parseerror', function(pane, err) { ////////////////////////////////////////////////////////////////////// // PARSE ERROR HIGHLIGHTING ////////////////////////////////////////////////////////////////////// - view.on('parseerror', function(pane, err) { if (err.loc) { // The markPaneEditorLine function uses 1-based line numbering. @@ -485,6 +553,11 @@ view.on('icehover', function(pane, ev) { } }); +/** Converts a transform into a final coordinate after applying said transform onto the passed in origin +* @param {object} origin +* @param {objecr} astransform +* @returns {object} +*/ function convertCoords(origin, astransform) { if (!origin) { return null; } if (!astransform || !astransform.transform) { return null; } @@ -499,6 +572,10 @@ function convertCoords(origin, astransform) { } var lastRunTime = 0; +/** Takes in a command to determine what the stopButton should do (currently only supports "flash" command) +* @param {string} command +* @returns {bool} +*/ function stopButton(command) { if (command === 'flash') { lastRunTime = +new Date; @@ -522,6 +599,9 @@ function stopButton(command) { return stopButtonShown; } +/** starts the process of polling the main debug window +* @returns {undefined} +*/ function startPollingWindow() { if (pollTimer) { clearTimeout(pollTimer); pollTimer = null; } if (!targetWindow || !targetWindow.jQuery || !targetWindow.jQuery.turtle || @@ -535,6 +615,9 @@ function startPollingWindow() { pollTimer = setTimeout(pollForStop, 100); } +/** stops the process of polling the main debug window +* @returns {undefined} +*/ function stopPollingWindow() { if (pollTimer) { clearTimeout(pollTimer); pollTimer = null; } if (stopButtonShown) { @@ -543,6 +626,9 @@ function stopPollingWindow() { } } +/** Attempts to see if the main debug window is able to be stopped +* @returns {undefined} +*/ function pollForStop() { pollTimer = null; if (!targetWindow || !targetWindow.jQuery || !targetWindow.jQuery.turtle || diff --git a/content/src/draw-protractor.js b/content/src/draw-protractor.js index 182a7652..a76e8b7d 100644 --- a/content/src/draw-protractor.js +++ b/content/src/draw-protractor.js @@ -8,6 +8,10 @@ var $ = require('jquery'), eval(see.scope('drawProtractor')); +/** Turns v from any possible degree entered to 0-360 version of said degree measurement +* @param {numeric} v +* @returns {int} +*/ function to360(v) { while (v < 0) { v = 7200 - Math.abs(v); @@ -15,6 +19,11 @@ function to360(v) { return v % 360; } +/** Renders the protractor "step" onto "canvas" +* @param {object} canvas +* @parm {object} step +* @returns {undefined} +*/ function renderProtractor(canvas, step) { var ctx = canvas[0].getContext('2d'); ctx.resetTransform(); @@ -80,6 +89,16 @@ function renderProtractor(canvas, step) { ctx.restore(); } +/** Draws an arc-ed arrow based on the passed in data onto the canvas +* @param {object} context +* @param {numeric} cx +* @param {numeric} cy +* @param {numeric} radius +* @param {numeric} fromangle +* @param {numeric} toangle +* @param {bool} ccw +* @returns {undefined} +*/ function canvas_arc_arrow(context, cx, cy, radius, fromangle, toangle, ccw) { context.arc(cx, cy, radius, fromangle, toangle, ccw); var headx = cx + radius * Math.cos(toangle), @@ -88,6 +107,14 @@ function canvas_arc_arrow(context, cx, cy, radius, fromangle, toangle, ccw) { headx, heady, toangle + (ccw ? -1 : 1) * Math.PI / 2, 10); } +/** Draws a straight arrow based on the passed in data onto the canvas +* @param {object} context +* @param {numeric} fromx +* @param {numeric} fromy +* @param {numeric} tox +* @param {numeric} toy +* @returns {undefined} +*/ function canvas_straight_arrow(context, fromx, fromy, tox, toy){ var headlen = 10; // length of head in pixels var angle = Math.atan2(toy - fromy, tox - fromx); @@ -96,6 +123,14 @@ function canvas_straight_arrow(context, fromx, fromy, tox, toy){ canvas_arrow_head(context, tox, toy, angle, headlen); } +/** Draws an arrow head onto the canvas based on the passed in data onto the canvas +* @param {object} context +* @param {numeric} x +* @param {numeric} y +* @param {numeric} angle +* @param {numeric} headlen +* @returns {undefined} +*/ function canvas_arrow_head(context, x, y, angle, headlen) { context.moveTo(x - headlen * Math.cos(angle - Math.PI/6), y - headlen * Math.sin(angle - Math.PI/6)); @@ -104,16 +139,32 @@ function canvas_arrow_head(context, x, y, angle, headlen) { y - headlen * Math.sin(angle + Math.PI/6)); } +/** Finds the distance between a and b +* @param {numeric} a +* @param {numeric} b +* @returns {numeric} +*/ function pageDistance(a, b) { var dx = a.pageX - b.pageX, dy = a.pageY - b.pageY; return Math.sqrt(dx * dx + dy * dy); } +/** Turns the passed in direction into radians +* @param {numeric} direction +* @returns {numeric} +*/ function toCanvasRadians(direction) { return (((direction % 360) + 270 + 360) % 360) / 180 * Math.PI; } +/** Draws a tick based on the data passed in onto the canvas +* @param {object} ctx +* @param {numeric} innerRadius +* @param {numeric} outerRadius +* @param {numeric} angleRadians +* @returns {undefined} +*/ function drawTick(ctx, innerRadius, outerRadius, angleRadians) { // We treat angleRadians clockwise starting horizontal, pointing right // (i.e. pi/2 is straight down, pi is to the left, 3pi/2 is straight up). @@ -122,6 +173,16 @@ function drawTick(ctx, innerRadius, outerRadius, angleRadians) { ctx.lineTo(c * outerRadius, s * outerRadius); } +/** calls drawTick multiple times along an area based on the data passed in +* @param {object} ctx +* @param {numeric} startDegrees +* @param {numeric} stepDegrees +* @param {numeric} innerRadius +* @param {numeric} outerRadius +* @param {bool} skipMod +* @param {bool} skipOffset +* @returns {undefined} +*/ function drawTicks(ctx, startDegrees, stepDegrees, innerRadius, outerRadius, skipMod, skipOffset) { @@ -144,6 +205,11 @@ function drawTicks(ctx, startDegrees, stepDegrees, ctx.stroke(); } +/** Draws axes at the passed in radius onto the canvas +* @param {object} ctx +* @param {numeric} radius +* @returns {undefined} +*/ function drawAxes(ctx, radius) { ctx.strokeStyle = 'rgba(255, 128, 128, 0.5)'; ctx.lineWidth = 1; @@ -172,6 +238,14 @@ function drawAxes(ctx, radius) { ctx.stroke(); } +/** Draws the label on the outside of the protractor +* @param {object} ctx +* @param {numeric} radius +* @param {string} label +* @param {numeric} angle +* @param {numeric} zeroAngle +* @returns {undefined} +*/ function drawOuterLabel(ctx, radius, label, angle, zeroAngle) { angle = to360(angle); @@ -200,6 +274,12 @@ function drawOuterLabel(ctx, radius, label, angle, zeroAngle) { ctx.restore(); } +/** Draws the protractor on the canvas +* @param {object} ctx +* @param {numeric} radius +* @param {numeric} zeroAngle +* @returns {int} +*/ function drawProtractor(ctx, radius, zeroAngle) { ctx.save(); diff --git a/content/src/filetype.js b/content/src/filetype.js index f585dd90..db0ac21a 100644 --- a/content/src/filetype.js +++ b/content/src/filetype.js @@ -1,5 +1,9 @@ (function(module, define) { +/** Infers the script type based on the filename +* @param {string} filename +* @returns {object} +*/ function inferScriptType(filename) { var mime = mimeForFilename(filename); if (/^text\/x-pencilcode/.test(mime)) { @@ -9,13 +13,16 @@ function inferScriptType(filename) { return mime.replace(/;.*$/, ''); } -// Scans for HTML HEAD content at the top, remembering the positions -// after any start-tags seen and before any legal end-tags. -// Returns { -// pos: { map of tagname -> [index, length] } -// hasbody: true if tag starts the content. -// bodypos: index of the tag or first content text. -// +/** Scans for HTML HEAD content at the top, remembering the positions +* after any start-tags seen and before any legal end-tags. +* Returns { +* pos: { map of tagname -> [index, length] } +* hasbody: true if tag starts the content. +* bodypos: index of the tag or first content text. +* +* @param {string} html +* @returns {object} +*/ function scanHtmlTop(html) { var sofar = html, len, match, seen = {}, endpat, scanned = false, result = { pos: {} }; @@ -65,8 +72,15 @@ function scanHtmlTop(html) { } } -// The job of this function is to take: HTML, CSS, and script content, -// and merge them into one HTML file. (Changed signature to allow generalization of languages) +/** The job of this function is to take: HTML, CSS, and script content, +* and merge them into one HTML file. (Changed signature to allow generalization of languages) +* @param {object} doc +* @param {string} domain +* @param {bool} pragmasOnly +* @param {object} setupScript +* @param {object} instrumeter +* @returns {undefined} +*/ function wrapTurtle(doc, domain, pragmasOnly, setupScript, instrumenter) { // Construct the HTML for running a program. var meta = effectiveMeta(doc); @@ -187,6 +201,7 @@ function wrapTurtle(doc, domain, pragmasOnly, setupScript, instrumenter) { seeline = 'eval(this._start_ide_cs_);\n\n'; originalLanguage = 'coffeescript'; } + seeline = "//# sourceURL=mainscript-virtual.js\n" + seeline; } var instrumented = false; if (instrumenter) { @@ -219,11 +234,25 @@ function wrapTurtle(doc, domain, pragmasOnly, setupScript, instrumenter) { return result; } +/** Escapes out HTML in the passed in string +* @param {string} s +* @returns {undefined} +*/ function escapeHtml(s) { return ('' + s).replace(/"/g, '"').replace(//g, '>').replace(/\&/g, '&'); } +/** Modifies the passed in data to get ready to preview the data +* @param {object} doc +* @param {string} domain +* @param {string} filename +* @param {string} targetUrl +* @param {bool} pragmasOnly +* @param {object} sScript +* @param {object} instrumenter +* @returns {string} +*/ function modifyForPreview(doc, domain, filename, targetUrl, pragmasOnly, sScript, instrumenter) { var mimeType = mimeForFilename(filename), text = doc.data; @@ -299,9 +328,12 @@ function modifyForPreview(doc, domain, return text; } - +/** Sets up a new mime based on the passed in filename +* @param {string} filename +* @returns {object} +*/ function mimeForFilename(filename) { - var result = filename && filename.indexOf('.') > 0 && { + var result = filename && filename.lastIndexOf('.') > 0 && { 'jpg' : 'image/jpeg', 'jpeg' : 'image/jpeg', 'gif' : 'image/gif', @@ -330,6 +362,10 @@ function mimeForFilename(filename) { return result; } +/** Sets up a new meta based on the input +* @param {object} input +* @returns {object} +*/ function effectiveMeta(input) { var doc; var meta; @@ -348,10 +384,8 @@ function effectiveMeta(input) { if (meta && meta.type && meta.lib) { return meta; } meta = (meta && 'object' == typeof meta) ? JSON.parse(JSON.stringify(meta)) : {}; - if (!meta.type) { - // If there's a doc here, we can try to pull a mimetype from it. - if (doc && doc.mime) { - if (doc.mime.lastIndexOf('text/x-python', 0) === 0) { + if(doc && doc.mimeType){ + if (doc.mimeType.lastIndexOf('text/x-python', 0) === 0) { meta.type = 'text/x-python'; meta.libs = [{name: 'turtle', src: '//{site}/turtlebits.js'}, {name: 'skulpt.min', src: '//{site}/lib/skulpt.min.js'}, @@ -359,13 +393,9 @@ function effectiveMeta(input) { {name: 'python-script', src: '//{site}/lib/python-script.js'} ]; } - else { - meta.type = 'text/coffeescript'; - } - } - else { + } + if (!meta.type) { meta.type = 'text/coffeescript'; - } } if (!meta.libs) { meta.libs = [ @@ -375,6 +405,10 @@ function effectiveMeta(input) { return meta; } +/** Checks to see if the passed in meta is the default meta +* @param {object} meta +* @returns {bool} +*/ function isDefaultMeta(meta) { if (meta == null) return true; if (JSON.stringify(effectiveMeta(meta)) == diff --git a/content/src/gadget.js b/content/src/gadget.js index aeba799a..786e18e8 100644 --- a/content/src/gadget.js +++ b/content/src/gadget.js @@ -5,6 +5,10 @@ var $ = require('jquery'); +/** Creates a stylesheet entry +* @param {string} item +* @returns {undefined} +*/ function makesheet(item) { return $('
').css({ position: 'fixed', top:0, left:0, @@ -15,6 +19,10 @@ function makesheet(item) { $('body').on('click', '.gadget .topbar button, .gadget .topbar .closer', toggle); +/** Toggles whether the gadget window is shown or not +* @param {unused?} e +* @returns {undefined} +*/ function toggle(e) { var $this = $(this).closest('.gadget'), $window = $(window); @@ -124,6 +132,11 @@ $('body').on('expand', '.gadget', function(e) { } }); +/** Adds a gadget to the gadget window +* @param {int} id +* @param {object} opts +* @returns {undefined} +*/ function addGadget(id, opts) { var result = $( '
\n ``", title: 'Do something when the mouse is clicked'*/ }, { + block: 'forever(main)', + title: 'Runs the function forever as fast as it can' + }, { + block: 'tick(60, main)', + title: 'Runs the function the number of times per second passed in, call tick(None, main) to stop running it' + }, { block: 'def newfunction(x):\n fd(x)\n rt(90)', title: 'Define a new function' }, { @@ -875,18 +926,33 @@ module.exports = { } ]) }, { - name: 'Art', + name: 'Art', color: 'purple', blocks: filterblocks([ { block: 'pen(\'purple\', 10)', title: 'Set pen color and size' + }, { + block: 'pen(\'purple\')', + title: 'Set pen color with a default size' + }, { + block: 'arrow(\'blue\', 200)', + title: 'Creates an arrow for a set color and length' }, { block: 'dot(\'green\', 50)', title: 'Make a dot' }, { + block: 'dot(\'green\')', + title: 'Make a dot with a default size' + }, { block: 'box(\'yellow\', 50)', title: 'Make a square' + }, { + block: 'box(\'yellow\')', + title: 'Make a square with a default size' + }, { + block: 'img (\'/img/bird\')', + title: 'Write an image on the screen' }, { block: 'fill(\'blue\')', title: 'Fill traced shape' @@ -896,7 +962,13 @@ module.exports = { }, { block: 'grow(3)', title: 'Grow the size of the turtle' + }/* , { + block: 'shown()', + title: 'Returns true if turtle is visible' }, { + block: 'hidden()', + title: 'Returns true if turtle is not visible' + } */, { block: 'ht()', title: 'Hide the main turtle' }, { @@ -911,11 +983,14 @@ module.exports = { }, { block: 'pd()', title: 'Put the pen down' - }, { - block: 'drawon(s)', + }/* , { + block: 'inside(t)', + title: 'True if the turtle is encircled by obj' + } */, { + block: 'drawon(\'s\')', title: 'Draw on sprite s' }, { - block: 'drawon(document)', + block: 'drawon(\'document\')', title: 'Draw on the document' } ]) @@ -1009,7 +1084,11 @@ module.exports = { }, { block: 'min(_,_)', title: 'Get the smaller on two numbers' - } + }, { + block: '_._', + title: 'Call a function from inside of an object', + id: 'dot' + } ]) }, { name: 'Sprites', @@ -1030,6 +1109,12 @@ module.exports = { }, { block: 'q = Pencil()', title: 'Make an invisible and fast drawing sprite' + }, { + block: 'r = copy()', + title: 'Copy turtle' + }, { + block: 'f = table(5, 5)', + title: 'Outputs a table with m rows and n columns' }//, { // block: 'if @touches x:\n ``', // title: 'Do something only if touching the object x' @@ -1106,7 +1191,7 @@ module.exports = { block: 'def keydownFunction():\n write(\'Key pressed\')', title: 'Define a new function' }, { - block: 'keydown(keydownFunction)', + block: 'keydown(keydownFunction, \'b\')', title: 'Do something when a keyboard key is pressed' }, { block: 'keydown(lambda:\n write(\'Key pressed\'))', @@ -1120,7 +1205,10 @@ module.exports = { }, { block: 'click(lambda:\n fd(100))', title: 'Move to a location when document is clicked' - } + }, { + block: 'forever(lambda:\n fd(100))', + title: 'Move forward forever' + } ]) } ], @@ -1494,26 +1582,27 @@ module.exports = { Pencil: {value: true, color: 'teal'} }, PYTHON_FUNCTIONS: { -// '*.fd': {color: 'purple'} +// '*.fd': {color: 'purple'}, // '?.fd': {color: 'purple'} 'fd': {color: 'lightblue', dropdown: [py_types.distances]}, 'bk': {color: 'lightblue', dropdown: [py_types.distances]}, - 'rt': {color: 'lightblue', dropdown: [py_types.angles]}, - 'lt': {color: 'lightblue', dropdown: [py_types.angles]}, + 'rt': {color: 'lightblue', dropdown: [py_types.angles, py_types.distances]}, + 'lt': {color: 'lightblue', dropdown: [py_types.angles, py_types.distances]}, 'ra': {color: 'lightblue', dropdown: [py_types.angles, py_types.distances]}, 'la': {color: 'lightblue', dropdown: [py_types.angles, py_types.distances]}, 'speed': {color: 'lightblue', drown: [py_types.speeds]}, 'home': {color: 'lightblue'}, + 'pagexy': {color: 'lightblue'}, 'turnto': {color: 'lightblue', dropdown: [py_types.angles]}, 'moveto': {color: 'lightblue', dropdown: [py_types.sdistances, py_types.sdistances]}, 'movexy': {color: 'lightblue', dropdown: [py_types.sdistances, py_types.sdistances]}, 'jumpto': {color: 'lightblue', dropdown: [py_types.sdistances, py_types.sdistances]}, 'jumpxy': {color: 'lightblue', dropdown: [py_types.sdistances, py_types.sdistances]}, - + 'pen': {color: 'purple', dropdown: [py_types.colors, py_types.sizes]}, 'dot': {color: 'purple', dropdown: [py_types.colors, py_types.sizes]}, - 'box': {color: 'purple'}, - 'fill': {color: 'purple'}, + 'box': {color: 'purple', dropdown: [py_types.colors, py_types.sizes]}, + 'fill': {color: 'purple', dropdown: [py_types.colors]}, 'wear': {color: 'purple'}, 'grow': {color: 'purple'}, 'st': {color: 'purple'}, @@ -1521,7 +1610,12 @@ module.exports = { 'cs': {color: 'purple'}, 'pu': {color: 'purple'}, 'pd': {color: 'purple'}, + 'img': {color: 'purple'}, 'drawon': {color: 'purple'}, + 'arrow': {color: 'purple', dropdown: [py_types.colors]}, + 'shown': {color: 'purple'}, + 'hidden': {color: 'purple'}, + 'inside': {color: 'purple'}, //Sound 'play': {color: 'indigo'}, 'tone': {color: 'indigo'}, @@ -1532,16 +1626,20 @@ module.exports = { 'cs': {color: 'purple'}, 'pu': {color: 'purple'}, 'pd': {color: 'purple'}, - 'random': {color:'lightgreen'}, + 'random': {color:'lightgreen', dropdown: [py_types.randarg]}, //opertor 'button': {color: 'orange'}, 'keydown': {color: 'orange'}, 'click': { color: 'orange' }, + 'forever': { color: 'orange'}, + 'tick': {color: 'orange', dropdown: [py_types.tickCount]}, //Sprites 'Sprite' : {color:'teal'}, 'Piano' : {color:'teal'}, 'Pencil' : {color:'teal'}, 'Turtle' : {color:'teal'}, + 'copy' : {color:'teal'}, + 'table': {color: 'teal'}, //Text 'write' : {color: 'pink'}, 'typeline' : {color: 'pink'}, diff --git a/content/src/showturtle.js b/content/src/showturtle.js index dc60abdd..429f8829 100644 --- a/content/src/showturtle.js +++ b/content/src/showturtle.js @@ -1,3 +1,5 @@ +/** Sets up the jquery turtle object for the program window +*/ (function(ww) { var script = document.currentScript || (function() { var scripts = document.getElementsByTagName("script"); diff --git a/content/src/storage.js b/content/src/storage.js index 6b5cf979..59aa02f1 100644 --- a/content/src/storage.js +++ b/content/src/storage.js @@ -8,6 +8,7 @@ var $ = require('jquery'), eval(see.scope('storage')); +//Checks to see if there is a local backup of a file function hasBackup(filename) { try { if (!window.localStorage) return false; @@ -16,14 +17,14 @@ function hasBackup(filename) { return false; } } - +//Checks to see if we are currently able to connect to the save server function isOnline() { // PhantomJS (headless testing) gets this wrong. // https://github.com/ariya/phantomjs/issues/10647 return window.navigator.onLine || null != window.navigator.userAgent.match(/PhantomJS/); } - +//Loads a local backup of a file function loadBackup(filename, annotation) { try { var result = JSON.parse(window.localStorage['backup:' + filename]); @@ -35,7 +36,7 @@ function loadBackup(filename, annotation) { return { error: 'Backup load failed.', down: true }; } } - +//Saves a local backup of a file function saveBackup(filename, msg) { try { if (!window.localStorage) return; @@ -43,14 +44,14 @@ function saveBackup(filename, msg) { window.localStorage['backup:' + filename] = JSON.stringify(msg); } catch(e) { } } - +//Deletes a backup of a file function deleteBackup(filename) { try { if (!window.localStorage) return; delete window.localStorage['backup:' + filename]; } catch(e) { } } - +//Deletes all backups that start with a specified prefix function deleteBackupPrefix(filename) { try { if (!window.localStorage) return; @@ -70,7 +71,7 @@ function deleteBackupPrefix(filename) { } catch(e) { } } - +//Checks if we want to do backups before saving function isBackupPreferred(filename, m, preferUnsaved) { try { if (!window.localStorage) return false; @@ -113,6 +114,7 @@ function networkErrorMessage(domain) { } window.pencilcode.storage = { + //Updates the set of users updateUserSet: function(prefix, set, cb) { prefix = prefix || ''; if (set.hasOwnProperty(prefix)) { @@ -235,7 +237,7 @@ window.pencilcode.storage = { // 4. If the network save succeeded, the file is saved as a backup (without // unsaved set) and success:true, mtime:mtime is the status. saveFile: function(ownername, - filename, data, force, key, backupOnly, callback) { + filename, data, force, key, backupOnly, callback, overwriteProtection = true) { // Always stick the data in the backup immediately, marked as unsaved. var msg = $.extend({}, data), now = +(new Date); if (!/pencil/.test(filetype.mimeForFilename(filename)) || @@ -268,7 +270,90 @@ window.pencilcode.storage = { backupOnly ? {backup:true} : {offline:true}); }, 0); return; } - // Attempt the network save: pack up any metadata, and set up + if(overwriteProtection){ + //If we are protecting the user from overwriting, ask the server for the directory, then check to see + //if the file that we are currently working in's name will overwrite a pre-existing file + this.loadFile(ownername, "", false, function(m){ + if(m.list === null){ + callback(m); + return; + } + for(var i = 0; i < m.list.length; i++){ + if(m.list[i].name === filename){ + callback({ + overwrite: true + }); + return; + } + } + console.log("New File"); + // Attempt the network save: pack up any metadata, and set up + // the conditional argument and the weak authentication key. + var payload = { data: msg.data, meta: JSON.stringify(msg.meta) }; + if (msg.thumbnail) { // Send thumbnail data to server if it exists. + payload.thumbnail = msg.thumbnail; + } + if (msg.mtime && !force) { + payload.conditional = msg.mtime; + } + if (key) { + payload.key = key; + } + var payloadsize = payload.data.length + payload.meta.length; + + // Do the network save. + var domain = (ownername ? ownername + '.' : '') + window.pencilcode.domain; + var crossdomain = (window.location.hostname != domain); + $.ajax({ + url: (ownername ? '//' + domain : '') + + '/save/' + filename, + data: payload, + dataType: 'json', + // Use a GET if crossdomain and the payload is short. Note that + // a longer payload will fail on IE, and anecdotally a crossdomain + // POST (even with CORS) will fail on mobile browsers. + type: (crossdomain && payloadsize < 1024) ? 'GET' : 'POST', + success: function(m) { + var check; + if (m.error) { + // Pass errors on to calback. Backup already done. + console.log('got error ' + m.error); + } else if (m.deleted) { + // On a successful delete, also delete the backup + // (if nothing new has since been entered in backup). + check = loadBackup(filename); + if (check && check.data === msg.data) { + deleteBackup(filename); + } + } else { + // On a successful save, re-commit the backup with the new + // mtime and without the unsaved bit (if nothing new has since + // been entered in the backup). + check = loadBackup(filename); + if (check && check.data === msg.data) { + // Commit backup without 'unsaved' if it is still unchanged. + delete msg.unsaved; + delete msg.needsave; + delete msg.btime; + delete msg.offline; + if (m.mtime) { msg.mtime = m.mtime; } + saveBackup(filename, msg); + } + } + callback && callback(m); + } + }).error(function() { + console.log('got error ' + domain); + callback && callback({ + error: networkErrorMessage(domain), + offline:true + }); + }); + return; + }); + return; + } + // Attempt the network save: pack up any metadata, and set up // the conditional argument and the weak authentication key. var payload = { data: msg.data, meta: JSON.stringify(msg.meta) }; if (msg.thumbnail) { // Send thumbnail data to server if it exists. @@ -331,6 +416,7 @@ window.pencilcode.storage = { }); }); }, + //Moves a file between two locations (Generall to a new filename) moveFile: function(ownername, sourcefile, filename, key, copy, callback) { var payload = { source: ownername + '/' + sourcefile @@ -355,6 +441,7 @@ window.pencilcode.storage = { }); }); }, + //Sets a password for a user setPassKey: function(ownername, key, oldkey, callback) { $.post('//' + ownername + '.' + window.pencilcode.domain + '/save/', $.extend({ mode: 'setkey', data: key}, oldkey ? { key: oldkey } : {}), @@ -368,11 +455,13 @@ window.pencilcode.storage = { }); }); }, + //Deletes all backups from the browser deleteBackup: deleteBackup, deleteAllBackup: function() { deleteBackupPrefix(''); }, // TODO: cache-refreshing crawl. + //Currently does nothing recrawlCache: function() { // Load dirtree URL // Then backup all directories diff --git a/content/src/thumbnail.js b/content/src/thumbnail.js index 1656e08f..98646963 100644 --- a/content/src/thumbnail.js +++ b/content/src/thumbnail.js @@ -6,6 +6,11 @@ var NUM_ATTEMPTS = 3; // Public functions var thumbnail = { + /** Generates a thumbnail based off the passed in iframe and runs the passed in callback + * @param {object} iframe + * @param {function} callback + * @returns {undefined} + */ generateThumbnailDataUrl: function(iframe, callback) { // Get the canvas inside the iframe. var innerDoc = iframe.contentDocument || iframe.contentWindow.document; @@ -83,6 +88,12 @@ var thumbnail = { } // Private functions +/** Gets a URL for the image data +* @param {object} canvas +* @param {int} offsetX +* @param {int} offsetY +* @returns {undefined} +*/ function getImageDataUrl(canvas, offsetX, offsetY) { var w = canvas.width; var h = canvas.height; diff --git a/content/src/view.js b/content/src/view.js index 03c2fc10..815c56b0 100644 --- a/content/src/view.js +++ b/content/src/view.js @@ -13,6 +13,12 @@ var $ = require('jquery'), ZeroClipboard = require('ZeroClipboard'), FontLoader = require('FontLoader'); +/** +* Takes in a string and makes it URL friendly +* +* @param {string} s +* @returns {string} +*/ function htmlEscape(s) { return s.replace(/[<>&"]/g, function(c) { @@ -206,24 +212,44 @@ $(window).on('resize.editor', function() { $('.hpanel').trigger('panelsize'); }); +/** Checks to see if subscribers exist +* @returns {bool} whether there are or are not subscribers +*/ function hasSubscribers() { return state.subscribers.length > 0; } +/** Pushes an event to all subscribers +* @param {function} method +* @param {array[arguments for method]} args +* @param {string} requestid +* @returns {undefined} +*/ function publish(method, args, requestid){ for (var j = 0; j < state.subscribers.length; ++j) { state.subscribers[j](method, args, requestid); } } +/** Finds the paneId at Position +* @param {string} position +* @returns {string} The paneId at position +*/ function paneid(position) { return $('.' + position).find('.pane').attr('id'); } +/** Finds the position of paneId +* @param {string} id +* @returns {string} The position of paneId +*/ function panepos(id) { return $('#' + id).closest('.panebox').attr('class').replace(/\s|panebox/g, ''); } +/** Constructor for panes +* @returns {object} a freshly initialized pane +*/ function initialPaneState() { return { editor: null, // The ace editor instance. @@ -238,6 +264,11 @@ function initialPaneState() { }; } +/** Adds a callback to a tag +* @param {string} tag +* @param {function} callback +* @returns {undefined} +*/ function setOnCallback(tag, cb) { if (state.callbacks[tag] == null) { state.callbacks[tag] = []; @@ -245,6 +276,11 @@ function setOnCallback(tag, cb) { state.callbacks[tag].push(cb); } +/** Fires an event to all callbacks on a tag +* @param {string} tag +* @param {array[arguments to pass to all callbacks]} args +* @returns {undefined} +*/ function fireEvent(tag, args) { if (tag in state.callbacks) { var cbs = state.callbacks[tag].slice(); @@ -259,6 +295,11 @@ function fireEvent(tag, args) { } } +/** Changes the URL in the browser and optionally adds the change to browser history +* @param {string} targetUrl +* @param {bool} addToHistory +* @returns {undefined} +*/ function setVisibleUrl(targetUrl, addToHistory) { var currentDepth = history.state && history.state.depth || 0; var currentUrl = history.state && history.state.current || null; @@ -336,6 +377,10 @@ $('body').on('keydown', function(e) { } }); +/** Pushes keydown events to Editor when it doesn't have focus +* @param {object} keydown_event +* @returns {undefined} +*/ function forwardCommandToEditor(keydown_event) { // Only forward the command if an editor is present and it // does not already have focus. @@ -365,6 +410,11 @@ $('#notification').on('click', 'a', function(e) { } }); +/** flashes a notification to the top of the screen and optionally starts a loading indicator +* @param {string} text +* @param {bool} loading +* @returns {undefined} +*/ function flashNotification(text, loading) { var marker = Math.random(); var hidefunc = function(e) { @@ -393,6 +443,9 @@ function flashNotification(text, loading) { }); } +/** dismisses the visible notification at the top of the screen +* @returns {undefined} +*/ function dismissNotification() { if ($('#notification').is(':visible')) { $('#notification').removeData('marker'); @@ -401,6 +454,10 @@ function dismissNotification() { } } +/** Flashes the specified button +* @param {string} id +* @returns {undefined} +*/ function flashButton(id) { var button = $('#' + id).closest('button'), bg = button.css('backgroundColor'), @@ -416,9 +473,11 @@ function flashButton(id) { /////////////////////////////////////////////////////////////////////////// // FILENAME AND RENAMING /////////////////////////////////////////////////////////////////////////// - -function selectEndOf(contentEditableElement) -{ +/** Selects the end of an element +* @param {object} contentEditableElement +* @returns {undefined} +*/ +function selectEndOf(contentEditableElement) { var range,selection; if (document.createRange) { range = document.createRange(); @@ -435,6 +494,12 @@ function selectEndOf(contentEditableElement) } } +/** Selects characters in node that is range size starting charsFromBegin into the node +* @param {int} range +* @param {object} node +* @param {int} charsFromBegin +* @returns {undefined} +*/ function setRangeStart(range, node, charsFromBegin) { if (node.firstChild) { var count = 0; @@ -454,6 +519,12 @@ function setRangeStart(range, node, charsFromBegin) { } } +/** Selects characters in node that is range size starting charsFromEnd from the end of the node +* @param {int} range +* @param {object} node +* @param {int} charsFromEnd +* @returns {undefined} +*/ function setRangeEnd(range, node, charsFromEnd) { if (node.lastChild) { var count = 0; @@ -473,6 +544,12 @@ function setRangeEnd(range, node, charsFromEnd) { } } +/** Selects a characters in contentEditableElement between beginOffset and endOffset +* @param {object} contentEditableElement +* @param {int} beginOffset +* @param {int} endOffset +* @returns {undefined} +*/ function selectContentsOf(contentEditableElement, beginOffset, endOffset) { var range,selection; if (document.createRange) { @@ -514,9 +591,13 @@ $('#filename').on('keypress keydown keyup input', function(e) { if (text == '') { sel.html(' '); } }); -function fixTypedFilename(enteredtext) { - if (!enteredtext) { return enteredtext; } - return enteredtext.replace(/\s|\xa0|[^\w\/.-]/g, '') +/** Removes characters from the string entered that are not allowed +* @param {string} enteredText +* @returns {string} +*/ +function fixTypedFilename(enteredText) { + if (!enteredText) { return enteredText; } + return enteredText.replace(/\s|\xa0|[^\w\/.-]/g, '') .replace(/^\/*/, '').replace(/\/\/+/g, '/'); } @@ -548,6 +629,10 @@ $('#owner').on('click', function(e) { } }); +/** Updates the parent link of elt based on the filename +* @param {object} elt +* @returns {undefined} +*/ function fixParentLink(elt) { var filename = window.location.pathname; if (filename.indexOf('/') >= 0) { @@ -613,6 +698,10 @@ $('#buttonbar').on('change', 'input[type=checkbox]', function(e) { // buttonlist should be // [{label:, id:, callback:, checkbox:, checked:, disabled:, title:}] +/** Shows the specified buttons +* @param {array} buttonList +* @returns {undefined} +*/ function showButtons(buttonlist) { var bar = $('#buttonbar'); var html = ''; @@ -666,6 +755,11 @@ function showButtons(buttonlist) { $('#buttonbar button.splitmenu li').tooltipster({position: 'left'}); } +/** Globally enables/disables the specified button whether it is shown or not +* @param {string} id +* @param {bool} enable +* @returns {undefined} +*/ function enableButton(id, enable) { if (enable) { var inp = $('#' + id).removeAttr('disabled'); @@ -675,6 +769,9 @@ function enableButton(id, enable) { } // Centers the middle button div using javascript. +/** Centers the middle button +* @returns {undefined} +*/ function centerMiddle() { var m = $('#middle'); // Horizontal center taking into account the button width. @@ -688,6 +785,10 @@ function centerMiddle() { $(window).on('resize.middlebutton', centerMiddle); +/** Determines which middle button to show (including none) +* @param {string} which +* @returns {undefined} +*/ function showMiddleButton(which) { if (which == 'run') { var html, @@ -733,7 +834,10 @@ function showMiddleButton(which) { $('#middle button').tooltipster(); } -// Show thumbnail under the save button. +/** Shows thumbnail from imageDataUrl under the save button +* @param {string} imageDataUrl +* @returns {undefined} +*/ function flashThumbnail(imageDataUrl) { if (!imageDataUrl) { return; } // Destroy the original title tooltip once there is a thumbnail. @@ -754,7 +858,10 @@ function flashThumbnail(imageDataUrl) { /////////////////////////////////////////////////////////////////////////// // SHARE DIALOG /////////////////////////////////////////////////////////////////////////// - +/** Shows the share dialog +* @param {array} opts - an optional list of options that will be passed into the share dialog +* @returns {undefined} +*/ function showShareDialog(opts) { if (!opts) { opts = { }; @@ -883,6 +990,10 @@ function showShareDialog(opts) { showDialog(opts); } +/** Shows a generic dialog defined by opts +* @param {array} opts - a NON-optional array of options that describes the dialog to be shown +* @returns {undefined} +*/ function showDialog(opts) { var overlay = $('#overlay'); if (!opts) { opts = {}; } @@ -995,15 +1106,17 @@ function showDialog(opts) { validate(); } - //////////////////////////////////////////////////////////////////////////// // LOGIN DIALOG /////////////////////////////////////////////////////////////////////////// - +/** Shows the login dialog +* @param {array} opts +* @returns {undefined} +*/ function showLoginDialog(opts) { if (!opts) opts = { }; - + opts.content = '
' + '
Name:
'+ @@ -1087,10 +1200,14 @@ function showLoginDialog(opts) { /////////////////////////////////////////////////////////////////////////// // PANE MANAGEMENT /////////////////////////////////////////////////////////////////////////// - -function setPreviewMode(shown, noanimation) { +/** Sets up a preview in a pane +* @param {bool} shown +* @param {bool} noAnimation +* @returns {undefined} +*/ +function setPreviewMode(shown, noAnimation) { var change = (shown != state.previewMode); - var delay = (noanimation || !change) ? 0 : 400; + var delay = (noAnimation || !change) ? 0 : 400; if (shown) { $('#middle').removeClass('rightedge'); $('.right').animate({left: '50%', width: '50%'}, delay); @@ -1113,10 +1230,17 @@ function setPreviewMode(shown, noanimation) { state.previewMode = shown; } +/** returns a string that looks like this # + name + panebox +* @param {string} name +* @returns {string} +*/ function panelParts(name) { return '#' + name + 'panebox'; } +/** switches the three panes around in a leftwards manner +* @returns {undefined} +*/ function rotateLeft() { var idb = paneid('back'); var idl = paneid('left'); @@ -1134,6 +1258,9 @@ function rotateLeft() { setPrimaryFocus(); } +/** switches the three panes around in a rightwards manner +* @returns {undefined} +*/ function rotateRight() { var idb = paneid('back'); var idl = paneid('left'); @@ -1154,7 +1281,15 @@ function rotateRight() { /////////////////////////////////////////////////////////////////////////// // RUN PREVIEW PANE /////////////////////////////////////////////////////////////////////////// - +/** Sets the passed in pane to run passed in HTML code +* @param {string} pane +* @param {string} html +* @param {string} filename +* @param {string} targetUrl +* @param {string} fullScreenLink +* @param {bool} nocode +* @returns {undefined} +*/ function setPaneRunHtml( pane, html, filename, targetUrl, fullScreenLink, nocode) { clearPane(pane); @@ -1209,6 +1344,12 @@ function setPaneRunHtml( }); } +/** Evals the passed in code in the passed in pane +* @param {string} pane +* @param {string} code +* @param {string} raw +* @returns {undefined} +*/ function evalInRunningPane(pane, code, raw) { var paneState = state.pane[pane]; if (!paneState.running) { return [null, 'error: not running (wrong state)']; } @@ -1232,6 +1373,10 @@ function evalInRunningPane(pane, code, raw) { } } +/** Hides the protractor on the passed in pane +* @param {string} pane +* @returns {undefined} +*/ function hideProtractor(pane) { var paneState = state.pane[pane]; var preview = $('#' + pane + ' .preview'); @@ -1242,13 +1387,18 @@ function hideProtractor(pane) { } } -// step is a record of the following form: -// startCoords: -// pageX:, pageY:, direction:, scale: -// endCoords: -// pageX:, pageY:, direction:, scale: -// command: "fd" -// args: [50] +/** Shows the protractor on the passed in pane +* @param {string} pane +* @param {object} step - defined as followed +* step is a record of the following form: +* startCoords: +* pageX:, pageY:, direction:, scale: +* endCoords: +* pageX:, pageY:, direction:, scale: +* command: "fd" +* args: [50] +* @returns {undefined} +*/ function showProtractor(pane, step) { var paneState = state.pane[pane]; if (!paneState.running) { @@ -1270,6 +1420,11 @@ function showProtractor(pane, step) { labelStep(preview, step); } +/** Labels the step distance on the protractor +* @param {object} preview +* @param {object} step +* @returns {undefined} +*/ function labelStep(preview, step) { if (!step.startCoords) { return; @@ -1348,6 +1503,13 @@ var getScrollbarWidth = function() { return width; }; +/** Sets up the link text in the directory +* @param {string} pane +* @param {string[]} links +* @param {string} filename +* @param {string} ownername +* @returns {undefined} +*/ function setPaneLinkText(pane, links, filename, ownername) { clearPane(pane); var paneState = state.pane[pane]; @@ -1358,6 +1520,11 @@ function setPaneLinkText(pane, links, filename, ownername) { setVisibilityOfSearchTextField(pane); } +/** Sets up the links in the directory +* @param {string} pane +* @param {string[]} links +* @returns {undefined} +*/ function setPaneLinks(pane, links) { var paneState = state.pane[pane]; paneState.links = links; @@ -1376,6 +1543,10 @@ $(window).on('resize.listing', function() { } }); +/** Updates the links on the pane +* @param {string} pane +* @returns {undefined} +*/ function updatePaneLinks(pane) { var j, col, items, width, maxwidth, colcount, colsize, colnum, tightwidth, item, figure, thumbnail, directory, colsdone, list; @@ -1493,6 +1664,10 @@ function updatePaneLinks(pane) { } })(jQuery); +/** Sets whether the search field is visible or not +* @param {string} pane +* @returns {undefined} +*/ function setVisibilityOfSearchTextField(pane) { var directory = $('#'+pane).find('.directory'); var panetitle = directory.parent().parent().find('.panetitle'); @@ -1516,6 +1691,10 @@ function setVisibilityOfSearchTextField(pane) { } } +/** Gets the default thumbnail of the passed in type +* @param {string} type +* @returns {undefined} +*/ function getDefaultThumbnail(type) { var baseUrl = '//' + pencilcode.domain + '/image/'; var mimeToFilename = { @@ -1544,7 +1723,11 @@ function getDefaultThumbnail(type) { /////////////////////////////////////////////////////////////////////////// // ACE EDITOR SUPPORT /////////////////////////////////////////////////////////////////////////// - +/** Clears the passed in pane +* @param {string} pane +* @parame {bool} loading +* @returns {undefined} +*/ function clearPane(pane, loading) { var paneState = state.pane[pane]; if (paneState.dropletEditor && paneState.dropletEditor.destroy) { @@ -1583,6 +1766,10 @@ function clearPane(pane, loading) { $('#' + pane + 'title_text').html(''); } +/** Determines the mode based on the passed in mime type +* @param {string} mimeType +* @returns {undefined} +*/ function modeForMimeType(mimeType) { if (!mimeType) { return 'ace/mode/text'; @@ -1606,6 +1793,10 @@ function modeForMimeType(mimeType) { return 'ace/mode/' + result; } +/** Determines the droplet mode for passed in mime type +* @param {string} mimeType +* @returns {undefined} +*/ function dropletModeForMimeType(mimeType) { if (!mimeType) { return 'ace/mode/text'; @@ -1624,6 +1815,11 @@ function dropletModeForMimeType(mimeType) { return result; } +/** Determines the palette for the passed in pane +* @param {object} paneState +* @param {string} selfname +* @returns {undefined} +*/ function paletteForPane(paneState, selfname) { var mimeType = editorMimeType(paneState).replace(/;.*$/, ''), basePalette = paneState.palette; @@ -1649,6 +1845,10 @@ function paletteForPane(paneState, selfname) { return []; } +/** Determines the droplet options for passed in mime type +* @param {string} mimeType +* @returns {undefined} +*/ function dropletOptionsForMimeType(mimeType) { if (/x-python/.test(mimeType)) { return { @@ -1668,10 +1868,18 @@ function dropletOptionsForMimeType(mimeType) { }; } +/** Determines a uniqueID for the passed in name +* @param {string} name +* @returns {undefined} +*/ function uniqueId(name) { return name + '_' + ('' + Math.random()).substr(2); } +/** Updates the title of the passed in pane +* @param {string} pane +* @returns {string} +*/ function updatePaneTitle(pane) { var paneState = state.pane[pane]; var label = ''; @@ -1747,6 +1955,9 @@ function updatePaneTitle(pane) { setVisibilityOfSearchTextField(pane); } +/** gets the thumbnail to be shown +* @returns {object} the thumbnail to be shown +*/ function getShowThumb() { var showThumb; try { @@ -1763,6 +1974,10 @@ function getShowThumb() { return showThumb; } +/** sets the thumbnail to be shown +* @param {object} showThumb +* @returns {undefined} +*/ function setShowThumb(showThumb) { try { window.localStorage.setItem('showThumb', JSON.stringify(showThumb)); @@ -1771,6 +1986,10 @@ function setShowThumb(showThumb) { } } +/** determines if the thumbnail should be shown or not +* @param {string} path +* @returns {undefined} +*/ function shouldShowThumb(path) { var layers = path.match(/[^\/]+/g); if (!layers) { // Disable on user listing. @@ -1796,6 +2015,11 @@ function shouldShowThumb(path) { } } +/** Sets whether a path should show the thumbnail +* @param {string} path +* @param {bool} shouldShow +* @returns {undefined} +*/ function setShouldShowThumb(path, shouldShow) { var layers = path.match(/[^\/]+/g); if (!layers) { // Do not allow setting on user listing. @@ -1929,6 +2153,10 @@ $('.pane').on('click', '.blocktoggle', function(e) { setPaneEditorBlockMode(pane, true,$(this).attr('droplet-editor')); }); +/** Shows the editor language dialog for the passed in pane +* @param {string} pane +* @returns {undefined} +*/ function showPaneEditorLanguagesDialog(pane) { if (panepos(pane) != 'left') { return; } var paneState = state.pane[pane]; @@ -2097,6 +2325,11 @@ function showPaneEditorLanguagesDialog(pane) { } +/** returns the library in the passed in meta that matches the passed in name +* @param {object} meta +* @param {string} name +* @returns {object} +*/ function findLibrary(meta, name) { if (!meta.libs) return false; for (var j = 0; j < meta.libs.length; ++j) { @@ -2105,6 +2338,12 @@ function findLibrary(meta, name) { return null; } +/** Toggles whether the library is enabled or not +* @param {object} meta +* @param {object} obj +* @param {bool} enable +* @returns {undefined} +*/ function toggleLibrary(meta, obj, enable) { if (!meta.libs) { meta.libs = []; } var j; @@ -2126,7 +2365,10 @@ function toggleLibrary(meta, obj, enable) { } } - +/** Normalizes the carriage returns in the passed in text +* @param {string} text +* @returns {undefined} +*/ function normalizeCarriageReturns(text) { var result = text.replace(/\r\n|\r/g, "\n"); if (result.length && result.substr(result.length - 1) != '\n') { @@ -2140,6 +2382,10 @@ function normalizeCarriageReturns(text) { // and not good for kids: it toggles between find and replace. // This function hacks the binding of repeated Ctrl-F so that it does // the safe and logical thing: it does repeated searches. +/** Changes the ACE editor's default keybinding to make it better for kids` +* @param {object} editor +* @returns {undefined} +*/ function fixRepeatedCtrlFCommand(editor) { // ModifiedSearch creates and shows a SearchBox with a modified // when-open-keybinding. @@ -2202,6 +2448,10 @@ function fixRepeatedCtrlFCommand(editor) { }]) } +/** Counts the number of lines and columns in the text +* @param {string} text +* @returns {object} rows/columns in the text +*/ function getTextRowsAndColumns(text) { var rawlines = text.split('\n'); var columns = 0; @@ -2214,6 +2464,11 @@ function getTextRowsAndColumns(text) { }; } +/** Changes the text in the passed in paneState +* @param {object} paneState +* @param {string} text +* @returns {undefined} +*/ function changeEditorText(paneState, text) { if (!paneState.editor) { console.warn('changeEditorText without an editor'); @@ -2263,6 +2518,10 @@ function changeEditorText(paneState, text) { paneState.changeHandler(); } +/** Changes the editor mimeType to that of the passed in paneState +* @param {object} paneState +* @returns {undefined} +*/ function editorMimeType(paneState) { if (!paneState.mimeType) { return; @@ -2273,6 +2532,10 @@ function editorMimeType(paneState) { return paneState.mimeType; } +/** Checks to see if there are ay errors in the editor +* @param {object} editor +* @returns {bool} +*/ function editorHasAnyErrors(editor) { if (!editor || editor.currentlyUsingBlocks) return false; if (editor.aceEditor) { editor = editor.aceEditor; } @@ -2284,6 +2547,10 @@ function editorHasAnyErrors(editor) { return false; } +/** Sizes the HTML/CSS panes in the passed in pane +* @param {string} pane +* @returns {undefined} +*/ function sizeHtmlCssPanels(pane) { var box = $('#' + pane).find('.hpanelbox'); var paneState = state.pane[pane]; @@ -2296,11 +2563,13 @@ function sizeHtmlCssPanels(pane) { setupHpanelBox(box); } -// Initializes an (ACE) editor into a pane, using the given text and the -// given filename. -// @param pane the id of a pane - alpha, bravo or charlie. -// @param text the initial text to edit. -// @param filename the filename to use. +/** Sets up the ACE editor into the passed in pane using the given text and filename +* @param {string} pane, the id of a pane, alpha, bravo or charlie +* @param {string} text, initial text to edit +* @param {string} filename, filename to use +* @param {bool} useblocks +* @returns {undefined} +*/ function setPaneEditorData(pane, doc, filename, useblocks) { clearPane(pane); var text = normalizeCarriageReturns(doc.data); @@ -2484,6 +2753,15 @@ function setPaneEditorData(pane, doc, filename, useblocks) { $('#overflow').scrollLeft(0); } +/** Sets up subeditors in the passed in pane +* @param {object} box +* @param {string} pane +* @param {object} paneState +* @param {string} text +* @param {string} htmlorcss +* @param {bool} tearDown +* @returns {undefined} +*/ function setupSubEditor(box, pane, paneState, text, htmlorcss, tearDown) { var id = uniqueId(htmlorcss + 'edit'); box.find('.' + htmlorcss + 'mark').html( @@ -2496,6 +2774,16 @@ function setupSubEditor(box, pane, paneState, text, htmlorcss, tearDown) { setupResizeHandler(container.parent(), editor); } +/** Sets up Droplet sub editors in the passed in pane +* @param {object} box +* @param {string} pane +* @param {object} paneState +* @param {string} text +* @param {string} htmlorcss +* @param {bool} tearDown +* @param {bool} useblocks +* @returns {undefined} +*/ function setupDropletSubEditor(box, pane, paneState, text, htmlorcss, tearDown, useblocks) { var id = uniqueId(htmlorcss + 'edit'); box.find('.' + htmlorcss + 'mark').html( @@ -2550,6 +2838,13 @@ function setupDropletSubEditor(box, pane, paneState, text, htmlorcss, tearDown, setupAceEditor(pane, container, aceEditor, "ace/mode/" + htmlorcss, text); } +/** Tears down a SubEditor +* @param {object} box +* @param {string} pane +* @param {object} paneState +* @param {string} htmlorcss +* @returns {undefined} +*/ function tearDownSubEditor(box, pane, paneState, htmlorcss) { if (paneState[htmlorcss + 'Editor']) { if (paneState[htmlorcss + 'Editor'].destroy) @@ -2562,6 +2857,14 @@ function tearDownSubEditor(box, pane, paneState, htmlorcss) { } } +/** Sets up an ACE Editor +* @param {string} pane +* @param {string} elt +* @param {object} editor +* @param {object} mode +* @param {string} text +* @returns {undefined} +*/ function setupAceEditor(pane, elt, editor, mode, text) { fixRepeatedCtrlFCommand(editor); editor.setTheme("ace/theme/chrome"); @@ -2740,10 +3043,19 @@ function setupAceEditor(pane, elt, editor, mode, text) { } } +/** Checks whether the passed in mimeType supports using blocks +* @param {string} mimeType +* @returns {undefined} +*/ function mimeTypeSupportsBlocks(mimeType) { return /x-pencilcode|coffeescript|javascript|x-python|html/.test(mimeType); } +/** Sets the language for the editor in the passed in pane +* @param {string} pane +* @param {object} type +* @returns {undefined} +*/ function setPaneEditorLanguageType(pane, type) { var paneState = state.pane[pane]; if (!paneState.dropletEditor) return false; @@ -2760,6 +3072,12 @@ function setPaneEditorLanguageType(pane, type) { return true; } +/** Sets the options for the blocks in the editor in the passed in pane +* @param {string} pane +* @param {object} pal +* @param {object} modeOptions +* @returns {undefined} +*/ function setPaneEditorBlockOptions(pane, pal, modeOptions) { var paneState = state.pane[pane]; if (!paneState.dropletEditor) return; @@ -2774,6 +3092,12 @@ function setPaneEditorBlockOptions(pane, pal, modeOptions) { } } +/** Sets whether the editor is using blocks or not +* @param {string} pane +* @param {bool} useblocks +* @param {object} editor +* @returns {undefined} +*/ function setPaneEditorBlockMode(pane, useblocks, editor) { function setMainEditorBlockMode(editor, useblocks) { if (editor.currentlyUsingBlocks == useblocks) return false; @@ -2804,12 +3128,20 @@ function setPaneEditorBlockMode(pane, useblocks, editor) { return result; } +/** Gets whether the pane's editor is using block mode or not +* @param {string} pane +* @returns {bool} +*/ function getPaneEditorBlockMode(pane) { var paneState = state.pane[pane]; if (!paneState.dropletEditor) return false; return paneState.dropletEditor.currentlyUsingBlocks; } +/** Gets which language the pane's editor is currently using +* @param {string} pane +* @returns {string} +*/ function getPaneEditorLanguage(pane) { var paneState = state.pane[pane]; if (!paneState.dropletEditor) return null; @@ -2819,8 +3151,10 @@ function getPaneEditorLanguage(pane) { .replace(/\bx-/, '').replace(/;.*$/, ''); } -// Kids often have trouble figuring out how to add empty lines at the end. -// So ensure there is always one empty line at the end of the document. +/** Ensures there is always at least one empty line at the end of the document +* @param {object} editor +* @returns {undefined} +*/ function ensureEmptyLastLine(editor) { var session = editor.getSession(), lines = session.getLength(), @@ -2838,6 +3172,9 @@ function ensureEmptyLastLine(editor) { } } +/** Sets the primary focus +* @returns {undefined} +*/ function setPrimaryFocus() { var pane = paneid('left'); var paneState = state.pane[pane]; @@ -2860,6 +3197,11 @@ function setPrimaryFocus() { } } +/** Sets whether a pane is read only or not +* @param {string} pane +* @param {bool} ro +* @returns {undefined} +*/ function setPaneEditorReadOnly(pane, ro) { var paneState = state.pane[pane]; var containers = []; @@ -2886,6 +3228,11 @@ function setPaneEditorReadOnly(pane, ro) { } } +/** checks whether two lines are the same while disregarding trailing spaces +* @param {string} s1 +* @param {string} s2 +* @returns {bool} +*/ function sameDisregardingTrailingSpace(s1, s2) { if (s1 == s2) return true; if (s1.length == s2.length) return false; @@ -2893,6 +3240,10 @@ function sameDisregardingTrailingSpace(s1, s2) { return false; } +/** Checks whether the passed in pane is dirty or not +* @param {string} pane +* @returns {bool} +*/ function isPaneEditorDirty(pane) { var paneState = state.pane[pane]; if (!paneState.editor) { return false; } @@ -2909,6 +3260,10 @@ function isPaneEditorDirty(pane) { return false; } +/** Checks whether the passed in pane is empty or not +* @param {string} pane +* @returns {bool} +*/ function isPaneEditorEmpty(pane) { var paneState = state.pane[pane]; if (!paneState.editor) { return false; } @@ -2927,11 +3282,13 @@ function isPaneEditorEmpty(pane) { return true; } +/** Updates the meta of the paneState +* @param {object} paneState +* @returns {undefined} +*/ function updateMeta(paneState) { - if (!paneState.meta) { - if (paneState.htmlEditor || paneState.cssEditor) { - paneState.meta = filetype.effectiveMeta(null); - } + if (!paneState.htmlEditor && !paneState.cssEditor) { + paneState.meta = filetype.effectiveMeta(paneState); } // Grab the html and the CSS from the editors. if (paneState.htmlEditor) { @@ -2941,6 +3298,11 @@ function updateMeta(paneState) { paneState.meta.css = paneState.cssEditor.getValue(); } } + +/** Gets the editor data of the passed in pane +* @param {string} pane +* @returns {object} the data from the editor in the pane +*/ function getPaneEditorData(pane) { var paneState = state.pane[pane]; if (!paneState.editor) { @@ -2953,21 +3315,27 @@ function getPaneEditorData(pane) { return {data: text, mime: paneState.mimeType, meta: metaCopy }; } -// Marks a line of the editor using the given CSS class -// (using 1-based line numbering). -// Marks are cumulative. To clear all marks of a given class, -// call clearPaneEditorMarks. -// The ACE editor uses an ID number to identify each highlighted line, -// so to allow unhighlighting, we track the ID of every highlighted. -// line inside the paneState marked data structure. The structure -// is organized as follows: -// paneState.marked = { -// mark-css-class-name: { -// zero-based-line-number: ACE-highlighting-id, -// ... (one for each highlighted line) -// }, -// (one for each CSS class used for highlighting) -// } +/** Marks the passed in line using the passed in CSS class +* Marks a line of the editor using the given CSS class +* (using 1-based line numbering). +* Marks are cumulative. To clear all marks of a given class, +* call clearPaneEditorMarks. +* The ACE editor uses an ID number to identify each highlighted line, +* so to allow unhighlighting, we track the ID of every highlighted. +* line inside the paneState marked data structure. The structure +* is organized as follows: +* paneState.marked = { +* mark-css-class-name: { +* zero-based-line-number: ACE-highlighting-id, +* ... (one for each highlighted line) +* }, +* (one for each CSS class used for highlighting) +* } +* @param {string} pane +* @param {int} line +* @param {string} markclass +* @returns {undefined} +*/ function markPaneEditorLine(pane, line, markclass) { var paneState = state.pane[pane]; if (!paneState.editor) { @@ -3015,8 +3383,14 @@ function markPaneEditorLine(pane, line, markclass) { } } -// The inverse of markPaneEditorLine: clears a marked line by -// looking up the ACE marked-line ID and unmarking it. +/** Clears a marked line by looking up an ACE marked-line ID and unmarking it. +* The inverse of markPaneEditorLine: clears a marked line by +* looking up the ACE marked-line ID and unmarking it. +* @param {string} pane +* @param {int} line +* @param {string} markclass +* @returns {object} the data from the editor in the pane +*/ function clearPaneEditorLine(pane, line, markclass) { var paneState = state.pane[pane]; if (!paneState.editor) { @@ -3042,8 +3416,13 @@ function clearPaneEditorLine(pane, line, markclass) { delete idMap[zline]; } -// Clears all marks of the given class. -// If no markclass is passed, clears all marks of all classes. +/** Clears all marks of the given class +* Clears all marks of the given class. +* If no markclass is passed, clears all marks of all classes. +* @param {string} pane +* @param {string} markclass +* @returns {object} the data from the editor in the pane +*/ function clearPaneEditorMarks(pane, markclass) { var paneState = state.pane[pane]; if (!paneState.editor) { @@ -3072,6 +3451,11 @@ function clearPaneEditorMarks(pane, markclass) { paneState.dropletEditor.clearLineMarks(markclass); } +/** Cleans up data and notes that it is cleaned +* @param {string} pane +* @param {object} data +* @returns {undefined} +*/ function notePaneEditorCleanData(pane, data) { var text = normalizeCarriageReturns(data.data); var paneState = state.pane[pane]; @@ -3092,6 +3476,10 @@ function notePaneEditorCleanData(pane, data) { } } +/** Notes that the line count of the editor is clean +* @param {string} pane +* @returns {undefined} +*/ function notePaneEditorCleanLineCount(pane) { var paneState = state.pane[pane]; if (paneState.editor) { @@ -3099,6 +3487,11 @@ function notePaneEditorCleanLineCount(pane) { } } +/** Notes that a new filename has been assigned to a pane +* @param {string} pane +* @param {string} filename +* @returns {undefined} +*/ function noteNewFilename(pane, filename) { var paneState = state.pane[pane]; paneState.filename = filename; @@ -3137,6 +3530,10 @@ var fontloader = new FontLoader(["Source Code Pro"], { }); fontloader.loadFonts(); +/** Runs a callback when CodeFont is loaded +* @param {function} callback +* @returns {undefined} +*/ function whenCodeFontLoaded(callback) { if (codeFontLoaded) { callback.call(); @@ -3145,11 +3542,20 @@ function whenCodeFontLoaded(callback) { } } +/** coppies the JSON from m +* @param {JSON} m +* @returns {undefined} +*/ function copyJSON(m) { if (m == null) { return null; } return JSON.parse(JSON.stringify(m)); } +/** sets up the resize header +* @param {object} container +* @param {object} editor +* @returns {undefined} +*/ function setupResizeHandler(container, editor) { var needed = false; $(container).on('panelsize', function() { @@ -3162,6 +3568,10 @@ function setupResizeHandler(container, editor) { }); } +/** sets up the HPanel Box +* @param {object} box +* @returns {undefined} +*/ function setupHpanelBox(box) { var hpb = $(box), minh = 29; function usePercentHeight(cur) { diff --git a/content/team.html b/content/team.html index 5bcbe264..d4993997 100644 --- a/content/team.html +++ b/content/team.html @@ -199,6 +199,11 @@

Who We Are

students and also developing the promise-based await extensions. +

D Feher, +a Google special projects PM, devised the Pencil Code Gym with +music and creative writing modules tor reaching more types of students, +and coordinated its implementation and showcasing at Google I/O events. +

Bob Cassels, a Google engineer, is contributing a Scheme-inspired arbitrary-precision arithmetic @@ -225,10 +230,9 @@

Who We Are

capability to embed and integrate Pencil Code as a widget into other tutorial websites. -

Googlers D Feher, David Saff, and -Alison Cichowlas, -contributed the Pencil Code Gym tutorial website, and -organized youth events using the tool. +

Googlers David Saff, and Alison Cichowlas, +contributed the Pencil Code Gym implementation, and +helped organized youth events using the tool.

Rachel Nicoll, a project manager at the MassTLC diff --git a/content/terms.html b/content/terms.html index 1361ef8a..4276d979 100644 --- a/content/terms.html +++ b/content/terms.html @@ -20,7 +20,7 @@ title="pencilcode.net">

Pencil Code Terms of Service

About Pencil Code

-

Pencil Code is an educational service provided by the +

Pencil Code is an educational service provided by David Bau and the Pencil Code Team, at 88 Lincoln Road, Lincoln MA.

By using the Pencil Code service, you are agreeing to these terms. diff --git a/content/turtlebits.js b/content/turtlebits.js new file mode 100644 index 00000000..c62ad084 --- /dev/null +++ b/content/turtlebits.js @@ -0,0 +1,19 @@ +this.CoffeeScript||function(root){!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;"undefined"!=typeof window?b=window:"undefined"!=typeof global?b=global:"undefined"!=typeof self&&(b=self),b.CoffeeScript=a()}}(function(){var define,module,exports;return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g=0&&e.push(f);return e}(),e=0,c=function(){var b;if((b=a[e])instanceof Array)return CoffeeScript.run.apply(CoffeeScript,b),e++,c()},i=function(d,e){var f;return f={literate:d.type===b[1]},d.src?CoffeeScript.load(d.src,function(b){return a[e]=b,c()},f,!0):(f.sourceFiles=["embedded"],a[e]=[d.innerHTML,f])},d=j=0,k=a.length;j"),j=a.getLineNumber(),d=a.getColumnNumber(),l=b(f,j,d),e=l?f+":"+l[0]+":"+l[1]:f+":"+j+":"+d),g=a.getFunctionName(),h=a.isConstructor(),i=!(a.isToplevel()||h),i?(k=a.getMethodName(),n=a.getTypeName(),g?(m=c="",n&&g.indexOf(n)&&(m=n+"."),k&&g.indexOf("."+k)!==g.length-k.length-1&&(c=" [as "+k+"]"),""+m+g+c+" ("+e+")"):n+"."+(k||"")+" ("+e+")"):h?"new "+(g||"")+" ("+e+")":g?g+" ("+e+")":e},r={},k=function(a){var b,d;if(r[a])return r[a];if(d=null!=q?q.extname(a):void 0,!(z.call(c.FILE_EXTENSIONS,d)<0))return b=c._compileFile(a,!0),r[a]=b.sourceMap},Error.prepareStackTrace=function(a,b){var d,e,f;return f=function(a,b,c){var d,e;return e=k(a),e&&(d=e.sourceLocation([b-1,c-1])),d?[d[0]+1,d[1]+1]:null},e=function(){var a,e,g;for(g=[],a=0,e=b.length;a0;)1&b&&(c+=a),b>>>=1,a+=a;return c},c.compact=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;c=0?(d=a.split("."),d.pop(),"coffee"===d[d.length-1]&&d.length>1&&d.pop(),d.join(".")):a},c.isCoffee=function(a){return/\.((lit)?coffee|coffee\.md|iced|liticed|iced\.md)$/.test(a)},c.isLiterate=function(a){return/\.(litcoffee|coffee\.md|liticed|iced\.md)$/.test(a)},c.throwSyntaxError=function(a,b){var c;throw c=new SyntaxError(a),c.location=b,c.toString=g,c.stack=c.toString(),c},c.updateSyntaxError=function(a,b,c){return a.toString===g&&(a.code||(a.code=b),a.filename||(a.filename=c),a.stack=a.toString()),a},g=function(){var b,c,d,e,g,h,i,j,k,l,m,n,o;return this.code&&this.location?(n=this.location,i=n.first_line,h=n.first_column,k=n.last_line,j=n.last_column,null==k&&(k=i),null==j&&(j=h),g=this.filename||"[stdin]",b=this.code.split("\n")[i],m=h,e=i===k?j+1:b.length,l=b.slice(0,m).replace(/[^\s]/g," ")+f("^",e-m),null!=(void 0!==a&&null!==a?a.stdout:void 0)&&(d=a.stdout.isTTY&&!a.env.NODE_DISABLE_COLORS),(null!=(o=this.colorful)?o:d)&&(c=function(a){return""+a+""},b=b.slice(0,m)+c(b.slice(m,e))+b.slice(e),l=c(l)),g+":"+(i+1)+":"+(h+1)+": error: "+this.message+"\n"+b+"\n"+l):Error.prototype.toString.call(this)},c.nameWhitespaceCharacter=function(a){switch(a){case" ":return"space";case"\n":return"newline";case"\r":return"carriage return";case"\t":return"tab";default:return a}}}).call(this)}).call(this,a("FWaASH"))},{FWaASH:14}],4:[function(a,b,c){(function(){c.transform=function(a,b){return a.icedTransform(b)},c.runtime=a("iced-runtime")}).call(this)},{"iced-runtime":19}],5:[function(a,b,c){(function(){var b,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$=[].indexOf||function(a){for(var b=0,c=this.length;b=0||$.call(h,d)>=0)&&(m=d.toUpperCase(),"WHEN"===m&&(p=this.tag(),$.call(x,p)>=0)?m="LEADING_WHEN":"FOR"===m?this.seenFor=!0:"UNLESS"===m?m="IF":$.call(P,m)>=0?m="UNARY":$.call(I,m)>=0&&("INSTANCEOF"!==m&&this.seenFor?(m="FOR"+m,this.seenFor=!1):(m="RELATION","!"===this.value()&&(k=this.tokens.pop(),d="!"+d)))),$.call(v,d)>=0&&(c?(m="IDENTIFIER",d=new String(d),d.reserved=!0):$.call(J,d)>=0&&this.error('reserved word "'+d+'"')),c||($.call(f,d)>=0&&(d=g[d]),m=function(){switch(d){case"!":return"UNARY";case"==":case"!=":return"COMPARE";case"&&":case"||":return"LOGIC";case"true":case"false":return"BOOL";case"break":case"continue":return"STATEMENT";default:return m}}()),n=this.token(m,d,0,e),k&&(r=[k[2].first_line,k[2].first_column],n[2].first_line=r[0],n[2].first_column=r[1]),a&&(b=i.lastIndexOf(":"),this.token(":",":",b,a.length)),i.length)):0},a.prototype.numberToken=function(){var a,b,c,d,e;return(c=F.exec(this.chunk))?(d=c[0],/^0[BOX]/.test(d)?this.error("radix prefix '"+d+"' must be lowercase"):/E/.test(d)&&!/^0x/.test(d)?this.error("exponential notation '"+d+"' must be indicated with a lowercase 'e'"):/^0\d*[89]/.test(d)?this.error("decimal literal '"+d+"' must not be prefixed with '0'"):/^0\d+/.test(d)&&this.error("octal literal '"+d+"' must be prefixed with '0o'"),b=d.length,(e=/^0o([0-7]+)/.exec(d))&&(d="0x"+parseInt(e[1],8).toString(16)),(a=/^0b([01]+)/.exec(d))&&(d="0x"+parseInt(a[1],2).toString(16)),this.token("NUMBER",d,0,b),b):0},a.prototype.stringToken=function(){var a,b,c,d,e,f,g;switch(e=this.chunk.charAt(0)){case"'":f=(M.exec(this.chunk)||[])[0];break;case'"':f=this.balancedString(this.chunk,'"')}if(!f)return 0;if(a=f.slice(1,-1),g=this.removeNewlines(a),'"'===e&&0=0)?0:(c=H.exec(this.chunk))?(g=c,c=g[0],e=g[1],a=g[2],"//"===e?0:("/*"===e.slice(0,2)&&this.error("regular expressions cannot begin with `*`"),this.token("REGEX",""+e+a,0,c.length),c.length)):0},a.prototype.heregexToken=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,q,r,s;if(!(e=o.exec(this.chunk)))return 0;if(d=e[0],a=e[1],b=e[2],0>a.indexOf("#{"))return h=this.escapeLines(a.replace(p,"$1$2").replace(/\//g,"\\/"),!0),h.match(/^\*/)&&this.error("regular expressions cannot begin with `*`"),this.token("REGEX","/"+(h||"(?:)")+"/"+b,0,d.length),d.length;for(this.token("IDENTIFIER","RegExp",0,0),this.token("CALL_START","(",0,0),k=[],q=this.interpolateString(a,{regex:!0,strOffset:3}),m=0,n=q.length;mthis.indent){if(d)return this.indebt=e-this.indent,this.suppressNewlines(),b.length;if(!this.tokens.length)return this.baseIndent=this.indent=e,b.length;a=e-this.indent+this.outdebt,this.token("INDENT",a,b.length-e,e),this.indents.push(a),this.ends.push("OUTDENT"),this.outdebt=this.indebt=0,this.indent=e}else e0;)f=this.indents[this.indents.length-1],f?f===this.outdebt?(a-=this.outdebt,this.outdebt=0):f=0)&&(d-=e-a,a=e),this.outdebt=0,this.pair("OUTDENT"),this.token("OUTDENT",a,0,c),a-=e):a=0;for(e&&(this.outdebt-=a);";"===this.value();)this.tokens.pop();return"TERMINATOR"===this.tag()||b||this.token("TERMINATOR","\n",c,0),this.indent=d,this},a.prototype.whitespaceToken=function(){var a,b;return(a=R.exec(this.chunk))||"\n"===this.chunk.charAt(0)?(b=V(this.tokens),b&&(b[a?"spaced":"newLine"]=!0),a?a[0].length:0):0},a.prototype.newlineToken=function(a){for(;";"===this.value();)this.tokens.pop();return"TERMINATOR"!==this.tag()&&this.token("TERMINATOR","\n",a,0),this},a.prototype.suppressNewlines=function(){return"\\"===this.value()&&this.tokens.pop(),this},a.prototype.literalToken=function(){var a,b,c,f,g,h,i,l;if((a=G.exec(this.chunk))?(f=a[0],e.test(f)&&this.tagParameters()):f=this.chunk.charAt(0),c=f,b=V(this.tokens),"="===f&&b&&(!b[1].reserved&&(g=b[1],$.call(v,g)>=0)&&this.error('reserved word "'+this.value()+"\" can't be assigned"),"||"===(h=b[1])||"&&"===h))return b[0]="COMPOUND_ASSIGN",b[1]+="=",f.length;if(";"===f)this.seenFor=!1,c="TERMINATOR";else if($.call(A,f)>=0)c="MATH";else if($.call(j,f)>=0)c="COMPARE";else if($.call(k,f)>=0)c="COMPOUND_ASSIGN";else if($.call(P,f)>=0)c="UNARY";else if($.call(Q,f)>=0)c="UNARY_MATH";else if($.call(L,f)>=0)c="SHIFT";else if($.call(z,f)>=0||"?"===f&&(null!=b?b.spaced:void 0))c="LOGIC";else if(b&&!b.spaced)if("("===f&&(i=b[0],$.call(d,i)>=0))"?"===b[0]&&(b[0]="FUNC_EXIST"),c="CALL_START";else if("["===f&&(l=b[0],$.call(s,l)>=0))switch(c="INDEX_START",b[0]){case"?":b[0]="INDEX_SOAK"}switch(f){case"(":case"{":case"[":this.ends.push(t[f]);break;case")":case"}":case"]":this.pair(f)}return this.token(c,f),f.length},a.prototype.sanitizeHeredoc=function(a,b){var c,d,e,f,g;if(e=b.indent,d=b.herecomment){if(m.test(a)&&this.error('block comment cannot contain "*/", starting'),a.indexOf("\n")<0)return a}else for(;f=n.exec(a);)c=f[1],(null===e||0<(g=c.length)&&gj;d=1<=j?++i:--i)if(c)--c;else{switch(e=a.charAt(d)){case"\\":++c;continue;case b:if(h.pop(),!h.length)return a.slice(0,+d+1||9e9);b=h[h.length-1];continue}"}"!==b||'"'!==e&&"'"!==e?"}"===b&&"/"===e&&(f=o.exec(a.slice(d))||H.exec(a.slice(d)))?c+=f[0].length-1:"}"===b&&"{"===e?h.push(b="}"):'"'===b&&"#"===g&&"{"===e&&h.push(b="}"):h.push(b=e),g=e}return this.error("missing "+h.pop()+", starting")},a.prototype.interpolateString=function(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E;for(null==c&&(c={}),g=c.heredoc,t=c.regex,q=c.offsetInChunk,v=c.strOffset,m=c.lexedLength,q||(q=0),v||(v=0),m||(m=b.length),y=[],r=0,h=-1;l=b.charAt(h+=1);)"\\"!==l?"#"===l&&"{"===b.charAt(h+1)&&(f=this.balancedString(b.slice(h+1),"}"))&&(r1&&(p.unshift(this.makeToken("(","(",v+h+1,0)),p.push(this.makeToken(")",")",v+h+1+i.length,0))),y.push(["TOKENS",p]))),h+=f.length,r=h+1):h+=1;if(h>r&&r1)&&this.token("(","(",q,0,e),h=A=0,B=y.length;A=this.chunk.length?this.chunk:this.chunk.slice(0,+(a-1)+1||9e9),c=S(e,"\n"),b=this.chunkColumn,c>0?(d=e.split("\n"),b=V(d).length):b+=e.length,[this.chunkLine+c,b])},a.prototype.makeToken=function(a,b,c,d){var e,f,g,h;return null==c&&(c=0),null==d&&(d=b.length),f={},g=this.getLineAndColumnFromChunk(c),f.first_line=g[0],f.first_column=g[1],e=Math.max(0,d-1),h=this.getLineAndColumnFromChunk(c+e),f.last_line=h[0],f.last_column=h[1],[a,b,f]},a.prototype.token=function(a,b,c,d,e){var f;return f=this.makeToken(a,b,c,d),e&&(f.origin=e),this.tokens.push(f),f},a.prototype.tag=function(a,b){var c;return(c=V(this.tokens,a))&&(b?c[0]=b:c[0])},a.prototype.value=function(a,b){var c;return(c=V(this.tokens,a))&&(b?c[1]=b:c[1])},a.prototype.unfinished=function(){var a;return y.test(this.chunk)||"\\"===(a=this.tag())||"."===a||"?."===a||"?::"===a||"UNARY"===a||"MATH"===a||"UNARY_MATH"===a||"+"===a||"-"===a||"YIELD"===a||"**"===a||"SHIFT"===a||"RELATION"===a||"COMPARE"===a||"LOGIC"===a||"THROW"===a||"EXTENDS"===a},a.prototype.removeNewlines=function(a){return a.replace(/^\s*\n\s*/,"").replace(/([^\\]|\\\\)\s*\n\s*$/,"$1")},a.prototype.escapeLines=function(a,b){return a=a.replace(/\\[^\S\n]*(\n|\\)\s*/g,function(a,b){return"\n"===b?"":a}),b?a.replace(B,"\\n"):a.replace(/\s*\n\s*/g," ")},a.prototype.makeString=function(a,b,c){return a?(a=a.replace(RegExp("\\\\("+b+"|\\\\)","g"),function(a,c){return c===b?c:a}),a=a.replace(RegExp(""+b,"g"),"\\$&"),b+this.escapeLines(a,c)+b):b+b},a.prototype.error=function(a,b){var c,d,e;return null==b&&(b=0),e=this.getLineAndColumnFromChunk(b),d=e[0],c=e[1],X(a,{first_line:d,first_column:c})},a}(),w=["true","false","null","this","new","delete","typeof","in","instanceof","return","throw","break","continue","debugger","yield","if","else","switch","for","while","do","try","catch","finally","class","extends","super"],h=["undefined","then","unless","until","loop","of","by","when"],h=h.concat(["await","defer"]),g={and:"&&",or:"||",is:"==",isnt:"!=",not:"!",yes:"true",no:"false",on:"true",off:"false"},f=function(){var a;a=[];for(U in g)a.push(U);return a}(),h=h.concat(f),J=["case","default","function","var","void","with","const","let","enum","export","import","native","__hasProp","__extends","__slice","__bind","__indexOf","implements","interface","package","private","protected","public","static"],N=["arguments","eval","yield*"],v=w.concat(J).concat(N),c.RESERVED=J.concat(w).concat(h).concat(N),c.STRICT_PROSCRIBED=N,b=65279,q=/^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/,F=/^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i,l=/^("""|''')((?:\\[\s\S]|[^\\])*?)(?:\n[^\n\S]*)?\1/,G=/^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>*\/%])\2=?|\?(\.|::)|\.{2,3})/,R=/^[^\n\S]+/,i=/^###([^#][\s\S]*?)(?:###[^\n\S]*|###$)|^(?:\s*#(?!##[^#]).*)+/,e=/^[-=]>/,C=/^(?:\n[^\n\S]*)+/,M=/^'[^\\']*(?:\\[\s\S][^\\']*)*'/,u=/^`[^\\`]*(?:\\.[^\\`]*)*`/,H=/^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/,o=/^\/{3}((?:\\?[\s\S])+?)\/{3}([imgy]{0,4})(?!\w)/,p=/((?:\\\\)+)|\\(\s|\/)|\s+(?:#.*)?/g,B=/\n/g,n=/\n+([^\n\S]*)/g,m=/\*\//,y=/^\s*(?:,|\??\.(?![.\d])|::)/,O=/\s+$/,k=["-=","+=","/=","*=","%=","||=","&&=","?=","<<=",">>=",">>>=","&=","^=","|=","**=","//=","%%="],P=["NEW","TYPEOF","DELETE","DO"],Q=["!","~"],z=["&&","||","&","|","^"],L=["<<",">>",">>>"],j=["==","!=","<",">","<=",">="],A=["*","/","%","//","%%"],I=["IN","OF","INSTANCEOF"],D=["NUMBER","REGEX","BOOL","NULL","UNDEFINED","++","--"],E=D.concat(")","}","THIS","IDENTIFIER","STRING","]"),d=["IDENTIFIER","STRING","REGEX",")","]","}","?","::","@","THIS","SUPER"],s=d.concat("NUMBER","BOOL","NULL","UNDEFINED"),x=["INDENT","OUTDENT","TERMINATOR"],r=[")","}","]"],d.push("DEFER")}).call(this)},{"./helpers":3,"./rewriter":9}],6:[function(a,b,c){(function(b){(function(){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,aa,ba,ca,da,ea,fa,ga,ha,ia,ja,ka,la,ma,na,oa,pa,qa,ra,sa,ta,ua,va,wa,xa,ya,za,Aa,Ba,Ca,Da,Ea={}.hasOwnProperty,Fa=function(a,b){function c(){this.constructor=a}for(var d in b)Ea.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},Ga=[].indexOf||function(a){for(var b=0,c=this.length;b1&&a.level>=H?this.wrapInBraces(c):c)},b.prototype.compileRoot=function(a){var b,c,d,e,f,g,h,i,j,k;for(a.indent=a.bare?"":ca,a.level=K,this.spaced=!0,a.scope=new $(null,this,null),k=a.locals||[],i=0,j=k.length;i1?b.__super__.icedCompileCps.call(this,a):this.compileNode(a)},b.prototype.icedCpsRotate=function(){var a,c,d,e,f,g,h,i,j,k;for(e=null,k=this.expressions,d=g=0,i=k.length;g=F?"(void 0)":"void 0")]},b}(g),c.Null=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return Fa(b,a),b.prototype.isAssignable=O,b.prototype.isComplex=O,b.prototype.compileNode=function(){return[this.makeCode("null")]},b}(g),c.Bool=function(a){function b(a){this.val=a}return Fa(b,a),b.prototype.isAssignable=O,b.prototype.isComplex=O,b.prototype.compileNode=function(){return[this.makeCode(this.val)]},b}(g),c.Return=X=function(a){function b(a,c){this.expression=a,b.__super__.constructor.call(this),this.icedHasAutocbFlag=c}return Fa(b,a),b.prototype.children=["expression"],b.prototype.isStatement=ha,b.prototype.makeReturn=da,b.prototype.jumps=da,b.prototype.compileToFragments=function(a,c){var d,e;return d=null!=(e=this.expression)?e.makeReturn():void 0,!d||d instanceof b?b.__super__.compileToFragments.call(this,a,c):d.compileToFragments(a,c)},b.prototype.compileNode=function(a){var b;return this.icedHasAutocbFlag?this.icedCompileIced(a):(b=[],b.push(this.makeCode(this.tab+"return"+(this.expression?" ":""))),this.expression&&(b=b.concat(this.expression.compileToFragments(a,J))),b.push(this.makeCode(";")),b)},b.prototype.icedCompileIced=function(a){var b,c,d,e,f;return e=new fa(new L(oa.const.autocb)),b=this.expression?[this.expression]:[],d=new i(e,b),f=new L("return"),c=new h([d,f]),c.compileNode(a)},b}(g),c.Value=fa=function(a){function b(a,c,d){return b.__super__.constructor.call(this),!c&&a instanceof b?a:(this.base=a,this.properties=c||[],d&&(this[d]=!0),this)}return Fa(b,a),b.prototype.children=["base","properties"],b.prototype.copy=function(){return new b(this.base,this.properties)},b.prototype.add=function(a){return this.properties=this.properties.concat(a),this},b.prototype.hasProperties=function(){return!!this.properties.length},b.prototype.bareLiteral=function(a){return!this.properties.length&&this.base instanceof a},b.prototype.isArray=function(){return this.bareLiteral(e)},b.prototype.isRange=function(){return this.bareLiteral(W)},b.prototype.isComplex=function(){return this.hasProperties()||this.base.isComplex()},b.prototype.isAssignable=function(){return this.hasProperties()||this.base.isAssignable()},b.prototype.isSimpleNumber=function(){return this.bareLiteral(L)&&Y.test(this.base.value)},b.prototype.isString=function(){return this.bareLiteral(L)&&x.test(this.base.value)},b.prototype.isRegex=function(){return this.bareLiteral(L)&&w.test(this.base.value)},b.prototype.isAtomic=function(){var a,b,c,d;for(d=this.properties.concat(this.base),b=0,c=d.length;b=0?"\n"+this.tab:"")+" */",(b||a.level)===K&&(c=a.indent+c),[this.makeCode("\n"),this.makeCode(c)]},b}(g),c.Call=i=function(a){function b(a,c,d){this.args=null!=c?c:[],this.soak=d,b.__super__.constructor.call(this),this.isNew=!1,this.isSuper="super"===a,this.variable=this.isSuper?null:a,a instanceof fa&&a.isNotCallable()&&a.error("literal is not a function")}return Fa(b,a),b.prototype.children=["variable","args"],b.prototype.newInstance=function(){var a,c;return a=(null!=(c=this.variable)?c.base:void 0)||this.variable,a instanceof b&&!a.isNew?a.newInstance():this.isNew=!0,this},b.prototype.superReference=function(a){var b,c;return c=a.scope.namedMethod(),(null!=c?c.klass:void 0)?(b=[new d(new L("__super__"))],c.static&&b.push(new d(new L("constructor"))),b.push(new d(new L(c.name))),new fa(new L(c.klass),b).compile(a)):(null!=c?c.ctor:void 0)?c.name+".__super__.constructor":this.error("cannot call super outside of an instance method.")},b.prototype.superThis=function(a){var b;return a.scope.icedgen?"_this":(b=a.scope.method)&&!b.klass&&b.context||"this"},b.prototype.unfoldSoak=function(a){var c,d,e,f,g,h,i,j,k;if(this.soak){if(this.variable){if(d=Aa(a,this,"variable"))return d;j=new fa(this.variable).cacheReference(a),e=j[0],g=j[1]}else e=new L(this.superReference(a)),g=new fa(e);return g=new b(g,this.args),g.isNew=this.isNew,e=new L("typeof "+e.compile(a)+' === "function"'),new B(e,new fa(g),{soak:!0})}for(c=this,f=[];;)if(c.variable instanceof b)f.push(c),c=c.variable;else{if(!(c.variable instanceof fa))break;if(f.push(c),!((c=c.variable.base)instanceof b))break}for(k=f.reverse(),h=0,i=k.length;h"+this.equals],i=n[0],e=n[1],c=this.stepNum?va(this.stepNum[0])>0?i+" "+this.toVar:e+" "+this.toVar:h?(o=[va(this.fromNum[0]),va(this.toNum[0])],d=o[0],l=o[1],d<=l?i+" "+l:e+" "+l):(b=this.stepVar?this.stepVar+" > 0":this.fromVar+" <= "+this.toVar)+" ? "+i+" "+this.toVar+" : "+e+" "+this.toVar,k=this.stepVar?f+" += "+this.stepVar:h?j?d<=l?"++"+f:"--"+f:d<=l?f+"++":f+"--":j?b+" ? ++"+f+" : --"+f:b+" ? "+f+"++ : "+f+"--",j&&(m=g+" = "+m),j&&(k=g+" = "+k),[this.makeCode(m+"; "+c+"; "+k)]):this.compileArray(a)},b.prototype.compileArray=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;return this.fromNum&&this.toNum&&Math.abs(this.fromNum-this.toNum)<=20?(j=function(){n=[];for(var a=m=+this.fromNum,b=+this.toNum;m<=b?a<=b:a>=b;m<=b?a++:a--)n.push(a);return n}.apply(this),this.exclusive&&j.pop(),[this.makeCode("["+j.join(", ")+"]")]):(g=this.tab+ca,f=a.scope.freeVariable("i"),k=a.scope.freeVariable("results"),i="\n"+g+k+" = [];",this.fromNum&&this.toNum?(a.index=f,c=na(this.compileNode(a))):(l=f+" = "+this.fromC+(this.toC!==this.toVar?", "+this.toC:""),d=this.fromVar+" <= "+this.toVar,c="var "+l+"; "+d+" ? "+f+" <"+this.equals+" "+this.toVar+" : "+f+" >"+this.equals+" "+this.toVar+"; "+d+" ? "+f+"++ : "+f+"--"),h="{ "+k+".push("+f+"); }\n"+g+"return "+k+";\n"+a.indent,e=function(a){return null!=a?a.contains(pa):void 0},(e(this.from)||e(this.to))&&(b=", arguments"),[this.makeCode("(function() {"+i+"\n"+g+"for ("+c+")"+h+"}).apply(this"+(null!=b?b:"")+")")])},b}(g),c.Slice=_=function(a){function b(a){this.range=a,b.__super__.constructor.call(this)}return Fa(b,a),b.prototype.children=["range"],b.prototype.compileNode=function(a){var b,c,d,e,f,g,h;return h=this.range,f=h.to,d=h.from,e=d&&d.compileToFragments(a,J)||[this.makeCode("0")],f&&(b=f.compileToFragments(a,J),c=na(b),(this.range.exclusive||+c!=-1)&&(g=", "+(this.range.exclusive?c:Y.test(c)?""+(+c+1):(b=f.compileToFragments(a,F),"+"+na(b)+" + 1 || 9e9")))),[this.makeCode(".slice("+na(e)+(g||"")+")")]},b}(g),c.Obj=R=function(a){function b(a,c){this.generated=null!=c&&c,this.objects=this.properties=a||[],b.__super__.constructor.call(this)}return Fa(b,a),b.prototype.children=["properties"],b.prototype.compileNode=function(a){var b,c,d,e,g,h,i,j,k,l,n,o,p;if(k=this.properties,!k.length)return[this.makeCode(this.front?"({})":"{}")];if(this.generated)for(l=0,o=k.length;l=0?(b.unshift(this.makeCode("[\n"+a.indent)),b.push(this.makeCode("\n"+this.tab+"]"))):(b.unshift(this.makeCode("[")),b.push(this.makeCode("]"))),b},b.prototype.assigns=function(a){var b,c,d,e;for(e=this.objects,c=0,d=e.length;c=0&&this.variable.error("class variable name may not be "+a),a&&(a=u.test(a)&&a)):null},b.prototype.setContext=function(a){return this.body.traverseChildren(!1,function(b){return!b.classBody&&(b instanceof L&&"this"===b.value?b.value=a:b instanceof k&&(b.klass=a,b.bound)?b.context=a:void 0)})},b.prototype.addBoundFunctions=function(a){var b,c,e,f,g;for(g=this.boundFuncs,e=0,f=g.length;e=0,f&&"object"!==this.context&&this.variable.error('variable name may not be "'+g+'"'),this.icedlocal=e&&e.icedlocal}return Fa(b,a),b.prototype.children=["variable","value"],b.prototype.isStatement=function(a){return(null!=a?a.level:void 0)===K&&null!=this.context&&Ga.call(this.context,"?")>=0},b.prototype.assigns=function(a){return this["object"===this.context?"value":"variable"].assigns(a)},b.prototype.unfoldSoak=function(a){return Aa(a,this,"variable")},b.prototype.compileNode=function(a){var b,c,d,e,f,g,h,i,j,l;if(this.value.icedStatementAssertion(),this.variable instanceof fa){if(this.variable.isArray()||this.variable.isObject())return this.compilePatternMatch(a);if(this.variable.isSplice())return this.compileSplice(a);if("||="===(h=this.context)||"&&="===h||"?="===h)return this.compileConditional(a);if("**="===(i=this.context)||"//="===i||"%%="===i)return this.compileSpecialMath(a)}return c=this.variable.compileToFragments(a,H),e=na(c),this.context||(g=this.variable.unwrapAll(),g.isAssignable()||this.variable.error('"'+this.variable.compile(a)+'" cannot be assigned'),("function"==typeof g.hasProperties?g.hasProperties():void 0)||(this.param||this.icedlocal?a.scope.add(e,"var",this.icedlocal):a.scope.find(e))),this.value instanceof k&&(d=M.exec(e))&&(d[2]&&(this.value.klass=d[1]),this.value.name=null!=(j=null!=(l=d[3])?l:d[4])?j:d[5]),f=this.value.compileToFragments(a,H),"object"===this.context?c.concat(this.makeCode(": "),f):(b=c.concat(this.makeCode(" "+(this.context||"=")+" "),f),a.level<=H?b:this.wrapInBraces(b))},b.prototype.compilePatternMatch=function(a){var c,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t,v,w,x,y,z,A,B,C,E,F,G,J;if(t=a.level===K,w=this.value,o=this.variable.base.objects,!(p=o.length))return f=w.compileToFragments(a),a.level>=I?this.wrapInBraces(f):f;if(k=this.variable.isObject(),t&&1===p&&!((n=o[0])instanceof ba))return n instanceof b?(B=n,C=B.variable,j=C.base,n=B.value):j=k?n.this?n.properties[0].name:n:new L(0),c=u.test(j.unwrap().value||0),w=new fa(w),w.properties.push(new(c?d:D)(j)),E=n.unwrap().value,Ga.call(V,E)>=0&&n.error("assignment to a reserved word: "+n.compile(a)),new b(n,w,null,{param:this.param}).compileToFragments(a,K);for(x=w.compileToFragments(a,H),y=na(x),e=[],g=!1,u.test(y)&&!this.variable.assigns(y)||(e.push([this.makeCode((r=a.scope.freeVariable("ref"))+" = ")].concat(Ha.call(x))),x=[this.makeCode(r)],y=r),i=z=0,A=o.length;z=0&&n.error("assignment to a reserved word: "+n.compile(a)),e.push(new b(n,v,null,{param:this.param,subpattern:!0}).compileToFragments(a,H))}return t||this.subpattern||e.push(x),h=this.joinFragmentArrays(e,", "),a.level=0?(a.isExistentialEquals=!0,new B(new p(d),e,{ +type:"if"}).addElse(new b(e,this.value,"=")).compileToFragments(a)):(c=new S(this.context.slice(0,-1),d,new b(e,this.value,"=")).compileToFragments(a),a.level<=H?c:this.wrapInBraces(c))},b.prototype.compileSpecialMath=function(a){var c,d,e;return e=this.variable.cacheReference(a),c=e[0],d=e[1],new b(c,new S(this.context.slice(0,-1),d,this.value)).compileToFragments(a)},b.prototype.compileSplice=function(a){var b,c,d,e,f,g,h,i,j,k,l,m;return k=this.variable.properties.pop().range,d=k.from,h=k.to,c=k.exclusive,g=this.variable.compile(a),d?(l=this.cacheToCodeFragments(d.cache(a,I)),e=l[0],f=l[1]):e=f="0",h?d instanceof fa&&d.isSimpleNumber()&&h instanceof fa&&h.isSimpleNumber()?(h=h.compile(a)-f,c||(h+=1)):(h=h.compile(a,F)+" - "+f,c||(h+=" + 1")):h="9e9",m=this.value.cache(a,H),i=m[0],j=m[1],b=[].concat(this.makeCode("[].splice.apply("+g+", ["+e+", "+h+"].concat("),i,this.makeCode(")), "),j),a.level>K?this.wrapInBraces(b):b},b}(g),c.Code=k=function(a){function b(a,c,d){b.__super__.constructor.call(this),this.params=a||[],this.body=c||new h,this.icedgen="icedgen"===d,this.icedPassedDeferral=null,this.bound="boundfunc"===d||this.icedgen,this.isGenerator=this.body.contains(function(a){var b;return a instanceof S&&("yield"===(b=a.operator)||"yield*"===b)})}return Fa(b,a),b.prototype.children=["params","body"],b.prototype.isStatement=function(){return!!this.ctor},b.prototype.jumps=O,b.prototype.makeScope=function(a){return new $(a,this.body,this)},b.prototype.compileNode=function(a){var c,d,g,j,k,l,m,n,o,p,r,s,t,u,v,w,x,y,z,A,C,D,E,G,H,I,J,K,M,N,O,P,Q;if(this.bound&&(null!=(K=a.scope.method)?K.bound:void 0)&&(this.context=a.scope.method.context),this.bound&&!this.context)return this.context="_this",v=new b([new T(new L(this.context))],new h([this])),d=new i(v,[new L("this")]),d.updateLocationDataIfMissing(this.locationData),d.compileNode(a);for(a.scope=ka(a,"classScope")||this.makeScope(a.scope),a.scope.shared=ka(a,"sharedScope")||this.icedgen,a.scope.icedgen=this.icedgen,a.indent+=ca,delete a.bare,delete a.isExistentialEquals,o=[],j=[],M=this.params,w=0,A=M.length;w=F?this.wrapInBraces(c):c},b.prototype.eachParamName=function(a){var b,c,d,e,f;for(e=this.params,f=[],c=0,d=e.length;c=0&&this.name.error('parameter name "'+a+'" is not allowed')}return Fa(b,a),b.prototype.children=["name","value"],b.prototype.compileToFragments=function(a){return this.name.compileToFragments(a,H)},b.prototype.asReference=function(a){var b;return this.reference?this.reference:(b=this.name,b.this?(b=b.properties[0].name,b.value.reserved&&(b=new L(a.scope.freeVariable(b.value)))):b.isComplex()&&(b=new L(a.scope.freeVariable("arg"))),b=new fa(b),this.splat&&(b=new ba(b)),b.updateLocationDataIfMissing(this.locationData),this.reference=b)},b.prototype.isComplex=function(){return this.name.isComplex()},b.prototype.eachName=function(a,b){var c,d,e,g,h,i;if(null==b&&(b=this.name),c=function(b){var c;if(c=b.properties[0].name,!c.value.reserved)return a(c.value,c)},b instanceof L)return a(b.value,b);if(b instanceof fa)return c(b);for(i=b.objects,g=0,h=i.length;g=c.length)return[];if(1===c.length)return l=c[0],i=l.compileToFragments(a,H),d?i:[].concat(l.makeCode(Ba("slice")+".call("),i,l.makeCode(")"));for(e=c.slice(k),j=m=0,n=e.length;m1?c.expressions.unshift(new B(new U(this.guard).invert(),new L("continue"))):this.guard&&(c=h.wrap([new B(this.guard,c)]))),c=[].concat(this.makeCode("\n"),c.compileToFragments(a,K),this.makeCode("\n"+this.tab))),b=[].concat(this.makeCode(e+this.tab+"while ("),this.condition.compileToFragments(a,J),this.makeCode(") {"),c,this.makeCode("}")),this.returns&&(this.icedHasAutocbFlag?(b.push(this.makeCode("\n"+this.tab+oa.const.autocb+"("+d+");")),b.push(this.makeCode("\n"+this.tab+"return;"))):b.push(this.makeCode("\n"+this.tab+"return "+d+";"))),b)},b.prototype.icedWrap=function(a){var b,c,g,j,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,C,D,E,F,G,H,I,J,K,M,N,O,P,Q,R;return q=a.condition,b=a.body,H=a.rvar,[],H&&(J=new fa(new L(H))),P=new fa(new L(oa.const.t_while)),z=new fa(new L(oa.const.k)),A=new T(new L(oa.const.k)),m=new fa(new L(oa.const.b_while)),H?(l=new i(z,[J]),g=new h([l]),j=new k([],g,"icedgen"),c=new f(m,j,null,{icedlocal:!0})):c=new f(m,z,null,{icedlocal:!0}),w=new fa(new L(oa.const.c_while)),t=new h([new i(P,[z])]),a.step&&t.unshift(a.step),v=new k([],t),R=new fa(new L(oa.const.ns)),R.add(new d(new fa(new L(oa.const.trampoline)))),s=new h([new i(R,[v])]),u=new k([],s,"icedgen"),r=new f(w,u,null,{icedlocal:!0}),G=new fa(new L(oa.const.n_while)),H?(C=new T(new L(oa.const.n_arg)),x=J.copy(),x.add(new d(new fa(new L("push")))),n=new i(x,[C]),o=new i(w,[]),E=new h([n,o]),F=new k([C],E,"icedgen"),D=new f(G,F,null,{icedlocal:!0})):D=new f(G,w),p=new B(q.invert(),new h([new i(m,[])])),a.guard?(s=new h([new i(w,[])]),y=new B(a.guard,b),y.addElse(s),p.addElse(new h([a.pre_body,y]))):p.addElse(new h([a.pre_body,b])),M=new h([c,r,D,p]),O=new k([A],M,"icedgen"),K=new f(P,O,null,{icedlocal:!0}),N=new i(P,[z]),Q=[],a.init&&(Q=Q.concat(a.init)),H&&(I=new f(J,new e),Q.push(I)),Q=Q.concat([K,N]),new h(Q)},b.prototype.icedCallContinuation=function(){return this.body.icedThreadReturn(new A(oa.const.n_while))},b.prototype.icedCompileIced=function(a){var b,c;return c={condition:this.condition,body:this.body,guard:this.guard},this.returns&&(c.rvar=a.scope.freeVariable("results")),b=this.icedWrap(c),b.compileNode(a)},b}(g),c.Op=S=function(a){function b(a,d,e,f){if(b.__super__.constructor.call(this),"in"===a)return new C(d,e);if("do"===a)return this.generateDo(d);if("new"===a){if(d instanceof i&&!d.do&&!d.isNew)return d.newInstance();(d instanceof k&&d.bound||d.do)&&(d=new U(d))}return this.operator=c[a]||a,this.first=d,this.second=e,this.flip=!!f,this}var c,e;return Fa(b,a),c={"==":"===","!=":"!==",of:"in",yieldfrom:"yield*"},e={"!==":"===","===":"!=="},b.prototype.children=["first","second"],b.prototype.isSimpleNumber=O,b.prototype.isYield=function(){var a;return"yield"===(a=this.operator)||"yield*"===a},b.prototype.isUnary=function(){return!this.second},b.prototype.isComplex=function(){var a;return!(this.isUnary()&&("+"===(a=this.operator)||"-"===a))||this.first.isComplex()},b.prototype.isChainable=function(){var a;return"<"===(a=this.operator)||">"===a||">="===a||"<="===a||"==="===a||"!=="===a},b.prototype.invert=function(){var a,c,d,f,g;if(this.isChainable()&&this.first.isChainable()){for(a=!0,c=this;c&&c.operator;)a&&(a=c.operator in e),c=c.first;if(!a)return new U(this).invert();for(c=this;c&&c.operator;)c.invert=!c.invert,c.operator=e[c.operator],c=c.first;return this}return(f=e[this.operator])?(this.operator=f,this.first.unwrap()instanceof b&&this.first.invert(),this):this.second?new U(this).invert():"!"===this.operator&&(d=this.first.unwrap())instanceof b&&("!"===(g=d.operator)||"in"===g||"instanceof"===g)?d:new b("!",this)},b.prototype.unfoldSoak=function(a){var b;return("++"===(b=this.operator)||"--"===b||"delete"===b)&&Aa(a,this,"first")},b.prototype.generateDo=function(a){var b,c,d,e,g,h,j,l;for(e=[],c=a instanceof f&&(g=a.value.unwrap())instanceof k?g:a,l=c.params||[],h=0,j=l.length;h=0)&&this.error('cannot increment/decrement "'+this.first.unwrapAll().value+'"'),this.isYield())return this.compileYield(a);if(this.isUnary())return this.compileUnary(a);if(c)return this.compileChain(a);switch(this.operator){case"?":return this.compileExistence(a);case"**":return this.compilePower(a);case"//":return this.compileFloorDivision(a);case"%%":return this.compileModulo(a);default:return d=this.first.compileToFragments(a,I),e=this.second.compileToFragments(a,I),b=[].concat(d,this.makeCode(" "+this.operator+" "),e),a.level<=I?b:this.wrapInBraces(b)}},b.prototype.compileChain=function(a){var b,c,d,e;return e=this.first.second.cache(a),this.first.second=e[0],d=e[1],c=this.first.compileToFragments(a,I),b=c.concat(this.makeCode(" "+(this.invert?"&&":"||")+" "),d.compileToFragments(a),this.makeCode(" "+this.operator+" "),this.second.compileToFragments(a,I)),this.wrapInBraces(b)},b.prototype.compileExistence=function(a){var b,c;return this.first.isComplex()?(c=new L(a.scope.freeVariable("ref")),b=new U(new f(c,this.first))):(b=this.first,c=b),new B(new p(b),c,{type:"if"}).addElse(this.second).compileToFragments(a)},b.prototype.compileUnary=function(a){var c,d,e;return d=[],c=this.operator,d.push([this.makeCode(c)]),"!"===c&&this.first instanceof p?(this.first.negated=!this.first.negated,this.first.compileToFragments(a)):a.level>=F?new U(this).compileToFragments(a):(e="+"===c||"-"===c,("new"===c||"typeof"===c||"delete"===c||e&&this.first instanceof b&&this.first.operator===c)&&d.push([this.makeCode(" ")]),(e&&this.first instanceof b||"new"===c&&this.first.isStatement(a))&&(this.first=new U(this.first)),d.push(this.first.compileToFragments(a,I)),this.flip&&d.reverse(),this.joinFragmentArrays(d,""))},b.prototype.compileYield=function(a){var b,c;return c=[],b=this.operator,null==a.scope.parent&&this.error("yield statements must occur within a function generator."),Ga.call(Object.keys(this.first),"expression")>=0?null!=this.first.expression&&c.push(this.first.expression.compileToFragments(a,I)):(c.push([this.makeCode("("+b+" ")]),c.push(this.first.compileToFragments(a,I)),c.push([this.makeCode(")")])),this.joinFragmentArrays(c,"")},b.prototype.compilePower=function(a){var b;return b=new fa(new L("Math"),[new d(new L("pow"))]),new i(b,[this.first,this.second]).compileToFragments(a)},b.prototype.compileFloorDivision=function(a){var c,e;return e=new fa(new L("Math"),[new d(new L("floor"))]),c=new b("/",this.first,this.second),new i(e,[c]).compileToFragments(a)},b.prototype.compileModulo=function(a){var b;return b=new fa(new L(Ba("modulo"))),new i(b,[this.first,this.second]).compileToFragments(a)},b.prototype.toString=function(a){return b.__super__.toString.call(this,a,this.constructor.name+" "+this.operator)},b.prototype.icedWrapContinuation=function(){return this.icedCallContinuationFlag},b}(g),c.In=C=function(a){function b(a,c){this.object=a,this.array=c,b.__super__.constructor.call(this)}return Fa(b,a),b.prototype.children=["object","array"],b.prototype.invert=N,b.prototype.compileNode=function(a){var b,c,d,e;if(this.array instanceof fa&&this.array.isArray()&&this.array.base.objects.length){for(e=this.array.base.objects,c=0,d=e.length;c= 0"))),na(d)===na(c)?b:(b=d.concat(this.makeCode(", "),b),a.level= 0",this.step?(I?l&&(d=e,g=i):(d=J+" > 0 ? "+d+" : "+e,g="("+J+" > 0 ? ("+g+") : "+i+")"),p=r+" += "+J):p=s!==r?"++"+r:r+"++",m=[this.makeCode(g+"; "+d+"; "+t+p)])),this.returns&&(A=""+this.tab+D+" = [];\n",C=this.icedHasAutocbFlag?"\n"+this.tab+oa.const.autocb+"("+D+"); return;":"\n"+this.tab+"return "+D+";",b.makeReturn(D)),this.guard&&(b.expressions.length>1?b.expressions.unshift(new B(new U(this.guard).invert(),new L("continue"))):this.guard&&(b=h.wrap([new B(this.guard,b)]))),this.pattern&&b.expressions.unshift(new f(this.name,new L(M+"["+s+"]"))),k=[].concat(this.makeCode(j),this.pluckDirectCall(a,b)),y&&(N="\n"+o+y+";"),this.object&&(m=[this.makeCode(s+" in "+M)],this.own&&(n="\n"+o+"if (!"+Ba("hasProp")+".call("+M+", "+s+")) continue;")),c=b.compileToFragments(ta(a,{indent:o}),K),c&&c.length>0&&(c=[].concat(this.makeCode("\n"),c,this.makeCode("\n"))),[].concat(k,this.makeCode(""+(A||"")+this.tab+"for ("),m,this.makeCode(") {"+n+N),c,this.makeCode(this.tab+"}"+(C||""))))},b.prototype.pluckDirectCall=function(a,b){var c,d,e,g,h,j,l,m,n,o,p,q,r,s,t,u;for(d=[],o=b.expressions,h=m=0,n=o.length;m"+r,this.name,this.source.base.to)),N=new S("&&",new S("===",P,new L(!1)),new S("<"+r,this.name,this.source.base.to)),p=new S("||",new U(O),new U(N)),p=p.invert(),u=[new f(this.name,this.source.base.from),new f(n,this.source.base.from),new f(q,this.source.base.to),new f(P,new S(">",q,n))]):!this.range&&this.name&&(F=new fa(new L(c.kvar)),G=X.freeVariable("len"),R=X.freeVariable("ref"),T=new fa(new L(R)),I=new fa(new L(G)),g=new f(T,this.source),H=T.copy().add(new d(new fa(new L("length")))),i=new f(I,H),j=new f(F,new fa(new L(0))),u=[g,i,j],p=new S("<",F,I),Z=new S("++",F),V=T.copy(),V.add(new D(F)),k=new f(this.name,V),Q.unshift(k)),W=c.rvar,s=c.guard,m=this.icedWrap({condition:p,body:o,init:u,step:Z,rvar:W,guard:s,pre_body:Q}),m.compileNode(a)},b}(ga),c.Switch=function(a){function b(a,c,d){this.subject=a,this.cases=c,this.otherwise=d,b.__super__.constructor.call(this)}return Fa(b,a),b.prototype.children=["subject","cases","otherwise"],b.prototype.isStatement=ha,b.prototype.jumps=function(a){var b,c,d,e,f,g,h;for(null==a&&(a={block:!0}),f=this.cases,d=0,e=f.length;d0&&(g=g.concat(c,this.makeCode("\n"))),h===this.cases.length-1&&!this.otherwise)break;f=this.lastNonComment(b.expressions),f instanceof X||f instanceof L&&f.jumps()&&"debugger"!==f.value||g.push(d.makeCode(j+"break;\n"))}return this.otherwise&&this.otherwise.expressions.length&&g.push.apply(g,[this.makeCode(i+"default:\n")].concat(Ha.call(this.otherwise.compileToFragments(a,K)),[this.makeCode("\n")])),g.push(this.makeCode(this.tab+"}")),g},b.prototype.icedCallContinuation=function(){var a,b,c,d,e;for(d=this.cases,b=0,c=d.length;b=G?this.wrapInBraces(e):e},b.prototype.unfoldSoak=function(){return this.soak&&this},b.prototype.icedCallContinuation=function(){return this.elseBody?(this.elseBody.icedThreadReturn(),this.isChain=!1):this.addElse(new A),this.body.icedThreadReturn()},b}(g),Aa=function(a,b,c){var d;if(d=b[c].unfoldSoak(a))return b[c]=d.body,d.body=new fa(b),d},n={wrap:function(a,b,c,d){var e,f,g,j,l,m;return m=new k([new T(new L(oa.const.k))],h.wrap([a]),"icedgen"),e=[],c&&(c.bindName(d),e.push(c)),f=h.wrap([b]),j=(l=f.icedGetSingle())&&l instanceof A&&l.canInline()?l.extractFunc():new k(e,f,"icedgen"),g=new i(m,[j]),new h([g])}},A=function(a){function b(a,c){this.func=a,null==c&&(c=null),b.__super__.constructor.call(this),this.func||(this.func=oa.const.k),this.value=c}return Fa(b,a),b.prototype.children=["value"],b.prototype.assignValue=function(a){return this.value=a},b.prototype.canInline=function(){return!this.value||this.value instanceof y},b.prototype.literalFunc=function(){return new L(this.func)},b.prototype.extractFunc=function(){return new fa(this.literalFunc())},b.prototype.compileNode=function(a){var b,c,d;return c=this.literalFunc(),d=a.level===K?this.value?new h([this.value,new i(c)]):new i(c):(b=this.value?[this.value]:[],new i(c,b)),d.compileNode(a)},b}(g),y=function(a){function b(){b.__super__.constructor.call(this,null,null,!1)}return Fa(b,a),b.counter=0,b.prototype.bindName=function(a){var c;return c=a.scope.freeVariable(oa.const.param,!1)+"_"+b.counter++,this.name=new L(c)},b.prototype.compile=function(a){return this.name||this.bindName(a),b.__super__.compile.call(this,a)},b}(T),E={generate:function(a){var b,c,e,g,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,C,D,E,F,G,H,I,J,K,M,N,O,Q,U,V,W,X,Y,Z,$,_,aa,ba,ca,da,ea,ga,ha,ia,ja,ka,la,ma,na,pa,qa,ra,sa,ta;return V=new L("continuation"),p=new L("count"),o=new fa(new L(oa.const.Deferrals)),aa=new fa(new L(oa.const.ns)),a&&(a.add(new d(aa)),aa=a),W=new fa(new L("this")),W.add(new d(V)),ga=new T(W),q=new fa(new L("this")),q.add(new d(p)),ha=new fa(new L("this")),ha.add(new d(new fa(new L(oa.const.retslot)))),b=new f(q,new fa(new L(1))),c=new f(ha,P()),v=[ga],s=new h([b,c]),t=new k(v,s),u=new fa(new L("constructor")),r=new f(u,t),K=new i(W,[ha]),I=new h([K]),w=new S("--",q),J=new S("!",w),$=new B(J,I),pa=new h([$]),ra=new k([],pa),ta=new fa(new L(oa.const.fulfill)),na=new f(ta,ra),M=new S("++",q),U=new L("inner_params"),D=new L("defer_params"),new fa(D),n=new fa(D),e=new L(oa.const.assign_fn),n.add(new d(e,"soak")),Z=new L("apply"),n.add(new d(Z,"soak")),_=P(),g=new i(n,[_,new fa(U)]),sa=new fa(new L("this")),sa.add(new d(new L(oa.const.fulfill))),qa=new i(sa,[]),N=new h([g,qa]),Q=[new T(U,null,!0)],O=new k(Q,N,"boundfunc"),y=new h([M,O]),C=[new T(D)],z=new k(C,y),A=new fa(new L(oa.const.defer_method)),x=new f(A,z),l=[r,na,x],da=new R(l,!0),m=new h([new fa(da)]),X=new j(null,null,m),Y=new f(o,X,"object"),ea=new h([P()]),G=new k([],ea),H=new fa(new L(oa.const.findDeferral)),F=new f(H,G,"object"),E=new L("_fn"),ja=new h([new i(new fa(E),[])]),ma=[new T(E)],ka=new k(ma,ja),la=new fa(new L(oa.const.trampoline)),ia=new f(la,ka,"object"),ba=new R([Y,F,ia],!0),ca=new fa(ba),new f(aa,ca)}},ea={extends:function(){return"function(child, parent) { for (var key in parent) { if ("+Ba("hasProp")+".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }"},bind:function(){return"function(fn, me){ return function(){ return fn.apply(me, arguments); }; }"},indexOf:function(){return"[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }"},modulo:function(){return"function(a, b) { return (+a % (b = +b) + b) % b; }"},hasProp:function(){return"{}.hasOwnProperty"},slice:function(){return"[].slice"}},K=1,J=2,H=3,G=4,I=5,F=6,ca=" ",v="[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*",u=RegExp("^"+v+"$"),Y=/^[+-]?\d+$/,t=/^[+-]?0x[\da-f]+/i,Q=/^[+-]?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)$/i,M=RegExp("^("+v+")(\\.prototype)?(?:\\.("+v+")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\])$"),x=/^['"]/,w=/^\//,Ba=function(a){var b;return b="__"+a,$.root.assign(b,ea[a]()),b},ua=function(a,b){return a=a.replace(/\n/g,"$&"+b),a.replace(/\s+$/,"")},va=function(a){return null==a?0:a.match(t)?parseInt(a,16):parseFloat(a)},pa=function(a){return a instanceof L&&"arguments"===a.value&&!a.asKey},qa=function(a){return a instanceof L&&"this"===a.value&&!a.asKey||a instanceof k&&a.bound||a instanceof i&&a.isSuper},Aa=function(a,b,c){var d;if(d=b[c].unfoldSoak(a))return b[c]=d.body,d.body=new fa(b),d}}).call(this)}).call(this,"/")},{"./helpers":3,"./lexer":5,"./scope":10,"iced-runtime":19,path:13}],7:[function(a,b,c){(function(d){var e=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Line:5,TERMINATOR:6,Expression:7,Statement:8,Return:9,Comment:10,STATEMENT:11,Await:12,AWAIT:13,Block:14,Value:15,Invocation:16,Code:17,Operation:18,Assign:19,If:20,Try:21,While:22,For:23,Switch:24,Class:25,Throw:26,Defer:27,INDENT:28,OUTDENT:29,Identifier:30,IDENTIFIER:31,AlphaNumeric:32,NUMBER:33,STRING:34,Literal:35,JS:36,REGEX:37,DEBUGGER:38,UNDEFINED:39,NULL:40,BOOL:41,Assignable:42,"=":43,AssignObj:44,ObjAssignable:45,":":46,ThisProperty:47,RETURN:48,HERECOMMENT:49,PARAM_START:50,ParamList:51,PARAM_END:52,FuncGlyph:53,"->":54,"=>":55,OptComma:56,",":57,Param:58,ParamVar:59,"...":60,Array:61,Object:62,Splat:63,SimpleAssignable:64,Accessor:65,Parenthetical:66,Range:67,This:68,".":69,"?.":70,"::":71,"?::":72,Index:73,INDEX_START:74,IndexValue:75,INDEX_END:76,INDEX_SOAK:77,Slice:78,"{":79,AssignList:80,"}":81,CLASS:82,EXTENDS:83,OptFuncExist:84,Arguments:85,SUPER:86,DEFER:87,FUNC_EXIST:88,CALL_START:89,CALL_END:90,ArgList:91,THIS:92,"@":93,"[":94,"]":95,RangeDots:96,"..":97,Arg:98,SimpleArgs:99,TRY:100,Catch:101,FINALLY:102,CATCH:103,THROW:104,"(":105,")":106,WhileSource:107,WHILE:108,WHEN:109,UNTIL:110,Loop:111,LOOP:112,ForBody:113,FOR:114,ForStart:115,ForSource:116,ForVariables:117,OWN:118,ForValue:119,FORIN:120,FOROF:121,BY:122,SWITCH:123,Whens:124,ELSE:125,When:126,LEADING_WHEN:127,IfBlock:128,IF:129,POST_IF:130,UNARY:131,UNARY_MATH:132,"-":133,"+":134,"--":135,"++":136,"?":137,MATH:138,"**":139,SHIFT:140,COMPARE:141,LOGIC:142,RELATION:143,COMPOUND_ASSIGN:144,$accept:0,$end:1},terminals_:{2:"error",6:"TERMINATOR",11:"STATEMENT",13:"AWAIT",28:"INDENT",29:"OUTDENT",31:"IDENTIFIER",33:"NUMBER",34:"STRING",36:"JS",37:"REGEX",38:"DEBUGGER",39:"UNDEFINED",40:"NULL",41:"BOOL",43:"=",46:":",48:"RETURN",49:"HERECOMMENT",50:"PARAM_START",52:"PARAM_END",54:"->",55:"=>",57:",",60:"...",69:".",70:"?.",71:"::",72:"?::",74:"INDEX_START",76:"INDEX_END",77:"INDEX_SOAK",79:"{",81:"}",82:"CLASS",83:"EXTENDS",86:"SUPER",87:"DEFER",88:"FUNC_EXIST",89:"CALL_START",90:"CALL_END",92:"THIS",93:"@",94:"[",95:"]",97:"..",100:"TRY",102:"FINALLY",103:"CATCH",104:"THROW",105:"(",106:")",108:"WHILE",109:"WHEN",110:"UNTIL",112:"LOOP",114:"FOR",118:"OWN",120:"FORIN",121:"FOROF",122:"BY",123:"SWITCH",125:"ELSE",127:"LEADING_WHEN",129:"IF",130:"POST_IF",131:"UNARY",132:"UNARY_MATH",133:"-",134:"+",135:"--",136:"++",137:"?",138:"MATH",139:"**",140:"SHIFT",141:"COMPARE",142:"LOGIC",143:"RELATION",144:"COMPOUND_ASSIGN"},productions_:[0,[3,0],[3,1],[4,1],[4,3],[4,2],[5,1],[5,1],[8,1],[8,1],[8,1],[8,1],[12,2],[12,2],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[14,2],[14,3],[30,1],[32,1],[32,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[19,3],[19,4],[19,5],[44,1],[44,3],[44,5],[44,1],[45,1],[45,1],[45,1],[9,2],[9,1],[10,1],[17,5],[17,2],[53,1],[53,1],[56,0],[56,1],[51,0],[51,1],[51,3],[51,4],[51,6],[58,1],[58,2],[58,3],[58,1],[59,1],[59,1],[59,1],[59,1],[63,2],[64,1],[64,2],[64,2],[64,1],[42,1],[42,1],[42,1],[15,1],[15,1],[15,1],[15,1],[15,1],[65,2],[65,2],[65,2],[65,2],[65,2],[65,1],[65,1],[73,3],[73,2],[75,1],[75,1],[62,4],[80,0],[80,1],[80,3],[80,4],[80,6],[25,1],[25,2],[25,3],[25,4],[25,2],[25,3],[25,4],[25,5],[16,3],[16,3],[16,1],[16,2],[27,2],[84,0],[84,1],[85,2],[85,4],[68,1],[68,1],[47,2],[61,2],[61,4],[96,1],[96,1],[67,5],[78,3],[78,2],[78,2],[78,1],[91,1],[91,3],[91,4],[91,4],[91,6],[98,1],[98,1],[98,1],[99,1],[99,3],[21,2],[21,3],[21,4],[21,5],[101,3],[101,3],[101,2],[26,2],[66,3],[66,5],[107,2],[107,4],[107,2],[107,4],[22,2],[22,2],[22,2],[22,1],[111,2],[111,2],[23,2],[23,2],[23,2],[113,2],[113,2],[115,2],[115,3],[119,1],[119,1],[119,1],[119,1],[117,1],[117,3],[116,2],[116,2],[116,4],[116,4],[116,4],[116,6],[116,6],[24,5],[24,7],[24,4],[24,6],[124,1],[124,2],[126,3],[126,4],[128,3],[128,5],[20,1],[20,3],[20,3],[20,3],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,5],[18,4],[18,3]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return this.$=d.addLocationDataFn(g[h],g[h])(new d.Block);case 2:return this.$=f[h];case 3:this.$=d.addLocationDataFn(g[h],g[h])(d.Block.wrap([f[h]]));break;case 4:this.$=d.addLocationDataFn(g[h-2],g[h])(f[h-2].push(f[h]));break;case 5:this.$=f[h-1];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$=f[h];break;case 10:this.$=d.addLocationDataFn(g[h],g[h])(new d.Literal(f[h]));break;case 11:this.$=f[h];break;case 12:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Await(f[h]));break;case 13:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Await(d.Block.wrap([f[h]])));break;case 14:this.$=f[h];break;case 15:this.$=f[h];break;case 16:this.$=f[h];break;case 17:this.$=f[h];break;case 18:this.$=f[h];break;case 19:this.$=f[h];break;case 20:this.$=f[h];break;case 21:this.$=f[h];break;case 22:this.$=f[h];break;case 23:this.$=f[h];break;case 24:this.$=f[h];break;case 25:this.$=f[h];break;case 26:this.$=f[h];break;case 27:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Block);break;case 28:this.$=d.addLocationDataFn(g[h-2],g[h])(f[h-1]);break;case 29:this.$=d.addLocationDataFn(g[h],g[h])(new d.Literal(f[h]));break;case 30:this.$=d.addLocationDataFn(g[h],g[h])(new d.Literal(f[h]));break;case 31:this.$=d.addLocationDataFn(g[h],g[h])(new d.Literal(f[h]));break;case 32:this.$=f[h];break;case 33:this.$=d.addLocationDataFn(g[h],g[h])(new d.Literal(f[h]));break;case 34:this.$=d.addLocationDataFn(g[h],g[h])(new d.Literal(f[h]));break;case 35:this.$=d.addLocationDataFn(g[h],g[h])(new d.Literal(f[h]));break;case 36:this.$=d.addLocationDataFn(g[h],g[h])(new d.Undefined);break;case 37:this.$=d.addLocationDataFn(g[h],g[h])(new d.Null);break;case 38:this.$=d.addLocationDataFn(g[h],g[h])(new d.Bool(f[h]));break;case 39:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Assign(f[h-2],f[h]));break;case 40:this.$=d.addLocationDataFn(g[h-3],g[h])(new d.Assign(f[h-3],f[h]));break;case 41:this.$=d.addLocationDataFn(g[h-4],g[h])(new d.Assign(f[h-4],f[h-1]));break;case 42:this.$=d.addLocationDataFn(g[h],g[h])(new d.Value(f[h]));break;case 43:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Assign(d.addLocationDataFn(g[h-2])(new d.Value(f[h-2])),f[h],"object"));break;case 44:this.$=d.addLocationDataFn(g[h-4],g[h])(new d.Assign(d.addLocationDataFn(g[h-4])(new d.Value(f[h-4])),f[h-1],"object"));break;case 45:this.$=f[h];break;case 46:this.$=f[h];break;case 47:this.$=f[h];break;case 48:this.$=f[h];break;case 49:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Return(f[h]));break;case 50:this.$=d.addLocationDataFn(g[h],g[h])(new d.Return);break;case 51:this.$=d.addLocationDataFn(g[h],g[h])(new d.Comment(f[h]));break;case 52:this.$=d.addLocationDataFn(g[h-4],g[h])(new d.Code(f[h-3],f[h],f[h-1]));break;case 53:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Code([],f[h],f[h-1]));break;case 54:this.$=d.addLocationDataFn(g[h],g[h])("func");break;case 55:this.$=d.addLocationDataFn(g[h],g[h])("boundfunc");break;case 56:this.$=f[h];break;case 57:this.$=f[h];break;case 58:this.$=d.addLocationDataFn(g[h],g[h])([]);break;case 59:this.$=d.addLocationDataFn(g[h],g[h])([f[h]]);break;case 60:this.$=d.addLocationDataFn(g[h-2],g[h])(f[h-2].concat(f[h]));break;case 61:this.$=d.addLocationDataFn(g[h-3],g[h])(f[h-3].concat(f[h]));break;case 62:this.$=d.addLocationDataFn(g[h-5],g[h])(f[h-5].concat(f[h-2]));break;case 63:this.$=d.addLocationDataFn(g[h],g[h])(new d.Param(f[h]));break;case 64:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Param(f[h-1],null,!0));break;case 65:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Param(f[h-2],f[h]));break;case 66:this.$=d.addLocationDataFn(g[h],g[h])(new d.Expansion);break;case 67:this.$=f[h];break;case 68:this.$=f[h];break;case 69:this.$=f[h];break;case 70:this.$=f[h];break;case 71:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Splat(f[h-1]));break;case 72:this.$=d.addLocationDataFn(g[h],g[h])(new d.Value(f[h]));break;case 73:this.$=d.addLocationDataFn(g[h-1],g[h])(f[h-1].add(f[h]));break;case 74:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Value(f[h-1],[].concat(f[h])));break;case 75:this.$=f[h];break;case 76:this.$=f[h];break;case 77:this.$=d.addLocationDataFn(g[h],g[h])(new d.Value(f[h]));break;case 78:this.$=d.addLocationDataFn(g[h],g[h])(new d.Value(f[h]));break;case 79:this.$=f[h];break;case 80:this.$=d.addLocationDataFn(g[h],g[h])(new d.Value(f[h]));break;case 81:this.$=d.addLocationDataFn(g[h],g[h])(new d.Value(f[h]));break;case 82:this.$=d.addLocationDataFn(g[h],g[h])(new d.Value(f[h]));break;case 83:this.$=f[h];break;case 84:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Access(f[h]));break;case 85:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Access(f[h].setCustom()));break;case 86:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Access(f[h],"soak"));break;case 87:this.$=d.addLocationDataFn(g[h-1],g[h])([d.addLocationDataFn(g[h-1])(new d.Access(new d.Literal("prototype"))),d.addLocationDataFn(g[h])(new d.Access(f[h]))]);break;case 88:this.$=d.addLocationDataFn(g[h-1],g[h])([d.addLocationDataFn(g[h-1])(new d.Access(new d.Literal("prototype"),"soak")),d.addLocationDataFn(g[h])(new d.Access(f[h]))]);break;case 89:this.$=d.addLocationDataFn(g[h],g[h])(new d.Access(new d.Literal("prototype")));break;case 90:this.$=f[h];break;case 91:this.$=d.addLocationDataFn(g[h-2],g[h])(f[h-1]);break;case 92:this.$=d.addLocationDataFn(g[h-1],g[h])(d.extend(f[h],{soak:!0}));break;case 93:this.$=d.addLocationDataFn(g[h],g[h])(new d.Index(f[h]));break;case 94:this.$=d.addLocationDataFn(g[h],g[h])(new d.Slice(f[h]));break;case 95:this.$=d.addLocationDataFn(g[h-3],g[h])(new d.Obj(f[h-2],f[h-3].generated));break;case 96:this.$=d.addLocationDataFn(g[h],g[h])([]);break;case 97:this.$=d.addLocationDataFn(g[h],g[h])([f[h]]);break;case 98:this.$=d.addLocationDataFn(g[h-2],g[h])(f[h-2].concat(f[h]));break;case 99:this.$=d.addLocationDataFn(g[h-3],g[h])(f[h-3].concat(f[h]));break;case 100:this.$=d.addLocationDataFn(g[h-5],g[h])(f[h-5].concat(f[h-2]));break;case 101:this.$=d.addLocationDataFn(g[h],g[h])(new d.Class);break;case 102:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Class(null,null,f[h]));break;case 103:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Class(null,f[h]));break;case 104:this.$=d.addLocationDataFn(g[h-3],g[h])(new d.Class(null,f[h-1],f[h]));break;case 105:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Class(f[h]));break;case 106:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Class(f[h-1],null,f[h]));break;case 107:this.$=d.addLocationDataFn(g[h-3],g[h])(new d.Class(f[h-2],f[h]));break;case 108:this.$=d.addLocationDataFn(g[h-4],g[h])(new d.Class(f[h-3],f[h-1],f[h]));break;case 109:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Call(f[h-2],f[h],f[h-1]));break;case 110:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Call(f[h-2],f[h],f[h-1]));break;case 111:this.$=d.addLocationDataFn(g[h],g[h])(new d.Call("super",[new d.Splat(new d.Literal("arguments"))]));break;case 112:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Call("super",f[h]));break;case 113:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Defer(f[h],c));break;case 114:this.$=d.addLocationDataFn(g[h],g[h])(!1);break;case 115:this.$=d.addLocationDataFn(g[h],g[h])(!0);break;case 116:this.$=d.addLocationDataFn(g[h-1],g[h])([]);break;case 117:this.$=d.addLocationDataFn(g[h-3],g[h])(f[h-2]);break;case 118:this.$=d.addLocationDataFn(g[h],g[h])(new d.Value(new d.Literal("this")));break;case 119:this.$=d.addLocationDataFn(g[h],g[h])(new d.Value(new d.Literal("this")));break;case 120:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Value(d.addLocationDataFn(g[h-1])(new d.Literal("this")),[d.addLocationDataFn(g[h])(new d.Access(f[h]))],"this"));break;case 121:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Arr([]));break;case 122:this.$=d.addLocationDataFn(g[h-3],g[h])(new d.Arr(f[h-2]));break;case 123:this.$=d.addLocationDataFn(g[h],g[h])("inclusive");break;case 124:this.$=d.addLocationDataFn(g[h],g[h])("exclusive");break;case 125:this.$=d.addLocationDataFn(g[h-4],g[h])(new d.Range(f[h-3],f[h-1],f[h-2]));break;case 126:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Range(f[h-2],f[h],f[h-1]));break;case 127:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Range(f[h-1],null,f[h]));break;case 128:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Range(null,f[h],f[h-1]));break;case 129:this.$=d.addLocationDataFn(g[h],g[h])(new d.Range(null,null,f[h]));break;case 130:this.$=d.addLocationDataFn(g[h],g[h])([f[h]]);break;case 131:this.$=d.addLocationDataFn(g[h-2],g[h])(f[h-2].concat(f[h]));break;case 132:this.$=d.addLocationDataFn(g[h-3],g[h])(f[h-3].concat(f[h]));break;case 133:this.$=d.addLocationDataFn(g[h-3],g[h])(f[h-2]);break;case 134:this.$=d.addLocationDataFn(g[h-5],g[h])(f[h-5].concat(f[h-2]));break;case 135:this.$=f[h];break;case 136:this.$=f[h];break;case 137:this.$=d.addLocationDataFn(g[h],g[h])(new d.Expansion);break;case 138:this.$=f[h];break;case 139:this.$=d.addLocationDataFn(g[h-2],g[h])([].concat(f[h-2],f[h]));break;case 140:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Try(f[h]));break;case 141:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Try(f[h-1],f[h][0],f[h][1]));break;case 142:this.$=d.addLocationDataFn(g[h-3],g[h])(new d.Try(f[h-2],null,null,f[h]));break;case 143:this.$=d.addLocationDataFn(g[h-4],g[h])(new d.Try(f[h-3],f[h-2][0],f[h-2][1],f[h]));break;case 144:this.$=d.addLocationDataFn(g[h-2],g[h])([f[h-1],f[h]]);break;case 145:this.$=d.addLocationDataFn(g[h-2],g[h])([d.addLocationDataFn(g[h-1])(new d.Value(f[h-1])),f[h]]);break;case 146:this.$=d.addLocationDataFn(g[h-1],g[h])([null,f[h]]);break;case 147:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Throw(f[h]));break;case 148:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Parens(f[h-1]));break;case 149:this.$=d.addLocationDataFn(g[h-4],g[h])(new d.Parens(f[h-2]));break;case 150:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.While(f[h]));break;case 151:this.$=d.addLocationDataFn(g[h-3],g[h])(new d.While(f[h-2],{guard:f[h]}));break;case 152:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.While(f[h],{invert:!0}));break;case 153:this.$=d.addLocationDataFn(g[h-3],g[h])(new d.While(f[h-2],{invert:!0,guard:f[h]}));break;case 154:this.$=d.addLocationDataFn(g[h-1],g[h])(f[h-1].addBody(f[h]));break;case 155:this.$=d.addLocationDataFn(g[h-1],g[h])(f[h].addBody(d.addLocationDataFn(g[h-1])(d.Block.wrap([f[h-1]]))));break;case 156:this.$=d.addLocationDataFn(g[h-1],g[h])(f[h].addBody(d.addLocationDataFn(g[h-1])(d.Block.wrap([f[h-1]]))));break;case 157:this.$=d.addLocationDataFn(g[h],g[h])(f[h]);break;case 158:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.While(d.addLocationDataFn(g[h-1])(new d.Literal("true"))).addBody(f[h]));break;case 159:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.While(d.addLocationDataFn(g[h-1])(new d.Literal("true"))).addBody(d.addLocationDataFn(g[h])(d.Block.wrap([f[h]]))));break;case 160:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.For(f[h-1],f[h]));break;case 161:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.For(f[h-1],f[h]));break;case 162:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.For(f[h],f[h-1]));break;case 163:this.$=d.addLocationDataFn(g[h-1],g[h])({source:d.addLocationDataFn(g[h])(new d.Value(f[h]))});break;case 164:this.$=d.addLocationDataFn(g[h-1],g[h])(function(){return f[h].own=f[h-1].own,f[h].name=f[h-1][0],f[h].index=f[h-1][1],f[h]}());break;case 165:this.$=d.addLocationDataFn(g[h-1],g[h])(f[h]);break;case 166:this.$=d.addLocationDataFn(g[h-2],g[h])(function(){return f[h].own=!0,f[h]}());break;case 167:this.$=f[h];break;case 168:this.$=f[h];break;case 169:this.$=d.addLocationDataFn(g[h],g[h])(new d.Value(f[h]));break;case 170:this.$=d.addLocationDataFn(g[h],g[h])(new d.Value(f[h]));break;case 171:this.$=d.addLocationDataFn(g[h],g[h])([f[h]]);break;case 172:this.$=d.addLocationDataFn(g[h-2],g[h])([f[h-2],f[h]]);break;case 173:this.$=d.addLocationDataFn(g[h-1],g[h])({source:f[h]});break;case 174:this.$=d.addLocationDataFn(g[h-1],g[h])({source:f[h],object:!0});break;case 175:this.$=d.addLocationDataFn(g[h-3],g[h])({source:f[h-2],guard:f[h]});break;case 176:this.$=d.addLocationDataFn(g[h-3],g[h])({source:f[h-2],guard:f[h],object:!0});break;case 177:this.$=d.addLocationDataFn(g[h-3],g[h])({source:f[h-2],step:f[h]});break;case 178:this.$=d.addLocationDataFn(g[h-5],g[h])({source:f[h-4],guard:f[h-2],step:f[h]});break;case 179:this.$=d.addLocationDataFn(g[h-5],g[h])({source:f[h-4],step:f[h-2],guard:f[h]});break;case 180:this.$=d.addLocationDataFn(g[h-4],g[h])(new d.Switch(f[h-3],f[h-1]));break;case 181:this.$=d.addLocationDataFn(g[h-6],g[h])(new d.Switch(f[h-5],f[h-3],f[h-1]));break;case 182:this.$=d.addLocationDataFn(g[h-3],g[h])(new d.Switch(null,f[h-1]));break;case 183:this.$=d.addLocationDataFn(g[h-5],g[h])(new d.Switch(null,f[h-3],f[h-1]));break;case 184:this.$=f[h];break;case 185:this.$=d.addLocationDataFn(g[h-1],g[h])(f[h-1].concat(f[h]));break;case 186:this.$=d.addLocationDataFn(g[h-2],g[h])([[f[h-1],f[h]]]);break;case 187:this.$=d.addLocationDataFn(g[h-3],g[h])([[f[h-2],f[h-1]]]);break;case 188:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.If(f[h-1],f[h],{type:f[h-2]}));break;case 189:this.$=d.addLocationDataFn(g[h-4],g[h])(f[h-4].addElse(d.addLocationDataFn(g[h-2],g[h])(new d.If(f[h-1],f[h],{type:f[h-2]}))));break;case 190:this.$=f[h];break;case 191:this.$=d.addLocationDataFn(g[h-2],g[h])(f[h-2].addElse(f[h]));break;case 192:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.If(f[h],d.addLocationDataFn(g[h-2])(d.Block.wrap([f[h-2]])),{type:f[h-1],statement:!0}));break;case 193:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.If(f[h],d.addLocationDataFn(g[h-2])(d.Block.wrap([f[h-2]])),{type:f[h-1],statement:!0}));break;case 194:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Op(f[h-1],f[h]));break;case 195:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Op(f[h-1],f[h]));break;case 196:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Op("-",f[h]));break;case 197:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Op("+",f[h]));break;case 198:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Op("--",f[h]));break;case 199:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Op("++",f[h]));break;case 200:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Op("--",f[h-1],null,!0));break;case 201:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Op("++",f[h-1],null,!0));break;case 202:this.$=d.addLocationDataFn(g[h-1],g[h])(new d.Existence(f[h-1]));break;case 203:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Op("+",f[h-2],f[h]));break;case 204:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Op("-",f[h-2],f[h]));break;case 205:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Op(f[h-1],f[h-2],f[h]));break;case 206:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Op(f[h-1],f[h-2],f[h]));break;case 207:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Op(f[h-1],f[h-2],f[h]));break;case 208:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Op(f[h-1],f[h-2],f[h]));break;case 209:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Op(f[h-1],f[h-2],f[h]));break;case 210:this.$=d.addLocationDataFn(g[h-2],g[h])(function(){return"!"===f[h-1].charAt(0)?new d.Op(f[h-1].slice(1),f[h-2],f[h]).invert():new d.Op(f[h-1],f[h-2],f[h])}());break;case 211:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Assign(f[h-2],f[h],f[h-1]));break;case 212:this.$=d.addLocationDataFn(g[h-4],g[h])(new d.Assign(f[h-4],f[h-1],f[h-3]));break;case 213:this.$=d.addLocationDataFn(g[h-3],g[h])(new d.Assign(f[h-3],f[h],f[h-2]));break;case 214:this.$=d.addLocationDataFn(g[h-2],g[h])(new d.Extends(f[h-2],f[h]))}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:5,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[3]},{1:[2,2],6:[1,77]},{1:[2,3],6:[2,3],29:[2,3],106:[2,3]},{1:[2,6],6:[2,6],29:[2,6],106:[2,6],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,7],6:[2,7],29:[2,7],106:[2,7],107:91,108:[1,68],110:[1,69],113:92,114:[1,71],115:72,130:[1,90]},{1:[2,14],6:[2,14],28:[2,14],29:[2,14],52:[2,14],57:[2,14],60:[2,14],65:94,69:[1,96],70:[1,97],71:[1,98],72:[1,99],73:100,74:[1,101],76:[2,14],77:[1,102],81:[2,14],84:93,88:[1,95],89:[2,114],90:[2,14],95:[2,14],97:[2,14],106:[2,14],108:[2,14],109:[2,14],110:[2,14],114:[2,14],122:[2,14],130:[2,14],133:[2,14],134:[2,14],137:[2,14],138:[2,14],139:[2,14],140:[2,14],141:[2,14],142:[2,14],143:[2,14]},{1:[2,15],6:[2,15],28:[2,15],29:[2,15],52:[2,15],57:[2,15],60:[2,15],65:104,69:[1,96],70:[1,97],71:[1,98],72:[1,99],73:100,74:[1,101],76:[2,15],77:[1,102],81:[2,15],84:103,88:[1,95],89:[2,114],90:[2,15],95:[2,15],97:[2,15],106:[2,15],108:[2,15],109:[2,15],110:[2,15],114:[2,15],122:[2,15],130:[2,15],133:[2,15],134:[2,15],137:[2,15],138:[2,15],139:[2,15],140:[2,15],141:[2,15],142:[2,15],143:[2,15]},{1:[2,16],6:[2,16],28:[2,16],29:[2,16],52:[2,16],57:[2,16],60:[2,16],76:[2,16],81:[2,16],90:[2,16],95:[2,16],97:[2,16],106:[2,16],108:[2,16],109:[2,16],110:[2,16],114:[2,16],122:[2,16],130:[2,16],133:[2,16],134:[2,16],137:[2,16],138:[2,16],139:[2,16],140:[2,16],141:[2,16],142:[2,16],143:[2,16]},{1:[2,17],6:[2,17],28:[2,17],29:[2,17],52:[2,17],57:[2,17],60:[2,17],76:[2,17],81:[2,17],90:[2,17],95:[2,17],97:[2,17],106:[2,17],108:[2,17],109:[2,17],110:[2,17],114:[2,17],122:[2,17],130:[2,17],133:[2,17],134:[2,17],137:[2,17],138:[2,17],139:[2,17],140:[2,17],141:[2,17],142:[2,17],143:[2,17]},{1:[2,18],6:[2,18],28:[2,18],29:[2,18],52:[2,18],57:[2,18],60:[2,18],76:[2,18],81:[2,18],90:[2,18],95:[2,18],97:[2,18],106:[2,18],108:[2,18],109:[2,18],110:[2,18],114:[2,18],122:[2,18],130:[2,18],133:[2,18],134:[2,18],137:[2,18],138:[2,18],139:[2,18],140:[2,18],141:[2,18],142:[2,18],143:[2,18]},{1:[2,19],6:[2,19],28:[2,19],29:[2,19],52:[2,19],57:[2,19],60:[2,19],76:[2,19],81:[2,19],90:[2,19],95:[2,19],97:[2,19],106:[2,19],108:[2,19],109:[2,19],110:[2,19],114:[2,19],122:[2,19],130:[2,19],133:[2,19],134:[2,19],137:[2,19],138:[2,19],139:[2,19],140:[2,19],141:[2,19],142:[2,19],143:[2,19]},{1:[2,20],6:[2,20],28:[2,20],29:[2,20],52:[2,20],57:[2,20],60:[2,20],76:[2,20],81:[2,20],90:[2,20],95:[2,20],97:[2,20],106:[2,20],108:[2,20],109:[2,20],110:[2,20],114:[2,20],122:[2,20],130:[2,20],133:[2,20],134:[2,20],137:[2,20],138:[2,20],139:[2,20],140:[2,20],141:[2,20],142:[2,20],143:[2,20]},{1:[2,21],6:[2,21],28:[2,21],29:[2,21],52:[2,21],57:[2,21],60:[2,21],76:[2,21],81:[2,21],90:[2,21],95:[2,21],97:[2,21],106:[2,21],108:[2,21],109:[2,21],110:[2,21],114:[2,21],122:[2,21],130:[2,21],133:[2,21],134:[2,21],137:[2,21],138:[2,21],139:[2,21],140:[2,21],141:[2,21],142:[2,21],143:[2,21]},{1:[2,22],6:[2,22],28:[2,22],29:[2,22],52:[2,22],57:[2,22],60:[2,22],76:[2,22],81:[2,22],90:[2,22],95:[2,22],97:[2,22],106:[2,22],108:[2,22],109:[2,22],110:[2,22],114:[2,22],122:[2,22],130:[2,22],133:[2,22],134:[2,22],137:[2,22],138:[2,22],139:[2,22],140:[2,22],141:[2,22],142:[2,22],143:[2,22]},{1:[2,23],6:[2,23],28:[2,23],29:[2,23],52:[2,23],57:[2,23],60:[2,23],76:[2,23],81:[2,23],90:[2,23],95:[2,23],97:[2,23],106:[2,23],108:[2,23],109:[2,23],110:[2,23], +114:[2,23],122:[2,23],130:[2,23],133:[2,23],134:[2,23],137:[2,23],138:[2,23],139:[2,23],140:[2,23],141:[2,23],142:[2,23],143:[2,23]},{1:[2,24],6:[2,24],28:[2,24],29:[2,24],52:[2,24],57:[2,24],60:[2,24],76:[2,24],81:[2,24],90:[2,24],95:[2,24],97:[2,24],106:[2,24],108:[2,24],109:[2,24],110:[2,24],114:[2,24],122:[2,24],130:[2,24],133:[2,24],134:[2,24],137:[2,24],138:[2,24],139:[2,24],140:[2,24],141:[2,24],142:[2,24],143:[2,24]},{1:[2,25],6:[2,25],28:[2,25],29:[2,25],52:[2,25],57:[2,25],60:[2,25],76:[2,25],81:[2,25],90:[2,25],95:[2,25],97:[2,25],106:[2,25],108:[2,25],109:[2,25],110:[2,25],114:[2,25],122:[2,25],130:[2,25],133:[2,25],134:[2,25],137:[2,25],138:[2,25],139:[2,25],140:[2,25],141:[2,25],142:[2,25],143:[2,25]},{1:[2,26],6:[2,26],28:[2,26],29:[2,26],52:[2,26],57:[2,26],60:[2,26],76:[2,26],81:[2,26],90:[2,26],95:[2,26],97:[2,26],106:[2,26],108:[2,26],109:[2,26],110:[2,26],114:[2,26],122:[2,26],130:[2,26],133:[2,26],134:[2,26],137:[2,26],138:[2,26],139:[2,26],140:[2,26],141:[2,26],142:[2,26],143:[2,26]},{1:[2,8],6:[2,8],29:[2,8],106:[2,8],108:[2,8],110:[2,8],114:[2,8],130:[2,8]},{1:[2,9],6:[2,9],29:[2,9],106:[2,9],108:[2,9],110:[2,9],114:[2,9],130:[2,9]},{1:[2,10],6:[2,10],29:[2,10],106:[2,10],108:[2,10],110:[2,10],114:[2,10],130:[2,10]},{1:[2,11],6:[2,11],29:[2,11],106:[2,11],108:[2,11],110:[2,11],114:[2,11],130:[2,11]},{1:[2,79],6:[2,79],28:[2,79],29:[2,79],43:[1,105],52:[2,79],57:[2,79],60:[2,79],69:[2,79],70:[2,79],71:[2,79],72:[2,79],74:[2,79],76:[2,79],77:[2,79],81:[2,79],88:[2,79],89:[2,79],90:[2,79],95:[2,79],97:[2,79],106:[2,79],108:[2,79],109:[2,79],110:[2,79],114:[2,79],122:[2,79],130:[2,79],133:[2,79],134:[2,79],137:[2,79],138:[2,79],139:[2,79],140:[2,79],141:[2,79],142:[2,79],143:[2,79]},{1:[2,80],6:[2,80],28:[2,80],29:[2,80],52:[2,80],57:[2,80],60:[2,80],69:[2,80],70:[2,80],71:[2,80],72:[2,80],74:[2,80],76:[2,80],77:[2,80],81:[2,80],88:[2,80],89:[2,80],90:[2,80],95:[2,80],97:[2,80],106:[2,80],108:[2,80],109:[2,80],110:[2,80],114:[2,80],122:[2,80],130:[2,80],133:[2,80],134:[2,80],137:[2,80],138:[2,80],139:[2,80],140:[2,80],141:[2,80],142:[2,80],143:[2,80]},{1:[2,81],6:[2,81],28:[2,81],29:[2,81],52:[2,81],57:[2,81],60:[2,81],69:[2,81],70:[2,81],71:[2,81],72:[2,81],74:[2,81],76:[2,81],77:[2,81],81:[2,81],88:[2,81],89:[2,81],90:[2,81],95:[2,81],97:[2,81],106:[2,81],108:[2,81],109:[2,81],110:[2,81],114:[2,81],122:[2,81],130:[2,81],133:[2,81],134:[2,81],137:[2,81],138:[2,81],139:[2,81],140:[2,81],141:[2,81],142:[2,81],143:[2,81]},{1:[2,82],6:[2,82],28:[2,82],29:[2,82],52:[2,82],57:[2,82],60:[2,82],69:[2,82],70:[2,82],71:[2,82],72:[2,82],74:[2,82],76:[2,82],77:[2,82],81:[2,82],88:[2,82],89:[2,82],90:[2,82],95:[2,82],97:[2,82],106:[2,82],108:[2,82],109:[2,82],110:[2,82],114:[2,82],122:[2,82],130:[2,82],133:[2,82],134:[2,82],137:[2,82],138:[2,82],139:[2,82],140:[2,82],141:[2,82],142:[2,82],143:[2,82]},{1:[2,83],6:[2,83],28:[2,83],29:[2,83],52:[2,83],57:[2,83],60:[2,83],69:[2,83],70:[2,83],71:[2,83],72:[2,83],74:[2,83],76:[2,83],77:[2,83],81:[2,83],88:[2,83],89:[2,83],90:[2,83],95:[2,83],97:[2,83],106:[2,83],108:[2,83],109:[2,83],110:[2,83],114:[2,83],122:[2,83],130:[2,83],133:[2,83],134:[2,83],137:[2,83],138:[2,83],139:[2,83],140:[2,83],141:[2,83],142:[2,83],143:[2,83]},{1:[2,111],6:[2,111],28:[2,111],29:[2,111],52:[2,111],57:[2,111],60:[2,111],69:[2,111],70:[2,111],71:[2,111],72:[2,111],74:[2,111],76:[2,111],77:[2,111],81:[2,111],85:106,88:[2,111],89:[1,107],90:[2,111],95:[2,111],97:[2,111],106:[2,111],108:[2,111],109:[2,111],110:[2,111],114:[2,111],122:[2,111],130:[2,111],133:[2,111],134:[2,111],137:[2,111],138:[2,111],139:[2,111],140:[2,111],141:[2,111],142:[2,111],143:[2,111]},{6:[2,58],28:[2,58],30:112,31:[1,76],47:113,51:108,52:[2,58],57:[2,58],58:109,59:110,60:[1,111],61:114,62:115,79:[1,73],93:[1,116],94:[1,117]},{14:118,28:[1,119]},{7:120,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:122,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:123,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:124,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{15:126,16:127,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:128,47:66,61:50,62:51,64:125,66:25,67:26,68:27,79:[1,73],86:[1,28],92:[1,61],93:[1,62],94:[1,60],105:[1,59]},{15:126,16:127,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:128,47:66,61:50,62:51,64:129,66:25,67:26,68:27,79:[1,73],86:[1,28],92:[1,61],93:[1,62],94:[1,60],105:[1,59]},{1:[2,76],6:[2,76],28:[2,76],29:[2,76],43:[2,76],52:[2,76],57:[2,76],60:[2,76],69:[2,76],70:[2,76],71:[2,76],72:[2,76],74:[2,76],76:[2,76],77:[2,76],81:[2,76],83:[1,133],88:[2,76],89:[2,76],90:[2,76],95:[2,76],97:[2,76],106:[2,76],108:[2,76],109:[2,76],110:[2,76],114:[2,76],122:[2,76],130:[2,76],133:[2,76],134:[2,76],135:[1,130],136:[1,131],137:[2,76],138:[2,76],139:[2,76],140:[2,76],141:[2,76],142:[2,76],143:[2,76],144:[1,132]},{1:[2,190],6:[2,190],28:[2,190],29:[2,190],52:[2,190],57:[2,190],60:[2,190],76:[2,190],81:[2,190],90:[2,190],95:[2,190],97:[2,190],106:[2,190],108:[2,190],109:[2,190],110:[2,190],114:[2,190],122:[2,190],125:[1,134],130:[2,190],133:[2,190],134:[2,190],137:[2,190],138:[2,190],139:[2,190],140:[2,190],141:[2,190],142:[2,190],143:[2,190]},{14:135,28:[1,119]},{14:136,28:[1,119]},{1:[2,157],6:[2,157],28:[2,157],29:[2,157],52:[2,157],57:[2,157],60:[2,157],76:[2,157],81:[2,157],90:[2,157],95:[2,157],97:[2,157],106:[2,157],108:[2,157],109:[2,157],110:[2,157],114:[2,157],122:[2,157],130:[2,157],133:[2,157],134:[2,157],137:[2,157],138:[2,157],139:[2,157],140:[2,157],141:[2,157],142:[2,157],143:[2,157]},{14:137,28:[1,119]},{7:138,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,139],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,101],6:[2,101],14:140,15:126,16:127,28:[1,119],29:[2,101],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:128,47:66,52:[2,101],57:[2,101],60:[2,101],61:50,62:51,64:142,66:25,67:26,68:27,76:[2,101],79:[1,73],81:[2,101],83:[1,141],86:[1,28],90:[2,101],92:[1,61],93:[1,62],94:[1,60],95:[2,101],97:[2,101],105:[1,59],106:[2,101],108:[2,101],109:[2,101],110:[2,101],114:[2,101],122:[2,101],130:[2,101],133:[2,101],134:[2,101],137:[2,101],138:[2,101],139:[2,101],140:[2,101],141:[2,101],142:[2,101],143:[2,101]},{7:143,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{85:144,89:[1,107]},{1:[2,50],6:[2,50],7:145,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,29:[2,50],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],106:[2,50],107:40,108:[2,50],110:[2,50],111:41,112:[1,70],113:42,114:[2,50],115:72,123:[1,43],128:38,129:[1,67],130:[2,50],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,51],6:[2,51],28:[2,51],29:[2,51],57:[2,51],81:[2,51],106:[2,51],108:[2,51],110:[2,51],114:[2,51],130:[2,51]},{7:147,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],14:146,15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,119],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,77],6:[2,77],28:[2,77],29:[2,77],43:[2,77],52:[2,77],57:[2,77],60:[2,77],69:[2,77],70:[2,77],71:[2,77],72:[2,77],74:[2,77],76:[2,77],77:[2,77],81:[2,77],88:[2,77],89:[2,77],90:[2,77],95:[2,77],97:[2,77],106:[2,77],108:[2,77],109:[2,77],110:[2,77],114:[2,77],122:[2,77],130:[2,77],133:[2,77],134:[2,77],137:[2,77],138:[2,77],139:[2,77],140:[2,77],141:[2,77],142:[2,77],143:[2,77]},{1:[2,78],6:[2,78],28:[2,78],29:[2,78],43:[2,78],52:[2,78],57:[2,78],60:[2,78],69:[2,78],70:[2,78],71:[2,78],72:[2,78],74:[2,78],76:[2,78],77:[2,78],81:[2,78],88:[2,78],89:[2,78],90:[2,78],95:[2,78],97:[2,78],106:[2,78],108:[2,78],109:[2,78],110:[2,78],114:[2,78],122:[2,78],130:[2,78],133:[2,78],134:[2,78],137:[2,78],138:[2,78],139:[2,78],140:[2,78],141:[2,78],142:[2,78],143:[2,78]},{1:[2,32],6:[2,32],28:[2,32],29:[2,32],52:[2,32],57:[2,32],60:[2,32],69:[2,32],70:[2,32],71:[2,32],72:[2,32],74:[2,32],76:[2,32],77:[2,32],81:[2,32],88:[2,32],89:[2,32],90:[2,32],95:[2,32],97:[2,32],106:[2,32],108:[2,32],109:[2,32],110:[2,32],114:[2,32],122:[2,32],130:[2,32],133:[2,32],134:[2,32],137:[2,32],138:[2,32],139:[2,32],140:[2,32],141:[2,32],142:[2,32],143:[2,32]},{1:[2,33],6:[2,33],28:[2,33],29:[2,33],52:[2,33],57:[2,33],60:[2,33],69:[2,33],70:[2,33],71:[2,33],72:[2,33],74:[2,33],76:[2,33],77:[2,33],81:[2,33],88:[2,33],89:[2,33],90:[2,33],95:[2,33],97:[2,33],106:[2,33],108:[2,33],109:[2,33],110:[2,33],114:[2,33],122:[2,33],130:[2,33],133:[2,33],134:[2,33],137:[2,33],138:[2,33],139:[2,33],140:[2,33],141:[2,33],142:[2,33],143:[2,33]},{1:[2,34],6:[2,34],28:[2,34],29:[2,34],52:[2,34],57:[2,34],60:[2,34],69:[2,34],70:[2,34],71:[2,34],72:[2,34],74:[2,34],76:[2,34],77:[2,34],81:[2,34],88:[2,34],89:[2,34],90:[2,34],95:[2,34],97:[2,34],106:[2,34],108:[2,34],109:[2,34],110:[2,34],114:[2,34],122:[2,34],130:[2,34],133:[2,34],134:[2,34],137:[2,34],138:[2,34],139:[2,34],140:[2,34],141:[2,34],142:[2,34],143:[2,34]},{1:[2,35],6:[2,35],28:[2,35],29:[2,35],52:[2,35],57:[2,35],60:[2,35],69:[2,35],70:[2,35],71:[2,35],72:[2,35],74:[2,35],76:[2,35],77:[2,35],81:[2,35],88:[2,35],89:[2,35],90:[2,35],95:[2,35],97:[2,35],106:[2,35],108:[2,35],109:[2,35],110:[2,35],114:[2,35],122:[2,35],130:[2,35],133:[2,35],134:[2,35],137:[2,35],138:[2,35],139:[2,35],140:[2,35],141:[2,35],142:[2,35],143:[2,35]},{1:[2,36],6:[2,36],28:[2,36],29:[2,36],52:[2,36],57:[2,36],60:[2,36],69:[2,36],70:[2,36],71:[2,36],72:[2,36],74:[2,36],76:[2,36],77:[2,36],81:[2,36],88:[2,36],89:[2,36],90:[2,36],95:[2,36],97:[2,36],106:[2,36],108:[2,36],109:[2,36],110:[2,36],114:[2,36],122:[2,36],130:[2,36],133:[2,36],134:[2,36],137:[2,36],138:[2,36],139:[2,36],140:[2,36],141:[2,36],142:[2,36],143:[2,36]},{1:[2,37],6:[2,37],28:[2,37],29:[2,37],52:[2,37],57:[2,37],60:[2,37],69:[2,37],70:[2,37],71:[2,37],72:[2,37],74:[2,37],76:[2,37],77:[2,37],81:[2,37],88:[2,37],89:[2,37],90:[2,37],95:[2,37],97:[2,37],106:[2,37],108:[2,37],109:[2,37],110:[2,37],114:[2,37],122:[2,37],130:[2,37],133:[2,37],134:[2,37],137:[2,37],138:[2,37],139:[2,37],140:[2,37],141:[2,37],142:[2,37],143:[2,37]},{1:[2,38],6:[2,38],28:[2,38],29:[2,38],52:[2,38],57:[2,38],60:[2,38],69:[2,38],70:[2,38],71:[2,38],72:[2,38],74:[2,38],76:[2,38],77:[2,38],81:[2,38],88:[2,38],89:[2,38],90:[2,38],95:[2,38],97:[2,38],106:[2,38],108:[2,38],109:[2,38],110:[2,38],114:[2,38],122:[2,38],130:[2,38],133:[2,38],134:[2,38],137:[2,38],138:[2,38],139:[2,38],140:[2,38],141:[2,38],142:[2,38],143:[2,38]},{4:148,5:3,7:4,8:5,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,149],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:150,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,154],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],91:152,92:[1,61],93:[1,62],94:[1,60],95:[1,151],98:153,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,118],6:[2,118],28:[2,118],29:[2,118],52:[2,118],57:[2,118],60:[2,118],69:[2,118],70:[2,118],71:[2,118],72:[2,118],74:[2,118],76:[2,118],77:[2,118],81:[2,118],88:[2,118],89:[2,118],90:[2,118],95:[2,118],97:[2,118],106:[2,118],108:[2,118],109:[2,118],110:[2,118],114:[2,118],122:[2,118],130:[2,118],133:[2,118],134:[2,118],137:[2,118],138:[2,118],139:[2,118],140:[2,118],141:[2,118],142:[2,118],143:[2,118]},{1:[2,119],6:[2,119],28:[2,119],29:[2,119],30:157,31:[1,76],52:[2,119],57:[2,119],60:[2,119],69:[2,119],70:[2,119],71:[2,119],72:[2,119],74:[2,119],76:[2,119],77:[2,119],81:[2,119],88:[2,119],89:[2,119],90:[2,119],95:[2,119],97:[2,119],106:[2,119],108:[2,119],109:[2,119],110:[2,119],114:[2,119],122:[2,119],130:[2,119],133:[2,119],134:[2,119],137:[2,119],138:[2,119],139:[2,119],140:[2,119],141:[2,119],142:[2,119],143:[2,119]},{28:[2,54]},{28:[2,55]},{1:[2,72],6:[2,72],28:[2,72],29:[2,72],43:[2,72],52:[2,72],57:[2,72],60:[2,72],69:[2,72],70:[2,72],71:[2,72],72:[2,72],74:[2,72],76:[2,72],77:[2,72],81:[2,72],83:[2,72],88:[2,72],89:[2,72],90:[2,72],95:[2,72],97:[2,72],106:[2,72],108:[2,72],109:[2,72],110:[2,72],114:[2,72],122:[2,72],130:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[2,72],138:[2,72],139:[2,72],140:[2,72],141:[2,72],142:[2,72],143:[2,72],144:[2,72]},{1:[2,75],6:[2,75],28:[2,75],29:[2,75],43:[2,75],52:[2,75],57:[2,75],60:[2,75],69:[2,75],70:[2,75],71:[2,75],72:[2,75],74:[2,75],76:[2,75],77:[2,75],81:[2,75],83:[2,75],88:[2,75],89:[2,75],90:[2,75],95:[2,75],97:[2,75],106:[2,75],108:[2,75],109:[2,75],110:[2,75],114:[2,75],122:[2,75],130:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75],137:[2,75],138:[2,75],139:[2,75],140:[2,75],141:[2,75],142:[2,75],143:[2,75],144:[2,75]},{7:158,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:159,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:160,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:162,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],14:161,15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,119],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{30:167,31:[1,76],47:168,61:169,62:170,67:163,79:[1,73],93:[1,116],94:[1,60],117:164,118:[1,165],119:166},{116:171,120:[1,172],121:[1,173]},{6:[2,96],10:177,28:[2,96],30:178,31:[1,76],32:179,33:[1,74],34:[1,75],44:175,45:176,47:180,49:[1,48],57:[2,96],80:174,81:[2,96],93:[1,116]},{1:[2,30],6:[2,30],28:[2,30],29:[2,30],46:[2,30],52:[2,30],57:[2,30],60:[2,30],69:[2,30],70:[2,30],71:[2,30],72:[2,30],74:[2,30],76:[2,30],77:[2,30],81:[2,30],88:[2,30],89:[2,30],90:[2,30],95:[2,30],97:[2,30],106:[2,30],108:[2,30],109:[2,30],110:[2,30],114:[2,30],122:[2,30],130:[2,30],133:[2,30],134:[2,30],137:[2,30],138:[2,30],139:[2,30],140:[2,30],141:[2,30],142:[2,30],143:[2,30]},{1:[2,31],6:[2,31],28:[2,31],29:[2,31],46:[2,31],52:[2,31],57:[2,31],60:[2,31],69:[2,31],70:[2,31],71:[2,31],72:[2,31],74:[2,31],76:[2,31],77:[2,31],81:[2,31],88:[2,31],89:[2,31],90:[2,31],95:[2,31],97:[2,31],106:[2,31],108:[2,31],109:[2,31],110:[2,31],114:[2,31],122:[2,31],130:[2,31],133:[2,31],134:[2,31],137:[2,31],138:[2,31],139:[2,31],140:[2,31],141:[2,31],142:[2,31],143:[2,31]},{1:[2,29],6:[2,29],28:[2,29],29:[2,29],43:[2,29],46:[2,29],52:[2,29],57:[2,29],60:[2,29],69:[2,29],70:[2,29],71:[2,29],72:[2,29],74:[2,29],76:[2,29],77:[2,29],81:[2,29],83:[2,29],88:[2,29],89:[2,29],90:[2,29],95:[2,29],97:[2,29],106:[2,29],108:[2,29],109:[2,29],110:[2,29],114:[2,29],120:[2,29],121:[2,29],122:[2,29],130:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29],137:[2,29],138:[2,29],139:[2,29],140:[2,29],141:[2,29],142:[2,29],143:[2,29],144:[2,29]},{1:[2,5],5:181,6:[2,5],7:4,8:5,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,29:[2,5],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],106:[2,5],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,202],6:[2,202],28:[2,202],29:[2,202],52:[2,202],57:[2,202],60:[2,202],76:[2,202],81:[2,202],90:[2,202],95:[2,202],97:[2,202],106:[2,202],108:[2,202],109:[2,202],110:[2,202],114:[2,202],122:[2,202],130:[2,202],133:[2,202],134:[2,202],137:[2,202],138:[2,202],139:[2,202],140:[2,202],141:[2,202],142:[2,202],143:[2,202]},{7:182,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:183,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:184,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:185,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:186,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:187,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:188,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:189,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:190,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,156],6:[2,156],28:[2,156],29:[2,156],52:[2,156],57:[2,156],60:[2,156],76:[2,156],81:[2,156],90:[2,156],95:[2,156],97:[2,156],106:[2,156],108:[2,156],109:[2,156],110:[2,156],114:[2,156],122:[2,156],130:[2,156],133:[2,156],134:[2,156],137:[2,156],138:[2,156],139:[2,156],140:[2,156],141:[2,156],142:[2,156],143:[2,156]},{1:[2,161],6:[2,161],28:[2,161],29:[2,161],52:[2,161],57:[2,161],60:[2,161],76:[2,161],81:[2,161],90:[2,161],95:[2,161],97:[2,161],106:[2,161],108:[2,161],109:[2,161],110:[2,161],114:[2,161],122:[2,161],130:[2,161],133:[2,161],134:[2,161],137:[2,161],138:[2,161],139:[2,161],140:[2,161],141:[2,161],142:[2,161],143:[2,161]},{7:191,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,155],6:[2,155],28:[2,155],29:[2,155],52:[2,155],57:[2,155],60:[2,155],76:[2,155],81:[2,155],90:[2,155],95:[2,155],97:[2,155],106:[2,155],108:[2,155],109:[2,155],110:[2,155],114:[2,155],122:[2,155],130:[2,155],133:[2,155],134:[2,155],137:[2,155],138:[2,155],139:[2,155],140:[2,155],141:[2,155],142:[2,155],143:[2,155]},{1:[2,160],6:[2,160],28:[2,160],29:[2,160],52:[2,160],57:[2,160],60:[2,160],76:[2,160],81:[2,160],90:[2,160],95:[2,160],97:[2,160],106:[2,160],108:[2,160],109:[2,160],110:[2,160],114:[2,160],122:[2,160],130:[2,160],133:[2,160],134:[2,160],137:[2,160],138:[2,160],139:[2,160],140:[2,160],141:[2,160],142:[2,160],143:[2,160]},{85:192,89:[1,107]},{1:[2,73],6:[2,73],28:[2,73],29:[2,73],43:[2,73],52:[2,73],57:[2,73],60:[2,73],69:[2,73],70:[2,73],71:[2,73],72:[2,73],74:[2,73],76:[2,73],77:[2,73],81:[2,73],83:[2,73],88:[2,73],89:[2,73],90:[2,73],95:[2,73],97:[2,73],106:[2,73],108:[2,73],109:[2,73],110:[2,73],114:[2,73],122:[2,73],130:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73],137:[2,73],138:[2,73],139:[2,73],140:[2,73],141:[2,73],142:[2,73],143:[2,73],144:[2,73]},{89:[2,115]},{27:194,30:193,31:[1,76],87:[1,46]},{30:195,31:[1,76]},{1:[2,89],6:[2,89],28:[2,89],29:[2,89],30:196,31:[1,76],43:[2,89],52:[2,89],57:[2,89],60:[2,89],69:[2,89],70:[2,89],71:[2,89],72:[2,89],74:[2,89],76:[2,89],77:[2,89],81:[2,89],83:[2,89],88:[2,89],89:[2,89],90:[2,89],95:[2,89],97:[2,89],106:[2,89],108:[2,89],109:[2,89],110:[2,89],114:[2,89],122:[2,89],130:[2,89],133:[2,89],134:[2,89],135:[2,89],136:[2,89],137:[2,89],138:[2,89],139:[2,89],140:[2,89],141:[2,89],142:[2,89],143:[2,89],144:[2,89]},{30:197,31:[1,76]},{1:[2,90],6:[2,90],28:[2,90],29:[2,90],43:[2,90],52:[2,90],57:[2,90],60:[2,90],69:[2,90],70:[2,90],71:[2,90],72:[2,90],74:[2,90],76:[2,90],77:[2,90],81:[2,90],83:[2,90],88:[2,90],89:[2,90],90:[2,90],95:[2,90],97:[2,90],106:[2,90],108:[2,90],109:[2,90],110:[2,90],114:[2,90],122:[2,90],130:[2,90],133:[2,90],134:[2,90],135:[2,90],136:[2,90],137:[2,90],138:[2,90],139:[2,90],140:[2,90],141:[2,90],142:[2,90],143:[2,90],144:[2,90]},{7:199,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,203],61:50,62:51,64:37,66:25,67:26,68:27,75:198,78:200,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],96:201,97:[1,202],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{73:204,74:[1,101],77:[1,102]},{85:205,89:[1,107]},{1:[2,74],6:[2,74],28:[2,74],29:[2,74],43:[2,74],52:[2,74],57:[2,74],60:[2,74],69:[2,74], +70:[2,74],71:[2,74],72:[2,74],74:[2,74],76:[2,74],77:[2,74],81:[2,74],83:[2,74],88:[2,74],89:[2,74],90:[2,74],95:[2,74],97:[2,74],106:[2,74],108:[2,74],109:[2,74],110:[2,74],114:[2,74],122:[2,74],130:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74],137:[2,74],138:[2,74],139:[2,74],140:[2,74],141:[2,74],142:[2,74],143:[2,74],144:[2,74]},{6:[1,207],7:206,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,208],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,112],6:[2,112],28:[2,112],29:[2,112],52:[2,112],57:[2,112],60:[2,112],69:[2,112],70:[2,112],71:[2,112],72:[2,112],74:[2,112],76:[2,112],77:[2,112],81:[2,112],88:[2,112],89:[2,112],90:[2,112],95:[2,112],97:[2,112],106:[2,112],108:[2,112],109:[2,112],110:[2,112],114:[2,112],122:[2,112],130:[2,112],133:[2,112],134:[2,112],137:[2,112],138:[2,112],139:[2,112],140:[2,112],141:[2,112],142:[2,112],143:[2,112]},{7:211,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,154],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],90:[1,209],91:210,92:[1,61],93:[1,62],94:[1,60],98:153,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,56],28:[2,56],52:[1,212],56:214,57:[1,213]},{6:[2,59],28:[2,59],29:[2,59],52:[2,59],57:[2,59]},{6:[2,63],28:[2,63],29:[2,63],43:[1,216],52:[2,63],57:[2,63],60:[1,215]},{6:[2,66],28:[2,66],29:[2,66],52:[2,66],57:[2,66]},{6:[2,67],28:[2,67],29:[2,67],43:[2,67],52:[2,67],57:[2,67],60:[2,67]},{6:[2,68],28:[2,68],29:[2,68],43:[2,68],52:[2,68],57:[2,68],60:[2,68]},{6:[2,69],28:[2,69],29:[2,69],43:[2,69],52:[2,69],57:[2,69],60:[2,69]},{6:[2,70],28:[2,70],29:[2,70],43:[2,70],52:[2,70],57:[2,70],60:[2,70]},{30:157,31:[1,76]},{7:211,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,154],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],91:152,92:[1,61],93:[1,62],94:[1,60],95:[1,151],98:153,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,53],6:[2,53],28:[2,53],29:[2,53],52:[2,53],57:[2,53],60:[2,53],76:[2,53],81:[2,53],90:[2,53],95:[2,53],97:[2,53],106:[2,53],108:[2,53],109:[2,53],110:[2,53],114:[2,53],122:[2,53],130:[2,53],133:[2,53],134:[2,53],137:[2,53],138:[2,53],139:[2,53],140:[2,53],141:[2,53],142:[2,53],143:[2,53]},{4:218,5:3,7:4,8:5,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,29:[1,217],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,194],6:[2,194],28:[2,194],29:[2,194],52:[2,194],57:[2,194],60:[2,194],76:[2,194],81:[2,194],90:[2,194],95:[2,194],97:[2,194],106:[2,194],107:88,108:[2,194],109:[2,194],110:[2,194],113:89,114:[2,194],115:72,122:[2,194],130:[2,194],133:[2,194],134:[2,194],137:[1,78],138:[2,194],139:[2,194],140:[2,194],141:[2,194],142:[2,194],143:[2,194]},{107:91,108:[1,68],110:[1,69],113:92,114:[1,71],115:72,130:[1,90]},{1:[2,195],6:[2,195],28:[2,195],29:[2,195],52:[2,195],57:[2,195],60:[2,195],76:[2,195],81:[2,195],90:[2,195],95:[2,195],97:[2,195],106:[2,195],107:88,108:[2,195],109:[2,195],110:[2,195],113:89,114:[2,195],115:72,122:[2,195],130:[2,195],133:[2,195],134:[2,195],137:[1,78],138:[2,195],139:[1,82],140:[2,195],141:[2,195],142:[2,195],143:[2,195]},{1:[2,196],6:[2,196],28:[2,196],29:[2,196],52:[2,196],57:[2,196],60:[2,196],76:[2,196],81:[2,196],90:[2,196],95:[2,196],97:[2,196],106:[2,196],107:88,108:[2,196],109:[2,196],110:[2,196],113:89,114:[2,196],115:72,122:[2,196],130:[2,196],133:[2,196],134:[2,196],137:[1,78],138:[2,196],139:[1,82],140:[2,196],141:[2,196],142:[2,196],143:[2,196]},{1:[2,197],6:[2,197],28:[2,197],29:[2,197],52:[2,197],57:[2,197],60:[2,197],76:[2,197],81:[2,197],90:[2,197],95:[2,197],97:[2,197],106:[2,197],107:88,108:[2,197],109:[2,197],110:[2,197],113:89,114:[2,197],115:72,122:[2,197],130:[2,197],133:[2,197],134:[2,197],137:[1,78],138:[2,197],139:[1,82],140:[2,197],141:[2,197],142:[2,197],143:[2,197]},{1:[2,198],6:[2,198],28:[2,198],29:[2,198],52:[2,198],57:[2,198],60:[2,198],69:[2,76],70:[2,76],71:[2,76],72:[2,76],74:[2,76],76:[2,198],77:[2,76],81:[2,198],88:[2,76],89:[2,76],90:[2,198],95:[2,198],97:[2,198],106:[2,198],108:[2,198],109:[2,198],110:[2,198],114:[2,198],122:[2,198],130:[2,198],133:[2,198],134:[2,198],137:[2,198],138:[2,198],139:[2,198],140:[2,198],141:[2,198],142:[2,198],143:[2,198]},{65:94,69:[1,96],70:[1,97],71:[1,98],72:[1,99],73:100,74:[1,101],77:[1,102],84:93,88:[1,95],89:[2,114]},{65:104,69:[1,96],70:[1,97],71:[1,98],72:[1,99],73:100,74:[1,101],77:[1,102],84:103,88:[1,95],89:[2,114]},{69:[2,79],70:[2,79],71:[2,79],72:[2,79],74:[2,79],77:[2,79],88:[2,79],89:[2,79]},{1:[2,199],6:[2,199],28:[2,199],29:[2,199],52:[2,199],57:[2,199],60:[2,199],69:[2,76],70:[2,76],71:[2,76],72:[2,76],74:[2,76],76:[2,199],77:[2,76],81:[2,199],88:[2,76],89:[2,76],90:[2,199],95:[2,199],97:[2,199],106:[2,199],108:[2,199],109:[2,199],110:[2,199],114:[2,199],122:[2,199],130:[2,199],133:[2,199],134:[2,199],137:[2,199],138:[2,199],139:[2,199],140:[2,199],141:[2,199],142:[2,199],143:[2,199]},{1:[2,200],6:[2,200],28:[2,200],29:[2,200],52:[2,200],57:[2,200],60:[2,200],76:[2,200],81:[2,200],90:[2,200],95:[2,200],97:[2,200],106:[2,200],108:[2,200],109:[2,200],110:[2,200],114:[2,200],122:[2,200],130:[2,200],133:[2,200],134:[2,200],137:[2,200],138:[2,200],139:[2,200],140:[2,200],141:[2,200],142:[2,200],143:[2,200]},{1:[2,201],6:[2,201],28:[2,201],29:[2,201],52:[2,201],57:[2,201],60:[2,201],76:[2,201],81:[2,201],90:[2,201],95:[2,201],97:[2,201],106:[2,201],108:[2,201],109:[2,201],110:[2,201],114:[2,201],122:[2,201],130:[2,201],133:[2,201],134:[2,201],137:[2,201],138:[2,201],139:[2,201],140:[2,201],141:[2,201],142:[2,201],143:[2,201]},{6:[1,221],7:219,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,220],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:222,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{14:223,28:[1,119],129:[1,224]},{1:[2,140],6:[2,140],28:[2,140],29:[2,140],52:[2,140],57:[2,140],60:[2,140],76:[2,140],81:[2,140],90:[2,140],95:[2,140],97:[2,140],101:225,102:[1,226],103:[1,227],106:[2,140],108:[2,140],109:[2,140],110:[2,140],114:[2,140],122:[2,140],130:[2,140],133:[2,140],134:[2,140],137:[2,140],138:[2,140],139:[2,140],140:[2,140],141:[2,140],142:[2,140],143:[2,140]},{1:[2,154],6:[2,154],28:[2,154],29:[2,154],52:[2,154],57:[2,154],60:[2,154],76:[2,154],81:[2,154],90:[2,154],95:[2,154],97:[2,154],106:[2,154],108:[2,154],109:[2,154],110:[2,154],114:[2,154],122:[2,154],130:[2,154],133:[2,154],134:[2,154],137:[2,154],138:[2,154],139:[2,154],140:[2,154],141:[2,154],142:[2,154],143:[2,154]},{1:[2,162],6:[2,162],28:[2,162],29:[2,162],52:[2,162],57:[2,162],60:[2,162],76:[2,162],81:[2,162],90:[2,162],95:[2,162],97:[2,162],106:[2,162],108:[2,162],109:[2,162],110:[2,162],114:[2,162],122:[2,162],130:[2,162],133:[2,162],134:[2,162],137:[2,162],138:[2,162],139:[2,162],140:[2,162],141:[2,162],142:[2,162],143:[2,162]},{28:[1,228],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{124:229,126:230,127:[1,231]},{1:[2,102],6:[2,102],28:[2,102],29:[2,102],52:[2,102],57:[2,102],60:[2,102],76:[2,102],81:[2,102],90:[2,102],95:[2,102],97:[2,102],106:[2,102],108:[2,102],109:[2,102],110:[2,102],114:[2,102],122:[2,102],130:[2,102],133:[2,102],134:[2,102],137:[2,102],138:[2,102],139:[2,102],140:[2,102],141:[2,102],142:[2,102],143:[2,102]},{7:232,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,105],6:[2,105],14:233,28:[1,119],29:[2,105],52:[2,105],57:[2,105],60:[2,105],69:[2,76],70:[2,76],71:[2,76],72:[2,76],74:[2,76],76:[2,105],77:[2,76],81:[2,105],83:[1,234],88:[2,76],89:[2,76],90:[2,105],95:[2,105],97:[2,105],106:[2,105],108:[2,105],109:[2,105],110:[2,105],114:[2,105],122:[2,105],130:[2,105],133:[2,105],134:[2,105],137:[2,105],138:[2,105],139:[2,105],140:[2,105],141:[2,105],142:[2,105],143:[2,105]},{1:[2,147],6:[2,147],28:[2,147],29:[2,147],52:[2,147],57:[2,147],60:[2,147],76:[2,147],81:[2,147],90:[2,147],95:[2,147],97:[2,147],106:[2,147],107:88,108:[2,147],109:[2,147],110:[2,147],113:89,114:[2,147],115:72,122:[2,147],130:[2,147],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,113],6:[2,113],28:[2,113],29:[2,113],43:[2,113],52:[2,113],57:[2,113],60:[2,113],69:[2,113],70:[2,113],71:[2,113],72:[2,113],74:[2,113],76:[2,113],77:[2,113],81:[2,113],83:[2,113],88:[2,113],89:[2,113],90:[2,113],95:[2,113],97:[2,113],106:[2,113],108:[2,113],109:[2,113],110:[2,113],114:[2,113],122:[2,113],130:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113],138:[2,113],139:[2,113],140:[2,113],141:[2,113],142:[2,113],143:[2,113],144:[2,113]},{1:[2,49],6:[2,49],29:[2,49],106:[2,49],107:88,108:[2,49],110:[2,49],113:89,114:[2,49],115:72,130:[2,49],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,12],6:[2,12],29:[2,12],106:[2,12],108:[2,12],110:[2,12],114:[2,12],130:[2,12]},{1:[2,13],6:[2,13],29:[2,13],106:[2,13],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[2,13],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[1,77],106:[1,235]},{4:236,5:3,7:4,8:5,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,135],28:[2,135],57:[2,135],60:[1,238],95:[2,135],96:237,97:[1,202],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,121],6:[2,121],28:[2,121],29:[2,121],43:[2,121],52:[2,121],57:[2,121],60:[2,121],69:[2,121],70:[2,121],71:[2,121],72:[2,121],74:[2,121],76:[2,121],77:[2,121],81:[2,121],88:[2,121],89:[2,121],90:[2,121],95:[2,121],97:[2,121],106:[2,121],108:[2,121],109:[2,121],110:[2,121],114:[2,121],120:[2,121],121:[2,121],122:[2,121],130:[2,121],133:[2,121],134:[2,121],137:[2,121],138:[2,121],139:[2,121],140:[2,121],141:[2,121],142:[2,121],143:[2,121]},{6:[2,56],28:[2,56],56:239,57:[1,240],95:[2,56]},{6:[2,130],28:[2,130],29:[2,130],57:[2,130],90:[2,130],95:[2,130]},{7:211,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,154],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],91:241,92:[1,61],93:[1,62],94:[1,60],98:153,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,136],28:[2,136],29:[2,136],57:[2,136],90:[2,136],95:[2,136]},{6:[2,137],28:[2,137],29:[2,137],57:[2,137],90:[2,137],95:[2,137]},{1:[2,120],6:[2,120],28:[2,120],29:[2,120],43:[2,120],46:[2,120],52:[2,120],57:[2,120],60:[2,120],69:[2,120],70:[2,120],71:[2,120],72:[2,120],74:[2,120],76:[2,120],77:[2,120],81:[2,120],83:[2,120],88:[2,120],89:[2,120],90:[2,120],95:[2,120],97:[2,120],106:[2,120],108:[2,120],109:[2,120],110:[2,120],114:[2,120],120:[2,120],121:[2,120],122:[2,120],130:[2,120],133:[2,120],134:[2,120],135:[2,120],136:[2,120],137:[2,120],138:[2,120],139:[2,120],140:[2,120],141:[2,120],142:[2,120],143:[2,120],144:[2,120]},{14:242,28:[1,119],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,150],6:[2,150],28:[2,150],29:[2,150],52:[2,150],57:[2,150],60:[2,150],76:[2,150],81:[2,150],90:[2,150],95:[2,150],97:[2,150],106:[2,150],107:88,108:[1,68],109:[1,243],110:[1,69],113:89,114:[1,71],115:72,122:[2,150],130:[2,150],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,152],6:[2,152],28:[2,152],29:[2,152],52:[2,152],57:[2,152],60:[2,152],76:[2,152],81:[2,152],90:[2,152],95:[2,152],97:[2,152],106:[2,152],107:88,108:[1,68],109:[1,244],110:[1,69],113:89,114:[1,71],115:72,122:[2,152],130:[2,152],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,158],6:[2,158],28:[2,158],29:[2,158],52:[2,158],57:[2,158],60:[2,158],76:[2,158],81:[2,158],90:[2,158],95:[2,158],97:[2,158],106:[2,158],108:[2,158],109:[2,158],110:[2,158],114:[2,158],122:[2,158],130:[2,158],133:[2,158],134:[2,158],137:[2,158],138:[2,158],139:[2,158],140:[2,158],141:[2,158],142:[2,158],143:[2,158]},{1:[2,159],6:[2,159],28:[2,159],29:[2,159],52:[2,159],57:[2,159],60:[2,159],76:[2,159],81:[2,159],90:[2,159],95:[2,159],97:[2,159],106:[2,159],107:88,108:[1,68],109:[2,159],110:[1,69],113:89,114:[1,71],115:72,122:[2,159],130:[2,159],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,163],6:[2,163],28:[2,163],29:[2,163],52:[2,163],57:[2,163],60:[2,163],76:[2,163],81:[2,163],90:[2,163],95:[2,163],97:[2,163],106:[2,163],108:[2,163],109:[2,163],110:[2,163],114:[2,163],122:[2,163],130:[2,163],133:[2,163],134:[2,163],137:[2,163],138:[2,163],139:[2,163],140:[2,163],141:[2,163],142:[2,163],143:[2,163]},{120:[2,165],121:[2,165]},{30:167,31:[1,76],47:168,61:169,62:170,79:[1,73],93:[1,116],94:[1,117],117:245,119:166},{57:[1,246],120:[2,171],121:[2,171]},{57:[2,167],120:[2,167],121:[2,167]},{57:[2,168],120:[2,168],121:[2,168]},{57:[2,169],120:[2,169],121:[2,169]},{57:[2,170],120:[2,170],121:[2,170]},{1:[2,164],6:[2,164],28:[2,164],29:[2,164],52:[2,164],57:[2,164],60:[2,164],76:[2,164],81:[2,164],90:[2,164],95:[2,164],97:[2,164],106:[2,164],108:[2,164],109:[2,164],110:[2,164],114:[2,164],122:[2,164],130:[2,164],133:[2,164],134:[2,164],137:[2,164],138:[2,164],139:[2,164],140:[2,164],141:[2,164],142:[2,164],143:[2,164]},{7:247,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:248,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,56],28:[2,56],56:249,57:[1,250],81:[2,56]},{6:[2,97],28:[2,97],29:[2,97],57:[2,97],81:[2,97]},{6:[2,42],28:[2,42],29:[2,42],46:[1,251],57:[2,42],81:[2,42]},{6:[2,45],28:[2,45],29:[2,45],57:[2,45],81:[2,45]},{6:[2,46],28:[2,46],29:[2,46],46:[2,46],57:[2,46],81:[2,46]},{6:[2,47],28:[2,47],29:[2,47],46:[2,47],57:[2,47],81:[2,47]},{6:[2,48],28:[2,48],29:[2,48],46:[2,48],57:[2,48],81:[2,48]},{1:[2,4],6:[2,4],29:[2,4],106:[2,4]},{1:[2,203],6:[2,203],28:[2,203],29:[2,203],52:[2,203],57:[2,203],60:[2,203],76:[2,203],81:[2,203],90:[2,203],95:[2,203],97:[2,203],106:[2,203],107:88,108:[2,203],109:[2,203],110:[2,203],113:89,114:[2,203],115:72,122:[2,203],130:[2,203],133:[2,203],134:[2,203],137:[1,78],138:[1,81],139:[1,82],140:[2,203],141:[2,203],142:[2,203],143:[2,203]},{1:[2,204],6:[2,204],28:[2,204],29:[2,204],52:[2,204],57:[2,204],60:[2,204],76:[2,204],81:[2,204],90:[2,204],95:[2,204],97:[2,204],106:[2,204],107:88,108:[2,204],109:[2,204],110:[2,204],113:89,114:[2,204],115:72,122:[2,204],130:[2,204],133:[2,204],134:[2,204],137:[1,78],138:[1,81],139:[1,82],140:[2,204],141:[2,204],142:[2,204],143:[2,204]},{1:[2,205],6:[2,205],28:[2,205],29:[2,205],52:[2,205],57:[2,205],60:[2,205],76:[2,205],81:[2,205],90:[2,205],95:[2,205],97:[2,205],106:[2,205],107:88,108:[2,205],109:[2,205],110:[2,205],113:89,114:[2,205],115:72,122:[2,205],130:[2,205],133:[2,205],134:[2,205],137:[1,78],138:[2,205],139:[1,82],140:[2,205],141:[2,205],142:[2,205],143:[2,205]},{1:[2,206],6:[2,206],28:[2,206],29:[2,206],52:[2,206],57:[2,206],60:[2,206],76:[2,206],81:[2,206],90:[2,206],95:[2,206],97:[2,206],106:[2,206],107:88,108:[2,206],109:[2,206],110:[2,206],113:89,114:[2,206],115:72,122:[2,206],130:[2,206],133:[2,206],134:[2,206],137:[1,78],138:[2,206],139:[1,82],140:[2,206],141:[2,206],142:[2,206],143:[2,206]},{1:[2,207],6:[2,207],28:[2,207],29:[2,207],52:[2,207],57:[2,207],60:[2,207],76:[2,207],81:[2,207],90:[2,207],95:[2,207],97:[2,207],106:[2,207],107:88,108:[2,207],109:[2,207],110:[2,207],113:89,114:[2,207],115:72,122:[2,207],130:[2,207],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[2,207],141:[2,207],142:[2,207],143:[2,207]},{1:[2,208],6:[2,208],28:[2,208],29:[2,208],52:[2,208],57:[2,208],60:[2,208],76:[2,208],81:[2,208],90:[2,208],95:[2,208],97:[2,208],106:[2,208],107:88,108:[2,208],109:[2,208],110:[2,208],113:89,114:[2,208],115:72,122:[2,208],130:[2,208],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[2,208],142:[2,208],143:[1,86]},{1:[2,209],6:[2,209],28:[2,209],29:[2,209],52:[2,209],57:[2,209],60:[2,209],76:[2,209],81:[2,209],90:[2,209],95:[2,209],97:[2,209],106:[2,209],107:88,108:[2,209],109:[2,209],110:[2,209],113:89,114:[2,209],115:72,122:[2,209],130:[2,209],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[2,209],143:[1,86]},{1:[2,210],6:[2,210],28:[2,210],29:[2,210],52:[2,210],57:[2,210],60:[2,210],76:[2,210],81:[2,210],90:[2,210],95:[2,210],97:[2,210],106:[2,210],107:88,108:[2,210],109:[2,210],110:[2,210],113:89,114:[2,210],115:72,122:[2,210],130:[2,210],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[2,210],142:[2,210],143:[2,210]},{1:[2,193],6:[2,193],28:[2,193],29:[2,193],52:[2,193],57:[2,193],60:[2,193],76:[2,193],81:[2,193],90:[2,193],95:[2,193],97:[2,193],106:[2,193],107:88,108:[1,68],109:[2,193],110:[1,69],113:89,114:[1,71],115:72,122:[2,193],130:[2,193],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,192],6:[2,192],28:[2,192],29:[2,192],52:[2,192],57:[2,192],60:[2,192],76:[2,192],81:[2,192],90:[2,192],95:[2,192],97:[2,192],106:[2,192],107:88,108:[1,68],109:[2,192],110:[1,69],113:89,114:[1,71],115:72,122:[2,192],130:[2,192],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,109],6:[2,109],28:[2,109],29:[2,109],52:[2,109],57:[2,109],60:[2,109],69:[2,109],70:[2,109],71:[2,109],72:[2,109],74:[2,109],76:[2,109],77:[2,109],81:[2,109],88:[2,109],89:[2,109],90:[2,109],95:[2,109],97:[2,109],106:[2,109],108:[2,109],109:[2,109],110:[2,109],114:[2,109],122:[2,109],130:[2,109],133:[2,109],134:[2,109],137:[2,109],138:[2,109],139:[2,109],140:[2,109],141:[2,109],142:[2,109],143:[2,109]},{1:[2,84],6:[2,84],28:[2,84],29:[2,84],43:[2,84],52:[2,84],57:[2,84],60:[2,84],69:[2,84],70:[2,84],71:[2,84],72:[2,84],74:[2,84],76:[2,84],77:[2,84],81:[2,84],83:[2,84],88:[2,84],89:[2,84],90:[2,84],95:[2,84],97:[2,84],106:[2,84],108:[2,84],109:[2,84],110:[2,84],114:[2,84],122:[2,84],130:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84],138:[2,84],139:[2,84],140:[2,84],141:[2,84],142:[2,84],143:[2,84],144:[2,84]},{1:[2,85],6:[2,85],28:[2,85],29:[2,85],43:[2,85],52:[2,85],57:[2,85],60:[2,85],69:[2,85],70:[2,85],71:[2,85],72:[2,85],74:[2,85],76:[2,85],77:[2,85],81:[2,85],83:[2,85],88:[2,85],89:[2,85],90:[2,85],95:[2,85],97:[2,85],106:[2,85],108:[2,85],109:[2,85],110:[2,85],114:[2,85],122:[2,85],130:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85],138:[2,85],139:[2,85],140:[2,85],141:[2,85],142:[2,85],143:[2,85],144:[2,85]},{1:[2,86],6:[2,86],28:[2,86],29:[2,86],43:[2,86],52:[2,86],57:[2,86],60:[2,86],69:[2,86],70:[2,86],71:[2,86],72:[2,86],74:[2,86],76:[2,86],77:[2,86],81:[2,86],83:[2,86],88:[2,86],89:[2,86],90:[2,86],95:[2,86],97:[2,86],106:[2,86],108:[2,86],109:[2,86],110:[2,86],114:[2,86],122:[2,86],130:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86],138:[2,86],139:[2,86],140:[2,86],141:[2,86],142:[2,86],143:[2,86],144:[2,86]},{1:[2,87],6:[2,87],28:[2,87],29:[2,87],43:[2,87],52:[2,87],57:[2,87],60:[2,87],69:[2,87],70:[2,87],71:[2,87],72:[2,87],74:[2,87],76:[2,87],77:[2,87],81:[2,87],83:[2,87],88:[2,87],89:[2,87],90:[2,87],95:[2,87],97:[2,87],106:[2,87],108:[2,87],109:[2,87],110:[2,87],114:[2,87],122:[2,87],130:[2,87],133:[2,87],134:[2,87],135:[2,87],136:[2,87],137:[2,87],138:[2,87],139:[2,87],140:[2,87],141:[2,87],142:[2,87],143:[2,87],144:[2,87]},{1:[2,88],6:[2,88],28:[2,88],29:[2,88],43:[2,88],52:[2,88],57:[2,88],60:[2,88],69:[2,88],70:[2,88],71:[2,88],72:[2,88],74:[2,88],76:[2,88],77:[2,88],81:[2,88],83:[2,88],88:[2,88],89:[2,88],90:[2,88],95:[2,88],97:[2,88],106:[2,88],108:[2,88],109:[2,88],110:[2,88],114:[2,88],122:[2,88],130:[2,88],133:[2,88],134:[2,88],135:[2,88],136:[2,88],137:[2,88],138:[2,88],139:[2,88],140:[2,88],141:[2,88],142:[2,88],143:[2,88],144:[2,88]},{76:[1,252]},{60:[1,203],76:[2,93],96:253,97:[1,202],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{76:[2,94]},{7:254,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,76:[2,129],79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{11:[2,123],13:[2,123],31:[2,123],33:[2,123],34:[2,123],36:[2,123],37:[2,123],38:[2,123],39:[2,123],40:[2,123],41:[2,123],48:[2,123],49:[2,123],50:[2,123],54:[2,123],55:[2,123],76:[2,123],79:[2,123],82:[2,123],86:[2,123],87:[2,123],92:[2,123],93:[2,123],94:[2,123],100:[2,123],104:[2,123],105:[2,123],108:[2,123],110:[2,123],112:[2,123],114:[2,123],123:[2,123],129:[2,123],131:[2,123],132:[2,123],133:[2,123],134:[2,123],135:[2,123],136:[2,123]},{11:[2,124],13:[2,124],31:[2,124],33:[2,124],34:[2,124],36:[2,124],37:[2,124],38:[2,124],39:[2,124],40:[2,124],41:[2,124],48:[2,124],49:[2,124],50:[2,124],54:[2,124],55:[2,124],76:[2,124],79:[2,124],82:[2,124],86:[2,124],87:[2,124],92:[2,124],93:[2,124],94:[2,124],100:[2,124],104:[2,124],105:[2,124],108:[2,124],110:[2,124],112:[2,124],114:[2,124],123:[2,124],129:[2,124],131:[2,124],132:[2,124],133:[2,124],134:[2,124],135:[2,124],136:[2,124]},{1:[2,92],6:[2,92],28:[2,92],29:[2,92],43:[2,92],52:[2,92],57:[2,92],60:[2,92],69:[2,92],70:[2,92],71:[2,92],72:[2,92],74:[2,92],76:[2,92],77:[2,92],81:[2,92],83:[2,92],88:[2,92],89:[2,92],90:[2,92],95:[2,92],97:[2,92],106:[2,92],108:[2,92],109:[2,92],110:[2,92],114:[2,92],122:[2,92],130:[2,92],133:[2,92],134:[2,92],135:[2,92],136:[2,92],137:[2,92],138:[2,92],139:[2,92],140:[2,92],141:[2,92],142:[2,92],143:[2,92],144:[2,92]},{1:[2,110],6:[2,110],28:[2,110],29:[2,110],52:[2,110],57:[2,110],60:[2,110],69:[2,110],70:[2,110],71:[2,110],72:[2,110],74:[2,110],76:[2,110],77:[2,110],81:[2,110],88:[2,110],89:[2,110],90:[2,110],95:[2,110],97:[2,110],106:[2,110],108:[2,110],109:[2,110],110:[2,110],114:[2,110],122:[2,110],130:[2,110],133:[2,110],134:[2,110],137:[2,110],138:[2,110],139:[2,110],140:[2,110],141:[2,110],142:[2,110],143:[2,110]},{1:[2,39],6:[2,39],28:[2,39],29:[2,39],52:[2,39],57:[2,39],60:[2,39],76:[2,39],81:[2,39],90:[2,39],95:[2,39],97:[2,39],106:[2,39],107:88,108:[2,39],109:[2,39],110:[2,39],113:89,114:[2,39],115:72,122:[2,39],130:[2,39],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{7:255,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:256,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,116],6:[2,116],28:[2,116],29:[2,116],43:[2,116],52:[2,116],57:[2,116],60:[2,116],69:[2,116],70:[2,116],71:[2,116],72:[2,116],74:[2,116],76:[2,116],77:[2,116],81:[2,116],83:[2,116],88:[2,116],89:[2,116],90:[2,116],95:[2,116],97:[2,116],106:[2,116],108:[2,116],109:[2,116],110:[2,116],114:[2,116],122:[2,116],130:[2,116],133:[2,116],134:[2,116],135:[2,116],136:[2,116],137:[2,116],138:[2,116],139:[2,116],140:[2,116],141:[2,116],142:[2,116],143:[2,116],144:[2,116]},{6:[2,56],28:[2,56],56:257,57:[1,240],90:[2,56]},{6:[2,135],28:[2,135],29:[2,135],57:[2,135],60:[1,258],90:[2,135],95:[2,135],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{53:259,54:[1,63],55:[1,64]},{6:[2,57],28:[2,57],29:[2,57],30:112,31:[1,76],47:113,58:260,59:110,60:[1,111],61:114,62:115,79:[1,73],93:[1,116],94:[1,117]},{6:[1,261],28:[1,262]},{6:[2,64],28:[2,64],29:[2,64],52:[2,64],57:[2,64]},{7:263,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,27],6:[2,27],28:[2,27],29:[2,27],52:[2,27],57:[2,27],60:[2,27],76:[2,27],81:[2,27],90:[2,27],95:[2,27],97:[2,27],102:[2,27],103:[2,27],106:[2,27],108:[2,27],109:[2,27],110:[2,27],114:[2,27],122:[2,27],125:[2,27],127:[2,27],130:[2,27],133:[2,27],134:[2,27],137:[2,27],138:[2,27],139:[2,27],140:[2,27],141:[2,27],142:[2,27],143:[2,27]},{6:[1,77],29:[1,264]},{1:[2,211],6:[2,211],28:[2,211],29:[2,211],52:[2,211],57:[2,211],60:[2,211],76:[2,211],81:[2,211],90:[2,211],95:[2,211],97:[2,211],106:[2,211],107:88,108:[2,211],109:[2,211],110:[2,211],113:89,114:[2,211],115:72,122:[2,211],130:[2,211],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{7:265,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73], +82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:266,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,214],6:[2,214],28:[2,214],29:[2,214],52:[2,214],57:[2,214],60:[2,214],76:[2,214],81:[2,214],90:[2,214],95:[2,214],97:[2,214],106:[2,214],107:88,108:[2,214],109:[2,214],110:[2,214],113:89,114:[2,214],115:72,122:[2,214],130:[2,214],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,191],6:[2,191],28:[2,191],29:[2,191],52:[2,191],57:[2,191],60:[2,191],76:[2,191],81:[2,191],90:[2,191],95:[2,191],97:[2,191],106:[2,191],108:[2,191],109:[2,191],110:[2,191],114:[2,191],122:[2,191],130:[2,191],133:[2,191],134:[2,191],137:[2,191],138:[2,191],139:[2,191],140:[2,191],141:[2,191],142:[2,191],143:[2,191]},{7:267,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,141],6:[2,141],28:[2,141],29:[2,141],52:[2,141],57:[2,141],60:[2,141],76:[2,141],81:[2,141],90:[2,141],95:[2,141],97:[2,141],102:[1,268],106:[2,141],108:[2,141],109:[2,141],110:[2,141],114:[2,141],122:[2,141],130:[2,141],133:[2,141],134:[2,141],137:[2,141],138:[2,141],139:[2,141],140:[2,141],141:[2,141],142:[2,141],143:[2,141]},{14:269,28:[1,119]},{14:272,28:[1,119],30:270,31:[1,76],62:271,79:[1,73]},{124:273,126:230,127:[1,231]},{29:[1,274],125:[1,275],126:276,127:[1,231]},{29:[2,184],125:[2,184],127:[2,184]},{7:278,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],99:277,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,103],6:[2,103],14:279,28:[1,119],29:[2,103],52:[2,103],57:[2,103],60:[2,103],76:[2,103],81:[2,103],90:[2,103],95:[2,103],97:[2,103],106:[2,103],107:88,108:[1,68],109:[2,103],110:[1,69],113:89,114:[1,71],115:72,122:[2,103],130:[2,103],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,106],6:[2,106],28:[2,106],29:[2,106],52:[2,106],57:[2,106],60:[2,106],76:[2,106],81:[2,106],90:[2,106],95:[2,106],97:[2,106],106:[2,106],108:[2,106],109:[2,106],110:[2,106],114:[2,106],122:[2,106],130:[2,106],133:[2,106],134:[2,106],137:[2,106],138:[2,106],139:[2,106],140:[2,106],141:[2,106],142:[2,106],143:[2,106]},{7:280,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,148],6:[2,148],28:[2,148],29:[2,148],52:[2,148],57:[2,148],60:[2,148],69:[2,148],70:[2,148],71:[2,148],72:[2,148],74:[2,148],76:[2,148],77:[2,148],81:[2,148],88:[2,148],89:[2,148],90:[2,148],95:[2,148],97:[2,148],106:[2,148],108:[2,148],109:[2,148],110:[2,148],114:[2,148],122:[2,148],130:[2,148],133:[2,148],134:[2,148],137:[2,148],138:[2,148],139:[2,148],140:[2,148],141:[2,148],142:[2,148],143:[2,148]},{6:[1,77],29:[1,281]},{7:282,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,71],11:[2,124],13:[2,124],28:[2,71],31:[2,124],33:[2,124],34:[2,124],36:[2,124],37:[2,124],38:[2,124],39:[2,124],40:[2,124],41:[2,124],48:[2,124],49:[2,124],50:[2,124],54:[2,124],55:[2,124],57:[2,71],79:[2,124],82:[2,124],86:[2,124],87:[2,124],92:[2,124],93:[2,124],94:[2,124],95:[2,71],100:[2,124],104:[2,124],105:[2,124],108:[2,124],110:[2,124],112:[2,124],114:[2,124],123:[2,124],129:[2,124],131:[2,124],132:[2,124],133:[2,124],134:[2,124],135:[2,124],136:[2,124]},{6:[1,284],28:[1,285],95:[1,283]},{6:[2,57],7:211,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[2,57],29:[2,57],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],90:[2,57],92:[1,61],93:[1,62],94:[1,60],95:[2,57],98:286,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,56],28:[2,56],29:[2,56],56:287,57:[1,240]},{1:[2,188],6:[2,188],28:[2,188],29:[2,188],52:[2,188],57:[2,188],60:[2,188],76:[2,188],81:[2,188],90:[2,188],95:[2,188],97:[2,188],106:[2,188],108:[2,188],109:[2,188],110:[2,188],114:[2,188],122:[2,188],125:[2,188],130:[2,188],133:[2,188],134:[2,188],137:[2,188],138:[2,188],139:[2,188],140:[2,188],141:[2,188],142:[2,188],143:[2,188]},{7:288,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:289,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{120:[2,166],121:[2,166]},{30:167,31:[1,76],47:168,61:169,62:170,79:[1,73],93:[1,116],94:[1,117],119:290},{1:[2,173],6:[2,173],28:[2,173],29:[2,173],52:[2,173],57:[2,173],60:[2,173],76:[2,173],81:[2,173],90:[2,173],95:[2,173],97:[2,173],106:[2,173],107:88,108:[2,173],109:[1,291],110:[2,173],113:89,114:[2,173],115:72,122:[1,292],130:[2,173],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,174],6:[2,174],28:[2,174],29:[2,174],52:[2,174],57:[2,174],60:[2,174],76:[2,174],81:[2,174],90:[2,174],95:[2,174],97:[2,174],106:[2,174],107:88,108:[2,174],109:[1,293],110:[2,174],113:89,114:[2,174],115:72,122:[2,174],130:[2,174],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[1,295],28:[1,296],81:[1,294]},{6:[2,57],10:177,28:[2,57],29:[2,57],30:178,31:[1,76],32:179,33:[1,74],34:[1,75],44:297,45:176,47:180,49:[1,48],81:[2,57],93:[1,116]},{7:298,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,299],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,91],6:[2,91],28:[2,91],29:[2,91],43:[2,91],52:[2,91],57:[2,91],60:[2,91],69:[2,91],70:[2,91],71:[2,91],72:[2,91],74:[2,91],76:[2,91],77:[2,91],81:[2,91],83:[2,91],88:[2,91],89:[2,91],90:[2,91],95:[2,91],97:[2,91],106:[2,91],108:[2,91],109:[2,91],110:[2,91],114:[2,91],122:[2,91],130:[2,91],133:[2,91],134:[2,91],135:[2,91],136:[2,91],137:[2,91],138:[2,91],139:[2,91],140:[2,91],141:[2,91],142:[2,91],143:[2,91],144:[2,91]},{7:300,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,76:[2,127],79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{76:[2,128],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,40],6:[2,40],28:[2,40],29:[2,40],52:[2,40],57:[2,40],60:[2,40],76:[2,40],81:[2,40],90:[2,40],95:[2,40],97:[2,40],106:[2,40],107:88,108:[2,40],109:[2,40],110:[2,40],113:89,114:[2,40],115:72,122:[2,40],130:[2,40],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{29:[1,301],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[1,284],28:[1,285],90:[1,302]},{6:[2,71],28:[2,71],29:[2,71],57:[2,71],90:[2,71],95:[2,71]},{14:303,28:[1,119]},{6:[2,60],28:[2,60],29:[2,60],52:[2,60],57:[2,60]},{30:112,31:[1,76],47:113,58:304,59:110,60:[1,111],61:114,62:115,79:[1,73],93:[1,116],94:[1,117]},{6:[2,58],28:[2,58],29:[2,58],30:112,31:[1,76],47:113,51:305,57:[2,58],58:109,59:110,60:[1,111],61:114,62:115,79:[1,73],93:[1,116],94:[1,117]},{6:[2,65],28:[2,65],29:[2,65],52:[2,65],57:[2,65],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,28],6:[2,28],28:[2,28],29:[2,28],52:[2,28],57:[2,28],60:[2,28],76:[2,28],81:[2,28],90:[2,28],95:[2,28],97:[2,28],102:[2,28],103:[2,28],106:[2,28],108:[2,28],109:[2,28],110:[2,28],114:[2,28],122:[2,28],125:[2,28],127:[2,28],130:[2,28],133:[2,28],134:[2,28],137:[2,28],138:[2,28],139:[2,28],140:[2,28],141:[2,28],142:[2,28],143:[2,28]},{29:[1,306],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,213],6:[2,213],28:[2,213],29:[2,213],52:[2,213],57:[2,213],60:[2,213],76:[2,213],81:[2,213],90:[2,213],95:[2,213],97:[2,213],106:[2,213],107:88,108:[2,213],109:[2,213],110:[2,213],113:89,114:[2,213],115:72,122:[2,213],130:[2,213],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{14:307,28:[1,119],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{14:308,28:[1,119]},{1:[2,142],6:[2,142],28:[2,142],29:[2,142],52:[2,142],57:[2,142],60:[2,142],76:[2,142],81:[2,142],90:[2,142],95:[2,142],97:[2,142],106:[2,142],108:[2,142],109:[2,142],110:[2,142],114:[2,142],122:[2,142],130:[2,142],133:[2,142],134:[2,142],137:[2,142],138:[2,142],139:[2,142],140:[2,142],141:[2,142],142:[2,142],143:[2,142]},{14:309,28:[1,119]},{14:310,28:[1,119]},{1:[2,146],6:[2,146],28:[2,146],29:[2,146],52:[2,146],57:[2,146],60:[2,146],76:[2,146],81:[2,146],90:[2,146],95:[2,146],97:[2,146],102:[2,146],106:[2,146],108:[2,146],109:[2,146],110:[2,146],114:[2,146],122:[2,146],130:[2,146],133:[2,146],134:[2,146],137:[2,146],138:[2,146],139:[2,146],140:[2,146],141:[2,146],142:[2,146],143:[2,146]},{29:[1,311],125:[1,312],126:276,127:[1,231]},{1:[2,182],6:[2,182],28:[2,182],29:[2,182],52:[2,182],57:[2,182],60:[2,182],76:[2,182],81:[2,182],90:[2,182],95:[2,182],97:[2,182],106:[2,182],108:[2,182],109:[2,182],110:[2,182],114:[2,182],122:[2,182],130:[2,182],133:[2,182],134:[2,182],137:[2,182],138:[2,182],139:[2,182],140:[2,182],141:[2,182],142:[2,182],143:[2,182]},{14:313,28:[1,119]},{29:[2,185],125:[2,185],127:[2,185]},{14:314,28:[1,119],57:[1,315]},{28:[2,138],57:[2,138],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,104],6:[2,104],28:[2,104],29:[2,104],52:[2,104],57:[2,104],60:[2,104],76:[2,104],81:[2,104],90:[2,104],95:[2,104],97:[2,104],106:[2,104],108:[2,104],109:[2,104],110:[2,104],114:[2,104],122:[2,104],130:[2,104],133:[2,104],134:[2,104],137:[2,104],138:[2,104],139:[2,104],140:[2,104],141:[2,104],142:[2,104],143:[2,104]},{1:[2,107],6:[2,107],14:316,28:[1,119],29:[2,107],52:[2,107],57:[2,107],60:[2,107],76:[2,107],81:[2,107],90:[2,107],95:[2,107],97:[2,107],106:[2,107],107:88,108:[1,68],109:[2,107],110:[1,69],113:89,114:[1,71],115:72,122:[2,107],130:[2,107],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{106:[1,317]},{95:[1,318],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,122],6:[2,122],28:[2,122],29:[2,122],43:[2,122],52:[2,122],57:[2,122],60:[2,122],69:[2,122],70:[2,122],71:[2,122],72:[2,122],74:[2,122],76:[2,122],77:[2,122],81:[2,122],88:[2,122],89:[2,122],90:[2,122],95:[2,122],97:[2,122],106:[2,122],108:[2,122],109:[2,122],110:[2,122],114:[2,122],120:[2,122],121:[2,122],122:[2,122],130:[2,122],133:[2,122],134:[2,122],137:[2,122],138:[2,122],139:[2,122],140:[2,122],141:[2,122],142:[2,122],143:[2,122]},{7:211,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],98:319,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:211,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,154],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],91:320,92:[1,61],93:[1,62],94:[1,60],98:153,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,131],28:[2,131],29:[2,131],57:[2,131],90:[2,131],95:[2,131]},{6:[1,284],28:[1,285],29:[1,321]},{1:[2,151],6:[2,151],28:[2,151],29:[2,151],52:[2,151],57:[2,151],60:[2,151],76:[2,151],81:[2,151],90:[2,151],95:[2,151],97:[2,151],106:[2,151],107:88,108:[1,68],109:[2,151],110:[1,69],113:89,114:[1,71],115:72,122:[2,151],130:[2,151],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,153],6:[2,153],28:[2,153],29:[2,153],52:[2,153],57:[2,153],60:[2,153],76:[2,153],81:[2,153],90:[2,153],95:[2,153],97:[2,153],106:[2,153],107:88,108:[1,68],109:[2,153],110:[1,69],113:89,114:[1,71],115:72,122:[2,153],130:[2,153],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{120:[2,172],121:[2,172]},{7:322,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:323,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:324,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,95],6:[2,95],28:[2,95],29:[2,95],43:[2,95],52:[2,95],57:[2,95],60:[2,95],69:[2,95],70:[2,95],71:[2,95],72:[2,95],74:[2,95],76:[2,95],77:[2,95],81:[2,95],88:[2,95],89:[2,95],90:[2,95],95:[2,95],97:[2,95],106:[2,95],108:[2,95],109:[2,95],110:[2,95],114:[2,95],120:[2,95],121:[2,95],122:[2,95],130:[2,95],133:[2,95],134:[2,95],137:[2,95],138:[2,95],139:[2,95],140:[2,95],141:[2,95],142:[2,95],143:[2,95]},{10:177,30:178,31:[1,76],32:179,33:[1,74],34:[1,75],44:325,45:176,47:180,49:[1,48],93:[1,116]},{6:[2,96],10:177,28:[2,96],29:[2,96],30:178,31:[1,76],32:179,33:[1,74],34:[1,75],44:175,45:176,47:180,49:[1,48],57:[2,96],80:326,93:[1,116]},{6:[2,98],28:[2,98],29:[2,98],57:[2,98],81:[2,98]},{6:[2,43],28:[2,43],29:[2,43],57:[2,43],81:[2,43],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{7:327,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{76:[2,126],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,41],6:[2,41],28:[2,41],29:[2,41],52:[2,41],57:[2,41],60:[2,41],76:[2,41],81:[2,41],90:[2,41],95:[2,41],97:[2,41],106:[2,41],108:[2,41],109:[2,41],110:[2,41],114:[2,41],122:[2,41],130:[2,41],133:[2,41],134:[2,41],137:[2,41],138:[2,41],139:[2,41],140:[2,41],141:[2,41],142:[2,41],143:[2,41]},{1:[2,117],6:[2,117],28:[2,117],29:[2,117],43:[2,117],52:[2,117],57:[2,117],60:[2,117],69:[2,117],70:[2,117],71:[2,117],72:[2,117],74:[2,117],76:[2,117],77:[2,117],81:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],95:[2,117],97:[2,117],106:[2,117],108:[2,117],109:[2,117],110:[2,117],114:[2,117],122:[2,117],130:[2,117],133:[2,117],134:[2,117],135:[2,117],136:[2,117],137:[2,117],138:[2,117],139:[2,117],140:[2,117],141:[2,117],142:[2,117],143:[2,117],144:[2,117]},{1:[2,52],6:[2,52],28:[2,52],29:[2,52],52:[2,52],57:[2,52],60:[2,52],76:[2,52],81:[2,52],90:[2,52],95:[2,52],97:[2,52],106:[2,52],108:[2,52],109:[2,52],110:[2,52],114:[2,52],122:[2,52],130:[2,52],133:[2,52],134:[2,52],137:[2,52],138:[2,52],139:[2,52],140:[2,52],141:[2,52],142:[2,52],143:[2,52]},{6:[2,61],28:[2,61],29:[2,61],52:[2,61],57:[2,61]},{6:[2,56],28:[2,56],29:[2,56],56:328,57:[1,213]},{1:[2,212],6:[2,212],28:[2,212],29:[2,212],52:[2,212],57:[2,212],60:[2,212],76:[2,212],81:[2,212],90:[2,212],95:[2,212],97:[2,212],106:[2,212],108:[2,212],109:[2,212],110:[2,212],114:[2,212],122:[2,212],130:[2,212],133:[2,212],134:[2,212],137:[2,212],138:[2,212],139:[2,212],140:[2,212],141:[2,212],142:[2,212],143:[2,212]},{1:[2,189],6:[2,189],28:[2,189],29:[2,189],52:[2,189],57:[2,189],60:[2,189],76:[2,189],81:[2,189],90:[2,189],95:[2,189],97:[2,189],106:[2,189],108:[2,189],109:[2,189],110:[2,189],114:[2,189],122:[2,189],125:[2,189],130:[2,189],133:[2,189],134:[2,189],137:[2,189],138:[2,189],139:[2,189],140:[2,189],141:[2,189],142:[2,189],143:[2,189]},{1:[2,143],6:[2,143],28:[2,143],29:[2,143],52:[2,143],57:[2,143],60:[2,143],76:[2,143],81:[2,143],90:[2,143],95:[2,143],97:[2,143],106:[2,143],108:[2,143],109:[2,143],110:[2,143],114:[2,143],122:[2,143],130:[2,143],133:[2,143],134:[2,143],137:[2,143],138:[2,143],139:[2,143],140:[2,143],141:[2,143],142:[2,143],143:[2,143]},{1:[2,144],6:[2,144],28:[2,144],29:[2,144],52:[2,144],57:[2,144],60:[2,144],76:[2,144],81:[2,144],90:[2,144],95:[2,144],97:[2,144],102:[2,144],106:[2,144],108:[2,144],109:[2,144],110:[2,144],114:[2,144],122:[2,144],130:[2,144],133:[2,144],134:[2,144],137:[2,144],138:[2,144],139:[2,144],140:[2,144],141:[2,144],142:[2,144],143:[2,144]},{1:[2,145],6:[2,145],28:[2,145],29:[2,145],52:[2,145],57:[2,145],60:[2,145],76:[2,145],81:[2,145],90:[2,145],95:[2,145],97:[2,145],102:[2,145],106:[2,145],108:[2,145],109:[2,145],110:[2,145],114:[2,145],122:[2,145],130:[2,145],133:[2,145],134:[2,145],137:[2,145],138:[2,145],139:[2,145],140:[2,145],141:[2,145],142:[2,145],143:[2,145]},{1:[2,180],6:[2,180],28:[2,180],29:[2,180],52:[2,180],57:[2,180],60:[2,180],76:[2,180],81:[2,180],90:[2,180],95:[2,180],97:[2,180],106:[2,180],108:[2,180],109:[2,180],110:[2,180],114:[2,180],122:[2,180],130:[2,180],133:[2,180],134:[2,180],137:[2,180],138:[2,180],139:[2,180],140:[2,180],141:[2,180],142:[2,180],143:[2,180]},{14:329,28:[1,119]},{29:[1,330]},{6:[1,331],29:[2,186],125:[2,186],127:[2,186]},{7:332,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,108],6:[2,108],28:[2,108],29:[2,108],52:[2,108],57:[2,108],60:[2,108],76:[2,108],81:[2,108],90:[2,108],95:[2,108],97:[2,108],106:[2,108],108:[2,108],109:[2,108],110:[2,108],114:[2,108],122:[2,108],130:[2,108],133:[2,108],134:[2,108],137:[2,108],138:[2,108],139:[2,108],140:[2,108],141:[2,108],142:[2,108],143:[2,108]},{1:[2,149],6:[2,149],28:[2,149],29:[2,149],52:[2,149],57:[2,149],60:[2,149],69:[2,149],70:[2,149],71:[2,149],72:[2,149],74:[2,149],76:[2,149],77:[2,149],81:[2,149],88:[2,149],89:[2,149],90:[2,149],95:[2,149],97:[2,149],106:[2,149],108:[2,149],109:[2,149],110:[2,149],114:[2,149],122:[2,149],130:[2,149],133:[2,149],134:[2,149],137:[2,149],138:[2,149],139:[2,149],140:[2,149],141:[2,149],142:[2,149],143:[2,149]},{1:[2,125],6:[2,125],28:[2,125],29:[2,125],52:[2,125],57:[2,125],60:[2,125],69:[2,125],70:[2,125],71:[2,125],72:[2,125],74:[2,125],76:[2,125],77:[2,125],81:[2,125],88:[2,125],89:[2,125],90:[2,125],95:[2,125],97:[2,125],106:[2,125],108:[2,125],109:[2,125],110:[2,125],114:[2,125],122:[2,125],130:[2,125],133:[2,125],134:[2,125],137:[2,125],138:[2,125],139:[2,125],140:[2,125],141:[2,125],142:[2,125],143:[2,125]},{6:[2,132],28:[2,132],29:[2,132],57:[2,132],90:[2,132],95:[2,132]},{6:[2,56],28:[2,56],29:[2,56],56:333,57:[1,240]},{6:[2,133],28:[2,133],29:[2,133],57:[2,133],90:[2,133],95:[2,133]},{1:[2,175],6:[2,175],28:[2,175],29:[2,175],52:[2,175],57:[2,175],60:[2,175],76:[2,175],81:[2,175],90:[2,175],95:[2,175],97:[2,175],106:[2,175],107:88,108:[2,175],109:[2,175],110:[2,175],113:89,114:[2,175],115:72,122:[1,334],130:[2,175],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,177],6:[2,177],28:[2,177],29:[2,177],52:[2,177],57:[2,177],60:[2,177],76:[2,177],81:[2,177],90:[2,177],95:[2,177],97:[2,177],106:[2,177],107:88,108:[2,177],109:[1,335],110:[2,177],113:89,114:[2,177],115:72,122:[2,177],130:[2,177],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,176],6:[2,176],28:[2,176],29:[2,176],52:[2,176],57:[2,176],60:[2,176],76:[2,176],81:[2,176],90:[2,176],95:[2,176],97:[2,176],106:[2,176],107:88,108:[2,176],109:[2,176],110:[2,176],113:89,114:[2,176],115:72,122:[2,176],130:[2,176],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[2,99],28:[2,99],29:[2,99],57:[2,99],81:[2,99]},{6:[2,56],28:[2,56],29:[2,56],56:336,57:[1,250]},{29:[1,337],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[1,261],28:[1,262],29:[1,338]},{29:[1,339]},{1:[2,183],6:[2,183],28:[2,183],29:[2,183],52:[2,183],57:[2,183],60:[2,183],76:[2,183],81:[2,183],90:[2,183],95:[2,183],97:[2,183],106:[2,183],108:[2,183],109:[2,183],110:[2,183],114:[2,183],122:[2,183],130:[2,183],133:[2,183],134:[2,183],137:[2,183],138:[2,183],139:[2,183],140:[2,183],141:[2,183],142:[2,183],143:[2,183]},{29:[2,187],125:[2,187],127:[2,187]},{28:[2,139],57:[2,139],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[1,284],28:[1,285],29:[1,340]},{7:341,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:342,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[1,295],28:[1,296],29:[1,343]},{6:[2,44],28:[2,44],29:[2,44],57:[2,44],81:[2,44]},{6:[2,62],28:[2,62],29:[2,62],52:[2,62],57:[2,62]},{1:[2,181],6:[2,181],28:[2,181],29:[2,181],52:[2,181],57:[2,181],60:[2,181],76:[2,181],81:[2,181],90:[2,181],95:[2,181],97:[2,181],106:[2,181],108:[2,181],109:[2,181],110:[2,181],114:[2,181],122:[2,181],130:[2,181],133:[2,181],134:[2,181],137:[2,181],138:[2,181],139:[2,181],140:[2,181],141:[2,181],142:[2,181],143:[2,181]},{6:[2,134],28:[2,134],29:[2,134],57:[2,134],90:[2,134],95:[2,134]},{1:[2,178],6:[2,178],28:[2,178],29:[2,178],52:[2,178],57:[2,178],60:[2,178],76:[2,178],81:[2,178],90:[2,178],95:[2,178],97:[2,178],106:[2,178],107:88,108:[2,178],109:[2,178],110:[2,178],113:89,114:[2,178],115:72,122:[2,178],130:[2,178],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,179],6:[2,179],28:[2,179],29:[2,179],52:[2,179],57:[2,179],60:[2,179],76:[2,179],81:[2,179],90:[2,179],95:[2,179],97:[2,179],106:[2,179],107:88,108:[2,179],109:[2,179],110:[2,179],113:89,114:[2,179],115:72,122:[2,179],130:[2,179],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[2,100],28:[2,100],29:[2,100],57:[2,100],81:[2,100]}],defaultActions:{63:[2,54],64:[2,55],95:[2,115],200:[2,94]},parseError:function(a,b){if(!b.recoverable)throw new Error(a);this.trace(a)},parse:function(a){var b=this,c=[0],d=[null],e=[],f=this.table,g="",h=0,i=0,j=0,k=1,l=e.slice.call(arguments,1);this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,void 0===this.lexer.yylloc&&(this.lexer.yylloc={});var m=this.lexer.yylloc;e.push(m);var n=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError?this.parseError=this.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var o,p,q,r,s,t,u,v,w,x={};;){if(q=c[c.length-1],this.defaultActions[q]?r=this.defaultActions[q]:(null!==o&&void 0!==o||(o=function(){var a;return a=b.lexer.lex()||k,"number"!=typeof a&&(a=b.symbols_[a]||a),a}()),r=f[q]&&f[q][o]),void 0===r||!r.length||!r[0]){var y="";w=[] +;for(t in f[q])this.terminals_[t]&&t>2&&w.push("'"+this.terminals_[t]+"'");y=this.lexer.showPosition?"Parse error on line "+(h+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[o]||o)+"'":"Parse error on line "+(h+1)+": Unexpected "+(o==k?"end of input":"'"+(this.terminals_[o]||o)+"'"),this.parseError(y,{text:this.lexer.match,token:this.terminals_[o]||o,line:this.lexer.yylineno,loc:m,expected:w})}if(r[0]instanceof Array&&r.length>1)throw new Error("Parse Error: multiple actions possible at state: "+q+", token: "+o);switch(r[0]){case 1:c.push(o),d.push(this.lexer.yytext),e.push(this.lexer.yylloc),c.push(r[1]),o=null,p?(o=p,p=null):(i=this.lexer.yyleng,g=this.lexer.yytext,h=this.lexer.yylineno,m=this.lexer.yylloc,j>0&&j--);break;case 2:if(u=this.productions_[r[1]][1],x.$=d[d.length-u],x._$={first_line:e[e.length-(u||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(u||1)].first_column,last_column:e[e.length-1].last_column},n&&(x._$.range=[e[e.length-(u||1)].range[0],e[e.length-1].range[1]]),void 0!==(s=this.performAction.apply(x,[g,i,h,this.yy,r[1],d,e].concat(l))))return s;u&&(c=c.slice(0,-1*u*2),d=d.slice(0,-1*u),e=e.slice(0,-1*u)),c.push(this.productions_[r[1]][0]),d.push(x.$),e.push(x._$),v=f[c[c.length-2]][c[c.length-1]],c.push(v);break;case 3:return!0}}return!0}};return a.prototype=b,b.Parser=a,new a}();void 0!==a&&void 0!==c&&(c.parser=e,c.Parser=e.Parser,c.parse=function(){return e.parse.apply(e,arguments)},c.main=function(b){b[1]||(console.log("Usage: "+b[0]+" FILE"),d.exit(1));var e=a("fs").readFileSync(a("path").normalize(b[1]),"utf8");return c.parser.parse(e)},void 0!==b&&a.main===b&&c.main(d.argv.slice(1)))}).call(this,a("FWaASH"))},{FWaASH:14,fs:12,path:13}],8:[function(a,b,c){(function(){var b,c,d,e,f,g,h,i,j,k,l,m,n;if(b=a("./coffee-script"),e=a("child_process"),i=a("./helpers"),k=a("path"),j=function(a,c){var d;return d=b._compileFile(c,!1,{runtime:"interp"}),a._compile(d,c)},a.extensions){for(n=b.FILE_EXTENSIONS,l=0,m=n.length;l=0?d+=1:(j=g[0],u.call(e,j)>=0&&(d-=1)),a+=1}return a-1},a.prototype.removeLeadingNewlines=function(){var a,b,c,d;for(d=this.tokens,a=b=0,c=d.length;bf;c=0<=f?++e:--e){for(;"HERECOMMENT"===this.tag(b+c+a);)a+=2;if(null!=d[c]&&("string"==typeof d[c]&&(d[c]=[d[c]]),g=this.tag(b+c+a),u.call(d[c],g)<0))return!1}return!0},a.prototype.looksObjectish=function(a){return this.matchTags(a,"@",null,":")||this.matchTags(a,null,":")},a.prototype.findTagsBackwards=function(a,b){var c,d,g,h,i,j,k;for(c=[];a>=0&&(c.length||(h=this.tag(a),u.call(b,h)<0&&(i=this.tag(a),u.call(f,i)<0||this.tokens[a].generated)&&(j=this.tag(a),u.call(l,j)<0)));)d=this.tag(a),u.call(e,d)>=0&&c.push(this.tag(a)),g=this.tag(a),u.call(f,g)>=0&&c.length&&c.pop(),a-=1;return k=this.tag(a),u.call(b,k)>=0},a.prototype.addImplicitBracesAndParens=function(){var a;return a=[],this.scanTokens(function(c,d,k){var m,n,p,q,r,s,t,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P;if(J=c[0],y=(z=d>0?k[d-1]:[])[0],w=(d"!==y&&"->"!==y&&"["!==y&&"("!==y&&","!==y&&"{"!==y&&"TRY"!==y&&"ELSE"!==y&&"="!==y)for(;r();)m();return s()&&a.pop(),a.push([J,d]),p(1)}if(u.call(f,J)>=0)return a.push([J,d]),p(1);if(u.call(e,J)>=0){for(;q();)r()?m():t()?n():a.pop();a.pop()}if((u.call(i,J)>=0&&c.spaced&&!c.stringEnd||"?"===J&&d>0&&!k[d-1].spaced)&&(u.call(g,w)>=0||u.call(j,w)>=0&&!(null!=(K=k[d+1])?K.spaced:void 0)&&!(null!=(L=k[d+1])?L.newLine:void 0)))return"?"===J&&(J=c[0]="FUNC_EXIST"),G(d+1),p(2);if(u.call(i,J)>=0&&this.matchTags(d+1,"INDENT",null,":")&&!this.findTagsBackwards(d,["CLASS","EXTENDS","IF","CATCH","SWITCH","LEADING_WHEN","FOR","WHILE","UNTIL"]))return G(d+1),a.push(["INDENT",d+2]),p(3);if(":"===J){for(A="@"===this.tag(d-2)?d-2:d-1;"HERECOMMENT"===this.tag(A-2);)A-=2;return this.insideForDeclaration="FOR"===w,I=0===A||(M=this.tag(A-1),u.call(l,M)>=0)||k[A-1].newLine,E()&&(N=E(),D=N[0],C=N[1],("{"===D||"INDENT"===D&&"{"===this.tag(C-1))&&(I||","===this.tag(A-1)||"{"===this.tag(A-1)))?p(1):(H(A,!!I),p(2))}if(t()&&u.call(l,J)>=0&&(E()[2].sameLine=!1),v="OUTDENT"===y||z.newLine,u.call(h,J)>=0||u.call(b,J)>=0&&v)for(;q();)if(O=E(),D=O[0],C=O[1],P=O[2],B=P.sameLine,I=P.startsLine,r()&&","!==y)m();else if(t()&&!this.insideForDeclaration&&B&&"TERMINATOR"!==J&&":"!==y&&n());else{if(!t()||"TERMINATOR"!==J||","===y||I&&this.looksObjectish(d+1))break;n()}if(","===J&&!this.looksObjectish(d+1)&&t()&&!this.insideForDeclaration&&("TERMINATOR"!==w||!this.looksObjectish(d+2)))for(x="OUTDENT"===w?1:0;t();)n(d+x);return p(1)})},a.prototype.addLocationDataToGeneratedTokens=function(){return this.scanTokens(function(a,b,c){var d,e,f,g,h,i;return a[2]?1:a.generated||a.explicit?("{"===a[0]&&(f=null!=(h=c[b+1])?h[2]:void 0)?(e=f.first_line,d=f.first_column):(g=null!=(i=c[b-1])?i[2]:void 0)?(e=g.last_line,d=g.last_column):e=d=0,a[2]={first_line:e,first_column:d,last_line:e,last_column:d},1):1})},a.prototype.normalizeLines=function(){var a,c,e,f,g;return g=e=f=null,c=function(a,c){var e,f,h,i;return";"!==a[1]&&(e=a[0],u.call(m,e)>=0)&&!("TERMINATOR"===a[0]&&(f=this.tag(c+1),u.call(d,f)>=0))&&!("ELSE"===a[0]&&"THEN"!==g)&&!!("CATCH"!==(h=a[0])&&"FINALLY"!==h||"->"!==g&&"=>"!==g)||(i=a[0],u.call(b,i)>=0&&this.tokens[c-1].newLine)},a=function(a,b){return this.tokens.splice(","===this.tag(b-1)?b-1:b,0,f)},this.scanTokens(function(b,h,i){var j,k,l,m,o,p;if("TERMINATOR"===(k=b[0])){if("ELSE"===this.tag(h+1)&&"OUTDENT"!==this.tag(h-1))return i.splice.apply(i,[h,1].concat(v.call(this.indentation()))),1;if(m=this.tag(h+1),u.call(d,m)>=0)return i.splice(h,1),0}if("CATCH"===k)for(j=l=1;l<=2;j=++l)if("OUTDENT"===(o=this.tag(h+j))||"TERMINATOR"===o||"FINALLY"===o)return i.splice.apply(i,[h+j,0].concat(v.call(this.indentation()))),2+j;return u.call(n,k)>=0&&"INDENT"!==this.tag(h+1)&&("ELSE"!==k||"IF"!==this.tag(h+1))?(g=k,p=this.indentation(i[h]),e=p[0],f=p[1],"THEN"===g&&(e.fromThen=!0),i.splice(h+1,0,e),this.detectEnd(h+2,c,a),"THEN"===k&&i.splice(h,1),1):1})},a.prototype.tagPostfixConditionals=function(){var a,b,c;return c=null,b=function(a,b){var c,d;return d=a[0],c=this.tokens[b-1][0],"TERMINATOR"===d||"INDENT"===d&&u.call(n,c)<0},a=function(a,b){if("INDENT"!==a[0]||a.generated&&!a.fromThen)return c[0]="POST_"+c[0]},this.scanTokens(function(d,e){return"IF"!==d[0]?1:(c=d,this.detectEnd(e+1,b,a),1)})},a.prototype.indentation=function(a){var b,c;return b=["INDENT",2],c=["OUTDENT",2],a?(b.generated=c.generated=!0,b.origin=c.origin=a):b.explicit=c.explicit=!0,[b,c]},a.prototype.generate=o,a.prototype.tag=function(a){var b;return null!=(b=this.tokens[a])?b[0]:void 0},a}(),a=[["(",")"],["[","]"],["{","}"],["INDENT","OUTDENT"],["CALL_START","CALL_END"],["PARAM_START","PARAM_END"],["INDEX_START","INDEX_END"]],c.INVERSES=k={},f=[],e=[],r=0,s=a.length;r","=>","[","(","{","--","++"],j=["+","-"],h=["POST_IF","FOR","WHILE","UNTIL","WHEN","BY","LOOP","TERMINATOR"],n=["ELSE","->","=>","TRY","FINALLY","THEN"],m=["TERMINATOR","CATCH","FINALLY","ELSE","OUTDENT","LEADING_WHEN"],l=["TERMINATOR","INDENT","OUTDENT"],b=[".","?.","::","?::"],i.push("DEFER"),g.push("DEFER"),h.push("AWAIT")}).call(this)},{}],10:[function(a,b,c){(function(){var b,d;d=a("./helpers"),d.extend,d.last,b=a("iced-runtime"),c.Scope=function(){function a(b,c,d){this.parent=b,this.expressions=c,this.method=d,this.variables=[{name:"arguments",type:"arguments"}],this.positions={},this.parent||(a.root=this)}return a.root=null,a.prototype.add=function(a,b,c){return this.shared&&!c?this.parent.add(a,b,c):Object.prototype.hasOwnProperty.call(this.positions,a)?this.variables[this.positions[a]].type=b:this.positions[a]=this.variables.push({name:a,type:b})-1},a.prototype.namedMethod=function(){var a;return(null!=(a=this.method)?a.name:void 0)||!this.parent?this.method:this.parent.namedMethod()},a.prototype.find=function(a){return!!this.check(a)||(this.add(a,"var"),!1)},a.prototype.parameter=function(a){if(!this.shared||!this.parent.check(a,!0))return this.add(a,"param")},a.prototype.check=function(a){var b;return!!(this.type(a)||(null!=(b=this.parent)?b.check(a):void 0))},a.prototype.temporary=function(a,b){return a.length>1?"_"+a+(b>1?b-1:""):"_"+(b+parseInt(a,36)).toString(36).replace(/\d/g,"a")},a.prototype.type=function(a){var b,c,d,e;for(e=this.variables,c=0,d=e.length;c>=e,h&&(c|=d),b+=this.encodeBase64(c);return b},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",b.prototype.encodeBase64=function(a){return c[a]||function(){throw new Error("Cannot Base64 encode value: "+a)}()},b}(),c.SourceMap=b}).call(this)},{}],12:[function(a,b,c){},{}],13:[function(a,b,c){(function(a){function b(a,b){for(var c=0,d=a.length-1;d>=0;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c--;c)a.unshift("..");return a}function d(a,b){if(a.filter)return a.filter(b);for(var c=[],d=0;d=-1&&!e;f--){var g=f>=0?arguments[f]:a.cwd();if("string"!=typeof g)throw new TypeError("Arguments to path.resolve must be strings");g&&(c=g+"/"+c,e="/"===g.charAt(0))}return c=b(d(c.split("/"),function(a){return!!a}),!e).join("/"),(e?"/":"")+c||"."},c.normalize=function(a){var e=c.isAbsolute(a),f="/"===g(a,-1);return a=b(d(a.split("/"),function(a){return!!a}),!e).join("/"),a||e||(a="."),a&&f&&(a+="/"),(e?"/":"")+a},c.isAbsolute=function(a){return"/"===a.charAt(0)},c.join=function(){var a=Array.prototype.slice.call(arguments,0);return c.normalize(d(a,function(a,b){if("string"!=typeof a)throw new TypeError("Arguments to path.join must be strings");return a}).join("/"))},c.relative=function(a,b){function d(a){for(var b=0;b=0&&""===a[c];c--);return b>c?[]:a.slice(b,c-b+1)}a=c.resolve(a).substr(1),b=c.resolve(b).substr(1);for(var e=d(a.split("/")),f=d(b.split("/")),g=Math.min(e.length,f.length),h=g,i=0;i0)){c.shift()()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),e.title="browser",e.browser=!0,e.env={},e.argv=[],e.on=d,e.addListener=d,e.once=d,e.off=d,e.removeListener=d,e.removeAllListeners=d,e.emit=d,e.binding=function(a){throw new Error("process.binding is not supported")},e.cwd=function(){return"/"},e.chdir=function(a){throw new Error("process.chdir is not supported")}},{}],15:[function(_dereq_,module,exports){function Context(){}var indexOf=_dereq_("indexof"),Object_keys=function(a){if(Object.keys)return Object.keys(a);var b=[];for(var c in a)b.push(c);return b},forEach=function(a,b){if(a.forEach)return a.forEach(b);for(var c=0;c=a.window))return h();!function(e){c=new d.Deferrals(e,{parent:b,filename:"/Users/max/src/iced/iced-runtime/src/library.iced",funcname:"Pipeliner.waitInQueue"}),a.cb=c.defer({lineno:100}),c._fulfill()}(j)})(e)}}(this)(function(e){return function(){e.n_out++,function(a){if(!e.delay)return a();!function(a){c=new d.Deferrals(a,{parent:b,filename:"/Users/max/src/iced/iced-runtime/src/library.iced",funcname:"Pipeliner.waitInQueue"}),setTimeout(c.defer({lineno:108}),e.delay),c._fulfill()}(a)}(function(){return a()})}}(this))},a.prototype.__defer=function(a,b){var c,e,f,g;f=d.findDeferral(arguments),function(c){return function(c){g=new d.Deferrals(c,{parent:f,filename:"/Users/max/src/iced/iced-runtime/src/library.iced",funcname:"Pipeliner.__defer"}),e=g.defer({lineno:122}),a[0]=function(){var a,c;return a=1<=arguments.length?h.call(arguments,0):[],null!=(c=b.assign_fn)&&c.apply(null,a),e()},g._fulfill()}}()(function(a){return function(){if(a.n_out--,a.cb)return c=a.cb,a.cb=null,c()}}(this))},a.prototype._defer=function(a){var b;return b=[],this.__defer(b,a),b[0]},a.prototype.flush=function(a){var b,c,e,f;c=a,b=d.findDeferral(arguments),e=[],(f=function(a){var c;return function(g){var h,i,j;if(h=function(){return g(e)},i=function(){return d.trampoline(function(){return f(g)})},j=function(a){return e.push(a),i()},!a.n_out)return h();!function(e){c=new d.Deferrals(e,{parent:b,filename:"/Users/max/src/iced/iced-runtime/src/library.iced",funcname:"Pipeliner.flush"}),a.cb=c.defer({lineno:151}),c._fulfill()}(j)}}(this))(c)},a}()}).call(this)},{"./const":17,"./runtime":20}],19:[function(a,b,c){(function(){var b,d,e,f,g,h;for(c.const=a("./const"),e=[a("./runtime"),a("./library")],g=0,h=e.length;g")+" ("+a[d.filename]+":"+(a[d.lineno]+1)+")"},j=function(a){return"undefined"!=typeof console&&null!==console?console.error("ICED warning: "+a):void 0},c.trampoline=i=function(a){return h(500)?void 0!==b&&null!==b?b.nextTick(a):setTimeout(a):a()},c.Deferrals=function(){function a(a,b){this.trace=b,this.continuation=a,this.count=1,this.ret=null}return a.prototype._call=function(a){var b;return this.continuation?(k=a,b=this.continuation,this.continuation=null,b(this.ret)):j("Entered dead await at "+m(a))},a.prototype._fulfill=function(a,b){if(!(--this.count>0))return i(function(a){return function(){return a._call(b)}}(this))},a.prototype.defer=function(a){var b;return this.count++,b=this,f(b,a,null,this.trace)},a}(),c.findDeferral=function(a){var b,c,e;for(c=0,e=a.length;c0&&b-1 in a))}function d(a,b,c){if($.isFunction(b))return $.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return $.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(da.test(b))return $.filter(b,a,c);b=$.filter(b,a)}return $.grep(a,function(a){return U.call(b,a)>=0!==c})}function e(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function f(a){var b=ja[a]={};return $.each(a.match(ia)||[],function(a,c){b[c]=!0}),b}function g(){Z.removeEventListener("DOMContentLoaded",g,!1),a.removeEventListener("load",g,!1),$.ready()}function h(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=$.expando+h.uid++}function i(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(pa,"-$1").toLowerCase(),"string"==typeof(c=a.getAttribute(d))){try{c="true"===c||"false"!==c&&("null"===c?null:+c+""===c?+c:oa.test(c)?$.parseJSON(c):c)}catch(a){}na.set(a,b,c)}else c=void 0;return c}function j(){return!0}function k(){return!1}function l(){try{return Z.activeElement}catch(a){}}function m(a,b){return $.nodeName(a,"table")&&$.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function n(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function o(a){var b=Ea.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function p(a,b){for(var c=0,d=a.length;c")).appendTo(b.documentElement),b=Ga[0].contentDocument,b.write(),b.close(),c=t(a,b),Ga.detach()),Ha[a]=c),c}function v(a,b,c){var d,e,f,g,h=a.style;return c=c||Ka(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||$.contains(a.ownerDocument,a)||(g=$.style(a,b)),Ja.test(g)&&Ia.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function w(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}function x(a,b){if(b in a)return b;for(var c=b[0].toUpperCase()+b.slice(1),d=b,e=Qa.length;e--;)if((b=Qa[e]+c)in a)return b;return d}function y(a,b,c){var d=Ma.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function z(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;f<4;f+=2)"margin"===c&&(g+=$.css(a,c+ra[f],!0,e)),d?("content"===c&&(g-=$.css(a,"padding"+ra[f],!0,e)),"margin"!==c&&(g-=$.css(a,"border"+ra[f]+"Width",!0,e))):(g+=$.css(a,"padding"+ra[f],!0,e),"padding"!==c&&(g+=$.css(a,"border"+ra[f]+"Width",!0,e)));return g}function A(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ka(a),g="border-box"===$.css(a,"boxSizing",!1,f);if(e<=0||null==e){if(e=v(a,b,f),(e<0||null==e)&&(e=a.style[b]),Ja.test(e))return e;d=g&&(Y.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+z(a,b,c||(g?"border":"content"),d,f)+"px"}function B(a,b){for(var c,d,e,f=[],g=0,h=a.length;g=0&&c=0},isPlainObject:function(a){return"object"===$.type(a)&&!a.nodeType&&!$.isWindow(a)&&!(a.constructor&&!X.call(a.constructor.prototype,"isPrototypeOf"))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?V[W.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;(a=$.trim(a))&&(1===a.indexOf("use strict")?(b=Z.createElement("script"),b.text=a,Z.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,_)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,d){var e=0,f=a.length,g=c(a);if(d){if(g)for(;eu.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function d(a){return a[L]=!0,a}function e(a){var b=E.createElement("div");try{return!!a(b)}catch(a){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function f(a,b){for(var c=a.split("|"),d=a.length;d--;)u.attrHandle[c[d]]=b}function g(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||T)-(~a.sourceIndex||T);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function h(a){return d(function(b){return b=+b,d(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function i(a){return a&&void 0!==a.getElementsByTagName&&a}function j(){}function k(a){for(var b=0,c=a.length,d="";b1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function n(a,c,d){for(var e=0,f=c.length;e-1&&(d[j]=!(g[j]=l))}}else t=o(t===g?t.splice(q,t.length):t),f?f(null,g,t,i):Y.apply(g,t)})}function q(a){for(var b,c,d,e=a.length,f=u.relative[a[0].type],g=f||u.relative[" "],h=f?1:0,i=l(function(a){return a===b},g,!0),j=l(function(a){return $(b,a)>-1},g,!0),n=[function(a,c,d){var e=!f&&(d||c!==A)||((b=c).nodeType?i(a,c,d):j(a,c,d));return b=null,e}];h1&&m(n),h>1&&k(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ga,"$1"),c,h0,f=a.length>0,g=function(d,g,h,i,j){var k,l,m,n=0,p="0",q=d&&[],r=[],s=A,t=d||f&&u.find.TAG("*",j),v=N+=null==s?1:Math.random()||.1,w=t.length;for(j&&(A=g!==E&&g);p!==w&&null!=(k=t[p]);p++){if(f&&k){for(l=0;m=a[l++];)if(m(k,g,h)){i.push(k);break}j&&(N=v)}e&&((k=!m&&k)&&n--,d&&q.push(k))}if(n+=p,e&&p!==n){for(l=0;m=c[l++];)m(q,r,g,h);if(d){if(n>0)for(;p--;)q[p]||r[p]||(r[p]=W.call(i));r=o(r)}Y.apply(i,r),j&&!d&&r.length>0&&n+c.length>1&&b.uniqueSort(i)}return j&&(N=v,A=s),q};return e?d(g):g}var s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L="sizzle"+1*new Date,M=a.document,N=0,O=0,P=c(),Q=c(),R=c(),S=function(a,b){return a===b&&(C=!0),0},T=1<<31,U={}.hasOwnProperty,V=[],W=V.pop,X=V.push,Y=V.push,Z=V.slice,$=function(a,b){for(var c=0,d=a.length;c+~]|"+aa+")"+aa+"*"),ja=new RegExp("="+aa+"*([^\\]'\"]*?)"+aa+"*\\]","g"),ka=new RegExp(ea),la=new RegExp("^"+ca+"$"),ma={ID:new RegExp("^#("+ba+")"),CLASS:new RegExp("^\\.("+ba+")"),TAG:new RegExp("^("+ba.replace("w","w*")+")"),ATTR:new RegExp("^"+da),PSEUDO:new RegExp("^"+ea),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+aa+"*(even|odd|(([+-]|)(\\d*)n|)"+aa+"*(?:([+-]|)"+aa+"*(\\d+)|))"+aa+"*\\)|)","i"),bool:new RegExp("^(?:"+_+")$","i"),needsContext:new RegExp("^"+aa+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+aa+"*((?:-\\d)?\\d*)"+aa+"*\\)|)(?=[^-]|$)","i")},na=/^(?:input|select|textarea|button)$/i,oa=/^h\d$/i,pa=/^[^{]+\{\s*\[native \w/,qa=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ra=/[+~]/,sa=/'|\\/g,ta=new RegExp("\\\\([\\da-f]{1,6}"+aa+"?|("+aa+")|.)","ig"),ua=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},va=function(){D()};try{Y.apply(V=Z.call(M.childNodes),M.childNodes),V[M.childNodes.length].nodeType}catch(a){Y={apply:V.length?function(a,b){X.apply(a,Z.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}t=b.support={},w=b.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},D=b.setDocument=function(a){var b,c,d=a?a.ownerDocument||a:M;return d!==E&&9===d.nodeType&&d.documentElement?(E=d,F=d.documentElement,c=d.defaultView,c&&c!==c.top&&(c.addEventListener?c.addEventListener("unload",va,!1):c.attachEvent&&c.attachEvent("onunload",va)),G=!w(d),t.attributes=e(function(a){return a.className="i",!a.getAttribute("className")}),t.getElementsByTagName=e(function(a){return a.appendChild(d.createComment("")),!a.getElementsByTagName("*").length}),t.getElementsByClassName=pa.test(d.getElementsByClassName),t.getById=e(function(a){return F.appendChild(a).id=L,!d.getElementsByName||!d.getElementsByName(L).length}),t.getById?(u.find.ID=function(a,b){if(void 0!==b.getElementById&&G){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},u.filter.ID=function(a){var b=a.replace(ta,ua);return function(a){return a.getAttribute("id")===b}}):(delete u.find.ID,u.filter.ID=function(a){var b=a.replace(ta,ua);return function(a){var c=void 0!==a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),u.find.TAG=t.getElementsByTagName?function(a,b){return void 0!==b.getElementsByTagName?b.getElementsByTagName(a):t.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},u.find.CLASS=t.getElementsByClassName&&function(a,b){if(G)return b.getElementsByClassName(a)},I=[],H=[],(t.qsa=pa.test(d.querySelectorAll))&&(e(function(a){F.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&H.push("[*^$]="+aa+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||H.push("\\["+aa+"*(?:value|"+_+")"),a.querySelectorAll("[id~="+L+"-]").length||H.push("~="),a.querySelectorAll(":checked").length||H.push(":checked"),a.querySelectorAll("a#"+L+"+*").length||H.push(".#.+[+~]")}),e(function(a){var b=d.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&H.push("name"+aa+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||H.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),H.push(",.*:")})),(t.matchesSelector=pa.test(J=F.matches||F.webkitMatchesSelector||F.mozMatchesSelector||F.oMatchesSelector||F.msMatchesSelector))&&e(function(a){t.disconnectedMatch=J.call(a,"div"),J.call(a,"[s!='']:x"),I.push("!=",ea)}),H=H.length&&new RegExp(H.join("|")),I=I.length&&new RegExp(I.join("|")),b=pa.test(F.compareDocumentPosition),K=b||pa.test(F.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},S=b?function(a,b){if(a===b)return C=!0,0;var c=!a.compareDocumentPosition-!b.compareDocumentPosition;return c?c:(c=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&c||!t.sortDetached&&b.compareDocumentPosition(a)===c?a===d||a.ownerDocument===M&&K(M,a)?-1:b===d||b.ownerDocument===M&&K(M,b)?1:B?$(B,a)-$(B,b):0:4&c?-1:1)}:function(a,b){if(a===b)return C=!0,0;var c,e=0,f=a.parentNode,h=b.parentNode,i=[a],j=[b];if(!f||!h)return a===d?-1:b===d?1:f?-1:h?1:B?$(B,a)-$(B,b):0;if(f===h)return g(a,b);for(c=a;c=c.parentNode;)i.unshift(c);for(c=b;c=c.parentNode;)j.unshift(c);for(;i[e]===j[e];)e++;return e?g(i[e],j[e]):i[e]===M?-1:j[e]===M?1:0},d):E},b.matches=function(a,c){return b(a,null,null,c)},b.matchesSelector=function(a,c){if((a.ownerDocument||a)!==E&&D(a),c=c.replace(ja,"='$1']"),t.matchesSelector&&G&&(!I||!I.test(c))&&(!H||!H.test(c)))try{var d=J.call(a,c);if(d||t.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(a){}return b(c,E,null,[a]).length>0},b.contains=function(a,b){return(a.ownerDocument||a)!==E&&D(a),K(a,b)},b.attr=function(a,b){(a.ownerDocument||a)!==E&&D(a);var c=u.attrHandle[b.toLowerCase()],d=c&&U.call(u.attrHandle,b.toLowerCase())?c(a,b,!G):void 0;return void 0!==d?d:t.attributes||!G?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null},b.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},b.uniqueSort=function(a){var b,c=[],d=0,e=0;if(C=!t.detectDuplicates,B=!t.sortStable&&a.slice(0),a.sort(S),C){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return B=null,a},v=b.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=v(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d++];)c+=v(b);return c},u=b.selectors={cacheLength:50,createPseudo:d,match:ma,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ta,ua),a[3]=(a[3]||a[4]||a[5]||"").replace(ta,ua),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||b.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&b.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return ma.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&ka.test(c)&&(b=x(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ta,ua).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=P[a+" "];return b||(b=new RegExp("(^|"+aa+")"+a+"("+aa+"|$)"))&&P(a,function(a){return b.test("string"==typeof a.className&&a.className||void 0!==a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,c,d){return function(e){var f=b.attr(e,a);return null==f?"!="===c:!c||(f+="","="===c?f===d:"!="===c?f!==d:"^="===c?d&&0===f.indexOf(d):"*="===c?d&&f.indexOf(d)>-1:"$="===c?d&&f.slice(-d.length)===d:"~="===c?(" "+f.replace(fa," ")+" ").indexOf(d)>-1:"|="===c&&(f===d||f.slice(0,d.length+1)===d+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[L]||(q[L]={}),j=k[a]||[],n=j[0]===N&&j[1],m=j[0]===N&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[N,n,m];break}}else if(s&&(j=(b[L]||(b[L]={}))[a])&&j[0]===N)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[L]||(l[L]={}))[a]=[N,m]),l!==b)););return(m-=e)===d||m%d==0&&m/d>=0}}},PSEUDO:function(a,c){var e,f=u.pseudos[a]||u.setFilters[a.toLowerCase()]||b.error("unsupported pseudo: "+a);return f[L]?f(c):f.length>1?(e=[a,a,"",c],u.setFilters.hasOwnProperty(a.toLowerCase())?d(function(a,b){for(var d,e=f(a,c),g=e.length;g--;)d=$(a,e[g]),a[d]=!(b[d]=e[g])}):function(a){return f(a,0,e)}):f}},pseudos:{not:d(function(a){var b=[],c=[],e=y(a.replace(ga,"$1"));return e[L]?d(function(a,b,c,d){for(var f,g=e(a,null,d,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,d,f){return b[0]=a,e(b,null,f,c),b[0]=null,!c.pop()}}),has:d(function(a){return function(c){return b(a,c).length>0}}),contains:d(function(a){return a=a.replace(ta,ua),function(b){return(b.textContent||b.innerText||v(b)).indexOf(a)>-1}}),lang:d(function(a){return la.test(a||"")||b.error("unsupported lang: "+a),a=a.replace(ta,ua).toLowerCase(),function(b){var c;do{if(c=G?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return(c=c.toLowerCase())===a||0===c.indexOf(a+"-")}while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===F},focus:function(a){return a===E.activeElement&&(!E.hasFocus||E.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!u.pseudos.empty(a)},header:function(a){return oa.test(a.nodeName)},input:function(a){return na.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:h(function(){return[0]}),last:h(function(a,b){return[b-1]}),eq:h(function(a,b,c){return[c<0?c+b:c]}),even:h(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:h(function(a,b,c){for(var d=c<0?c+b:c;++d2&&"ID"===(g=f[0]).type&&t.getById&&9===b.nodeType&&G&&u.relative[f[1].type]){if(!(b=(u.find.ID(g.matches[0].replace(ta,ua),b)||[])[0]))return c;l&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=ma.needsContext.test(a)?0:f.length;e--&&(g=f[e],!u.relative[h=g.type]);)if((j=u.find[h])&&(d=j(g.matches[0].replace(ta,ua),ra.test(f[0].type)&&i(b.parentNode)||b))){if(f.splice(e,1),!(a=d.length&&k(f)))return Y.apply(c,d),c;break}}return(l||y(a,m))(d,b,!G,c,ra.test(a)&&i(b.parentNode)||b),c},t.sortStable=L.split("").sort(S).join("")===L,t.detectDuplicates=!!C,D(),t.sortDetached=e(function(a){return 1&a.compareDocumentPosition(E.createElement("div"))}),e(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||f("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),t.attributes&&e(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||f("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),e(function(a){return null==a.getAttribute("disabled")})||f(_,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),b}(a);$.find=aa,$.expr=aa.selectors,$.expr[":"]=$.expr.pseudos,$.unique=aa.uniqueSort,$.text=aa.getText,$.isXMLDoc=aa.isXML,$.contains=aa.contains;var ba=$.expr.match.needsContext,ca=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,da=/^.[^:#\[\.,]*$/;$.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?$.find.matchesSelector(d,a)?[d]:[]:$.find.matches(a,$.grep(b,function(a){return 1===a.nodeType}))},$.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack($(a).filter(function(){for(b=0;b1?$.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(d(this,a||[],!1))},not:function(a){return this.pushStack(d(this,a||[],!0))},is:function(a){return!!d(this,"string"==typeof a&&ba.test(a)?$(a):a||[],!1).length}});var ea,fa=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;($.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(!(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:fa.exec(a))||!c[1]&&b)return!b||b.jquery?(b||ea).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof $?b[0]:b,$.merge(this,$.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:Z,!0)),ca.test(c[1])&&$.isPlainObject(b))for(c in b)$.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=Z.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=Z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):$.isFunction(a)?void 0!==ea.ready?ea.ready(a):a($):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),$.makeArray(a,this))}).prototype=$.fn,ea=$(Z);var ga=/^(?:parents|prev(?:Until|All))/,ha={children:!0,contents:!0,next:!0,prev:!0};$.extend({dir:function(a,b,c){for(var d=[],e=void 0!==c;(a=a[b])&&9!==a.nodeType;)if(1===a.nodeType){if(e&&$(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),$.fn.extend({has:function(a){var b=$(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&$.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?$.unique(f):f)},index:function(a){return a?"string"==typeof a?U.call($(a),this[0]):U.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack($.unique($.merge(this.get(),$(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}),$.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return $.dir(a,"parentNode")},parentsUntil:function(a,b,c){return $.dir(a,"parentNode",c)},next:function(a){return e(a,"nextSibling")},prev:function(a){return e(a,"previousSibling")},nextAll:function(a){return $.dir(a,"nextSibling")},prevAll:function(a){return $.dir(a,"previousSibling")},nextUntil:function(a,b,c){return $.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return $.dir(a,"previousSibling",c)},siblings:function(a){return $.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return $.sibling(a.firstChild)},contents:function(a){return a.contentDocument||$.merge([],a.childNodes)}},function(a,b){$.fn[a]=function(c,d){var e=$.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=$.filter(d,e)),this.length>1&&(ha[a]||$.unique(e),ga.test(a)&&e.reverse()),this.pushStack(e)}});var ia=/\S+/g,ja={};$.Callbacks=function(a){a="string"==typeof a?ja[a]||f(a):$.extend({},a);var b,c,d,e,g,h,i=[],j=!a.once&&[],k=function(f){for(b=a.memory&&f,c=!0,h=e||0,e=0,g=i.length,d=!0;i&&h-1;)i.splice(c,1),d&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return a?$.inArray(a,i)>-1:!(!i||!i.length)},empty:function(){return i=[],g=0,this},disable:function(){return i=j=b=void 0,this},disabled:function(){return!i},lock:function(){return j=void 0,b||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return!i||c&&!j||(b=b||[],b=[a,b.slice?b.slice():b],d?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!c}};return l},$.extend({Deferred:function(a){var b=[["resolve","done",$.Callbacks("once memory"),"resolved"],["reject","fail",$.Callbacks("once memory"),"rejected"],["notify","progress",$.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return $.Deferred(function(c){$.each(b,function(b,f){var g=$.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&$.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?$.extend(a,d):d}},e={};return d.pipe=d.then,$.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this}, +e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=R.call(arguments),g=f.length,h=1!==g||a&&$.isFunction(a.promise)?g:0,i=1===h?a:$.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?R.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=new Array(g),c=new Array(g),d=new Array(g);e0||(ka.resolveWith(Z,[$]),$.fn.triggerHandler&&($(Z).triggerHandler("ready"),$(Z).off("ready"))))}}),$.ready.promise=function(b){return ka||(ka=$.Deferred(),"complete"===Z.readyState?setTimeout($.ready):(Z.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1))),ka.promise(b)},$.ready.promise();var la=$.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===$.type(c)){e=!0;for(h in c)$.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,$.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call($(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){na.remove(this,a)})}}),$.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=ma.get(a,b),c&&(!d||$.isArray(c)?d=ma.access(a,b,$.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=$.queue(a,b),d=c.length,e=c.shift(),f=$._queueHooks(a,b),g=function(){$.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return ma.get(a,c)||ma.access(a,c,{empty:$.Callbacks("once memory").add(function(){ma.remove(a,[b+"queue",c])})})}}),$.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",Y.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();Y.focusinBubbles="onfocusin"in a;var ua=/^key/,va=/^(?:mouse|pointer|contextmenu)|click/,wa=/^(?:focusinfocus|focusoutblur)$/,xa=/^([^.]*)(?:\.(.+)|)$/;$.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ma.get(a);if(q)for(c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=$.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return void 0!==$&&$.event.triggered!==b.type?$.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(ia)||[""],j=b.length;j--;)h=xa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=$.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=$.event.special[n]||{},k=$.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&$.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),$.event.global[n]=!0)},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ma.hasData(a)&&ma.get(a);if(q&&(i=q.events)){for(b=(b||"").match(ia)||[""],j=b.length;j--;)if(h=xa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){for(l=$.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;f--;)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||$.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)$.event.remove(a,n+b[j],c,d,!0);$.isEmptyObject(i)&&(delete q.handle,ma.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,j,k,l,m=[d||Z],n=X.call(b,"type")?b.type:b,o=X.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||Z,3!==d.nodeType&&8!==d.nodeType&&!wa.test(n+$.event.triggered)&&(n.indexOf(".")>=0&&(o=n.split("."),n=o.shift(),o.sort()),j=n.indexOf(":")<0&&"on"+n,b=b[$.expando]?b:new $.Event(n,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=o.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:$.makeArray(c,[b]),l=$.event.special[n]||{},e||!l.trigger||l.trigger.apply(d,c)!==!1)){if(!e&&!l.noBubble&&!$.isWindow(d)){for(i=l.delegateType||n,wa.test(i+n)||(g=g.parentNode);g;g=g.parentNode)m.push(g),h=g;h===(d.ownerDocument||Z)&&m.push(h.defaultView||h.parentWindow||a)}for(f=0;(g=m[f++])&&!b.isPropagationStopped();)b.type=f>1?i:l.bindType||n,k=(ma.get(g,"events")||{})[b.type]&&ma.get(g,"handle"),k&&k.apply(g,c),(k=j&&g[j])&&k.apply&&$.acceptData(g)&&(b.result=k.apply(g,c),b.result===!1&&b.preventDefault());return b.type=n,e||b.isDefaultPrevented()||l._default&&l._default.apply(m.pop(),c)!==!1||!$.acceptData(d)||j&&$.isFunction(d[n])&&!$.isWindow(d)&&(h=d[j],h&&(d[j]=null),$.event.triggered=n,d[n](),$.event.triggered=void 0,h&&(d[j]=h)),b.result}},dispatch:function(a){a=$.event.fix(a);var b,c,d,e,f,g=[],h=R.call(arguments),i=(ma.get(this,"events")||{})[a.type]||[],j=$.event.special[a.type]||{};if(h[0]=a,a.delegateTarget=this,!j.preDispatch||j.preDispatch.call(this,a)!==!1){for(g=$.event.handlers.call(this,a,i),b=0;(e=g[b++])&&!a.isPropagationStopped();)for(a.currentTarget=e.elem,c=0;(f=e.handlers[c++])&&!a.isImmediatePropagationStopped();)a.namespace_re&&!a.namespace_re.test(f.namespace)||(a.handleObj=f,a.data=f.data,void 0!==(d=(($.event.special[f.origType]||{}).handle||f.handler).apply(e.elem,h))&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()));return j.postDispatch&&j.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;c=0:$.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,za=/<([\w:]+)/,Aa=/<|&#?\w+;/,Ba=/<(?:script|style|link)/i,Ca=/checked\s*(?:[^=]|=\s*.checked.)/i,Da=/^$|\/(?:java|ecma)script/i,Ea=/^true\/(.*)/,Fa={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Fa.optgroup=Fa.option,Fa.tbody=Fa.tfoot=Fa.colgroup=Fa.caption=Fa.thead,Fa.th=Fa.td,$.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=$.contains(a.ownerDocument,a);if(!(Y.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||$.isXMLDoc(a)))for(g=r(h),f=r(a),d=0,e=f.length;d0&&p(g,!i&&r(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;m")+h[2],j=h[0];j--;)f=f.lastChild;$.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));for(k.textContent="",m=0;e=l[m++];)if((!d||$.inArray(e,d)===-1)&&(i=$.contains(e.ownerDocument,e),f=r(k.appendChild(e),"script"),i&&p(f),c))for(j=0;e=f[j++];)Da.test(e.type||"")&&c.push(e);return k},cleanData:function(a){for(var b,c,d,e,f=$.event.special,g=0;void 0!==(c=a[g]);g++){if($.acceptData(c)&&(e=c[ma.expando])&&(b=ma.cache[e])){if(b.events)for(d in b.events)f[d]?$.event.remove(c,d):$.removeEvent(c,d,b.handle);ma.cache[e]&&delete ma.cache[e]}delete na.cache[c[na.expando]]}}}),$.fn.extend({text:function(a){return la(this,function(a){return void 0===a?$.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){m(this,a).appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=m(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?$.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||$.cleanData(r(c)),c.parentNode&&(b&&$.contains(c.ownerDocument,c)&&p(r(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&($.cleanData(r(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return $.clone(this,a,b)})},html:function(a){return la(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Ba.test(a)&&!Fa[(za.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ya,"<$1>");try{for(;c1&&"string"==typeof m&&!Y.checkClone&&Ca.test(m))return this.each(function(c){var d=k.eq(c);p&&(a[0]=m.call(this,c,d.html())),d.domManip(a,b)});if(j&&(c=$.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(e=$.map(r(c,"script"),n),f=e.length;i\s*$/g,"")))}return this}}),$.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){$.fn[a]=function(a){for(var c,d=[],e=$(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),$(e[g])[b](c),T.apply(d,c.get());return this.pushStack(d)}});var Ga,Ha={},Ia=/^margin/,Ja=new RegExp("^("+qa+")(?!px)[a-z%]+$","i"),Ka=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};!function(){function b(){g.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",g.innerHTML="",e.appendChild(f);var b=a.getComputedStyle(g,null);c="1%"!==b.top,d="4px"===b.width,e.removeChild(f)}var c,d,e=Z.documentElement,f=Z.createElement("div"),g=Z.createElement("div");g.style&&(g.style.backgroundClip="content-box",g.cloneNode(!0).style.backgroundClip="",Y.clearCloneStyle="content-box"===g.style.backgroundClip,f.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",f.appendChild(g),a.getComputedStyle&&$.extend(Y,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return null==d&&b(),d},reliableMarginRight:function(){var b,c=g.appendChild(Z.createElement("div"));return c.style.cssText=g.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",g.style.width="1px",e.appendChild(f),b=!parseFloat(a.getComputedStyle(c,null).marginRight),e.removeChild(f),g.removeChild(c),b}}))}(),$.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var La=/^(none|table(?!-c[ea]).+)/,Ma=new RegExp("^("+qa+")(.*)$","i"),Na=new RegExp("^([+-])=("+qa+")","i"),Oa={position:"absolute",visibility:"hidden",display:"block"},Pa={letterSpacing:"0",fontWeight:"400"},Qa=["Webkit","O","Moz","ms"];$.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=v(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=$.camelCase(b),i=a.style;if(b=$.cssProps[h]||($.cssProps[h]=x(i,h)),g=$.cssHooks[b]||$.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];f=typeof c,"string"===f&&(e=Na.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat($.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||$.cssNumber[h]||(c+="px"),Y.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c))}},css:function(a,b,c,d){var e,f,g,h=$.camelCase(b);return b=$.cssProps[h]||($.cssProps[h]=x(a.style,h)),g=$.cssHooks[b]||$.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=v(a,b,d)),"normal"===e&&b in Pa&&(e=Pa[b]),""===c||c?(f=parseFloat(e),c===!0||$.isNumeric(f)?f||0:e):e}}),$.each(["height","width"],function(a,b){$.cssHooks[b]={get:function(a,c,d){if(c)return La.test($.css(a,"display"))&&0===a.offsetWidth?$.swap(a,Oa,function(){return A(a,b,d)}):A(a,b,d)},set:function(a,c,d){var e=d&&Ka(a);return y(a,c,d?z(a,b,d,"border-box"===$.css(a,"boxSizing",!1,e),e):0)}}}),$.cssHooks.marginRight=w(Y.reliableMarginRight,function(a,b){if(b)return $.swap(a,{display:"inline-block"},v,[a,"marginRight"])}),$.each({margin:"",padding:"",border:"Width"},function(a,b){$.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ra[d]+b]=f[d]||f[d-2]||f[0];return e}},Ia.test(a)||($.cssHooks[a+b].set=y)}),$.fn.extend({css:function(a,b){return la(this,function(a,b,c){var d,e,f={},g=0;if($.isArray(b)){for(d=Ka(a),e=b.length;g1)},show:function(){return B(this,!0)},hide:function(){return B(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){sa(this)?$(this).show():$(this).hide()})}}),$.Tween=C,C.prototype={constructor:C,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||($.cssNumber[c]?"":"px")},cur:function(){var a=C.propHooks[this.prop];return a&&a.get?a.get(this):C.propHooks._default.get(this)},run:function(a){var b,c=C.propHooks[this.prop];return this.options.duration?this.pos=b=$.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):C.propHooks._default.set(this),this}},C.prototype.init.prototype=C.prototype,C.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=$.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){$.fx.step[a.prop]?$.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[$.cssProps[a.prop]]||$.cssHooks[a.prop])?$.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},C.propHooks.scrollTop=C.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},$.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},$.fx=C.prototype.init,$.fx.step={};var Ra,Sa,Ta=/^(?:toggle|show|hide)$/,Ua=new RegExp("^(?:([+-])=|)("+qa+")([a-z%]*)$","i"),Va=/queueHooks$/,Wa=[G],Xa={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ua.exec(b),f=e&&e[3]||($.cssNumber[a]?"":"px"),g=($.cssNumber[a]||"px"!==f&&+d)&&Ua.exec($.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do{h=h||".5",g/=h,$.style(c.elem,a,g+f)}while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};$.Animation=$.extend(I,{tweener:function(a,b){$.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;d1)},removeAttr:function(a){return this.each(function(){$.removeAttr(this,a)})}}),$.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return void 0===a.getAttribute?$.prop(a,b,c):(1===f&&$.isXMLDoc(a)||(b=b.toLowerCase(),d=$.attrHooks[b]||($.expr.match.bool.test(b)?Ya:void 0)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=$.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void $.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(ia);if(f&&1===a.nodeType)for(;c=f[e++];)d=$.propFix[c]||c,$.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!Y.radioValue&&"radio"===b&&$.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Ya={set:function(a,b,c){return b===!1?$.removeAttr(a,c):a.setAttribute(c,c),c}},$.each($.expr.match.bool.source.match(/\w+/g),function(a,b){var c=Za[b]||$.find.attr;Za[b]=function(a,b,d){var e,f;return d||(f=Za[b],Za[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,Za[b]=f),e}});var $a=/^(?:input|select|textarea|button)$/i;$.fn.extend({prop:function(a,b){return la(this,$.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[$.propFix[a]||a]})}}),$.extend({propFix:{for:"htmlFor",class:"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!$.isXMLDoc(a),f&&(b=$.propFix[b]||b,e=$.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||$a.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),Y.optSelected||($.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),$.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){$.propFix[this.toLowerCase()]=this});$.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if($.isFunction(a))return this.each(function(b){$(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(ia)||[];i=0;)d=d.replace(" "+e+" "," ");g=a?$.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):$.isFunction(a)?this.each(function(c){$(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if("string"===c)for(var b,d=0,e=$(this),f=a.match(ia)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else"undefined"!==c&&"boolean"!==c||(this.className&&ma.set(this,"__className__",this.className),this.className=this.className||a===!1?"":ma.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;c=0)return!0;return!1}});$.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=$.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,$(this).val()):a, +null==e?e="":"number"==typeof e?e+="":$.isArray(e)&&(e=$.map(e,function(a){return null==a?"":a+""})),(b=$.valHooks[this.type]||$.valHooks[this.nodeName.toLowerCase()])&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return(b=$.valHooks[e.type]||$.valHooks[e.nodeName.toLowerCase()])&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(/\r/g,""):null==c?"":c)}}}),$.extend({valHooks:{option:{get:function(a){var b=$.find.attr(a,"value");return null!=b?b:$.trim($.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||e<0,g=f?null:[],h=f?e+1:d.length,i=e<0?h:f?e:0;i=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),$.each(["radio","checkbox"],function(){$.valHooks[this]={set:function(a,b){if($.isArray(b))return a.checked=$.inArray($(a).val(),b)>=0}},Y.checkOn||($.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),$.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){$.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),$.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var _a=$.now(),ab=/\?/;$.parseJSON=function(a){return JSON.parse(a+"")},$.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(a){b=void 0}return b&&!b.getElementsByTagName("parsererror").length||$.error("Invalid XML: "+a),b};var bb=/([?&])_=[^&]*/,cb=/^(.*?):[ \t]*([^\r\n]*)$/gm,db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,eb=/^(?:GET|HEAD)$/,fb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,gb={},hb={},ib="*/".concat("*"),jb=a.location.href,kb=fb.exec(jb.toLowerCase())||[];$.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:jb,type:"GET",isLocal:db.test(kb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":ib,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":$.parseJSON,"text xml":$.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?L(L(a,$.ajaxSettings),b):L($.ajaxSettings,a)},ajaxPrefilter:J(gb),ajaxTransport:J(hb),ajax:function(a,b){function c(a,b,c,g){var i,k,r,s,u,w=b;2!==t&&(t=2,h&&clearTimeout(h),d=void 0,f=g||"",v.readyState=a>0?4:0,i=a>=200&&a<300||304===a,c&&(s=M(l,v,c)),s=N(l,s,v,i),i?(l.ifModified&&(u=v.getResponseHeader("Last-Modified"),u&&($.lastModified[e]=u),(u=v.getResponseHeader("etag"))&&($.etag[e]=u)),204===a||"HEAD"===l.type?w="nocontent":304===a?w="notmodified":(w=s.state,k=s.data,r=s.error,i=!r)):(r=w,!a&&w||(w="error",a<0&&(a=0))),v.status=a,v.statusText=(b||w)+"",i?o.resolveWith(m,[k,w,v]):o.rejectWith(m,[v,w,r]),v.statusCode(q),q=void 0,j&&n.trigger(i?"ajaxSuccess":"ajaxError",[v,l,i?k:r]),p.fireWith(m,[v,w]),j&&(n.trigger("ajaxComplete",[v,l]),--$.active||$.event.trigger("ajaxStop")))}"object"==typeof a&&(b=a,a=void 0),b=b||{};var d,e,f,g,h,i,j,k,l=$.ajaxSetup({},b),m=l.context||l,n=l.context&&(m.nodeType||m.jquery)?$(m):$.event,o=$.Deferred(),p=$.Callbacks("once memory"),q=l.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!g)for(g={};b=cb.exec(f);)g[b[1].toLowerCase()]=b[2];b=g[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(t<2)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return d&&d.abort(b),c(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,l.url=((a||l.url||jb)+"").replace(/#.*$/,"").replace(/^\/\//,kb[1]+"//"),l.type=b.method||b.type||l.method||l.type,l.dataTypes=$.trim(l.dataType||"*").toLowerCase().match(ia)||[""],null==l.crossDomain&&(i=fb.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]===kb[1]&&i[2]===kb[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(kb[3]||("http:"===kb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=$.param(l.data,l.traditional)),K(gb,l,b,v),2===t)return v;j=$.event&&l.global,j&&0==$.active++&&$.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!eb.test(l.type),e=l.url,l.hasContent||(l.data&&(e=l.url+=(ab.test(e)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=bb.test(e)?e.replace(bb,"$1_="+_a++):e+(ab.test(e)?"&":"?")+"_="+_a++)),l.ifModified&&($.lastModified[e]&&v.setRequestHeader("If-Modified-Since",$.lastModified[e]),$.etag[e]&&v.setRequestHeader("If-None-Match",$.etag[e])),(l.data&&l.hasContent&&l.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",l.contentType),v.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+ib+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)v.setRequestHeader(k,l.headers[k]);if(l.beforeSend&&(l.beforeSend.call(m,v,l)===!1||2===t))return v.abort();u="abort";for(k in{success:1,error:1,complete:1})v[k](l[k]);if(d=K(hb,l,b,v)){v.readyState=1,j&&n.trigger("ajaxSend",[v,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){v.abort("timeout")},l.timeout));try{t=1,d.send(r,c)}catch(a){if(!(t<2))throw a;c(-1,a)}}else c(-1,"No Transport");return v},getJSON:function(a,b,c){return $.get(a,b,c,"json")},getScript:function(a,b){return $.get(a,void 0,b,"script")}}),$.each(["get","post"],function(a,b){$[b]=function(a,c,d,e){return $.isFunction(c)&&(e=e||d,d=c,c=void 0),$.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),$._evalUrl=function(a){return $.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},$.fn.extend({wrapAll:function(a){var b;return $.isFunction(a)?this.each(function(b){$(this).wrapAll(a.call(this,b))}):(this[0]&&(b=$(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstElementChild;)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return $.isFunction(a)?this.each(function(b){$(this).wrapInner(a.call(this,b))}):this.each(function(){var b=$(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=$.isFunction(a);return this.each(function(c){$(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){$.nodeName(this,"body")||$(this).replaceWith(this.childNodes)}).end()}}),$.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},$.expr.filters.visible=function(a){return!$.expr.filters.hidden(a)};var lb=/\[\]$/,mb=/^(?:submit|button|image|reset|file)$/i,nb=/^(?:input|select|textarea|keygen)/i;$.param=function(a,b){var c,d=[],e=function(a,b){b=$.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=$.ajaxSettings&&$.ajaxSettings.traditional),$.isArray(a)||a.jquery&&!$.isPlainObject(a))$.each(a,function(){e(this.name,this.value)});else for(c in a)O(c,a[c],b,e);return d.join("&").replace(/%20/g,"+")},$.fn.extend({serialize:function(){return $.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=$.prop(this,"elements");return a?$.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!$(this).is(":disabled")&&nb.test(this.nodeName)&&!mb.test(a)&&(this.checked||!ta.test(a))}).map(function(a,b){var c=$(this).val();return null==c?null:$.isArray(c)?$.map(c,function(a){return{name:b.name,value:a.replace(/\r?\n/g,"\r\n")}}):{name:b.name,value:c.replace(/\r?\n/g,"\r\n")}}).get()}}),$.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var ob=0,pb={},qb={0:200,1223:204},rb=$.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in pb)pb[a]()}),Y.cors=!!rb&&"withCredentials"in rb,Y.ajax=rb=!!rb,$.ajaxTransport(function(a){var b;if(Y.cors||rb&&!a.crossDomain)return{send:function(c,d){var e,f=a.xhr(),g=++ob;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete pb[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(qb[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=pb[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(a){if(b)throw a}},abort:function(){b&&b()}}}),$.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return $.globalEval(a),a}}}),$.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),$.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=$("